| @ -0,0 +1,45 @@ | |||
| .. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg | |||
|     :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | |||
|     :alt: License: AGPL-3 | |||
| 
 | |||
| Sales And Products Performance Report | |||
| ===================================== | |||
| Overall Performance Report of Sales and Products. | |||
| 
 | |||
| Company | |||
| ------- | |||
| * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | |||
| 
 | |||
| License | |||
| ------- | |||
| GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL v3) | |||
| (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | |||
| 
 | |||
| Credits | |||
| ------- | |||
| * Developer: (V16) Ansil P V, | |||
|              (V17) Sabeel B, | |||
|              (V18) Bhagyadev KP | |||
| * Contact: odoo@cybrosys.com | |||
| 
 | |||
| Contacts | |||
| -------- | |||
| * Mail Contact : odoo@cybrosys.com | |||
| * Website : https://cybrosys.com | |||
| 
 | |||
| Bug Tracker | |||
| ----------- | |||
| Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | |||
| 
 | |||
| Maintainer | |||
| ========== | |||
| .. image:: https://cybrosys.com/images/logo.png | |||
|    :target: https://cybrosys.com | |||
| 
 | |||
| This module is maintained by Cybrosys Technologies. | |||
| 
 | |||
| For support and more information, please visit `Our Website <https://cybrosys.com/>`__ | |||
| 
 | |||
| Further information | |||
| =================== | |||
| HTML Description: `<static/description/index.html>`__ | |||
| @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from . import models | |||
| from . import wizard | |||
| @ -0,0 +1,47 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| { | |||
|     'name': "Sales And Products Performance Report", | |||
|     'version': '18.0.1.0.0', | |||
|     'category': 'Sales, Accounting', | |||
|     'summary': 'Performance Report Summary of Sales and Products', | |||
|     'description': "The Overview of Sales and Products Performance Done by" | |||
|                    "Sales Team and Sales Person", | |||
|     'author': 'Cybrosys Techno Solutions', | |||
|     'company': 'Cybrosys Techno Solutions', | |||
|     'maintainer': 'Cybrosys Techno Solutions', | |||
|     'website': 'https://www.cybrosys.com', | |||
|     'depends': ['stock', 'sale_management'], | |||
|     'data': [ | |||
|         'security/ir.model.access.csv', | |||
|         'views/product_template_views.xml', | |||
|         'views/res_users_views.xml', | |||
|         'views/sale_order_menu.xml', | |||
|         'wizard/product_performance_views.xml', | |||
|         'wizard/sales_performance_views.xml', | |||
|     ], | |||
|     'images': ['static/description/banner.jpg'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'auto_install': False, | |||
|     'application': False, | |||
| } | |||
| @ -0,0 +1,7 @@ | |||
| ## Module <sales_product_performance_report> | |||
| 
 | |||
| #### 15.02.2025 | |||
| #### Version 18.0.1.0.0 | |||
| #### ADD | |||
| 
 | |||
| - Initial commit for Sales And Products Performance Report | |||
| @ -0,0 +1,24 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from . import product_template | |||
| from . import res_users | |||
| from . import sale_order | |||
| @ -0,0 +1,142 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from odoo import fields, models, _ | |||
| from odoo.exceptions import UserError | |||
| from odoo.http import request | |||
| 
 | |||
| 
 | |||
| class ProductTemplate(models.Model): | |||
|     """Inherits the product template for adding fields and methods""" | |||
|     _inherit = 'product.template' | |||
| 
 | |||
|     stock_warehouse_id = fields.Many2one( | |||
|         comodel_name='stock.warehouse', | |||
|         string='Warehouse', | |||
|         help="Warehouse Selection", | |||
|         domain="[('company_id', '=', " | |||
|                "company_id)]" | |||
|     ) | |||
|     quantity = fields.Float( | |||
|         string='On Hand', | |||
|         help=' for Quantity' | |||
|     ) | |||
|     revenue = fields.Float( | |||
|         string="Revenue", | |||
|         help='Float Field for Revenue ' | |||
|     ) | |||
|     total_order = fields.Integer( | |||
|         string="ToTal Order", | |||
|         help='Float Field for Total Order' | |||
|     ) | |||
|     ordered_quantities = fields.Integer( | |||
|         string="Ordered Quantities", | |||
|         help='for Ordered Quantities' | |||
|     ) | |||
|     delivered_quantities = fields.Integer( | |||
|         string="Delivered Quantities", | |||
|         help='for Ordered Quantities' | |||
|     ) | |||
|     returned_quantities = fields.Integer( | |||
|         string="Returned Quantities", | |||
|         help='for Ordered Quantities' | |||
|     ) | |||
|     avg_price = fields.Float( | |||
|         string="Avg Price", | |||
|         help='Avg Price of Products' | |||
|     ) | |||
|     avg_qty_order = fields.Float( | |||
|         string="Avg Qty Per Order", | |||
|         help='Average Quantity Order' | |||
|     ) | |||
|     avg_stock = fields.Integer( | |||
|         string="Avg Stock", | |||
|         help='Avg Stock of Products' | |||
|     ) | |||
| 
 | |||
|     def performance_values(self, start_date, end_date, up_to_date): | |||
|         """ | |||
|         For Calculate Performance Values | |||
|         :param start_date: for get records after the date . | |||
|         :param end_date: for get records before the date. | |||
|         :param up_to_date: for up_to_date records. | |||
|         """ | |||
|         domain = [('product_template_id', '=', self.id)] | |||
|         if not up_to_date: | |||
|             if start_date: | |||
|                 domain.append(('order_id.date_order', '>=', start_date)) | |||
|             if end_date: | |||
|                 domain.append(('order_id.date_order', '<=', end_date)) | |||
|         sale_order = self.env['sale.order.line'].search(domain) | |||
|         product_variant = self.env['product.product'].search([ | |||
|             ('product_tmpl_id', '=', self.id)]) | |||
|         stock_quant = self.env['stock.quant'].search([ | |||
|             ('product_id', '=', product_variant[0].id)]) | |||
|         self.quantity = self.qty_available | |||
|         self.stock_warehouse_id = stock_quant.location_id.warehouse_id | |||
|         self.delivered_quantities = sum(sale_order.mapped('qty_delivered')) | |||
|         self.ordered_quantities = sum(sale_order.mapped('product_uom_qty')) | |||
|         self.total_order = len(sale_order) | |||
|         self.avg_stock = (self.ordered_quantities / self.total_order) \ | |||
|             if self.total_order != 0 else 0 | |||
|         self.avg_qty_order = self.delivered_quantities / self.total_order \ | |||
|             if self.total_order != 0 else 0.00 | |||
|         self.avg_price = (sum(sale_order.mapped('price_unit')) / | |||
|                           self.total_order) if self.total_order != 0 else 0.00 | |||
|         self.revenue = 0 | |||
|         for line in sale_order: | |||
|             self.revenue += line.price_subtotal | |||
|             return_qty = self.env['stock.move'].search( | |||
|                 [('sale_line_id', '=', line.id), | |||
|                  ('picking_id.sale_id', '=', line.order_id.id), | |||
|                  ('picking_type_id.code', '=', 'incoming')]) | |||
|             if return_qty.quantity: | |||
|                 self.returned_quantities = return_qty.quantity | |||
| 
 | |||
|     def action_sale_order(self): | |||
|         """ | |||
|             action for get sale orders done with this product | |||
|             return: to sale order list view and form view | |||
|         """ | |||
|         domain = [('product_template_id', '=', self.id)] | |||
|         if not self._context['up_to_date']: | |||
|             if self._context['start_date']: | |||
|                 domain.append( | |||
|                     ('order_id.date_order', '>=', self._context['start_date'])) | |||
|             if self._context['end_date']: | |||
|                 domain.append( | |||
|                     ('order_id.date_order', '<=', self._context['end_date'])) | |||
|         sale_order = self.env['sale.order.line'].search(domain) | |||
|         orders = [order.order_id.id for order in sale_order] | |||
|         list_view_id = request.env.ref('sale.view_order_tree').id | |||
|         form_view_id = request.env.ref( | |||
|             'sale.view_order_form').id | |||
|         if orders: | |||
|             return { | |||
|                 'name': _('Product Performance Report'), | |||
|                 'res_model': 'sale.order', | |||
|                 'views': [(list_view_id, 'list'), (form_view_id, 'form')], | |||
|                 'type': 'ir.actions.act_window', | |||
|                 'target': 'self', | |||
|                 'domain': [('id', 'in', orders)] | |||
|             } | |||
|         else: | |||
|             raise UserError(_("No Orders with this Product!")) | |||
| @ -0,0 +1,138 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from odoo import fields, models, _ | |||
| from odoo.exceptions import UserError | |||
| from odoo.http import request | |||
| 
 | |||
| 
 | |||
| class ResUsers(models.Model): | |||
|     """Inherits the User model for adding fields and methods""" | |||
|     _inherit = 'res.users' | |||
| 
 | |||
|     warehouse_id = fields.Many2one( | |||
|         comodel_name='stock.warehouse', | |||
|         string='Warehouse', | |||
|         domain="[('company_id', '=', company_id)]" | |||
|     ) | |||
|     estimated_revenue = fields.Float( | |||
|         string="Estimated Revenue", | |||
|         help='Estimated Revenue of orders done by' | |||
|              'the user' | |||
|     ) | |||
|     net_revenue = fields.Float( | |||
|         string="Net Revenue", | |||
|         help='Net Revenue of orders' | |||
|     ) | |||
|     total_sale_order = fields.Integer( | |||
|         string="ToTal Order", | |||
|         help='No of Total Orders' | |||
|     ) | |||
|     sale_order_done = fields.Integer( | |||
|         string="Sale Order Done", | |||
|         help='No of Done Sale Orders' | |||
|     ) | |||
|     returned_orders = fields.Integer( | |||
|         string="Returned Orders", | |||
|         help='No of Returned Orders' | |||
|     ) | |||
|     avg_price = fields.Float( | |||
|         string="Avg Price", | |||
|         help='Average Price' | |||
|     ) | |||
|     overall_performance = fields.Float( | |||
|         string="Over All%", | |||
|         help='Overall Performance' | |||
|     ) | |||
|     overall_performance_separate = fields.Float( | |||
|         string="Over All Separated", | |||
|         help='Overall Performance of ' | |||
|              'Sales Person Done with ' | |||
|              'Different Sales Team' | |||
|     ) | |||
| 
 | |||
|     def performance_values(self, sale_person, start_date, end_date, up_to_date): | |||
|         """ | |||
|             For Calculate Performance Values | |||
|             :param sale_person: for get sale_person . | |||
|             :param start_date: for get records after the date . | |||
|             :param end_date: for get records before the date. | |||
|             :param up_to_date: for up_to_date records. | |||
|         """ | |||
|         domain = [ | |||
|             ('team_id', '=', self.sale_team_id.id), | |||
|             ('user_id', '=', sale_person.id) | |||
|         ] | |||
|         if not up_to_date: | |||
|             if start_date: | |||
|                 domain.append(('date_order', '>=', start_date)) | |||
|             if end_date: | |||
|                 domain.append(('date_order', '<=', end_date)) | |||
|         sale_order = self.env['sale.order'].search(domain) | |||
|         self.total_sale_order = len(sale_order) | |||
|         domain.append(('state', '=', 'sale')) | |||
|         self.sale_order_done = len(self.env['sale.order'].search(domain)) | |||
|         self.net_revenue = sum(self.env['sale.order'].search | |||
|                                (domain).mapped('amount_total')) | |||
|         self.estimated_revenue = sum(sale_order.mapped('amount_total')) | |||
|         self.avg_price = self.estimated_revenue / self.total_sale_order \ | |||
|             if self.total_sale_order else None | |||
|         return_order = self.env['stock.picking'].search([ | |||
|             ('sale_id', 'in', sale_order.ids), | |||
|             ('picking_type_id.code', '=', "incoming") | |||
|         ]) | |||
|         self.returned_orders = len(return_order) | |||
|         overall_order = self.env['sale.order'].search_count([]) | |||
|         self.overall_performance = ( | |||
|                 (self.total_sale_order / overall_order) * 100) | |||
|         separate_order = self.env['sale.order'].search_count([ | |||
|             ('team_id', '!=', self.sale_team_id.id), | |||
|             ('user_id', '=', sale_person.id)]) | |||
|         self.overall_performance_separate = ( | |||
|                 (separate_order / overall_order) * 100) | |||
| 
 | |||
|     def action_sale_order(self): | |||
|         """ | |||
|             action for get sale orders done with this product | |||
|             return: to sale order list view and form view | |||
|         """ | |||
|         domain = [('user_id', '=', self.id)] | |||
|         if not self._context['up_to_date']: | |||
|             if self._context['start_date']: | |||
|                 domain.append(('date_order', '>=', | |||
|                                self._context['start_date'])) | |||
|             if self._context['end_date']: | |||
|                 domain.append(('date_order', '<=', self._context['end_date'])) | |||
|         sale_order = self.env['sale.order'].search(domain).mapped('id') | |||
|         list_view_id = request.env.ref('sale.view_order_tree').id | |||
|         form_view_id = request.env.ref( | |||
|             'sale.view_order_form').id | |||
|         if sale_order: | |||
|             return { | |||
|                 'name': _('Sales Order Report'), | |||
|                 'res_model': 'sale.order', | |||
|                 'views': [(list_view_id, 'list'), (form_view_id, 'form')], | |||
|                 'type': 'ir.actions.act_window', | |||
|                 'target': 'self', | |||
|                 'domain': [('id', 'in', sale_order) if sale_order else None], | |||
|             } | |||
|         else: | |||
|             raise UserError(_("No Orders done by this Sales Person!")) | |||
| @ -0,0 +1,53 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Bhagyadev KP (odoo@cybrosys.com) | |||
| # | |||
| #    This program is free software: you can modify | |||
| #    it under the terms of the GNU Affero General Public License (AGPL) as | |||
| #    published by the Free Software Foundation, either version 3 of the | |||
| #    License, or (at your option) any later version. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU Affero General Public License for more details. | |||
| # | |||
| #    You should have received a copy of the GNU Affero General Public License | |||
| #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from odoo import api, models, _ | |||
| 
 | |||
| 
 | |||
| class SaleOrder(models.Model): | |||
|     """Inherits the sale order model for creating the product performance report""" | |||
|     _inherit = 'sale.order' | |||
| 
 | |||
|     @api.model | |||
|     def action_product_performance_report(self): | |||
|         """ | |||
|             action for get product performance report | |||
|         """ | |||
|         return { | |||
|             'name': _('Product Performance'), | |||
|             'type': 'ir.actions.act_window', | |||
|             'view_mode': 'form', | |||
|             'res_model': 'product.performance', | |||
|             'target': 'new', | |||
|         } | |||
| 
 | |||
|     @api.model | |||
|     def action_sales_performance_report(self): | |||
|         """ | |||
|             action for get sales performance report | |||
|         """ | |||
|         return { | |||
|             'name': _('Sales Performance'), | |||
|             'type': 'ir.actions.act_window', | |||
|             'view_mode': 'form', | |||
|             'res_model': 'sales.performance', | |||
|             'target': 'new', | |||
|         } | |||
| 
 | 
| After Width: | Height: | Size: 2.2 KiB | 
| After Width: | Height: | Size: 28 KiB | 
| After Width: | Height: | Size: 628 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 210 KiB | 
| After Width: | Height: | Size: 209 KiB | 
| After Width: | Height: | Size: 109 KiB | 
| After Width: | Height: | Size: 495 B | 
| After Width: | Height: | Size: 1.0 KiB | 
| After Width: | Height: | Size: 624 B | 
| After Width: | Height: | Size: 136 KiB | 
| After Width: | Height: | Size: 214 KiB | 
| After Width: | Height: | Size: 36 KiB | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 929 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 17 KiB | 
| After Width: | Height: | Size: 542 B | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 4.3 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 4.0 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 738 KiB | 
| After Width: | Height: | Size: 2.2 KiB | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 600 B | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 2.0 KiB | 
| After Width: | Height: | Size: 462 B | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 926 B | 
| After Width: | Height: | Size: 9.0 KiB | 
| After Width: | Height: | Size: 23 KiB | 
| After Width: | Height: | Size: 7.0 KiB | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 800 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 189 KiB | 
| After Width: | Height: | Size: 4.3 KiB | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 5.9 KiB | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 34 KiB | 
| After Width: | Height: | Size: 26 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 23 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 3.7 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 875 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 767 KiB | 
| After Width: | Height: | Size: 138 KiB | 
| After Width: | Height: | Size: 760 KiB | 
| After Width: | Height: | Size: 92 KiB | 
| After Width: | Height: | Size: 697 KiB | 
| After Width: | Height: | Size: 1.1 MiB | 
| After Width: | Height: | Size: 168 KiB | 
| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 61 KiB | 
| After Width: | Height: | Size: 72 KiB | 
| After Width: | Height: | Size: 62 KiB | 
| After Width: | Height: | Size: 153 KiB | 
| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 128 KiB | 
| After Width: | Height: | Size: 132 KiB | 
| After Width: | Height: | Size: 134 KiB | 
| After Width: | Height: | Size: 134 KiB | 
| After Width: | Height: | Size: 139 KiB | 
| After Width: | Height: | Size: 215 KiB | 
| After Width: | Height: | Size: 168 KiB | 
| After Width: | Height: | Size: 1.0 MiB | 
| After Width: | Height: | Size: 880 KiB |