diff --git a/modules/sale_promotion/CHANGELOG b/modules/sale_promotion/CHANGELOG index 3439602340..e40c6a881b 100644 --- a/modules/sale_promotion/CHANGELOG +++ b/modules/sale_promotion/CHANGELOG @@ -1,3 +1,4 @@ +* Add sale reporting per promotion * Add relate from promotions to sales Version 7.2.0 - 2024-04-29 diff --git a/modules/sale_promotion/__init__.py b/modules/sale_promotion/__init__.py index 345ee7479b..609af8eeca 100644 --- a/modules/sale_promotion/__init__.py +++ b/modules/sale_promotion/__init__.py @@ -3,7 +3,7 @@ from trytond.pool import Pool -from . import sale +from . import sale, sale_reporting def register(): @@ -13,4 +13,5 @@ def register(): sale.Promotion_ProductCategory, sale.Sale, sale.Line, + sale_reporting.Promotion, module='sale_promotion', type_='model') diff --git a/modules/sale_promotion/sale_reporting.py b/modules/sale_promotion/sale_reporting.py new file mode 100644 index 0000000000..eb9f2004ab --- /dev/null +++ b/modules/sale_promotion/sale_reporting.py @@ -0,0 +1,45 @@ +# This file is part of Tryton. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from sql import Literal + +from trytond.model import ModelView, fields +from trytond.modules.sale.sale_reporting import Abstract + + +class Promotion(Abstract, ModelView): + "Sale Reporting per Promotion" + __name__ = 'sale.reporting.promotion' + + promotion = fields.Many2One('sale.promotion', "Promotion") + + @classmethod + def _sale_line_columns(cls, line, sale): + return super()._sale_line_columns(line, sale) + [ + line.promotion.as_('promotion')] + + @classmethod + def _pos_sale_line_columns(cls, line, point, sale, currency): + try: + columns = super()._pos_sale_line_columns( + line, point, sale, currency) + except AttributeError: + columns = [] + return columns + [Literal(None).as_('promotion')] + + @classmethod + def _columns(cls, tables, withs): + line = tables['line'] + return super()._columns(tables, withs) + [line.promotion] + + @classmethod + def _group_by(cls, tables, withs): + line = tables['line'] + return super()._group_by(tables, withs) + [line.promotion] + + def get_rec_name(self, name): + return self.promotion.rec_name if self.promotion else None + + @classmethod + def search_rec_name(cls, name, clause): + return [('promotion.rec_name', *clause[1:])] diff --git a/modules/sale_promotion/sale_reporting.xml b/modules/sale_promotion/sale_reporting.xml new file mode 100644 index 0000000000..7d708483b6 --- /dev/null +++ b/modules/sale_promotion/sale_reporting.xml @@ -0,0 +1,40 @@ + + + + + + sale.reporting.promotion + + + sale_reporting_promotion_list + + + + Sales per Promotion + sale.reporting.promotion + sale.reporting.context + + + + + + + + tree_open + + + + + + User in companies + sale.reporting.promotion + + + + + + + + + diff --git a/modules/sale_promotion/setup.py b/modules/sale_promotion/setup.py index e194ac450b..f6cb871de8 100755 --- a/modules/sale_promotion/setup.py +++ b/modules/sale_promotion/setup.py @@ -41,13 +41,16 @@ else: download_url = 'http://downloads.tryton.org/%s.%s/' % ( major_version, minor_version) -requires = ['simpleeval'] +requires = ['simpleeval', 'python-sql'] for dep in info.get('depends', []): if not re.match(r'(ir|res)(\W|$)', dep): requires.append(get_require_version('trytond_%s' % dep)) requires.append(get_require_version('trytond')) -tests_require = [get_require_version('proteus')] +tests_require = [ + get_require_version('proteus'), + get_require_version('trytond_sale_point'), + ] setup(name=name, version=version, diff --git a/modules/sale_promotion/tests/test_module.py b/modules/sale_promotion/tests/test_module.py index 1162df0d31..37357c1ba6 100644 --- a/modules/sale_promotion/tests/test_module.py +++ b/modules/sale_promotion/tests/test_module.py @@ -8,6 +8,7 @@ from trytond.tests.test_tryton import ModuleTestCase class SalePromotionTestCase(CompanyTestMixin, ModuleTestCase): 'Test Sale Promotion module' module = 'sale_promotion' + extras = ['sale_point'] del ModuleTestCase diff --git a/modules/sale_promotion/tryton.cfg b/modules/sale_promotion/tryton.cfg index b3fb1bfcd6..3e6d29c9ec 100644 --- a/modules/sale_promotion/tryton.cfg +++ b/modules/sale_promotion/tryton.cfg @@ -9,6 +9,9 @@ depends: res sale sale_price_list +extras_depend: + sale_point xml: sale.xml + sale_reporting.xml message.xml diff --git a/modules/sale_promotion/view/sale_reporting_promotion_list.xml b/modules/sale_promotion/view/sale_reporting_promotion_list.xml new file mode 100644 index 0000000000..98967325be --- /dev/null +++ b/modules/sale_promotion/view/sale_reporting_promotion_list.xml @@ -0,0 +1,9 @@ + + + + + + + +