summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py64
1 files changed, 53 insertions, 11 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 3382d95b..92efa3bd 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -156,6 +156,7 @@ class SaleOrder(models.Model):
total_margin_excl_third_party = fields.Float('Before Margin', help="Before Margin in Sales Order Header")
approval_status = fields.Selection([
+ ('pengajuan0', 'Approval Team Sales'),
('pengajuan1', 'Approval Manager'),
('pengajuan2', 'Approval Pimpinan'),
('approved', 'Approved'),
@@ -647,7 +648,7 @@ class SaleOrder(models.Model):
def _get_biteship_courier_codes(self):
return [
- 'gojek','grab','deliveree','lalamove','jne','ninja','lion','rara','sicepat','jnt','pos','idexpress','rpx','wahana','jdl','anteraja','sap','paxel','borzo'
+ 'gojek','grab','deliveree','lalamove','jne','ninja','lion','rara','sicepat','jnt','idexpress','rpx','wahana','jdl','anteraja','sap','paxel','borzo'
]
@api.onchange('carrier_id')
@@ -2384,8 +2385,15 @@ class SaleOrder(models.Model):
# if order.validate_partner_invoice_due():
# return self._create_notification_action('Notification',
# 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension')
-
- if order._requires_approval_margin_leader():
+ value_trigger = order._requires_approval_by_value()
+ if value_trigger:
+ self.check_product_bom()
+ self.check_credit_limit()
+ self.check_limit_so_to_invoice()
+ order.approval_status = 'pengajuan0'
+ order.message_post(body="Mengajukan approval ke Team Sales_")
+ return self._create_approval_notification('Team Sales')
+ elif order._requires_approval_margin_leader():
order.approval_status = 'pengajuan2'
order.message_post(body="Mengajukan approval ke Pimpinan")
return self._create_approval_notification('Pimpinan')
@@ -2400,9 +2408,16 @@ class SaleOrder(models.Model):
self.check_product_bom()
self.check_credit_limit()
self.check_limit_so_to_invoice()
- order.approval_status = 'pengajuan1'
+ order.approval_status = 'pengajuan0'
order.message_post(body="Mengajukan approval ke Team Sales")
return self._create_approval_notification('Team Sales')
+ # elif value_trigger:
+ # self.check_product_bom()
+ # self.check_credit_limit()
+ # self.check_limit_so_to_invoice()
+ # order.approval_status = 'pengajuan0'
+ # order.message_post(body="Mengajukan approval ke Team Sales_")
+ # return self._create_approval_notification('Team Sales')
if not order.with_context(ask_approval=True)._is_request_to_own_team_leader():
return self._create_notification_action(
@@ -2601,12 +2616,22 @@ class SaleOrder(models.Model):
def check_archived_product(self):
for order in self:
for line in order.order_line:
- if line.product_id.active == False:
- raise UserError("Terdapat Product yang sudah di Archive pada Product: {}".format(line.product_id.display_name))
+ # Skip section & note
+ if line.display_type:
+ continue
+
+ if line.product_id and not line.product_id.active:
+ raise UserError(
+ "Terdapat Product yang sudah di Archive pada Product: {}".format(
+ line.product_id.display_name
+ )
+ )
def check_archived_uom(self):
for order in self:
for line in order.order_line:
+ if line.display_type:
+ continue
if line.product_uom.active == False:
raise UserError("Terdapat UoM yang sudah di Archive pada UoM {} di Product {}".format(line.product_uom.name, line.product_id.display_name))
@@ -2657,16 +2682,25 @@ class SaleOrder(models.Model):
'Warning',
'Hanya bisa konfirmasi SO tim Anda.'
)
- if order._requires_approval_margin_leader():
+ value_trigger = order._requires_approval_by_value()
+ if value_trigger:
+ order.approval_status = 'pengajuan0'
+ order.message_post(body="Mengajukan approval ke Team Sales")
+ return self._create_approval_notification('Team Sales')
+ elif order._requires_approval_margin_leader():
order.approval_status = 'pengajuan2'
return self._create_approval_notification('Pimpinan')
elif order._requires_approval_margin_manager():
order.approval_status = 'pengajuan1'
return self._create_approval_notification('Sales Manager')
- elif order._requires_approval_team_sales():
- order.approval_status = 'pengajuan1'
+ elif value_trigger or order._requires_approval_team_sales():
+ order.approval_status = 'pengajuan0'
order.message_post(body="Mengajukan approval ke Team Sales")
return self._create_approval_notification('Team Sales')
+ # elif value_trigger:
+ # order.approval_status = 'pengajuan0'
+ # order.message_post(body="Mengajukan approval ke Team Sales (Total SO > 50jt)")
+ # return self._create_approval_notification('Team Sales')
order.approval_status = 'approved'
order._set_sppkp_npwp_contact()
@@ -2778,7 +2812,15 @@ class SaleOrder(models.Model):
and not self.env.user.is_leader
)
-
+ def _requires_approval_by_value(self):
+ # LIMIT_VALUE = 50000000
+ LIMIT_VALUE = float(self.env['ir.config_parameter'].sudo().get_param('so.limit_value_approve', default='50000000'))
+ return (
+ self.amount_total >= LIMIT_VALUE
+ and self.env.user.id not in [11, 9, 375] # Eko, Ade, Putra
+ and not self.env.user.is_sales_manager
+ and not self.env.user.is_leader
+ )
def _is_request_to_own_team_leader(self):
user = self.env.user
@@ -3397,7 +3439,7 @@ class SaleOrder(models.Model):
#payment term vals
if 'payment_term_id' in vals and any(
- order.approval_status in ['pengajuan1', 'pengajuan2', 'approved'] for order in self):
+ order.approval_status in ['pengajuan0','pengajuan1', 'pengajuan2', 'approved'] for order in self):
raise UserError(
"Payment Term tidak dapat diubah karena Sales Order sedang dalam proses approval atau sudah diapprove.")