diff --git a/CHANGELOG b/CHANGELOG
index 45149a1279..f33d908152 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Add employee on purchases for some states
* Add contact and invoice party on purchase
Version 5.4.0 - 2019-11-04
diff --git a/purchase.py b/purchase.py
index db47afbdf0..65afbe0eaa 100644
--- a/purchase.py
+++ b/purchase.py
@@ -22,6 +22,8 @@ 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 PurchaseQuotationError, PartyLocationError
@@ -80,14 +82,6 @@ class Purchase(Workflow, ModelSQL, ModelView, TaxableMixin):
reference = fields.Char('Reference', select=True)
description = fields.Char('Description', size=None, states=_states,
depends=_depends)
- state = fields.Selection([
- ('draft', "Draft"),
- ('quotation', "Quotation"),
- ('confirmed', "Confirmed"),
- ('processing', "Processing"),
- ('done', "Done"),
- ('cancel', "Canceled"),
- ], "State", readonly=True, required=True)
purchase_date = fields.Date('Purchase Date',
states={
'readonly': ~Eval('state').in_(['draft', 'quotation']),
@@ -204,6 +198,21 @@ class Purchase(Workflow, ModelSQL, ModelView, TaxableMixin):
'get_shipment_returns', searcher='search_shipment_returns')
moves = fields.One2Many('stock.move', 'purchase', 'Moves', readonly=True)
+ 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)
+
del _states, _depends
@classmethod
@@ -836,12 +845,14 @@ class Purchase(Workflow, ModelSQL, ModelView, TaxableMixin):
@classmethod
@ModelView.button
@Workflow.transition('draft')
+ @reset_employee('quoted_by', 'confirmed_by')
def draft(cls, purchases):
pass
@classmethod
@ModelView.button
@Workflow.transition('quotation')
+ @set_employee('quoted_by')
def quote(cls, purchases):
for purchase in purchases:
purchase.check_for_quotation()
@@ -850,6 +861,7 @@ class Purchase(Workflow, ModelSQL, ModelView, TaxableMixin):
@classmethod
@ModelView.button
@Workflow.transition('confirmed')
+ @set_employee('confirmed_by')
def confirm(cls, purchases):
pool = Pool()
Configuration = pool.get('purchase.configuration')
diff --git a/tests/scenario_purchase.rst b/tests/scenario_purchase.rst
index 48b9f58d49..576d326181 100644
--- a/tests/scenario_purchase.rst
+++ b/tests/scenario_purchase.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(
@@ -155,9 +170,13 @@ Purchase 5 products::
>>> purchase.click('quote')
>>> purchase.untaxed_amount, purchase.tax_amount, purchase.total_amount
(Decimal('25.00'), Decimal('2.50'), Decimal('27.50'))
+ >>> purchase.quoted_by == employee
+ True
>>> purchase.click('confirm')
>>> purchase.untaxed_amount, purchase.tax_amount, purchase.total_amount
(Decimal('25.00'), Decimal('2.50'), Decimal('27.50'))
+ >>> purchase.confirmed_by == employee
+ True
>>> purchase.state
'processing'
>>> purchase.shipment_state
diff --git a/view/purchase_form.xml b/view/purchase_form.xml
index 81254ba663..607987cbfc 100644
--- a/view/purchase_form.xml
+++ b/view/purchase_form.xml
@@ -54,6 +54,10 @@ this repository contains the full copyright notices and license terms. -->
+
+
+
+