mirror of
https://bitbucket.org/presik/trytonpsk-stock_co.git
synced 2023-12-14 05:43:05 +01:00
72 lines
2.6 KiB
Python
Executable file
72 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
|