summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-10-13 13:01:35 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-10-13 13:01:35 +0700
commitdab2cdebb698b817b979efd2087175060f9b8f03 (patch)
tree2f301bebebe9d187415cda0c663b00d7f02eac03
parent40c66acf47f900ecd776358758ac053347c078c7 (diff)
<Miqdad> change SO line behavior onchange vendor_id
-rwxr-xr-xindoteknik_custom/models/sale_order.py11
-rw-r--r--indoteknik_custom/models/sale_order_line.py62
2 files changed, 49 insertions, 24 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 2d2d71b3..3bd1ca59 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -3230,7 +3230,10 @@ class SaleOrder(models.Model):
# order._auto_set_shipping_from_website()
order._compute_etrts_date()
order._validate_expected_ready_ship_date()
- order.onchange_vendor_id()
+ for line in order.order_line:
+ updated_vals = line._update_purchase_info()
+ if updated_vals:
+ line.write(updated_vals)
# order._validate_delivery_amt()
# order._check_total_margin_excl_third_party()
# order._update_partner_details()
@@ -3362,6 +3365,12 @@ class SaleOrder(models.Model):
if any(field in vals for field in ["order_line", "client_order_ref"]):
self._calculate_etrts_date()
+ for order in self:
+ for line in order.order_line:
+ updated_vals = line._update_purchase_info()
+ if updated_vals:
+ line.write(updated_vals)
+
return res
def button_refund(self):
diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py
index 1f2ea1fb..f8fb898c 100644
--- a/indoteknik_custom/models/sale_order_line.py
+++ b/indoteknik_custom/models/sale_order_line.py
@@ -247,29 +247,29 @@ class SaleOrderLine(models.Model):
margin_per_item = sales_price - purchase_price
line.item_before_margin = margin_per_item
- @api.onchange('vendor_id')
- def onchange_vendor_id(self):
- # TODO : need to change this logic @stephan
- if not self.product_id or self.product_id.type == 'service':
- return
- elif self.product_id.categ_id.id == 34: # finish good / manufacturing only
- cost = self.product_id.standard_price
- self.purchase_price = cost
- elif self.product_id.x_manufacture.override_vendor_id:
- # purchase_price = self.env['purchase.pricelist'].search(
- # [('vendor_id', '=', self.product_id.x_manufacture.override_vendor_id.id),
- # ('product_id', '=', self.product_id.id)],
- # limit=1, order='count_trx_po desc, count_trx_po_vendor desc')
- price, taxes, vendor_id = self._get_purchase_price_by_vendor(self.product_id, self.vendor_id)
- self.purchase_price = price
- self.purchase_tax_id = taxes
- # else:
- # purchase_price = self.env['purchase.pricelist'].search(
- # [('vendor_id', '=', self.vendor_id.id), ('product_id', '=', self.product_id.id)],
- # limit=1, order='count_trx_po desc, count_trx_po_vendor desc')
- # price, taxes = self._get_valid_purchase_price(purchase_price)
- # self.purchase_price = price
- # self.purchase_tax_id = taxes
+ # @api.onchange('vendor_id')
+ # def onchange_vendor_id(self):
+ # # TODO : need to change this logic @stephan
+ # if not self.product_id or self.product_id.type == 'service':
+ # return
+ # elif self.product_id.categ_id.id == 34: # finish good / manufacturing only
+ # cost = self.product_id.standard_price
+ # self.purchase_price = cost
+ # elif self.product_id.x_manufacture.override_vendor_id:
+ # # purchase_price = self.env['purchase.pricelist'].search(
+ # # [('vendor_id', '=', self.product_id.x_manufacture.override_vendor_id.id),
+ # # ('product_id', '=', self.product_id.id)],
+ # # limit=1, order='count_trx_po desc, count_trx_po_vendor desc')
+ # price, taxes, vendor_id = self._get_purchase_price_by_vendor(self.product_id, self.vendor_id)
+ # self.purchase_price = price
+ # self.purchase_tax_id = taxes
+ # # else:
+ # # purchase_price = self.env['purchase.pricelist'].search(
+ # # [('vendor_id', '=', self.vendor_id.id), ('product_id', '=', self.product_id.id)],
+ # # limit=1, order='count_trx_po desc, count_trx_po_vendor desc')
+ # # price, taxes = self._get_valid_purchase_price(purchase_price)
+ # # self.purchase_price = price
+ # # self.purchase_tax_id = taxes
# def _calculate_selling_price(self):
# rec_purchase_price, rec_taxes, rec_vendor_id = self._get_purchase_price(self.product_id)
@@ -512,3 +512,19 @@ class SaleOrderLine(models.Model):
else:
line.product_updatable = False
# line.desc_updatable = False
+
+ @api.onchange('vendor_id')
+ def _onchange_vendor_id_custom(self):
+ self._update_purchase_info()
+
+ def _update_purchase_info(self):
+ if not self.product_id or self.product_id.type == 'service':
+ return
+
+ if self.product_id.categ_id.id == 34:
+ self.purchase_price = self.product_id.standard_price
+ self.purchase_tax_id = [(5, 0, 0)] # reset
+ elif self.product_id.x_manufacture.override_vendor_id:
+ price, taxes, vendor_id = self._get_purchase_price_by_vendor(self.product_id, self.vendor_id)
+ self.purchase_price = price
+ self.purchase_tax_id = taxes