diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-08-08 14:37:10 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-08-08 14:37:10 +0700 |
| commit | 678f0a55a4e340ed8fb448a528cb738e10ed84bd (patch) | |
| tree | c589842e86bfd4b7a31688fc4905db3ca881e6f8 | |
| parent | cad72ba8d36cff00190143a655c18765e93851fe (diff) | |
(andri) fix
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index a2817ea6..5e3f8965 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2161,7 +2161,10 @@ class SaleOrder(models.Model): # 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') if not order._is_request_to_own_team_leader(): - raise UserError("Anda hanya dapat mengonfirmasi SO dari anggota tim Anda sendiri.") + return self._create_notification_action( + 'Peringatan', + 'Hanya bisa konfirmasi SO tim Anda.' + ) if order._requires_approval_margin_leader(): order.approval_status = 'pengajuan2' return self._create_approval_notification('Pimpinan') @@ -2171,6 +2174,12 @@ class SaleOrder(models.Model): self.check_limit_so_to_invoice() order.approval_status = 'pengajuan1' return self._create_approval_notification('Sales Manager') + elif order._requires_approval_team_sales(): + self.check_product_bom() + self.check_credit_limit() + self.check_limit_so_to_invoice() + order.approval_status = 'pengajuan1' + return self._create_approval_notification('Team Sales') raise UserError("Bisa langsung Confirm") @@ -2387,12 +2396,20 @@ class SaleOrder(models.Model): return self._create_notification_action('Notification', 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') + if not order._is_request_to_own_team_leader(): + return self._create_notification_action( + 'Warning', + 'Hanya bisa konfirmasi SO tim Anda.' + ) if 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' + return self._create_approval_notification('Team Sales') order.approval_status = 'approved' order._set_sppkp_npwp_contact() @@ -2492,34 +2509,34 @@ class SaleOrder(models.Model): def _requires_approval_margin_leader(self): return self.total_percent_margin <= 15 and not self.env.user.is_leader - # def _requires_approval_margin_manager(self): - # return 15 < self.total_percent_margin <= 24 and not self.env.user.is_sales_manager and not self.env.user.id == 375 and not self.env.user.is_leader - # return self.total_percent_margin >= 15 and not self.env.user.is_leader and not self.env.user.is_sales_manager - def _requires_approval_margin_manager(self): - margin = self.total_percent_margin - user = self.env.user - user_id = user.id + return 15 < self.total_percent_margin < 18 and not self.env.user.is_sales_manager and not self.env.user.id == 375 and not self.env.user.is_leader + + def _requires_approval_team_sales(self): + return ( + 18 <= self.total_percent_margin <= 24 + 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 + ) - if margin <= 15 or margin > 24: # Di luar range margin manager approval - return False - if (user.is_leader or (margin >= 17 and user.is_sales_manager) or (margin >= 18 and user_id in [11, 9, 375])): - return False - - return True # Butuh approval manager def _is_request_to_own_team_leader(self): + user = self.env.user + + # Pengecualian Pak Akbar & Darren + if user.is_leader or user.is_sales_manager: + return True + if not self.team_id or not self.team_id.user_id: return True salesperson_id = self.user_id.id - approver_id = self.env.user.id + approver_id = user.id team_leader_id = self.team_id.user_id.id - if salesperson_id != approver_id and approver_id != team_leader_id: - return False + return salesperson_id == approver_id or approver_id == team_leader_id - return True def _create_approval_notification(self, approval_role): title = 'Warning' |
