summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-06-28 13:53:10 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-06-28 13:53:10 +0700
commite50ec098e7eff86bfc372ffec74fffd5e4284770 (patch)
treed7cfea8fb2626a215bb904dc7bcdfaa5906c63be
parent0346d579b0db5969bf3a4e475cf8abb1b788cdd2 (diff)
email notif to salesperson
-rwxr-xr-xindoteknik_custom/models/sale_order.py78
-rwxr-xr-xindoteknik_custom/views/sale_order.xml32
2 files changed, 95 insertions, 15 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index ce54bc74..826315f2 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -2,6 +2,7 @@ from odoo import fields, models, api, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime, timedelta
import logging, random, string, requests, math, json, re
+from collections import defaultdict
_logger = logging.getLogger(__name__)
@@ -476,11 +477,75 @@ class SaleOrder(models.Model):
raise UserError("Bisa langsung Confirm")
- def send_notif_to_salesperson(self):
- for rec in self:
- if not rec.partner_id.main_parent_id.use_so_approval: continue
- template = self.env.ref('indoteknik_custom.mail_template_sale_order_notification_to_salesperson')
- template.send_mail(rec.id, force_send=True)
+ def send_notif_to_salesperson(self, cancel=False):
+
+ if not cancel:
+ grouping_so = self.search([
+ ('partner_id.parent_id.id', '=', self.partner_id.parent_id.id),
+ ('partner_id.site_id.id', '=', self.partner_id.site_id.id),
+ ])
+ else:
+ grouping_so = self.search([
+ ('partner_id.parent_id.id', '=', self.partner_id.parent_id.id),
+ ('partner_id.site_id.id', '=', self.partner_id.site_id.id),
+ ('id', '!=', self.id),
+ ])
+ # Kelompokkan data berdasarkan salesperson
+ salesperson_data = {}
+ for rec in grouping_so:
+ if rec.user_id.id not in salesperson_data:
+ salesperson_data[rec.user_id.id] = {'name': rec.user_id.name, 'orders': [], 'total_amount': 0, 'sum_total_amount': 0, 'business_partner': '', 'site': ''} # Menetapkan nilai awal untuk 'site'
+ if rec.picking_ids:
+ if not any(picking.state in ['assigned', 'confirmed', 'waiting'] for picking in rec.picking_ids):
+ continue
+ if all(picking.state == 'done' for picking in rec.picking_ids):
+ continue
+ if all(picking.state == 'cancel' for picking in rec.picking_ids):
+ continue
+ if not rec.partner_id.main_parent_id.use_so_approval:
+ continue
+ order_total_amount = rec.amount_total # Mengakses langsung rec.amount_total
+ salesperson_data[rec.user_id.id]['orders'].append({
+ 'order_name': rec.name,
+ 'parent_name': rec.partner_id.name,
+ 'site_name': rec.partner_id.site_id.name,
+ 'total_amount': rec.amount_total,
+ })
+ salesperson_data[rec.user_id.id]['sum_total_amount'] += order_total_amount
+ salesperson_data[rec.user_id.id]['business_partner'] = grouping_so[0].partner_id.main_parent_id.name
+ salesperson_data[rec.user_id.id]['site'] = grouping_so[0].partner_id.site_id.name # Menambahkan nilai hanya jika ada
+
+ # Kirim email untuk setiap salesperson
+ for salesperson_id, data in salesperson_data.items():
+ if data['orders']:
+ # Buat isi tabel untuk email
+ table_content = ''
+ for order_data in data['orders']:
+ table_content += f"""
+ <tr>
+ <td>{order_data['order_name']}</td>
+ <td>{order_data['parent_name']}</td>
+ <td>{order_data['site_name']}</td>
+ <td>{order_data['total_amount']}</td>
+ </tr>
+ """
+
+ # Dapatkan email salesperson
+ salesperson_email = self.env['res.users'].browse(salesperson_id).partner_id.email
+
+ # Kirim email hanya jika ada data yang dikumpulkan
+ template = self.env.ref('indoteknik_custom.mail_template_sale_order_notification_to_salesperson')
+ email_body = template.body_html.replace('${table_content}', table_content)
+ email_body = email_body.replace('${salesperson_name}', data['name'])
+ email_body = email_body.replace('${sum_total_amount}', str(data['sum_total_amount']))
+ email_body = email_body.replace('${site}', str(data['site']))
+ email_body = email_body.replace('${business_partner}', str(data['business_partner']))
+ # Kirim email
+ self.env['mail.mail'].create({
+ 'subject': 'Notification: Sale Orders',
+ 'body_html': email_body,
+ 'email_to': salesperson_email,
+ }).send()
def action_confirm(self):
for order in self:
@@ -518,6 +583,7 @@ class SaleOrder(models.Model):
def action_cancel(self):
# TODO stephan prevent cancel if have invoice, do, and po
+ main_parent = self.partner_id.get_main_parent()
if self._name != 'sale.order':
return super(SaleOrder, self).action_cancel()
@@ -533,6 +599,8 @@ class SaleOrder(models.Model):
self.approval_status = False
self.due_id = False
+ if main_parent.use_so_approval:
+ self.send_notif_to_salesperson(cancel=True)
return super(SaleOrder, self).action_cancel()
def validate_partner_invoice_due(self):
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index b4c8b892..d50331be 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -343,12 +343,6 @@
<span></span>
</td>
</tr>
-
- <tr>
- <td colspan="2" style="text-align:center;">
- <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;" />
- </td>
- </tr>
</table>
</td>
</tr>
@@ -356,10 +350,28 @@
<tr>
<td align="center" style="min-width: 590px;">
<table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;">
- <tr><td style="padding-bottom: 24px;">Dear ${object.user_id.name},</td></tr>
-
- <tr><td style="padding-bottom: 16px;">Terdapat pesanan ${object.name} dari ${object.partner_id.main_parent_id.name} untuk site ${object.partner_shipping_id.site_id.name | safe} dengan total pembelian ${object.grand_total}</td></tr>
-
+ <tr><td style="padding-bottom: 24px;">Dear ${salesperson_name},</td></tr>
+
+ <tr><td style="padding-bottom: 16px;">Terdapat pesanan dari BP ${business_partner} untuk site ${site} dengan total belanja ${sum_total_amount} dari list SO dibawah ini:</td></tr>
+
+ <tr>
+ <td>
+ <table border="1" cellpadding="5" cellspacing="0">
+ <thead>
+ <tr>
+ <th>Nama Pesanan</th>
+ <th>Nama Perusahaan Induk</th>
+ <th>Nama Situs</th>
+ <th>Total Pembelian</th>
+ </tr>
+ </thead>
+ <tbody>
+ ${table_content}
+ </tbody>
+ </table>
+ </td>
+ </tr>
+
<tr>
<td style="text-align:center;">
<hr width="100%"