summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-07-12 14:53:05 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-07-12 14:53:05 +0700
commit1cb23337a20a27977da5e9a72e6face949d5642c (patch)
tree9e6ee8421c11d28fdfde936b7fbf6682e0d57282
parentf9874dc8419c35737fb96b8aa8480f0d60e47e1d (diff)
Refactor due extension
-rw-r--r--indoteknik_custom/models/account_move.py3
-rw-r--r--indoteknik_custom/models/account_move_due_extension.py120
-rw-r--r--indoteknik_custom/models/res_partner.py8
-rwxr-xr-xindoteknik_custom/models/sale_order.py34
4 files changed, 77 insertions, 88 deletions
diff --git a/indoteknik_custom/models/account_move.py b/indoteknik_custom/models/account_move.py
index 0f021e6b..99439915 100644
--- a/indoteknik_custom/models/account_move.py
+++ b/indoteknik_custom/models/account_move.py
@@ -71,10 +71,9 @@ class AccountMove(models.Model):
for invoice in self:
invoice_day_to_due = 0
if invoice.payment_state not in ['paid', 'in_payment', 'reversed'] and invoice.invoice_date_due:
+ invoice_day_to_due = invoice.invoice_date_due - date.today()
if invoice.new_due_date:
invoice_day_to_due = invoice.new_due_date - date.today()
- elif not invoice.new_due_date:
- invoice_day_to_due = invoice.invoice_date_due - date.today()
invoice_day_to_due = invoice_day_to_due.days
invoice.invoice_day_to_due = invoice_day_to_due
diff --git a/indoteknik_custom/models/account_move_due_extension.py b/indoteknik_custom/models/account_move_due_extension.py
index d767917b..27c8577d 100644
--- a/indoteknik_custom/models/account_move_due_extension.py
+++ b/indoteknik_custom/models/account_move_due_extension.py
@@ -62,78 +62,66 @@ class DueExtension(models.Model):
raise UserError('Hanya Finance yang bisa cancel')
def approve_new_due(self):
- if self.env.user.is_accounting:
- if not self.approval_status == 'approved':
- self.is_approve = True
- self.approval_status = 'approved'
-
- self.partner_id.counter+=1
+ if not self.env.user.is_accounting:
+ raise UserError('Hanya Finance Yang Bisa Approve')
+
+ if self.approval_status == 'approved':
+ raise UserError('Document ini sudah di approve')
+
+ self.is_approve = True
+ self.approval_status = 'approved'
- if self.partner_id:
- if self.day_extension:
- day_extension = int(self.day_extension)
- new_due = date.today() + timedelta(days=day_extension)
-
- for line in self.due_line:
- line.invoice_id.new_due_date = new_due
+ self.partner_id.counter+=1
- if self.day_extension == '3':
- line.invoice_id.due_extension = 3
- elif self.day_extension == '7':
- line.invoice_id.due_extension = 7
- elif self.day_extension == '14':
- line.invoice_id.due_extension = 14
-
- if self.order_id._notification_margin_leader():
- self.order_id.approval_status = 'pengajuan2'
- return self.order_id._notification_has_margin_leader()
+ day_extension = int(self.day_extension)
+ if self.partner_id:
+ new_due = date.today() + timedelta(days=day_extension)
+
+ for line in self.due_line:
+ line.invoice_id.new_due_date = new_due
+ line.invoice_id.due_extension = day_extension
+
+ if self.order_id._notification_margin_leader():
+ self.order_id.approval_status = 'pengajuan2'
+ return self.order_id._notification_has_margin_leader()
- if self.order_id._notification_margin_manager():
- self.order_id.approval_status = 'pengajuan1'
- return self.order_id._notification_has_margin_manager()
-
- sales = self.env['sale.order'].search([
- ('id', '=', self.order_id.id)
- ])
-
- # sales.state = 'sale'
- sales.action_confirm()
- self.order_id.due_id = self.id
- else:
- raise UserError('Document ini sudah di approve')
- else:
- raise UserError('Hanya Finance Yang Bisa Approve')
+ if self.order_id._notification_margin_manager():
+ self.order_id.approval_status = 'pengajuan1'
+ return self.order_id._notification_has_margin_manager()
+
+ sales = self.env['sale.order'].browse(self.order_id.id)
+
+ sales.action_confirm()
+ self.order_id.due_id = self.id
def generate_due_line(self):
- partners = []
- partners += self.partner_id.child_ids
- partners.append(self.partner_id)
-
+ partners = self.partner_id.get_child_ids()
- for partner in partners:
- query = [
- ('partner_id', '=', partner.id),
- ('state', '=', 'posted'),
- ('move_type', '=', 'out_invoice'),
- ('amount_residual_signed', '>', 0)
- ]
- invoices = self.env['account.move'].search(query, order='invoice_date')
- count = 0
-
- for invoice in invoices:
- if invoice.invoice_day_to_due < 0:
- self.env['due.extension.line'].create([{
- 'due_id': self.id,
- 'partner_id': invoice.partner_id.id,
- 'invoice_id': invoice.id,
- 'date_invoice': invoice.invoice_date,
- 'efaktur_id': invoice.efaktur_id.id,
- 'reference': invoice.ref,
- 'total_amt': invoice.amount_total,
- 'open_amt': invoice.amount_residual_signed
- }])
- count += 1
- _logger.info("Due Extension Line generated %s" % count)
+ query = [
+ ('partner_id', 'in', partners),
+ ('state', '=', 'posted'),
+ ('move_type', '=', 'out_invoice'),
+ ('amount_residual_signed', '>', 0)
+ ]
+ invoices = self.env['account.move'].search(query, order='invoice_date')
+ count = 0
+
+ for invoice in invoices:
+ day_to_due = invoice.invoice_day_to_due + invoice.due_extension
+ if day_to_due < 0:
+ self.env['due.extension.line'].create([{
+ 'due_id': self.id,
+ 'partner_id': invoice.partner_id.id,
+ 'invoice_id': invoice.id,
+ 'date_invoice': invoice.invoice_date,
+ 'efaktur_id': invoice.efaktur_id.id,
+ 'reference': invoice.ref,
+ 'total_amt': invoice.amount_total,
+ 'open_amt': invoice.amount_residual_signed
+ }])
+ count += 1
+ _logger.info("Due Extension Line generated %s" % count)
+
def unlink(self):
res = super(DueExtension, self).unlink()
if not self._name == 'due.extension':
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index 5dec8da8..1695639d 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -20,6 +20,14 @@ class ResPartner(models.Model):
sppkp = fields.Char(string="SPPKP")
counter = fields.Integer(string="Counter", default=0)
+ def get_child_ids(self):
+ partner = self.env['res.partner'].search([('id', '=', self.id)], limit=1)
+ partner_child_ids = [x['id'] for x in partner.child_ids] + [partner.id]
+ if partner.parent_id:
+ partner_child_ids += [x['id'] for x in partner.parent_id.child_ids]
+ partner_child_ids += [partner.parent_id.id]
+ return partner_child_ids
+
def unlink(self):
if self._name == 'res.partner':
raise UserError('Maaf anda tidak bisa delete contact')
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 7c60d20c..01d72ee2 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -398,27 +398,21 @@ class SaleOrder(models.Model):
]
invoices = self.env['account.move'].search(query, order='invoice_date')
- for invoice in invoices:
- invoice_due_extension = invoice.due_extension
- new_due = invoice.invoice_date_due + timedelta(days=invoice_due_extension)
-
- current_time = date.today()
if invoices:
- if current_time > new_due:
- if not self.env.user.is_leader and not self.env.user.is_sales_manager:
- 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
-
+ if not self.env.user.is_leader and not self.env.user.is_sales_manager:
+ 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