summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-08-01 11:26:43 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-08-01 11:26:43 +0700
commit8ecb66beff5da35886d821d373e9a5dd7fe5396b (patch)
treefc7922bd1ef0729d6cda4542bb3b280aed08993e
parentd00a277cf3144100b2ca4b8ee640a23776537349 (diff)
(andri) add attachment in email reminder & Testing
-rw-r--r--indoteknik_custom/models/down_payment.py122
-rw-r--r--indoteknik_custom/views/mail_template_pum.xml50
2 files changed, 145 insertions, 27 deletions
diff --git a/indoteknik_custom/models/down_payment.py b/indoteknik_custom/models/down_payment.py
index 946bd792..67172dfa 100644
--- a/indoteknik_custom/models/down_payment.py
+++ b/indoteknik_custom/models/down_payment.py
@@ -7,13 +7,14 @@ _logger = logging.getLogger(__name__)
from terbilang import Terbilang
import pytz
from pytz import timezone
+import base64
class DownPayment(models.Model):
_name = 'down.payment'
_description = 'Down Payment Management'
_rec_name = 'number'
- _inherit = ['mail.thread']
+ _inherit = ['mail.thread', 'mail.activity.mixin']
user_id = fields.Many2one('res.users', string='Diajukan Oleh', default=lambda self: self.env.user, tracking=3)
partner_id = fields.Many2one('res.partner', string='Partner', related='user_id.partner_id', readonly=True)
@@ -73,7 +74,6 @@ class DownPayment(models.Model):
name_approval_departement = fields.Char(string='Approval Departement', tracking=True)
name_approval_ap = fields.Char(string='Approval AP', tracking=True)
email_ap = fields.Char(string = 'Email AP')
- email_user = fields.Char(string = 'Email User', default=lambda self: self.env.user.email)
name_approval_pimpinan = fields.Char(string='Approval Pimpinan', tracking=True)
date_approved_department = fields.Datetime(string="Date Approved Department")
@@ -109,6 +109,124 @@ class DownPayment(models.Model):
reason_reject = fields.Text(string='Alasan Penolakan')
+ currency_id = fields.Many2one(
+ 'res.currency', string='Currency',
+ default=lambda self: self.env.company.currency_id
+ )
+
+
+ def _get_jasper_attachment(self):
+ self.ensure_one()
+ report = self.env['ir.actions.report'].browse(1134) # ID Downpayment Report
+ if not report:
+ raise UserError("Report Jasper tidak ditemukan.")
+
+ data = report.render_jasper(self.ids, data={})[0]
+ filename = f"{self.number}.pdf"
+ return {
+ 'name': filename,
+ 'datas': base64.b64encode(data),
+ 'type': 'binary',
+ 'mimetype': 'application/pdf',
+ 'filename': filename,
+ }
+
+ def action_send_pum_reminder(self):
+ """
+ Kirim email reminder PUM otomatis.
+ - Hari ini = kirim dengan template 'mail_template_pum_reminder_today'
+ - H-2 dari due date = kirim dengan template 'mail_template_pum_reminder_h_2'
+ """
+ today = date.today()
+ pum_ids = self.search([
+ ('date_back_to_office', '!=', False),
+ ('status', 'not in', ['draft', 'reject']),
+ ])
+
+ template_today = self.env.ref('indoteknik_custom.mail_template_pum_reminder_today', raise_if_not_found=False)
+ template_h2 = self.env.ref('indoteknik_custom.mail_template_pum_reminder_h_2', raise_if_not_found=False)
+
+ if not template_today or not template_h2:
+ _logger.warning("Salah satu template email tidak ditemukan.")
+ return
+
+ for pum in pum_ids:
+ _logger.info(f"[REMINDER] Memproses PUM {pum.number}")
+
+ if not pum.email_ap or not pum.user_id.partner_id.email:
+ _logger.warning(f"[REMINDER] Lewati PUM {pum.number} karena email_ap atau email user kosong.")
+ continue
+
+ due_date = pum.date_back_to_office + timedelta(days=7)
+ days_remaining = (due_date - today).days
+
+ realization = self.env['realization.down.payment'].search([('pum_id', '=', pum.id)], limit=1)
+ if not realization or realization.done_status != 'remaining':
+ _logger.info(f"[REMINDER] Lewati PUM {pum.number}, status realisasi bukan 'remaining'.")
+ continue
+
+ # Tentukan template
+ if pum.date_back_to_office == today:
+ template = template_today
+ elif days_remaining == 2:
+ template = template_h2
+ else:
+ _logger.info(f"[REMINDER] Lewati PUM {pum.number}, hari ini bukan tanggal pengingat.")
+ continue
+
+ # Generate attachment
+ try:
+ attachment_vals = pum._get_jasper_attachment()
+ attachment = self.env['ir.attachment'].create({
+ 'name': attachment_vals['name'],
+ 'type': 'binary',
+ 'datas': attachment_vals['datas'],
+ 'res_model': 'down.payment',
+ 'res_id': pum.id,
+ 'mimetype': 'application/pdf',
+ })
+ except Exception as e:
+ _logger.error(f"[REMINDER] Gagal membuat attachment untuk PUM {pum.number}: {str(e)}")
+ continue
+
+ email_values = {
+ # 'email_to': pum.user_id.partner_id.email,
+ 'email_to': 'andrifebriyadiputra@gmail.com',
+ 'email_from': pum.email_ap,
+ 'attachment_ids': [(6, 0, [attachment.id])],
+ }
+
+ _logger.info(f"[REMINDER] Mengirim email PUM {pum.number} ke {email_values['email_to']} dari {email_values['email_from']}")
+
+ try:
+ body_html = template._render_field('body_html', [pum.id])[pum.id]
+
+ template.send_mail(pum.id, force_send=True, email_values=email_values)
+ _logger.info(f"[REMINDER] Email berhasil dikirim untuk PUM {pum.number}")
+
+ # Post info sederhana
+ pum.message_post(
+ body="Email Reminder Berhasil dikirimkan",
+ message_type="comment",
+ subtype_xmlid="mail.mt_note",
+ )
+
+ user_system = self.env['res.users'].browse(25)
+ system_id = user_system.partner_id.id if user_system else False
+
+ # Post isi email ke chatter
+ pum.message_post(
+ body=body_html,
+ message_type="comment",
+ subtype_xmlid="mail.mt_note",
+ author_id=system_id,
+ )
+ except Exception as e:
+ _logger.error(f"[REMINDER] Gagal mengirim email untuk PUM {pum.number}: {str(e)}")
+
+ return True
+
+
@api.depends('move_id.state')
def _compute_is_cab_visible(self):
for rec in self:
diff --git a/indoteknik_custom/views/mail_template_pum.xml b/indoteknik_custom/views/mail_template_pum.xml
index 85f5de2a..2863741e 100644
--- a/indoteknik_custom/views/mail_template_pum.xml
+++ b/indoteknik_custom/views/mail_template_pum.xml
@@ -8,32 +8,32 @@
<field name="model_id" ref="indoteknik_custom.model_down_payment"/>
<field name="subject">Reminder Realisasi PUM - ${object.number}</field>
<field name="email_from">${object.email_ap}</field>
- <field name="email_to">${object.email_user}</field>
+ <field name="email_to">andrifebriyadiputra@gmail.com</field>
+ <!-- <field name="email_to">${object.email_user}</field> -->
<field name="body_html" type="html">
<div>
- <p><b>Dengan Hormat Bpk/Ibu PIC,</b></p>
+ <p><b>Dengan Hormat Bpk/Ibu ${object.user_id.display_name},</b></p>
<p>
Berikut terlampir pengajuan PUM <b>${object.number}</b> sebesar
- <b>Rp ${format_amount(object.amount, 'id_ID')}</b> dari PT. INDOTEKNIK DOTCOM GEMILANG
- pada tanggal ${format_date(object.date_submit, 'd MMMM yyyy')}.
+ <b>${format_amount(object.nominal, object.currency_id)}</b> dari PT. INDOTEKNIK DOTCOM GEMILANG
+ pada tanggal ${format_date(object.create_date, 'd MMMM yyyy')}.<br/>
+ Tolong segera realisasikan PUM tersebut. dengan menyertakan dokumen asli untuk mendukung realisasi PUM tersebut
+ <b>maksimal 7 hari dari sekarang</b>.<br/>
+ Terima Kasih
</p>
- <p>
- Mohon segera realisasikan PUM tersebut. Batas waktu realisasi adalah
- <b>7 hari setelah kembali ke kantor</b>.
- </p>
+ <br/><br/>
- <p><i>Email ini dikirim otomatis, abaikan bila sudah melakukan realisasi.</i></p>
+ <p><b>Best Regards,</b></p>
- <br/><br/>
+ <br/>
<p><b>
Dept. Finance<br/>
PT. INDOTEKNIK DOTCOM GEMILANG<br/>
<img src="https://erp.indoteknik.com/api/image/ir.attachment/datas/2135765" alt="Indoteknik" style="max-width: 18%; height: auto;"></img><br/>
- <a href="https://wa.me/6285716970374" target="_blank">+62-857-1697-0374</a> |
- <a href="mailto:finance@indoteknik.co.id">finance@indoteknik.co.id</a>
</b></p>
+ <p><i>Email ini dikirim otomatis, abaikan bila sudah melakukan realisasi.</i></p>
</div>
</field>
<field name="auto_delete" eval="True"/>
@@ -45,32 +45,32 @@
<field name="model_id" ref="indoteknik_custom.model_down_payment"/>
<field name="subject">Reminder Realisasi PUM (H-2) - ${object.number}</field>
<field name="email_from">${object.email_ap}</field>
- <field name="email_to">${object.email_user}</field>
+ <field name="email_to">andrifebriyadiputra@gmail.com</field>
+ <!-- <field name="email_to">${object.email_user}</field> -->
<field name="body_html" type="html">
<div>
- <p><b>Dengan Hormat Bpk/Ibu PIC,</b></p>
+ <p><b>Dengan Hormat Bpk/Ibu ${object.user_id.display_name},</b></p>
<p>
Berikut terlampir pengajuan PUM <b>${object.number}</b> sebesar
- <b>Rp ${format_amount(object.amount, 'id_ID')}</b> dari PT. INDOTEKNIK DOTCOM GEMILANG
- pada tanggal ${format_date(object.date_submit, 'd MMMM yyyy')}.
- </p>
-
- <p>
- Mohon segera realisasikan PUM tersebut. Batas waktu tersisa
- <b>2 hari lagi</b>.
+ <b>${format_amount(object.nominal, object.currency_id)}</b> dari PT. INDOTEKNIK DOTCOM GEMILANG
+ pada tanggal ${format_date(object.create_date, 'd MMMM yyyy')}.<br/>
+ Tolong segera realisasikan PUM tersebut. dengan menyertakan dokumen asli untuk mendukung realisasi PUM tersebut
+ <b>batas waktu tersisa 2 hari lagi</b>.<br/>
+ Terima Kasih
</p>
+
+ <br/><br/>
- <p><i>Email ini dikirim otomatis, abaikan bila sudah melakukan realisasi.</i></p>
+ <p><b>Best Regards,</b></p>
- <br/><br/>
+ <br/>
<p><b>
Dept. Finance<br/>
PT. INDOTEKNIK DOTCOM GEMILANG<br/>
<img src="https://erp.indoteknik.com/api/image/ir.attachment/datas/2135765" alt="Indoteknik" style="max-width: 18%; height: auto;"></img><br/>
- <a href="https://wa.me/6285716970374" target="_blank">+62-857-1697-0374</a> |
- <a href="mailto:finance@indoteknik.co.id">finance@indoteknik.co.id</a>
</b></p>
+ <p><i>Email ini dikirim otomatis, abaikan bila sudah melakukan realisasi.</i></p>
</div>
</field>
<field name="auto_delete" eval="True"/>