diff options
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 10 | ||||
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/models/purchase_order_line.py | 42 | ||||
| -rw-r--r-- | indoteknik_custom/models/purchasing_job.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_move.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/views/purchase_order.xml | 1 | ||||
| -rw-r--r-- | indoteknik_custom/views/stock_picking.xml | 3 |
8 files changed, 56 insertions, 6 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index 479d4e42..6478f2c9 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -253,7 +253,8 @@ class AutomaticPurchase(models.Model): 'product_uom_qty': line.qty_purchase, 'price_unit': line.last_price, 'taxes_id': [line.taxes_id.id] if line.taxes_id else None, - # 'so_line_id': [sales.sale_line_id.id for sales in sales_match], + 'so_line_id': sales_match[0].sale_line_id.id if sales_match else None, + 'so_id': sales_match[0].sale_id.id if sales_match else None } new_po_line = self.env['purchase.order.line'].create([param_line]) line.current_po_id = new_po.id @@ -279,9 +280,9 @@ class AutomaticPurchase(models.Model): ('sale_line_id.product_id', 'in', matches_so_product_ids), ]) - sale_ids = [] + sale_ids_set = set() for sale_order in matches_so: - sale_ids.append(str(sale_order.sale_id.name)) + sale_ids_set.add(str(sale_order.sale_id.name)) matches_so_line = { 'purchase_order_id': purchase_order.id, @@ -299,10 +300,9 @@ class AutomaticPurchase(models.Model): } po_matches_so_line = self.env['purchase.order.sales.match'].create([matches_so_line]) - sale_ids_str = ','.join(sale_ids) + sale_ids_str = ','.join(sale_ids_set) purchase_order.sale_order = sale_ids_str - self.create_sales_order_purchase_match(purchase_order) diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index be971307..5946399d 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -1,5 +1,6 @@ from odoo import fields, models, api, _ from odoo.exceptions import AccessError, UserError, ValidationError +from dateutil.relativedelta import relativedelta from datetime import datetime, timedelta import logging from pytz import timezone, utc @@ -315,6 +316,7 @@ class PurchaseOrder(models.Model): 'qty_available_store': qty_available, # 'suggest': suggest, 'so_line_id': order_line.id, + 'so_id': order_line.order_id.id, } self.order_line.create(values) for order_line in self.order_line: diff --git a/indoteknik_custom/models/purchase_order_line.py b/indoteknik_custom/models/purchase_order_line.py index 2eeb7d3e..8a3b3930 100755 --- a/indoteknik_custom/models/purchase_order_line.py +++ b/indoteknik_custom/models/purchase_order_line.py @@ -2,6 +2,7 @@ from odoo import fields, models, api, _ from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT import logging +from dateutil.relativedelta import relativedelta from datetime import datetime _logger = logging.getLogger(__name__) @@ -31,6 +32,7 @@ class PurchaseOrderLine(models.Model): suggest = fields.Char(string='Suggest') price_vendor = fields.Float(string='Price Vendor', compute='compute_price_vendor') so_line_id = fields.Many2one('sale.order.line', string='ID SO Line') + so_id = fields.Many2one('sale.order', string='SO') indent = fields.Boolean(string='Indent', help='centang ini jika barang indent') is_ltc = fields.Boolean(string='Sudah di LTC', default=False, help='centang ini jika barang sudah di LTC') note = fields.Char(string='Note') @@ -40,6 +42,46 @@ class PurchaseOrderLine(models.Model): delete_line = fields.Boolean(string='Delete', default=False, help='centang ini jika anda ingin menghapus line ini') is_edit_product_qty = fields.Boolean(string='Is Edit Product Qty', compute='_compute_is_edit_product_qty') + def _prepare_stock_move_vals(self, picking, price_unit, product_uom_qty, product_uom): + self.ensure_one() + product = self.product_id.with_context(lang=self.order_id.dest_address_id.lang or self.env.user.lang) + description_picking = product._get_description(self.order_id.picking_type_id) + if self.product_description_variants: + description_picking += "\n" + self.product_description_variants + date_planned = self.date_planned or self.order_id.date_planned + + if self.so_id: + sale_id = self.so_id.id + else: + sale_id = self.so_line_id.order_id.id + + return { + # truncate to 2000 to avoid triggering index limit error + # TODO: remove index in master? + 'name': (self.name or '')[:2000], + 'product_id': self.product_id.id, + 'date': date_planned, + 'date_deadline': date_planned + relativedelta(days=self.order_id.company_id.po_lead), + 'location_id': self.order_id.partner_id.property_stock_supplier.id, + 'location_dest_id': (self.orderpoint_id and not (self.move_ids | self.move_dest_ids)) and self.orderpoint_id.location_id.id or self.order_id._get_destination_location(), + 'picking_id': picking.id, + 'partner_id': self.order_id.dest_address_id.id, + 'move_dest_ids': [(4, x) for x in self.move_dest_ids.ids], + 'state': 'draft', + 'purchase_line_id': self.id, + 'company_id': self.order_id.company_id.id, + 'price_unit': price_unit, + 'picking_type_id': self.order_id.picking_type_id.id, + 'group_id': self.order_id.group_id.id, + 'origin': self.order_id.name, + 'description_picking': description_picking, + 'propagate_cancel': self.propagate_cancel, + 'warehouse_id': self.order_id.picking_type_id.warehouse_id.id, + 'product_uom_qty': product_uom_qty, + 'product_uom': product_uom.id, + 'sale_id': sale_id, + } + @api.constrains('price_unit') def constrains_purchase_price(self): for line in self: diff --git a/indoteknik_custom/models/purchasing_job.py b/indoteknik_custom/models/purchasing_job.py index deec88d7..bdd35874 100644 --- a/indoteknik_custom/models/purchasing_job.py +++ b/indoteknik_custom/models/purchasing_job.py @@ -58,6 +58,7 @@ class PurchasingJob(models.Model): CASE WHEN vendor_id = 5571 THEN 27 WHEN vendor_id = 9688 THEN 397 + WHEN vendor_id = 35475 THEN 397 ELSE (CASE WHEN random() < 0.5 THEN 397 ELSE 1036 END) END AS user_id, vendor_id diff --git a/indoteknik_custom/models/stock_move.py b/indoteknik_custom/models/stock_move.py index dade9a04..9c991be3 100644 --- a/indoteknik_custom/models/stock_move.py +++ b/indoteknik_custom/models/stock_move.py @@ -5,6 +5,7 @@ class StockMove(models.Model): _inherit = 'stock.move' line_no = fields.Integer('No', default=0) + sale_id = fields.Many2one('sale.order', string='SO') def _prepare_account_move_line_from_mr(self, po_line, qty, move=False): po_line.ensure_one() diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index d98a2c82..9b4fffb1 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -81,7 +81,7 @@ class StockPicking(models.Model): status_printed = fields.Selection([ ('not_printed', 'Belum Print'), ('printed', 'Printed') - ], string='Printed?', copy=False) + ], string='Printed?', copy=False, tracking=True) date_unreserve = fields.Datetime(string="Date Unreserved", copy=False, tracking=True) date_availability = fields.Datetime(string="Date Availability", copy=False, tracking=True) sale_order = fields.Char(string='Matches SO', copy=False) diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index eedd9ec9..bb38715e 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -72,6 +72,7 @@ </field> <field name="price_subtotal" position="after"> <field name="so_line_id" attrs="{'readonly': 1}" optional="hide"/> + <field name="so_id" attrs="{'readonly': 1}" optional="hide"/> <field name="indent" optional="hide"/> </field> <page name="purchase_delivery_invoice" position="after"> diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml index e4b7596f..90f662cc 100644 --- a/indoteknik_custom/views/stock_picking.xml +++ b/indoteknik_custom/views/stock_picking.xml @@ -88,6 +88,9 @@ <field name="product_id" position="before"> <field name="line_no" attrs="{'readonly': 1}" optional="hide"/> </field> + <field name="product_uom" position="after"> + <field name="sale_id" attrs="{'readonly': 1}" optional="hide"/> + </field> <page name="note" position="after"> <page string="E-Faktur" name="efaktur" attrs="{'invisible': [['is_internal_use', '=', False]]}"> <group> |
