summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-11-29 10:35:39 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-11-29 10:35:39 +0700
commit75cad0da1476a2e605ef5d0f35cfb58944831934 (patch)
tree6cc7e014ef006e8d7794f2b6f50437bef61dd724 /indoteknik_custom/models/sale_order.py
parentfd5617629243b879e020afbdb2f1957d2e419ae4 (diff)
parentfa3da08e5c0837e1492a3b00b17b7492c07ac676 (diff)
Merge branch 'production' into CR/website-improvment
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py59
1 files changed, 37 insertions, 22 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 3d91ba91..7fc6d96a 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -79,7 +79,7 @@ class SaleOrder(models.Model):
payment_link_midtrans = fields.Char(string='Payment Link', help='Url payment yg digenerate oleh midtrans, harap diserahkan ke customer agar dapat dilakukan pembayaran secara mandiri')
payment_qr_code = fields.Binary("Payment QR Code")
due_id = fields.Many2one('due.extension', string="Due Extension", readonly=True, tracking=True)
- vendor_approval_id = fields.Many2one('vendor.approval', string="Vendor Approval", readonly=True, tracking=True, copy=False)
+ vendor_approval_id = fields.Many2many('vendor.approval', string="Vendor Approval", readonly=True, tracking=True, copy=False)
customer_type = fields.Selection([
('pkp', 'PKP'),
('nonpkp', 'Non PKP')
@@ -99,6 +99,7 @@ class SaleOrder(models.Model):
helper_by_id = fields.Many2one('res.users', 'Helper By')
eta_date = fields.Datetime(string='ETA Date', copy=False, compute='_compute_eta_date')
flash_sale = fields.Boolean(string='Flash Sale', help='Data dari web')
+ is_continue_transaction = fields.Boolean(string='Button Transaction', help='Data dari web')
web_approval = fields.Selection([
('company', 'Company'),
('cust_manager', 'Customer Manager'),
@@ -144,6 +145,14 @@ class SaleOrder(models.Model):
('NP', 'Non Pareto')
])
+ @api.onchange('payment_status')
+ def _is_continue_transaction(self):
+ if not self.is_continue_transaction:
+ if self.payment_status == 'settlement':
+ self.is_continue_transaction = True
+ else:
+ self.is_continue_transaction = False
+
def _compute_total_weight(self):
total_weight = 0
missing_weight_products = []
@@ -636,6 +645,7 @@ class SaleOrder(models.Model):
self.customer_type = parent_id.customer_type
self.email = parent_id.email
self.pareto_status = parent_id.pareto_status
+ self.user_id = parent_id.user_id
@api.onchange('partner_id')
def onchange_partner_id(self):
@@ -881,29 +891,26 @@ class SaleOrder(models.Model):
}).send()
def validate_different_vendor(self):
- if self.vendor_approval_id and self.vendor_approval_id.state == 'draft':
- raise UserError('SO ini sedang dalam review Vendor Approval')
-
- if self.vendor_approval_id and self.vendor_approval_id.state == 'cancel':
- raise UserError('Vendor Approval SO ini Di Reject')
-
- if self.vendor_approval_id and self.vendor_approval_id.state == 'done':
+ if self.vendor_approval_id.filtered(lambda v: v.state == 'draft'):
+ draft_names = ", ".join(self.vendor_approval_id.filtered(lambda v: v.state == 'draft').mapped('number'))
+ raise UserError(f"SO ini sedang dalam review Vendor Approval: {draft_names}")
+
+ if self.vendor_approval_id and all(v.state != 'draft' for v in self.vendor_approval_id):
return False
- different_vendor = self.order_line.filtered(lambda l: l.vendor_id and l.vendor_md_id and l.vendor_id.id != l.vendor_md_id.id)
+ different_vendor = self.order_line.filtered(
+ lambda l: l.vendor_id and l.vendor_md_id and l.vendor_id.id != l.vendor_md_id.id
+ )
+
if different_vendor:
- vendor_approval = self.env['vendor.approval'].create({
- 'order_id': self.id,
- 'create_date_so': self.create_date,
- 'partner_id': self.partner_id.id,
- 'state': 'draft',
- })
-
- self.vendor_approval_id = vendor_approval.id
-
+ vendor_approvals = []
for line in different_vendor:
- self.env['vendor.approval.line'].create({
- 'vendor_approval_id': vendor_approval.id,
+ vendor_approval = self.env['vendor.approval'].create({
+ 'order_id': self.id,
+ 'order_line_id': line.id,
+ 'create_date_so': self.create_date,
+ 'partner_id': self.partner_id.id,
+ 'state': 'draft',
'product_id': line.product_id.id,
'product_uom_qty': line.product_uom_qty,
'vendor_id': line.vendor_id.id,
@@ -915,9 +922,15 @@ class SaleOrder(models.Model):
'margin_after': line.item_percent_margin,
'purchase_tax_id': line.purchase_tax_id.id,
'sales_tax_id': line.tax_id[0].id if line.tax_id else False,
- 'percent_margin_difference': (line.price_unit - line.purchase_price_md) / line.purchase_price_md if line.purchase_price_md else False,
+ 'percent_margin_difference': (
+ (line.price_unit - line.purchase_price_md) / line.purchase_price_md
+ if line.purchase_price_md else False
+ ),
})
-
+
+ vendor_approvals.append(vendor_approval.id)
+
+ self.vendor_approval_id = [(4, vid) for vid in vendor_approvals]
return True
else:
return False
@@ -1059,6 +1072,8 @@ class SaleOrder(models.Model):
partner.email = self.email
if not partner.customer_type:
partner.customer_type = self.customer_type
+ if not partner.user_id:
+ partner.user_id = self.user_id.id
# if not partner.sppkp or not partner.npwp or not partner.email or partner.customer_type:
# partner.customer_type = self.customer_type