Advertisement
Guest User

Untitled

a guest
Nov 26th, 2021
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.73 KB | None | 0 0
  1. class PurchaseBlanketOrderLineToPurchaseOrderLine(ModelView):
  2.     'Purchase line to create'
  3.     __name__ = 'purchase.blanket_order.line.to.purchase.line'
  4.  
  5.     line = fields.Many2One('purchase.blanket_order.line',
  6.         "Purchase Blanket Order Line")
  7.     product = fields.Many2One('product.product', "Product", readonly=True)
  8.     product_uom_category = fields.Function(
  9.         fields.Many2One('product.uom.category', "Product UOM Category"),
  10.         'on_change_with_product_uom_category')
  11.     unit_price = fields.Numeric("Unit Price", digits=price_digits)
  12.     quantity = fields.Float("Quantity", required=True, digits='unit')
  13.     unit = fields.Many2One('product.uom', "Unit")
  14.     remaining_quantity = fields.Float("Remaining quantity", readonly=True,
  15.         digits='unit')
  16.  
  17.     @classmethod
  18.     def __setup__(cls):
  19.         super().__setup__()
  20.         unit_categories = cls._unit_categories()
  21.         cls.unit.domain = [
  22.             If(Bool(Eval('product_uom_category')),
  23.                 ('category', 'in', [Eval(c) for c in unit_categories]),
  24.                 ('category', '!=', -1)),
  25.             ]
  26.         cls.unit.depends.extend(unit_categories)
  27.  
  28.     @classmethod
  29.     def _unit_categories(cls):
  30.         return ['product_uom_category']
  31.  
  32.     @fields.depends('product')
  33.     def on_change_with_product_uom_category(self, name=None):
  34.         if self.product:
  35.             return self.product.default_uom_category.id
  36.  
  37.  
  38. class PurchaseBlanketOrderToPurchaseOrder(ModelView):
  39.     'Purchase line to create'
  40.     __name__ = 'purchase.blanket_order.to.purchase'
  41.  
  42.     lines = fields.One2Many(
  43.         'purchase.blanket_order.line.to.purchase.line', None, "Lines")
  44.  
  45.  
  46. class PurchaseBlanketOrderCreatePurchaseOrder(Wizard):
  47.     'Wizard to create a purchase from blanket order'
  48.     __name__ = 'purchase.blanket_order.create_purchase'
  49.     start = StateView(
  50.         'purchase.blanket_order.to.purchase',
  51.         'purchase_blanket_order.create_purchase_form_view', [
  52.             Button("Cancel", 'end', 'tryton-cancel'),
  53.             Button("Create a purchase", 'create_purchase', 'tryton-ok',
  54.                    default=True),
  55.         ])
  56.     create_purchase = StateAction('purchase.act_purchase_form')
  57.  
  58.     def default_start(self, fields):
  59.         pool = Pool()
  60.         Line = pool.get('purchase.blanket_order.line.to.purchase.line')
  61.         lines = [Line(
  62.             line=line,
  63.             quantity=line.remaining_quantity,
  64.             product=line.product,
  65.             remaining_quantity=line.remaining_quantity,
  66.             unit=line.unit,
  67.             unit_price=line.unit_price,)
  68.             for line in self.record.lines
  69.             if line.remaining_quantity > 0.
  70.         ]
  71.         return {'lines': lines}
  72.  
  73.     def do_create_purchase(self, action):
  74.         purchase = self.record._get_purchase()
  75.         lines = []
  76.         print("########CREATE PURCHASE##########")
  77.         for line in self.start.lines:
  78.             if line.quantity <= 0:
  79.                 continue
  80.             purchase_line = line.line.get_purchase_line(purchase)
  81.             purchase_line.unit_price = (line.unit_price if line.unit_price
  82.                 else line.line.unit_price)
  83.             purchase_line.taxes = purchase_line.compute_taxes(
  84.                 self.start.order.supplier)
  85.             self._set_purchase_line_quantity(purchase_line, line)
  86.             purchase_line.on_change_quantity()
  87.             lines.append(purchase_line)
  88.  
  89.         if lines:
  90.             purchase.lines = lines
  91.             purchase.save()
  92.  
  93.             action['views'].reverse()
  94.             return action, {'res_id': [purchase.id]}
  95.  
  96.     def _set_purchase_line_quantity(self, purchase_line, line):
  97.         purchase_line.quantity = line.quantity
  98.         purchase_line.unit = line.unit
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement