@ -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 |