lims_sale_industry: task trigger refactoring

This commit is contained in:
Adri?n Bernardi 2019-11-13 17:59:51 -03:00
parent d17bab06b1
commit 256eac5b01
9 changed files with 105 additions and 7 deletions

View File

@ -7,6 +7,7 @@ from . import configuration
from . import sale
from . import analysis
from . import product
from . import task
def register():
@ -27,6 +28,8 @@ def register():
sale.SaleSearchLabelStart,
analysis.Analysis,
product.Template,
task.AdministrativeTaskTemplate,
task.AdministrativeTask,
module='lims_sale_industry', type_='model')
Pool.register(
sale.SaleAddProductKit,

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of lims_sale module for Tryton.
# This file is part of lims_sale_industry module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of lims_sale module for Tryton.
# This file is part of lims_sale_industry module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.

View File

@ -342,6 +342,14 @@ msgctxt "model:ir.action,name:wiz_sale_search_label"
msgid "Search label"
msgstr "Buscar etiqueta"
msgctxt "model:ir.message,text:lbl_product_quotation"
msgid "Product sold"
msgstr "Producto vendido"
msgctxt "model:ir.message,text:lbl_sale_purchase_order_required"
msgid "Purchase Order Required"
msgstr "Orden de compra requerida"
msgctxt "model:ir.message,text:msg_no_sample_label_sequence"
msgid "There is no label sequence configured"
msgstr "No hay una secuencia de etiqueta configurada"

View File

@ -1,6 +1,12 @@
<?xml version="1.0"?>
<tryton>
<data group="1">
<record model="ir.message" id="lbl_product_quotation">
<field name="text">Product sold</field>
</record>
<record model="ir.message" id="lbl_sale_purchase_order_required">
<field name="text">Purchase Order Required</field>
</record>
<record model="ir.message" id="msg_no_sample_label_sequence">
<field name="text">There is no label sequence configured</field>
</record>

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# This file is part of lims_sale module for Tryton.
# This file is part of lims_sale_industry module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# This file is part of lims_sale_industry module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
@ -73,6 +72,34 @@ class Sale(metaclass=PoolMeta):
contacts = Contact.search([('party', '=', self.party)])
return [c.id for c in contacts]
@classmethod
def confirm(cls, sales):
pool = Pool()
TaskTemplate = pool.get('lims.administrative.task.template')
SaleLine = pool.get('sale.line')
super(Sale, cls).confirm(sales)
TaskTemplate.create_tasks('sale_purchase_order_required',
cls._for_task_purchase_order_required(sales))
lines = [l for s in sales for l in s.lines]
SaleLine._confirm_lines(lines)
@classmethod
def _for_task_purchase_order_required(cls, sales):
AdministrativeTask = Pool().get('lims.administrative.task')
res = []
for sale in sales:
if not (sale.invoice_party.purchase_order_required and
not sale.purchase_order):
continue
if AdministrativeTask.search([
('type', '=', 'sale_purchase_order_required'),
('origin', '=', '%s,%s' % (cls.__name__, sale.id)),
('state', 'not in', ('done', 'discarded')),
]):
continue
res.append(sale)
return res
class SalePlant(ModelSQL):
'Sale - Plant'
@ -182,6 +209,28 @@ class SaleLine(metaclass=PoolMeta):
Bool(Eval('analysis')))}
cls.expiration_date.depends.extend(['_parent_sale', 'analysis'])
@classmethod
def _confirm_lines(cls, lines):
TaskTemplate = Pool().get('lims.administrative.task.template')
TaskTemplate.create_tasks('product_quotation',
cls._for_task_product_quotation(lines))
@classmethod
def _for_task_product_quotation(cls, lines):
AdministrativeTask = Pool().get('lims.administrative.task')
res = []
for line in lines:
if not line.product or not line.product.create_task_quotation:
continue
if AdministrativeTask.search([
('type', '=', 'product_quotation'),
('origin', '=', '%s,%s' % (cls.__name__, line.id)),
('state', 'not in', ('done', 'discarded')),
]):
continue
res.append(line)
return res
class SaleLinePlant(ModelSQL):
'Sale Line - Plant'

View File

@ -0,0 +1,34 @@
# This file is part of lims_sale_industry module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from trytond.pool import PoolMeta
from trytond.i18n import gettext
__all__ = ['AdministrativeTaskTemplate', 'AdministrativeTask']
class AdministrativeTaskTemplate(metaclass=PoolMeta):
__name__ = 'lims.administrative.task.template'
@classmethod
def get_types(cls):
types = super(AdministrativeTaskTemplate, cls).get_types()
types.append(('sale_purchase_order_required',
gettext('lims_sale_industry.lbl_sale_purchase_order_required')))
types.append(('product_quotation',
gettext('lims_sale_industry.lbl_product_quotation')))
return types
class AdministrativeTask(metaclass=PoolMeta):
__name__ = 'lims.administrative.task'
@classmethod
def _get_origin(cls):
origins = super(AdministrativeTask, cls)._get_origin()
origins.extend([
'sale.sale',
'sale.line',
])
return origins

View File

@ -3,6 +3,7 @@ version=5.2.0
depends:
lims_sale
lims_industry
lims_administrative_task
xml:
configuration.xml
sale.xml