diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-08-08 16:03:46 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-08-08 16:03:46 +0700 |
| commit | abbf20da12e9f9cdcb24b9018eecc6d52812f92e (patch) | |
| tree | 2c93859d959a741152882b59b5bbaa0c2ecb4d27 | |
| parent | da1903796553ca0ee5195a7962521bc09b4b98a8 (diff) | |
(andri) add email salesperson inv di CC
| -rw-r--r-- | indoteknik_custom/models/account_move.py | 66 | ||||
| -rw-r--r-- | indoteknik_custom/views/mail_template_invoice_reminder.xml | 2 |
2 files changed, 46 insertions, 22 deletions
diff --git a/indoteknik_custom/models/account_move.py b/indoteknik_custom/models/account_move.py index 12978a2f..fd08ed60 100644 --- a/indoteknik_custom/models/account_move.py +++ b/indoteknik_custom/models/account_move.py @@ -144,17 +144,24 @@ class AccountMove(models.Model): today + timedelta(days=7), ] - partner = self.env['res.partner'].search([('name', 'ilike', 'DIRGANTARA YUDHA ARTHA')], limit=1) - if not partner: - _logger.info("Partner tidak ditemukan.") - return + # --- TESTING --- + # partner = self.env['res.partner'].search([('name', 'ilike', 'DIRGANTARA YUDHA ARTHA')], limit=1) + # if not partner: + # _logger.info("Partner tidak ditemukan.") + # return + # invoices = self.env['account.move'].search([ + # ('move_type', '=', 'out_invoice'), + # ('state', '=', 'posted'), + # ('payment_state', 'not in', ['paid', 'in_payment', 'reversed']), + # ('invoice_date_due', 'in', target_dates), + # ('partner_id', '=', partner.id), + # ]) invoices = self.env['account.move'].search([ ('move_type', '=', 'out_invoice'), ('state', '=', 'posted'), ('payment_state', 'not in', ['paid', 'in_payment', 'reversed']), ('invoice_date_due', 'in', target_dates), - ('partner_id', '=', partner.id), ]) _logger.info(f"Invoices tahap 1: {invoices}") @@ -164,10 +171,9 @@ class AccountMove(models.Model): _logger.info(f"Invoices tahap 2: {invoices}") if not invoices: - _logger.info(f"Tidak ada invoice yang due untuk partner: {partner.name}") + _logger.info("Tidak ada invoice yang due") return - # Kelompokkan invoice berdasarkan partner & days_to_due invoice_group = {} for inv in invoices: dtd = (inv.invoice_date_due - today).days if inv.invoice_date_due else 0 @@ -176,13 +182,12 @@ class AccountMove(models.Model): template = self.env.ref('indoteknik_custom.mail_template_invoice_due_reminder') for (partner, dtd), invs in invoice_group.items(): - # Cari semua kontak anak yang reminder_invoices = True dan punya email + # Ambil child contact yang di-checklist reminder_invoices reminder_contacts = self.env['res.partner'].search([ ('parent_id', '=', partner.id), ('reminder_invoices', '=', True), ('email', '!=', False), ]) - _logger.info(f"Email Reminder Child {reminder_contacts}") if not reminder_contacts: @@ -197,7 +202,6 @@ class AccountMove(models.Model): email_to = ",".join(emails) _logger.info(f"Email tujuan: {email_to}") - # Generate tabel invoice invoice_table_rows = "" for inv in invs: days_to_due = (inv.invoice_date_due - today).days if inv.invoice_date_due else 0 @@ -213,12 +217,14 @@ class AccountMove(models.Model): <td>{days_to_due}</td> </tr> """ - dadada = self.partner_id.name - # Tentukan pesan berdasarkan sisa hari + days_to_due_message = "" closing_message = "" if dtd < 0: - days_to_due_message = f"Kami ingin mengingatkan bahwa tagihan anda akan jatuh tempo dalam {abs(dtd)} hari ke depan, dengan rincian sebagai berikut:" + days_to_due_message = ( + f"Kami ingin mengingatkan bahwa tagihan anda akan jatuh tempo dalam {abs(dtd)} hari ke depan, " + "dengan rincian sebagai berikut:" + ) closing_message = ( "Kami mengharapkan pembayaran dapat dilakukan tepat waktu untuk mendukung kelancaran " "hubungan kerja sama yang baik antara kedua belah pihak.<br/>" @@ -227,7 +233,10 @@ class AccountMove(models.Model): ) if dtd == 0: - days_to_due_message = "Kami ingin mengingatkan bahwa tagihan anda telah memasuki tanggal jatuh tempo pada hari ini, dengan rincian sebagai berikut:" + days_to_due_message = ( + "Kami ingin mengingatkan bahwa tagihan anda telah memasuki tanggal jatuh tempo pada hari ini, " + "dengan rincian sebagai berikut:" + ) closing_message = ( "Mohon kesediaannya untuk segera melakukan pembayaran tepat waktu guna menghindari status " "keterlambatan dan menjaga kelancaran hubungan kerja sama yang telah terjalin dengan baik.<br/>" @@ -236,7 +245,10 @@ class AccountMove(models.Model): ) if dtd > 0: - days_to_due_message = f"Kami ingin mengingatkan bahwa tagihan anda telah jatuh tempo selama {dtd} hari, dengan rincian sebagai berikut:" + days_to_due_message = ( + f"Kami ingin mengingatkan bahwa tagihan anda telah jatuh tempo selama {dtd} hari, " + "dengan rincian sebagai berikut:" + ) closing_message = ( "Mohon kesediaan Bapak/Ibu untuk segera melakukan pembayaran guna menghindari keterlambatan " "dan menjaga kelancaran kerja sama yang telah terjalin dengan baik.<br/>" @@ -244,7 +256,6 @@ class AccountMove(models.Model): "Terima kasih atas perhatian dan kerja samanya." ) - subject = f"Reminder Invoice Due - {partner.name}" body_html = re.sub( r"<tbody[^>]*>.*?</tbody>", f"<tbody>{invoice_table_rows}</tbody>", @@ -255,15 +266,28 @@ class AccountMove(models.Model): .replace('${days_to_due_message}', days_to_due_message) \ .replace('${closing_message}', closing_message) + cc_list = [ + 'finance@indoteknik.co.id', + 'akbar@indoteknik.co.id', + 'stephan@indoteknik.co.id', + 'darren@indoteknik.co.id' + ] + sales_email = invs[0].invoice_user_id.partner_id.email if invs[0].invoice_user_id else None + if sales_email and sales_email not in cc_list: + cc_list.append(sales_email) + + # Siapkan email values values = { - 'subject': subject, - 'email_to': 'andrifebriyadiputra@gmail.com', + 'subject': f"Reminder Invoice Due - {partner.name}", + # 'email_to': 'andrifebriyadiputra@gmail.com', + 'email_to': email_to, 'email_from': 'finance@indoteknik.co.id', + 'email_cc': ",".join(cc_list), 'body_html': body_html, 'reply_to': 'finance@indoteknik.co.id', } - _logger.info(f"Mengirim email ke: {email_to}") + _logger.info(f"Mengirim email ke: {values['email_to']} CC: {values['email_cc']}") template.send_mail(invs[0].id, force_send=True, email_values=values) # Post ke chatter @@ -272,13 +296,13 @@ class AccountMove(models.Model): for inv in invs: inv.message_post( - subject=subject, + subject=values['subject'], body=body_html, subtype_id=self.env.ref('mail.mt_note').id, author_id=system_id, ) - _logger.info(f"Reminder terkirim ke {partner.name} ({email_to}) → {len(invs)} invoice (dtd = {dtd})") + _logger.info(f"Reminder terkirim ke {partner.name} ({values['email_to']}) → {len(invs)} invoice (dtd = {dtd})") @api.onchange('invoice_date') diff --git a/indoteknik_custom/views/mail_template_invoice_reminder.xml b/indoteknik_custom/views/mail_template_invoice_reminder.xml index 07f2122b..8450be28 100644 --- a/indoteknik_custom/views/mail_template_invoice_reminder.xml +++ b/indoteknik_custom/views/mail_template_invoice_reminder.xml @@ -6,7 +6,7 @@ <field name="model_id" ref="account.model_account_move"/> <field name="subject">Reminder Invoice Due - ${object.name}</field> <field name="email_from">finance@indoteknik.co.id</field> - <field name="email_to">andrifebriyadiputra@gmail.com</field> + <field name="email_to"></field> <field name="body_html" type="html"> <div> <p><b>Dear ${object.name},</b></p> |
