diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-06-23 14:12:49 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-06-23 14:12:49 +0700 |
| commit | fb8abc000707a2b8ba1fb0d16c1d8cbbd640ea34 (patch) | |
| tree | b78521ab23e1e44575618e5b60e407642a785b36 /indoteknik_custom/models/sale_order.py | |
| parent | e595c9ce8de2eb8c778b998cef58b2d85c29a6a7 (diff) | |
Fiture Over Due Limit
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 120 |
1 files changed, 95 insertions, 25 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index e99876c2..d531c869 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -78,6 +78,7 @@ class SaleOrder(models.Model): delivery_service_type = fields.Char(string='Delivery Service Type', help='data dari rajaongkir') grand_total = fields.Monetary(string='Grand Total', help='Amount total + amount delivery', compute='_compute_grand_total') 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') + due_id = fields.Many2one('due.extension', string="Due Extension", readonly=True) def generate_payment_link_midtrans_sales_order(self): # midtrans_url = 'https://app.sandbox.midtrans.com/snap/v1/transactions' # dev - sandbox @@ -282,18 +283,10 @@ class SaleOrder(models.Model): def sale_order_approve(self): # raise UserError("Bisa langsung Confirm") self.check_due() - invoices = self.env['account.move'].search([ - ('partner_id', '=', self.partner_id.id), - ('invoice_day_to_due', '<', 0) - ]) - due_extension_obj = self.env['due.extension'] + parent_id = self.partner_id.parent_id.id + parent_id = parent_id if parent_id else self.partner_id.id + for order in self: - for invoice in invoices: - if invoice.invoice_day_to_due < 0: - value = { - 'invoice_id': invoice.id - } - due_extension_obj.create(value) if order.warehouse_id.id != 8: #GD Bandengan raise UserError('Gudang harus Bandengan') if order.state == 'cancel' or order.state == 'done' or order.state == 'sale': @@ -329,14 +322,16 @@ class SaleOrder(models.Model): raise UserError(_('Tidak bisa Confirm menggunakan Produk Sementara')) if not line.vendor_id or not line.purchase_price: raise UserError(_('Isi Vendor dan Harga Beli sebelum Request Approval')) - if order.total_percent_margin <= 15 and not self.env.user.is_leader: + + if order.validate_partner_invoice_due(): + return self._notification_has_unapprove_due() + + if order._notification_margin_leader(): order.approval_status = 'pengajuan2' - elif order.total_percent_margin <= 22 and not self.env.user.is_leader and not self.env.user.is_sales_manager: + return self._notification_has_margin_leader() + elif order._notification_margin_manager(): order.approval_status = 'pengajuan1' - elif order._have_outstanding_invoices() and not self.env.user.is_leader and not self.env.user.is_sales_manager: - order.approval_status = 'pengajuan1' - elif invoice.invoice_day_to_due < 0: - raise UserError("Anda Harus Memperbarui Due Date di Due Extension") + return self._notification_has_margin_manager() else: raise UserError("Bisa langsung Confirm") @@ -354,9 +349,81 @@ class SaleOrder(models.Model): self.approval_status = False return super(SaleOrder, self).action_cancel() + + def validate_partner_invoice_due(self): + parent_id = self.partner_id.parent_id.id + parent_id = parent_id if parent_id else self.partner_id.id + if self.due_id and self.due_id.is_approve == False: + raise UserError('Document Over Due Yang Anda Buat Belum Di Approve') + + if not self.env.user.is_leader and not self.env.user.is_sales_manager: + query = [ + ('partner_id', '=', parent_id), + ('state', '=', 'posted'), + ('move_type', '=', 'out_invoice'), + ('amount_residual_signed', '>', 0) + ] + invoices = self.env['account.move'].search(query, order='invoice_date') + due_extension = self.env['due.extension'].create([{ + 'partner_id': parent_id, + 'day_extension': '3', + 'order_id': self.id, + }]) + due_extension.generate_due_line() + self.due_id = due_extension.id + if len(self.due_id.due_line) > 0: + return True + else: + due_extension.unlink() + return False + + def _notification_margin_leader(self): + if self.total_percent_margin <= 15 and not self.env.user.is_leader: + return True + else: + return False + + def _notification_margin_manager(self): + if self.total_percent_margin <= 22 and not self.env.user.is_leader and not self.env.user.is_sales_manager: + return True + else: + return False + + def _notification_has_unapprove_due(self): + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'Ada Invoice Yang Sudah Over Due, Silahkan Memperbarui Over Due di Due Extension', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } + + def _notification_has_margin_leader(self): + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'SO Harus Di Approve Oleh Pimpinan', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } + + def _notification_has_margin_manager(self): + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'SO Harus Di Approve Oleh Sales Manager', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } + def action_confirm(self): - res = super(SaleOrder, self).action_confirm() for order in self: if order.warehouse_id.id != 8: #GD Bandengan raise UserError('Gudang harus Bandengan') @@ -375,16 +442,19 @@ class SaleOrder(models.Model): raise UserError(_('Tidak bisa Confirm menggunakan Produk Sementara')) if not line.vendor_id or not line.purchase_price or not line.purchase_tax_id: raise UserError(_('Isi Vendor, Harga Beli, dan Tax sebelum Request Approval')) - if order.total_percent_margin <= 15 and not self.env.user.is_leader: - raise UserError("Harus diapprove oleh Pimpinan") - elif order.total_percent_margin <= 22 and not self.env.user.is_leader and not self.env.user.is_sales_manager: - raise UserError("Harus diapprove oleh Manager") - elif order._have_outstanding_invoices() and not self.env.user.is_leader and not self.env.user.is_sales_manager: - raise UserError("Ada invoice due date, harus diapprove oleh Manager") + + if order.validate_partner_invoice_due(): + return self._notification_has_unapprove_due() + + if order._notification_margin_leader(): + return self._notification_has_margin_leader() + elif order._notification_margin_manager(): + return self._notification_has_margin_manager() else: order.approval_status = 'approved' - order.calculate_line_no() + order.calculate_line_no() + res = super(SaleOrder, self).action_confirm() return res def _have_outstanding_invoices(self): |
