summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-10-14 11:43:05 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-10-14 11:43:05 +0000
commit60dfef625548cf7e8cdaa8fdfd76238f208790e7 (patch)
tree75216848656a4b3fa9058dbe1584307d34dcc4c4
parentb41c2d160e5e114bf805baed573d791fbac3feac (diff)
parentdab2cdebb698b817b979efd2087175060f9b8f03 (diff)
Merged in cr_approval_status (pull request #448)
<Miqdad> set back to pengajuan1 when CO from website and change SO line behavior onchange vendor_id
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py12
-rwxr-xr-xindoteknik_custom/models/sale_order.py10
-rw-r--r--indoteknik_custom/models/sale_order_line.py62
3 files changed, 57 insertions, 27 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 56b49f9a..741dc0b1 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -231,10 +231,11 @@ class SaleOrder(controller.Controller):
for so in filtered_orders_paginated:
item = request.env['sale.order'].api_v1_single_response(so)
+ approval_ok = (so.approval_status in ('pengajuan1', 'pengajuan2'))
source_ok = _is_website_order(so)
term_ok = bool(so.payment_term_id and so.payment_term_id.id == CBD_PAYMENT_TERM_ID)
pay_status = (getattr(so, 'payment_status', '') or '').strip().lower()
- eligible = bool(source_ok and term_ok and pay_status in ALLOWED_CONTINUE)
+ eligible = bool(approval_ok and source_ok and term_ok and pay_status in ALLOWED_CONTINUE)
redirect_url = getattr(so, 'payment_link_midtrans', '') or ''
@@ -242,6 +243,7 @@ class SaleOrder(controller.Controller):
'eligibleContinue': eligible,
'paymentSummary': {
'eligible': eligible,
+ 'approvalStatus': so.approval_status or '',
'paymentStatus': pay_status,
'paymentTermId': so.payment_term_id.id if so.payment_term_id else None,
'sourceId': so.source_id.id if so.source_id else None,
@@ -283,6 +285,7 @@ class SaleOrder(controller.Controller):
pay_status = (getattr(sale_order, 'payment_status', '') or '').strip().lower()
eligible = (
+ sale_order.approval_status in ('pengajuan1', 'pengajuan2') and
_is_website_order(sale_order) and
sale_order.payment_term_id and sale_order.payment_term_id.id == CBD_PAYMENT_TERM_ID and
pay_status in ALLOWED_CONTINUE
@@ -314,6 +317,7 @@ class SaleOrder(controller.Controller):
'eligible_continue': eligible,
'payment_summary': {
'eligible': eligible,
+ 'approval_status': sale_order.approval_status or '',
'payment_status': pay_status,
'payment_term_id': sale_order.payment_term_id.id if sale_order.payment_term_id else None,
'source_id': sale_order.source_id.id if sale_order.source_id else None,
@@ -723,9 +727,9 @@ class SaleOrder(controller.Controller):
_logger.info(f"Updated user_id from partner: {parameters['user_id']}")
if params['value']['type'] == 'sale_order':
- # parameters['approval_status'] = 'pengajuan1'
- parameters['approval_status'] = False
- _logger.info("Setting approval_status to 'false'")
+ parameters['approval_status'] = 'pengajuan1'
+ # parameters['approval_status'] = False
+ _logger.info("Setting approval_status to 'pengajuan1'")
sale_order = request.env['sale.order'].with_context(from_website_checkout=True).create([parameters])
sale_order.onchange_partner_contact()
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 4a7203a1..3bd1ca59 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -3230,6 +3230,10 @@ class SaleOrder(models.Model):
# order._auto_set_shipping_from_website()
order._compute_etrts_date()
order._validate_expected_ready_ship_date()
+ 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()
@@ -3361,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