From abbf20da12e9f9cdcb24b9018eecc6d52812f92e Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 8 Aug 2025 16:03:46 +0700 Subject: (andri) add email salesperson inv di CC --- indoteknik_custom/models/account_move.py | 66 +++++++++++++++------- .../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): {days_to_due} """ - 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.
" @@ -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.
" @@ -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.
" @@ -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"]*>.*?", f"{invoice_table_rows}", @@ -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 @@ Reminder Invoice Due - ${object.name} finance@indoteknik.co.id - andrifebriyadiputra@gmail.com +

Dear ${object.name},

-- cgit v1.2.3