Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SaleLine(metaclass=PoolMeta):
- __name__ = 'sale.line'
- number = fields.Function(fields.Char('Number'),
- 'get_sale_field', searcher='search_sale_field')
- party = fields.Function(fields.Many2One('party.party', 'Sale Party'),
- 'get_sale_field', searcher='search_sale_field')
- shipment_party = fields.Function(fields.Many2One('party.party',
- 'Sale Shipment Party'), 'get_sale_field',
- searcher='search_sale_field')
- sale_date = fields.Function(fields.Date('Sale Date'), 'get_sale_field',
- searcher='search_sale_field')
- currency = fields.Function(fields.Many2One('currency.currency',
- 'Currency'), 'get_sale_field', searcher='search_sale_field')
- invoice_product = fields.Many2One('product.product', "Invoice Product",
- ondelete='RESTRICT',
- domain=[
- If(Eval('sale_state').in_(['draft', 'quotation']),
- ('salable', '=', True),
- ()),
- ],
- states={
- 'invisible': Eval('type') != 'line',
- 'readonly': Eval('sale_state') != 'draft',
- },
- depends=['type', 'sale_state'],
- help="The product that should be invoiced.")
- invoice_product_customer = fields.Many2One(
- 'sale.product_customer', "Invoice Customer's Product",
- ondelete='RESTRICT',
- domain=[
- If(Bool(Eval('invoice_product')),
- ['OR',
- [
- ('template.products', '=', Eval('invoice_product')),
- ('product', '=', None),
- ],
- ('product', '=', Eval('invoice_product')),
- ],
- []),
- ('party', '=', Eval('_parent_sale', {}).get('party')),
- ],
- states={
- 'invisible': Eval('type') != 'line',
- 'readonly': Eval('sale_state') != 'draft',
- },
- depends=['invoice_product', 'type', 'sale_state'])
- @classmethod
- def __setup__(cls):
- super().__setup__()
- cls.product_customer.states['invisible'] = Or(
- cls.product_customer.states.get('invisible', False),
- Eval('invoice_product_customer', False))
- cls.product_customer.depends.append('invoice_product_customer')
- def get_sale_field(self, name):
- field = getattr(self.__class__, name)
- value = getattr(self.sale, name)
- if value and isinstance(value, ModelSQL):
- if field._type == 'reference':
- return str(value)
- return value.id
- return value
- @classmethod
- def search_sale_field(cls, name, clause):
- return [('sale.' + name,) + tuple(clause[1:])]
- def _order_sale_field(name):
- def order_field(tables):
- pool = Pool()
- Sale = pool.get('sale.sale')
- field = Sale._fields[name]
- table, _ = tables[None]
- sale_tables = tables.get('sale')
- if sale_tables is None:
- sale = Sale.__table__()
- sale_tables = {
- None: (sale, sale.id == table.sale),
- }
- tables['sale'] = sale_tables
- return field.convert_order(name, sale_tables, Sale)
- return staticmethod(order_field)
- order_party = _order_sale_field('party')
- order_shipment_party = _order_sale_field('shipment_party')
- order_sale_date = _order_sale_field('sale_date')
- order_shipping_date = _order_sale_field('shipping_date')
- order_number = _order_sale_field('number')
- order_currency = _order_sale_field('currency')
- order_sale_state = _order_sale_field('state')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement