From d78561e4f4ba8e3a7de58e05fcf8f466c19ec59d Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 30 Jul 2025 13:46:54 +0700 Subject: receipt date schema --- indoteknik_custom/models/sale_order.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 7be0e8ff..4e36a9fb 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -350,7 +350,7 @@ class SaleOrder(models.Model): date_unhold = fields.Datetime(string='Date Unhold', tracking=True, readonly=True, help='Waktu ketika SO di Unhold' ) - et_products = fields.Datetime(string='ET Products', compute='_compute_et_products', help="Leadtime produk berdasarkan SLA vendor, tanpa logistik.") + et_products = fields.Datetime(string='ET Products', help="Leadtime produk berdasarkan SLA vendor, tanpa logistik.", tracking=True) eta_date_reserved = fields.Datetime( string="Date Reserved", @@ -381,6 +381,11 @@ class SaleOrder(models.Model): if self.id: self.ccm_id = self.env['tukar.guling'].search([('origin', 'ilike', self.name)], limit=1) + reason_change_date_planned = fields.Selection([ + ('delay', 'Delay By Vendor'), + ('urgent', 'Urgent Delivery'), + ], string='Reason Change Date Planned', tracking=True) + @api.depends('order_line.product_id', 'date_order') def _compute_et_products(self): jakarta = pytz.timezone("Asia/Jakarta") -- cgit v1.2.3 From a05a1dc3f4c936c0162f66a24f69ca8b236acfea Mon Sep 17 00:00:00 2001 From: Miqdad Date: Thu, 31 Jul 2025 08:17:06 +0700 Subject: add validation when changing payment term when so payment term is not match --- indoteknik_custom/models/sale_order.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 4e36a9fb..47018f52 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -3088,6 +3088,24 @@ class SaleOrder(models.Model): except: pass + #payment term vals + if 'payment_term_id' in vals and any( + order.approval_status in ['pengajuan1', 'pengajuan2', 'approved'] for order in self): + raise UserError( + "Payment Term tidak dapat diubah karena Sales Order sedang dalam proses approval atau sudah diapprove.") + + if 'payment_term_id' in vals: + for order in self: + partner = order.partner_id.parent_id or order.partner_id + customer_payment_term = partner.property_payment_term_id + if vals['payment_term_id'] != customer_payment_term.id: + raise UserError( + f"Payment Term berbeda pada Master Data Customer. " + f"Harap ganti ke '{customer_payment_term.name}' " + f"sesuai dengan payment term yang terdaftar pada customer." + ) + + res = super(SaleOrder, self).write(vals) # Update before margin setelah write -- cgit v1.2.3 From 519c18161bf658853908ddf7216aab504ac4c743 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 5 Aug 2025 10:53:05 +0700 Subject: add tracking on delivery amt --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 47018f52..94cfdc39 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -163,7 +163,7 @@ class SaleOrder(models.Model): carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method', tracking=3) have_visit_service = fields.Boolean(string='Have Visit Service', compute='_have_visit_service', help='To compute is customer get visit service') - delivery_amt = fields.Float(string='Delivery Amt', copy=False) + delivery_amt = fields.Float(string='Delivery Amt', copy=False, tracking=True) shipping_cost_covered = fields.Selection([ ('indoteknik', 'Indoteknik'), ('customer', 'Customer') -- cgit v1.2.3 From 191674fade65d63c54807e30b569fc308688df9a Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Thu, 7 Aug 2025 16:22:02 +0700 Subject: (andri) rev approval --- indoteknik_custom/models/sale_order.py | 35 +++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 94cfdc39..6dc1b4a2 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2159,7 +2159,9 @@ 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 not order._is_request_to_own_team_leader(): + raise UserError("Anda hanya dapat mengonfirmasi SO dari anggota tim Anda sendiri.") if order._requires_approval_margin_leader(): order.approval_status = 'pengajuan2' return self._create_approval_notification('Pimpinan') @@ -2490,10 +2492,37 @@ 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 + # 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 + + 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): + approver_id = self.env.user.id + salesperson_id = self.user_id.id + team_map = { + 11: [10406], # Eko : Firman + 9: [11314, 6609], # Ade : Boy, Mario + 375: [9928, 10], # Putra : Aro, Putri + } + + for lead_id, members in team_map.items(): + if salesperson_id in members: + return approver_id == lead_id + + return True + def _create_approval_notification(self, approval_role): title = 'Warning' message = f'SO butuh approval {approval_role}' -- cgit v1.2.3 From cad72ba8d36cff00190143a655c18765e93851fe Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Thu, 7 Aug 2025 16:34:25 +0700 Subject: (andri) use salesteam --- indoteknik_custom/models/sale_order.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 6dc1b4a2..a2817ea6 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2509,17 +2509,15 @@ class SaleOrder(models.Model): return True # Butuh approval manager def _is_request_to_own_team_leader(self): - approver_id = self.env.user.id + if not self.team_id or not self.team_id.user_id: + return True + salesperson_id = self.user_id.id - team_map = { - 11: [10406], # Eko : Firman - 9: [11314, 6609], # Ade : Boy, Mario - 375: [9928, 10], # Putra : Aro, Putri - } + approver_id = self.env.user.id + team_leader_id = self.team_id.user_id.id - for lead_id, members in team_map.items(): - if salesperson_id in members: - return approver_id == lead_id + if salesperson_id != approver_id and approver_id != team_leader_id: + return False return True -- cgit v1.2.3 From 678f0a55a4e340ed8fb448a528cb738e10ed84bd Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 8 Aug 2025 14:37:10 +0700 Subject: (andri) fix --- indoteknik_custom/models/sale_order.py | 53 ++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 18 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') 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' -- cgit v1.2.3 From 9951cd96e968f0e3b934dd97838f4825e6d27c6b Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 8 Aug 2025 14:44:07 +0700 Subject: (andri) fix --- indoteknik_custom/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 5e3f8965..5eb90d83 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2178,7 +2178,7 @@ 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 = 'approved' return self._create_approval_notification('Team Sales') raise UserError("Bisa langsung Confirm") @@ -2408,7 +2408,7 @@ class SaleOrder(models.Model): order.approval_status = 'pengajuan1' return self._create_approval_notification('Sales Manager') elif order._requires_approval_team_sales(): - order.approval_status = 'pengajuan1' + order.approval_status = 'approved' return self._create_approval_notification('Team Sales') order.approval_status = 'approved' -- cgit v1.2.3 From be4952c12d51106b4cffd6b7de1be09562829331 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 8 Aug 2025 16:55:59 +0700 Subject: (andri) fix approval --- indoteknik_custom/models/sale_order.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 5eb90d83..125a049b 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2528,6 +2528,9 @@ class SaleOrder(models.Model): if user.is_leader or user.is_sales_manager: return True + if user.id in (3401, 20, 3988): # admin (fida, nabila, ninda) + return True + if not self.team_id or not self.team_id.user_id: return True -- cgit v1.2.3 From 4303bc704835a48a3005d409f564030a2d53befc Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 8 Aug 2025 17:19:02 +0700 Subject: (andri) fix --- indoteknik_custom/models/sale_order.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 125a049b..e71e3830 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2160,9 +2160,9 @@ 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(): + if not order.with_context(ask_approval=True)._is_request_to_own_team_leader(): return self._create_notification_action( - 'Peringatan', + 'Peringatan', 'Hanya bisa konfirmasi SO tim Anda.' ) if order._requires_approval_margin_leader(): @@ -2531,7 +2531,7 @@ class SaleOrder(models.Model): if user.id in (3401, 20, 3988): # admin (fida, nabila, ninda) return True - if not self.team_id or not self.team_id.user_id: + if self.env.context.get("ask_approval") and user.id in (3401, 20, 3988): return True salesperson_id = self.user_id.id -- cgit v1.2.3