Advertisement
Guest User

Untitled

a guest
May 2nd, 2021
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.68 KB | None | 0 0
  1. class SaleLine(metaclass=PoolMeta):
  2.     __name__ = 'sale.line'
  3.  
  4.     number = fields.Function(fields.Char('Number'),
  5.         'get_sale_field', searcher='search_sale_field')
  6.     party = fields.Function(fields.Many2One('party.party', 'Sale Party'),
  7.         'get_sale_field', searcher='search_sale_field')
  8.     shipment_party = fields.Function(fields.Many2One('party.party',
  9.             'Sale Shipment Party'), 'get_sale_field',
  10.         searcher='search_sale_field')
  11.     sale_date = fields.Function(fields.Date('Sale Date'), 'get_sale_field',
  12.         searcher='search_sale_field')
  13.     currency = fields.Function(fields.Many2One('currency.currency',
  14.         'Currency'), 'get_sale_field', searcher='search_sale_field')
  15.     invoice_product = fields.Many2One('product.product', "Invoice Product",
  16.         ondelete='RESTRICT',
  17.         domain=[
  18.             If(Eval('sale_state').in_(['draft', 'quotation']),
  19.                 ('salable', '=', True),
  20.                 ()),
  21.             ],
  22.         states={
  23.             'invisible': Eval('type') != 'line',
  24.             'readonly': Eval('sale_state') != 'draft',
  25.             },
  26.         depends=['type', 'sale_state'],
  27.         help="The product that should be invoiced.")
  28.     invoice_product_customer = fields.Many2One(
  29.         'sale.product_customer', "Invoice Customer's Product",
  30.         ondelete='RESTRICT',
  31.         domain=[
  32.             If(Bool(Eval('invoice_product')),
  33.                 ['OR',
  34.                     [
  35.                         ('template.products', '=', Eval('invoice_product')),
  36.                         ('product', '=', None),
  37.                         ],
  38.                     ('product', '=', Eval('invoice_product')),
  39.                     ],
  40.                 []),
  41.             ('party', '=', Eval('_parent_sale', {}).get('party')),
  42.             ],
  43.         states={
  44.             'invisible': Eval('type') != 'line',
  45.             'readonly': Eval('sale_state') != 'draft',
  46.             },
  47.         depends=['invoice_product', 'type', 'sale_state'])
  48.  
  49.     @classmethod
  50.     def __setup__(cls):
  51.         super().__setup__()
  52.         cls.product_customer.states['invisible'] = Or(
  53.             cls.product_customer.states.get('invisible', False),
  54.             Eval('invoice_product_customer', False))
  55.         cls.product_customer.depends.append('invoice_product_customer')
  56.  
  57.     def get_sale_field(self, name):
  58.         field = getattr(self.__class__, name)
  59.         value = getattr(self.sale, name)
  60.         if value and isinstance(value, ModelSQL):
  61.             if field._type == 'reference':
  62.                 return str(value)
  63.             return value.id
  64.         return value
  65.  
  66.     @classmethod
  67.     def search_sale_field(cls, name, clause):
  68.         return [('sale.' + name,) + tuple(clause[1:])]
  69.  
  70.     def _order_sale_field(name):
  71.         def order_field(tables):
  72.             pool = Pool()
  73.             Sale = pool.get('sale.sale')
  74.             field = Sale._fields[name]
  75.             table, _ = tables[None]
  76.             sale_tables = tables.get('sale')
  77.             if sale_tables is None:
  78.                 sale = Sale.__table__()
  79.                 sale_tables = {
  80.                     None: (sale, sale.id == table.sale),
  81.                     }
  82.                 tables['sale'] = sale_tables
  83.             return field.convert_order(name, sale_tables, Sale)
  84.         return staticmethod(order_field)
  85.     order_party = _order_sale_field('party')
  86.     order_shipment_party = _order_sale_field('shipment_party')
  87.     order_sale_date = _order_sale_field('sale_date')
  88.     order_shipping_date = _order_sale_field('shipping_date')
  89.     order_number = _order_sale_field('number')
  90.     order_currency = _order_sale_field('currency')
  91.     order_sale_state = _order_sale_field('state')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement