trytonpsk-stock_co/position.py

73 lines
2.6 KiB
Python
Executable File

# 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 trytond.model import ModelView, ModelSQL, fields, Unique
from .exceptions import DeleteWarning
from trytond.pool import Pool
from trytond.i18n import gettext
class ProductPosition(ModelSQL, ModelView):
"Product Position"
__name__ = "product.position"
name = fields.Char('Name', required=True)
code = fields.Char('Code')
warehouse = fields.Many2One('stock.location', 'Warehouse', states={
'required': True
}, domain=[('type', '=', 'warehouse')]
)
@classmethod
def __setup__(cls):
super(ProductPosition, cls).__setup__()
cls._order.insert(0, ('name', 'ASC'))
t = cls.__table__()
cls._sql_constraints = [
('unique', Unique(t, t.code), "Code must be unique."),
]
@classmethod
def search_rec_name(cls, name, clause):
clause = tuple(clause)
if clause[1].startswith('!') or clause[1].startswith('not '):
bool_op = 'AND'
else:
bool_op = 'OR'
return [bool_op,
('name',) + clause[1:],
('code',) + clause[1:],
(cls._rec_name,) + clause[1:],
]
@classmethod
def delete(cls, records):
Warning = Pool().get('res.user.warning')
ProductTemplate = Pool().get('product_template.position')
for record in records:
key = '%s.delete' % record
pds_position = ProductTemplate.search([('position', '=', record.id)])
if Warning.check(key) and len(pds_position) > 0:
raise DeleteWarning(key,
gettext('stock_co.msg_delete_position',
position=record.rec_name, count=len(pds_position)))
super(cls, ProductPosition).delete(records)
class ProductTemplatePosition(ModelSQL, ModelView):
"Product Template Position"
__name__ = 'product_template.position'
# _rec_name = 'position'
position = fields.Many2One('product.position', 'Position', required=True,
ondelete='CASCADE')
template = fields.Many2One('product.template', 'Template', required=True,
ondelete='RESTRICT')
warehouse = fields.Function(fields.Many2One('stock.location', 'Warehouse'),
'on_change_with_warehouse')
@fields.depends('position')
def on_change_with_warehouse(self, name=None):
warehouse = None
if self.position:
warehouse = self.position.warehouse.id
return warehouse