From 9dc31bc66d3d5fd3464e6b731cabe15c3c52b558 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 17 Sep 2025 09:23:12 +0700 Subject: (andri) add validasi sales manager --- indoteknik_custom/models/letter_receivable.py | 41 +++++++++++++++++++++------ indoteknik_custom/views/letter_receivable.xml | 4 +-- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/indoteknik_custom/models/letter_receivable.py b/indoteknik_custom/models/letter_receivable.py index 1deeda11..84a3fc35 100644 --- a/indoteknik_custom/models/letter_receivable.py +++ b/indoteknik_custom/models/letter_receivable.py @@ -136,18 +136,41 @@ class SuratPiutang(models.Model): wib = pytz.timezone('Asia/Jakarta') now_wib = datetime.now(wib) - pimpinan_user_ids = [7] # Pak Akbar - # if self.env.user.id not in pimpinan_user_ids: - # raise UserError("Hanya Pimpinan yang berhak menyetujui tahap ini.") + sales_manager_ids = [10] # ganti dengan ID user Sales Manager + pimpinan_user_ids = [7] # ganti dengan ID user Pimpinan + for rec in self: - if rec.state == "waiting_approval": - if rec.perihal in ("sp1", "sp2", "sp3"): + # === SP1 s/d SP3 butuh dua tahap approval === + if rec.perihal in ("sp1", "sp2", "sp3"): + + # Tahap 1: Sales Manager approval + if rec.state == "waiting_approval_sales": + if self.env.user.id not in sales_manager_ids: + raise UserError("Hanya Sales Manager yang boleh menyetujui tahap ini.") + rec.state = "waiting_approval_pimpinan" + rec.message_post(body="Disetujui oleh Sales Manager. Menunggu Approval Pimpinan.") + continue + + # Tahap 2: Pimpinan approval + if rec.state == "waiting_approval_pimpinan": if self.env.user.id not in pimpinan_user_ids: - raise UserError("Hanya Pimpinan yang berhak menyetujui surat peringatan piutang (SP1, SP2, SP3).") + raise UserError("Hanya Pimpinan yang berhak menyetujui surat ini.") + rec.state = "sent" + now_utc = now_wib.astimezone(pytz.UTC).replace(tzinfo=None) + rec.send_date = now_utc + rec.action_send_letter() + rec.message_post(body="Surat Piutang disetujui oleh Pimpinan dan berhasil dikirim.") + continue + + # === Surat penagihan biasa (langsung Pimpinan approve) === + if rec.perihal == "penagihan": + # if self.env.user.id not in pimpinan_user_ids: + # raise UserError("Hanya Pimpinan yang boleh menyetujui surat penagihan.") rec.state = "sent" 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.") self.env.user.notify_info( message=f"Surat piutang {rec.name} berhasil dikirim ke {rec.partner_id.name} ({rec.tujuan_email})", @@ -358,8 +381,10 @@ class SuratPiutang(models.Model): bulan_romawi = ["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"][today.month-1] tahun = today.strftime("%y") vals["name"] = f"{seq}/LO/FAT/IDG/{bulan_romawi}/{tahun}" - - vals["state"] = "waiting_approval" + if vals.get("perihal") == "penagihan": + vals["state"] = "waiting_approval_pimpinan" + else: + vals["state"] = "waiting_approval_sales" return super().create(vals) class SuratPiutangLine(models.Model): diff --git a/indoteknik_custom/views/letter_receivable.xml b/indoteknik_custom/views/letter_receivable.xml index 81fc1e5f..02b5cbb8 100644 --- a/indoteknik_custom/views/letter_receivable.xml +++ b/indoteknik_custom/views/letter_receivable.xml @@ -26,7 +26,7 @@
-
-
+
Surat piutang akan diterbitkan berdasarkan lama keterlambatan pembayaran.
Pilih invoice yang sesuai dengan kriteria berikut:
    -- cgit v1.2.3