diff options
Diffstat (limited to 'indoteknik_custom/models/automatic_purchase.py')
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 230 |
1 files changed, 115 insertions, 115 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index f7c0d75e..8e817409 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -291,7 +291,7 @@ class AutomaticPurchase(models.Model): line.current_po_id = new_po.id line.current_po_line_id = new_po_line.id - self.create_purchase_order_sales_match(new_po) + # self.create_purchase_order_sales_match(new_po) @@ -304,146 +304,146 @@ class AutomaticPurchase(models.Model): for sales in sales_match: sales.sale_line_id.purchase_price = apo.last_price - def create_purchase_order_sales_match(self, purchase_order): - matches_so_product_ids = [line.product_id.id for line in purchase_order.order_line] - - matches_so = self.env['v.sale.notin.matchpo'].search([ - ('automatic_purchase_id', '=', self.id), - ('sale_line_id.product_id', 'in', matches_so_product_ids), - ]) - - sale_ids_set = set() - sale_ids_name = set() - retur_cache = {} - incoming_cache = {} - for sale_order in matches_so: - exist = self.env['purchase.order.sales.match'].search([ - ('product_id', '=', sale_order.product_id.id), - ('sale_line_id', '=', sale_order.sale_line_id.id), - ('sale_id', '=', sale_order.sale_id.id), - ('purchase_order_id.state', '!=', 'cancel'), - ]) + # def create_purchase_order_sales_match(self, purchase_order): + # matches_so_product_ids = [line.product_id.id for line in purchase_order.order_line] + + # matches_so = self.env['v.sale.notin.matchpo'].search([ + # ('automatic_purchase_id', '=', self.id), + # ('sale_line_id.product_id', 'in', matches_so_product_ids), + # ]) + + # sale_ids_set = set() + # sale_ids_name = set() + # retur_cache = {} + # incoming_cache = {} + # for sale_order in matches_so: + # exist = self.env['purchase.order.sales.match'].search([ + # ('product_id', '=', sale_order.product_id.id), + # ('sale_line_id', '=', sale_order.sale_line_id.id), + # ('sale_id', '=', sale_order.sale_id.id), + # ('purchase_order_id.state', '!=', 'cancel'), + # ]) - skip_line = False + # skip_line = False - sale_line_id = sale_order.sale_line_id.id + # sale_line_id = sale_order.sale_line_id.id - if sale_line_id not in incoming_cache: + # if sale_line_id not in incoming_cache: - qty_incoming = 0 + # qty_incoming = 0 - for existing in exist: - if existing.purchase_order_id.state in ['done', 'purchase']: + # for existing in exist: + # if existing.purchase_order_id.state in ['done', 'purchase']: - incoming_moves = self.env['stock.move'].search([ - ('reference', 'ilike', 'BU/INPUT'), - ('state', 'not in', ['done','cancel']), - ('product_id', '=', existing.product_id.id), - ('purchase_line_id', '=', existing.purchase_line_id.id), - ]) + # incoming_moves = self.env['stock.move'].search([ + # ('reference', 'ilike', 'BU/INPUT'), + # ('state', 'not in', ['done','cancel']), + # ('product_id', '=', existing.product_id.id), + # ('purchase_line_id', '=', existing.purchase_line_id.id), + # ]) - qty_incoming += sum(incoming_moves.mapped('product_uom_qty')) + # qty_incoming += sum(incoming_moves.mapped('product_uom_qty')) - incoming_cache[sale_line_id] = qty_incoming + # incoming_cache[sale_line_id] = qty_incoming - qty_need = sale_order.sale_line_id.product_uom_qty + # qty_need = sale_order.sale_line_id.product_uom_qty - if incoming_cache[sale_line_id] >= qty_need: - skip_line = True + # if incoming_cache[sale_line_id] >= qty_need: + # skip_line = True - sale_line_id = sale_order.sale_line_id.id + # sale_line_id = sale_order.sale_line_id.id - if sale_line_id not in retur_cache: + # if sale_line_id not in retur_cache: - fully_received = True + # fully_received = True - for existing in exist: - if existing.purchase_order_id.state in ['done', 'purchase']: + # for existing in exist: + # if existing.purchase_order_id.state in ['done', 'purchase']: - if existing.purchase_line_id.qty_received != existing.purchase_line_id.product_qty: - fully_received = False - break + # if existing.purchase_line_id.qty_received != existing.purchase_line_id.product_qty: + # fully_received = False + # break - retur_cache[sale_line_id] = fully_received + # retur_cache[sale_line_id] = fully_received - if retur_cache[sale_line_id] and exist: - skip_line = True + # if retur_cache[sale_line_id] and exist: + # skip_line = True - if skip_line: - continue + # if skip_line: + # continue - stock_move = self.env['stock.move'].search([ - ('reference', 'ilike', 'BU/PICK'), - ('state', 'in', ['confirmed','waiting','partially_available']), - ('product_id', '=', sale_order.product_id.id), - ('sale_line_id', '=', sale_order.sale_line_id.id), - ]) - if not stock_move: - continue - # @stephan skip so line yang sudah pernah ada di purchase order sales match sebelumnya + # stock_move = self.env['stock.move'].search([ + # ('reference', 'ilike', 'BU/PICK'), + # ('state', 'in', ['confirmed','waiting','partially_available']), + # ('product_id', '=', sale_order.product_id.id), + # ('sale_line_id', '=', sale_order.sale_line_id.id), + # ]) + # if not stock_move: + # continue + # # @stephan skip so line yang sudah pernah ada di purchase order sales match sebelumnya - salesperson_name = sale_order.sale_id.user_id.name + # salesperson_name = sale_order.sale_id.user_id.name - sale_id_with_salesperson = f"{sale_order.sale_id.name} - {salesperson_name}" + # sale_id_with_salesperson = f"{sale_order.sale_id.name} - {salesperson_name}" - sale_ids_set.add(sale_id_with_salesperson) - sale_ids_name.add(sale_order.sale_id.name) - - margin_item = sale_order.sale_line_id.item_margin / sale_order.qty_so if sale_order.qty_so else 0 - margin_item = margin_item * sale_order.qty_po - - matches_so_line = { - 'purchase_order_id': purchase_order.id, - 'sale_id': sale_order.sale_id.id, - 'sale_line_id': sale_order.sale_line_id.id, - 'picking_id': sale_order.picking_id.id, - 'move_id': sale_order.move_id.id, - 'partner_id': sale_order.partner_id.id, - 'partner_invoice_id': sale_order.partner_invoice_id.id, - 'salesperson_id': sale_order.salesperson_id.id, - 'product_id': sale_order.product_id.id, - 'qty_so': sale_order.qty_so, - 'qty_po': sale_order.qty_po, - 'margin_so': sale_order.sale_line_id.item_percent_margin, - 'margin_item': margin_item - } - po_matches_so_line = self.env['purchase.order.sales.match'].create([matches_so_line]) - - sale_ids_str = ','.join(sale_ids_set) - sale_ids_str_name = ','.join(sale_ids_name) - - purchase_order.sale_order = sale_ids_str_name - purchase_order.notes = sale_ids_str + # sale_ids_set.add(sale_id_with_salesperson) + # sale_ids_name.add(sale_order.sale_id.name) + + # margin_item = sale_order.sale_line_id.item_margin / sale_order.qty_so if sale_order.qty_so else 0 + # margin_item = margin_item * sale_order.qty_po + + # matches_so_line = { + # 'purchase_order_id': purchase_order.id, + # 'sale_id': sale_order.sale_id.id, + # 'sale_line_id': sale_order.sale_line_id.id, + # 'picking_id': sale_order.picking_id.id, + # 'move_id': sale_order.move_id.id, + # 'partner_id': sale_order.partner_id.id, + # 'partner_invoice_id': sale_order.partner_invoice_id.id, + # 'salesperson_id': sale_order.salesperson_id.id, + # 'product_id': sale_order.product_id.id, + # 'qty_so': sale_order.qty_so, + # 'qty_po': sale_order.qty_po, + # 'margin_so': sale_order.sale_line_id.item_percent_margin, + # 'margin_item': margin_item + # } + # po_matches_so_line = self.env['purchase.order.sales.match'].create([matches_so_line]) + + # sale_ids_str = ','.join(sale_ids_set) + # sale_ids_str_name = ','.join(sale_ids_name) + + # purchase_order.sale_order = sale_ids_str_name + # purchase_order.notes = sale_ids_str - self.create_sales_order_purchase_match(purchase_order) + # self.create_sales_order_purchase_match(purchase_order) - def create_sales_order_purchase_match(self, purchase_order): - #TODO add matches po to sales order by automatic_purchase.sales.match - matches_po_product_ids = [line.product_id.id for line in purchase_order.order_line] - - sales_match_line = self.env['automatic.purchase.sales.match'].search([ - ('automatic_purchase_id', '=', self.id), - ('sale_line_id.product_id', 'in', matches_po_product_ids), - ]) - - for sales_match in sales_match_line: - purchase_line = self.env['automatic.purchase.line'].search([ - ('automatic_purchase_id', '=', self.id), - ('product_id', 'in', [sales_match.product_id.id]), - ], limit=1) - - matches_po_line = { - 'sales_order_id' : sales_match.sale_id.id, - 'purchase_order_id' : purchase_line.current_po_id.id, - 'purchase_line_id' : purchase_line.current_po_line_id.id, - 'product_id' : sales_match.product_id.id, - 'qty_so' : sales_match.qty_so, - 'qty_po' : sales_match.qty_po, - } - - sales_order_purchase_match = self.env['sales.order.purchase.match'].create([matches_po_line]) + # def create_sales_order_purchase_match(self, purchase_order): + # #TODO add matches po to sales order by automatic_purchase.sales.match + # matches_po_product_ids = [line.product_id.id for line in purchase_order.order_line] + + # sales_match_line = self.env['automatic.purchase.sales.match'].search([ + # ('automatic_purchase_id', '=', self.id), + # ('sale_line_id.product_id', 'in', matches_po_product_ids), + # ]) + + # for sales_match in sales_match_line: + # purchase_line = self.env['automatic.purchase.line'].search([ + # ('automatic_purchase_id', '=', self.id), + # ('product_id', 'in', [sales_match.product_id.id]), + # ], limit=1) + + # matches_po_line = { + # 'sales_order_id' : sales_match.sale_id.id, + # 'purchase_order_id' : purchase_line.current_po_id.id, + # 'purchase_line_id' : purchase_line.current_po_line_id.id, + # 'product_id' : sales_match.product_id.id, + # 'qty_so' : sales_match.qty_so, + # 'qty_po' : sales_match.qty_po, + # } + + # sales_order_purchase_match = self.env['sales.order.purchase.match'].create([matches_po_line]) def generate_regular_purchase(self, jobs): current_time = datetime.utcnow() |
