From a91d3f79c3bef199c99460d2f8ff134f130b2935 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 18 Feb 2015 17:04:42 +0100 Subject: [PATCH] Add module pos_sale_report --- pos_sale_report/__init__.py | 23 ++++++ pos_sale_report/__openerp__.py | 46 +++++++++++ pos_sale_report/product_view.xml | 27 ++++++ pos_sale_report/report/__init__.py | 23 ++++++ pos_sale_report/report/pos_sale_report.py | 82 +++++++++++++++++++ .../report/pos_sale_report_view.xml | 49 +++++++++++ pos_sale_report/security/ir.model.access.csv | 3 + 7 files changed, 253 insertions(+) create mode 100644 pos_sale_report/__init__.py create mode 100644 pos_sale_report/__openerp__.py create mode 100644 pos_sale_report/product_view.xml create mode 100644 pos_sale_report/report/__init__.py create mode 100644 pos_sale_report/report/pos_sale_report.py create mode 100644 pos_sale_report/report/pos_sale_report_view.xml create mode 100644 pos_sale_report/security/ir.model.access.csv diff --git a/pos_sale_report/__init__.py b/pos_sale_report/__init__.py new file mode 100644 index 0000000..a0eb602 --- /dev/null +++ b/pos_sale_report/__init__.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# POS Sale Report module for Odoo +# Copyright (C) 2015 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License 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 . +# +############################################################################## + +from . import report diff --git a/pos_sale_report/__openerp__.py b/pos_sale_report/__openerp__.py new file mode 100644 index 0000000..d99d175 --- /dev/null +++ b/pos_sale_report/__openerp__.py @@ -0,0 +1,46 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# POS Sale Report module for Odoo +# Copyright (C) 2015 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License 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 . +# +############################################################################## + +{ + 'name': 'POS Sale Report', + 'version': '0.1', + 'category': 'Point Of Sale', + 'license': 'AGPL-3', + 'summary': 'Add a graph via on that aggregate sale orders and pos orders', + 'description': """ +In the *Reporting* menu, add a new entry *POS + Sale Orders Analysis* that show sale statistics per products that aggregate sale orders and pos orders. + +Also add direct access to Sales statistics on the Product form view and Product Variants form view (Menu entry *Sales Statistics* in the *More* drop down list). + +This module has been written by Alexis de Lattre +. + """, + 'author': 'Akretion', + 'website': 'http://www.akretion.com', + 'depends': ['point_of_sale', 'sale'], + 'data': [ + 'report/pos_sale_report_view.xml', + 'product_view.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/pos_sale_report/product_view.xml b/pos_sale_report/product_view.xml new file mode 100644 index 0000000..a91f1df --- /dev/null +++ b/pos_sale_report/product_view.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/pos_sale_report/report/__init__.py b/pos_sale_report/report/__init__.py new file mode 100644 index 0000000..31020e7 --- /dev/null +++ b/pos_sale_report/report/__init__.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# POS Sale Report module for Odoo +# Copyright (C) 2015 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License 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 . +# +############################################################################## + +from . import pos_sale_report diff --git a/pos_sale_report/report/pos_sale_report.py b/pos_sale_report/report/pos_sale_report.py new file mode 100644 index 0000000..6eb7f8e --- /dev/null +++ b/pos_sale_report/report/pos_sale_report.py @@ -0,0 +1,82 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# POS Sale Report module for Odoo +# Copyright (C) 2015 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License 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 . +# +############################################################################## + +from openerp import models, fields +from openerp import tools + + +class pos_sale_report(models.Model): + _name = 'pos.sale.report' + _description = 'POS orders and Sale orders aggregated report' + _auto = False + _rec_name = 'date' + _order = 'date desc' + + date = fields.Datetime(string='Order Date', readonly=True) + product_id = fields.Many2one( + 'product.product', string='Product Variant', readonly=True) + product_tmpl_id = fields.Many2one( + 'product.template', string='Product', readonly=True) + company_id = fields.Many2one( + 'res.company', string='Company', readonly=True) + origin = fields.Char(string='Origin', readonly=True) + qty = fields.Float(string='Quantity', readonly=True) + + # WARNING : this code doesn't handle uom conversion for the moment + def _sale_order_select(self): + select = """SELECT min(sol.id)*-1 AS id, + so.date_order AS date, + sol.product_id AS product_id, + pp.product_tmpl_id AS product_tmpl_id, + so.company_id AS company_id, + 'Sale Order' AS origin, + sum(sol.product_uom_qty) AS qty + FROM sale_order_line sol + LEFT JOIN sale_order so ON so.id = sol.order_id + LEFT JOIN product_product pp ON pp.id = sol.product_id + WHERE so.state NOT IN ('draft', 'sent', 'cancel') + GROUP BY so.date_order, sol.product_id, pp.product_tmpl_id, + so.company_id + """ + return select + + def _pos_order_select(self): + select = """SELECT min(pol.id) AS id, + po.date_order AS date, + pol.product_id AS product_id, + pp.product_tmpl_id AS product_tmpl_id, + po.company_id AS company_id, + 'Point of Sale' AS origin, + sum(pol.qty) AS qty + FROM pos_order_line pol + LEFT JOIN pos_order po ON po.id = pol.order_id + LEFT JOIN product_product pp ON pp.id = pol.product_id + WHERE po.state IN ('paid', 'done', 'invoiced') + GROUP BY po.date_order, pol.product_id, pp.product_tmpl_id, + po.company_id + """ + return select + + def init(self, cr): + tools.drop_view_if_exists(cr, self._table) + cr.execute("CREATE OR REPLACE VIEW %s AS (%s UNION %s)" % ( + self._table, self._sale_order_select(), self._pos_order_select())) diff --git a/pos_sale_report/report/pos_sale_report_view.xml b/pos_sale_report/report/pos_sale_report_view.xml new file mode 100644 index 0000000..1d265e0 --- /dev/null +++ b/pos_sale_report/report/pos_sale_report_view.xml @@ -0,0 +1,49 @@ + + + + + + + pos.sale.report.search + pos.sale.report + + + + + + + + + + + + + + + + + pos.sale.report.graph + pos.sale.report + + + + + + + + + + + POS + Sale Orders Analysis + pos.sale.report + graph + + + + + + + + diff --git a/pos_sale_report/security/ir.model.access.csv b/pos_sale_report/security/ir.model.access.csv new file mode 100644 index 0000000..c2f1543 --- /dev/null +++ b/pos_sale_report/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_pos_sale_report_pos_user,Full access on pos.sale.report to POS User,model_pos_sale_report,point_of_sale.group_pos_user,1,1,1,1 +access_pos_sale_report_sale_user,Full access on pos.sale.report to Sale User,model_pos_sale_report,base.group_sale_salesman,1,1,1,1