diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2026-02-27 14:52:52 +0000 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2026-02-27 14:52:52 +0000 |
| commit | 7cd31c8dab49c59f8c6e67528d528514cc13932c (patch) | |
| tree | f2aae2abeaf8f98d7d3213c12f92fb734635fb1a | |
| parent | deba773edb01799a13a047dcae080272145badc7 (diff) | |
| parent | 5af63f0a3c3a39cc52252c6a1235ef6dc3203c2a (diff) | |
Merged in approve_by_value (pull request #492)
Approve by value
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 4 | ||||
| -rw-r--r-- | indoteknik_api/models/sale_order.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 48 | ||||
| -rwxr-xr-x | indoteknik_custom/views/sale_order.xml | 2 |
4 files changed, 44 insertions, 12 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index cff1921d..f4a2a9d4 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -154,13 +154,13 @@ class SaleOrder(controller.Controller): elif status == 'belum_bayar': domain += [ ('state', '=', 'draft'), - ('approval_status', 'in', ['pengajuan1', 'pengajuan2']), + ('approval_status', 'in', ['pengajuan0','pengajuan1', 'pengajuan2']), ('payment_status', 'in', [False, None, '', 'pending', 'expire']) ] elif status == 'diproses': domain += [ ('state', '=', 'draft'), - ('approval_status', 'in', ['pengajuan1', 'pengajuan2']), + ('approval_status', 'in', ['pengajuan0','pengajuan1', 'pengajuan2']), ('payment_status', '!=', False), ('payment_status', 'not in', ['', 'pending', 'expire']), ] diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 23be358a..7951de45 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -66,7 +66,7 @@ class SaleOrder(models.Model): elif sale_order.state == 'draft': if not sale_order.approval_status: data['status'] = 'draft' - elif sale_order.approval_status in ('pengajuan1', 'pengajuan2'): + elif sale_order.approval_status in ('pengajuan0', 'pengajuan1', 'pengajuan2'): if sale_order.payment_status in ('', 'pending', False, None, 'expire'): data['status'] = 'belum_bayar' elif sale_order.payment_status not in ['', 'pending', False, None, 'expire']: diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index d42aefcc..0cb6670e 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'), @@ -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( @@ -2667,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() @@ -2788,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 @@ -3407,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.") diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index c3df92ec..2d4488ab 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -385,7 +385,7 @@ { 'readonly': [ '|', - ('approval_status', 'in', ['pengajuan1', 'pengajuan2', 'approved']), + ('approval_status', 'in', ['pengajuan0','pengajuan1', 'pengajuan2', 'approved']), ('state', 'not in', ['cancel', 'draft']) ] } |
