summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models')
-rw-r--r--indoteknik_custom/models/letter_receivable.py83
1 files changed, 76 insertions, 7 deletions
diff --git a/indoteknik_custom/models/letter_receivable.py b/indoteknik_custom/models/letter_receivable.py
index 84a3fc35..b1c82b12 100644
--- a/indoteknik_custom/models/letter_receivable.py
+++ b/indoteknik_custom/models/letter_receivable.py
@@ -32,11 +32,11 @@ class SuratPiutang(models.Model):
state = fields.Selection([
("draft", "Draft"),
("waiting_approval_sales", "Menunggu Approval Sales Manager"),
- ("waiting_approval_pimpinan", "Menunggu Approval Pimpinan"),
+ ("waiting_approval_pimpinan", "Menunggu Approval Pimpinan / Kirim Surat"),
("sent", "Approved & Sent")
], default="draft", tracking=True)
send_date = fields.Datetime(string="Tanggal Kirim", tracking=True)
- seven_days_after_sent_date = fields.Char(string="7 Hari Setelah Tanggal Kirim", tracking=True)
+ seven_days_after_sent_date = fields.Char(string="7 Hari Setelah Tanggal Kirim")
periode_invoices_terpilih = fields.Char(
string="Periode Invoices Terpilih",
compute="_compute_periode_invoices",
@@ -62,6 +62,12 @@ class SuratPiutang(models.Model):
sales_person_id = fields.Many2one('res.users', string='Salesperson', related='partner_id.user_id', readonly=True)
+ PERIHAL_SEQUENCE = {
+ "penagihan": "sp1",
+ "sp1": "sp2",
+ "sp2": "sp3",
+ }
+
@api.onchange('partner_id')
def _onchange_partner_id_domain(self):
unpaid_partner_ids = self.env['unpaid.invoice.view'].search([]).mapped('partner_id.id')
@@ -74,9 +80,68 @@ class SuratPiutang(models.Model):
for rec in self:
rec.perihal_label = dict(self._fields['perihal'].selection).get(rec.perihal, '')
- # def action_print_surat_piutang(self):
- # self.ensure_one()
- # return self.env.ref('indoteknik_custom.report_surat_piutang_formal').report_action(self)
+ def action_create_next_letter(self):
+ for rec in self:
+ if rec.state != "sent":
+ raise UserError("Surat harus sudah terkirim sebelum bisa membuat surat lanjutan.")
+
+ next_perihal = self.PERIHAL_SEQUENCE.get(rec.perihal)
+ if not next_perihal:
+ raise UserError("Surat ini sudah pada tahap terakhir (SP3). Tidak bisa membuat lanjutan lagi.")
+
+ existing = self.search([
+ ('partner_id', '=', rec.partner_id.id),
+ ('perihal', '=', next_perihal),
+ ('state', '!=', 'draft') # optional: cek hanya yang sudah dikirim
+ ])
+ if existing:
+ raise UserError(f"Surat lanjutan {dict(self._fields['perihal'].selection).get(next_perihal)} "
+ f"untuk customer ini sudah dibuat: {', '.join(existing.mapped('name'))}")
+
+ # copy surat lama
+ new_vals = {
+ "tujuan_nama": rec.tujuan_nama,
+ "tujuan_email": rec.tujuan_email,
+ "perihal": next_perihal,
+ "partner_id": rec.partner_id.id,
+ "line_ids": [(0, 0, {
+ 'invoice_id': line.invoice_id.id,
+ 'invoice_number': line.invoice_number,
+ 'invoice_date': line.invoice_date,
+ 'invoice_date_due': line.invoice_date_due,
+ 'invoice_day_to_due': line.invoice_day_to_due,
+ 'new_invoice_day_to_due': line.new_invoice_day_to_due,
+ 'ref': line.ref,
+ 'amount_residual': line.amount_residual,
+ 'currency_id': line.currency_id.id,
+ 'payment_term_id': line.payment_term_id.id,
+ 'date_kirim_tukar_faktur': line.date_kirim_tukar_faktur,
+ 'date_terima_tukar_faktur': line.date_terima_tukar_faktur,
+ 'invoice_user_id': line.invoice_user_id.id,
+ 'sale_id': line.sale_id.id,
+ "selected": line.selected,
+ }) for line in rec.line_ids],
+ }
+ new_letter = self.create(new_vals)
+ self.env.user.notify_info(
+ message=f"Surat lanjutan {dict(self._fields['perihal'].selection).get(next_perihal)} berhasil dibuat ({new_letter.name}).",
+ title="Informasi",
+ sticky=False
+ )
+ new_letter.message_post(
+ body=
+ f"Surat lanjutan dengan perihal <b>{dict(self._fields['perihal'].selection).get(next_perihal)}</b> "
+ f"berhasil dibuat berdasarkan surat sebelumnya.<br/>"
+ f"Nomor Surat: <b>{new_letter.name}</b>"
+ )
+ rec.message_post(
+ body=(
+ f"Surat lanjutan dengan perihal <b>{dict(self._fields['perihal'].selection).get(next_perihal)}</b> "
+ f"telah dibuat sebagai kelanjutan dari surat ini.<br/>"
+ f"Nomor Surat Baru: <a href='/web#id={new_letter.id}&model=surat.piutang&view_type=form'><b>{new_letter.name}</b></a>"
+ )
+ )
+ return True
@api.depends("line_ids.selected", "line_ids.invoice_date")
@@ -170,7 +235,7 @@ class SuratPiutang(models.Model):
now_utc = now_wib.astimezone(pytz.UTC).replace(tzinfo=None)
rec.send_date = now_utc
rec.action_send_letter()
- rec.message_post(body="Surat Penagihan disetujui Pimpinan dan berhasil dikirim.")
+ rec.message_post(body="Surat Penagihan disetujui dan berhasil dikirim.")
self.env.user.notify_info(
message=f"Surat piutang {rec.name} berhasil dikirim ke {rec.partner_id.name} ({rec.tujuan_email})",
@@ -268,7 +333,11 @@ class SuratPiutang(models.Model):
'reply_to': 'finance@indoteknik.co.id',
}
- template.send_mail(self.id, force_send=True, email_values=values)
+ template.with_context(mail_post_autofollow=False).send_mail(
+ self.id,
+ force_send=True,
+ email_values=values
+ )
_logger.info(
f"Surat Piutang {self.name} terkirim ke {self.tujuan_email} "