diff --git a/CHANGELOG b/CHANGELOG index a0c6723788..0ce53ef143 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add employee on sales for some states * Add contact and invoice party on sale * Add salable products menu entry diff --git a/sale.py b/sale.py index 815b119bf5..3955e4980d 100644 --- a/sale.py +++ b/sale.py @@ -18,7 +18,10 @@ from trytond.pool import Pool from trytond.modules.account.tax import TaxableMixin from trytond.modules.account_product.exceptions import AccountError +from trytond.modules.company.model import ( + employee_field, set_employee, reset_employee) from trytond.modules.product import price_digits + from .exceptions import ( SaleValidationError, SaleQuotationError, PartyLocationError) @@ -73,14 +76,6 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin): 'readonly': Eval('state') != 'draft', }, depends=['state']) - state = fields.Selection([ - ('draft', "Draft"), - ('quotation', "Quotation"), - ('confirmed', "Confirmed"), - ('processing', "Processing"), - ('done', "Done"), - ('cancel', "Canceled"), - ], "State", readonly=True, required=True) sale_date = fields.Date('Sale Date', states={ 'readonly': ~Eval('state').in_(['draft', 'quotation']), @@ -229,6 +224,21 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin): }, depends=['state']) + quoted_by = employee_field( + "Quoted By", + states=['quotation', 'confirmed', 'processing', 'done', 'cancel']) + confirmed_by = employee_field( + "Confirmed By", + states=['confirmed', 'processing', 'done', 'cancel']) + state = fields.Selection([ + ('draft', "Draft"), + ('quotation', "Quotation"), + ('confirmed', "Confirmed"), + ('processing', "Processing"), + ('done', "Done"), + ('cancel', "Canceled"), + ], "State", readonly=True, required=True) + @classmethod def __setup__(cls): super(Sale, cls).__setup__() @@ -871,12 +881,14 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin): @classmethod @ModelView.button @Workflow.transition('draft') + @reset_employee('quoted_by', 'confirmed_by') def draft(cls, sales): pass @classmethod @ModelView.button @Workflow.transition('quotation') + @set_employee('quoted_by') def quote(cls, sales): for sale in sales: sale.check_for_quotation() @@ -885,6 +897,7 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin): @classmethod @ModelView.button @Workflow.transition('confirmed') + @set_employee('confirmed_by') def confirm(cls, sales): pool = Pool() Configuration = pool.get('sale.configuration') diff --git a/tests/scenario_sale.rst b/tests/scenario_sale.rst index a7221b7b31..d6a8cd0ef7 100644 --- a/tests/scenario_sale.rst +++ b/tests/scenario_sale.rst @@ -9,7 +9,7 @@ Imports:: >>> from decimal import Decimal >>> from operator import attrgetter >>> from proteus import Model, Wizard, Report - >>> from trytond.tests.tools import activate_modules + >>> from trytond.tests.tools import activate_modules, set_user >>> from trytond.modules.company.tests.tools import create_company, \ ... get_company >>> from trytond.modules.account.tests.tools import create_fiscalyear, \ @@ -27,6 +27,21 @@ Create company:: >>> _ = create_company() >>> company = get_company() +Set employee:: + + >>> User = Model.get('res.user') + >>> Party = Model.get('party.party') + >>> Employee = Model.get('company.employee') + >>> employee_party = Party(name="Employee") + >>> employee_party.save() + >>> employee = Employee(party=employee_party) + >>> employee.save() + >>> user = User(config.user) + >>> user.employees.append(employee) + >>> user.employee = employee + >>> user.save() + >>> set_user(user.id) + Create fiscal year:: >>> fiscalyear = set_fiscalyear_invoice_sequences( @@ -148,9 +163,13 @@ Sale 5 products:: >>> sale.click('quote') >>> sale.untaxed_amount, sale.tax_amount, sale.total_amount (Decimal('50.00'), Decimal('5.00'), Decimal('55.00')) + >>> sale.quoted_by == employee + True >>> sale.click('confirm') >>> sale.untaxed_amount, sale.tax_amount, sale.total_amount (Decimal('50.00'), Decimal('5.00'), Decimal('55.00')) + >>> sale.confirmed_by == employee + True >>> sale.state 'processing' >>> sale.shipment_state diff --git a/view/sale_form.xml b/view/sale_form.xml index e6f1e54bcc..87000b7f16 100644 --- a/view/sale_form.xml +++ b/view/sale_form.xml @@ -64,6 +64,10 @@ this repository contains the full copyright notices and license terms. -->