From 5dc329c18c278d8eaed23cfb0ea060ac7685cea2 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 23 Apr 2024 10:40:18 +0700 Subject: Add customer procurement on sale order approval --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- indoteknik_custom/models/res_partner.py | 5 +++-- indoteknik_custom/models/sale_order.py | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 382a90f4..40936a82 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -160,7 +160,7 @@ class SaleOrder(controller.Controller): if partner.web_role: sale_order.web_approval = 'cust_%s' % partner.web_role - if sale_order.web_approval == 'cust_director': + if sale_order.web_approval == 'cust_procurement': sale_order.approval_status = 'pengajuan1' return self.response('success') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 5a62596d..ad6fd6ec 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -28,7 +28,8 @@ class ResPartner(models.Model): use_only_ready_stock = fields.Boolean(string='Use Only Ready Stock') web_role = fields.Selection([ ('manager', 'Manager'), - ('director', 'Director') + ('director', 'Director'), + ('procurement', 'Procurement'), ], string='Web Role') def get_child_ids(self): @@ -41,7 +42,7 @@ class ResPartner(models.Model): def get_approve_partner_ids(self, type=False): parent = self.parent_id or self - partners = self.search([('parent_id', '=', parent.id), ('web_role', 'in', ['manager', 'director'])]) + partners = self.search([('parent_id', '=', parent.id), ('web_role', '!=', False)]) if type == 'email_comma_sep': return ",".join([x.email for x in partners]) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index f9f849ca..6f140072 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -95,6 +95,7 @@ class SaleOrder(models.Model): ('company', 'Company'), ('cust_manager', 'Customer Manager'), ('cust_director', 'Customer Director') + ('cust_procurement', 'Customer Procurement') ], string='Web Approval', copy=False) compute_fullfillment = fields.Boolean(string='Compute Fullfillment', compute="_compute_fullfillment") @@ -468,8 +469,8 @@ class SaleOrder(models.Model): SYSTEM_UID = 25 FROM_WEBSITE = order.create_uid.id == SYSTEM_UID - if FROM_WEBSITE and main_parent.use_so_approval and order.web_approval != 'cust_director': - raise UserError("This order not yet approved by customer director") + if FROM_WEBSITE and main_parent.use_so_approval and order.web_approval != 'cust_procurement': + raise UserError("This order not yet approved by customer procurement") if order.validate_partner_invoice_due(): return self._create_notification_action('Notification', 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') -- cgit v1.2.3 From 175ee679cbd2af2245bc9468312a6ad28419e110 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Thu, 25 Apr 2024 09:13:22 +0700 Subject: Fix sale order field syntax --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 6f140072..3b6879cd 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -94,7 +94,7 @@ class SaleOrder(models.Model): web_approval = fields.Selection([ ('company', 'Company'), ('cust_manager', 'Customer Manager'), - ('cust_director', 'Customer Director') + ('cust_director', 'Customer Director'), ('cust_procurement', 'Customer Procurement') ], string='Web Approval', copy=False) compute_fullfillment = fields.Boolean(string='Compute Fullfillment', compute="_compute_fullfillment") -- cgit v1.2.3 From d026ce987698790c8424a1b88d7bfacf1508dad6 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 26 Apr 2024 11:12:56 +0700 Subject: Update approval by procurement --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- indoteknik_api/models/sale_order.py | 3 ++- indoteknik_custom/models/sale_order.py | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 40936a82..3f31011c 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -160,7 +160,7 @@ class SaleOrder(controller.Controller): if partner.web_role: sale_order.web_approval = 'cust_%s' % partner.web_role - if sale_order.web_approval == 'cust_procurement': + if sale_order.web_approval in ['cust_procurement', 'cust_director']: sale_order.approval_status = 'pengajuan1' return self.response('success') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 1c0180ec..969fd79f 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -8,7 +8,8 @@ class SaleOrder(models.Model): APPROVAL_STEP = { 'company': 1, 'cust_manager': 2, - 'cust_director': 3, + 'cust_procurement': 3, + 'cust_director': 3 } data = { diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 3b6879cd..88d9aec7 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -469,8 +469,8 @@ class SaleOrder(models.Model): SYSTEM_UID = 25 FROM_WEBSITE = order.create_uid.id == SYSTEM_UID - if FROM_WEBSITE and main_parent.use_so_approval and order.web_approval != 'cust_procurement': - raise UserError("This order not yet approved by customer procurement") + if FROM_WEBSITE and main_parent.use_so_approval and order.web_approval not in ['cust_procurement', 'cust_director']: + raise UserError("This order not yet approved by customer procurement or director") if order.validate_partner_invoice_due(): return self._create_notification_action('Notification', 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') -- cgit v1.2.3 From b5a42eda62ae2b3536a072b9cb21a61e91a7b49a Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 26 Apr 2024 14:14:16 +0700 Subject: Add res partner site feature --- indoteknik_api/models/__init__.py | 1 - indoteknik_api/models/res_partner.py | 14 ------------- indoteknik_api/models/sale_order.py | 1 - indoteknik_custom/__manifest__.py | 1 + indoteknik_custom/models/__init__.py | 1 + indoteknik_custom/models/res_partner.py | 27 +++++++++++++++++++++++++ indoteknik_custom/models/res_partner_site.py | 20 ++++++++++++++++++ indoteknik_custom/security/ir.model.access.csv | 3 ++- indoteknik_custom/views/res_partner.xml | 5 +++++ indoteknik_custom/views/res_partner_site.xml | 28 ++++++++++++++++++++++++++ 10 files changed, 84 insertions(+), 17 deletions(-) delete mode 100644 indoteknik_api/models/res_partner.py create mode 100644 indoteknik_custom/models/res_partner_site.py create mode 100644 indoteknik_custom/views/res_partner_site.xml diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py index 8c85938c..892d2657 100644 --- a/indoteknik_api/models/__init__.py +++ b/indoteknik_api/models/__init__.py @@ -9,4 +9,3 @@ from . import sale_order from . import x_manufactures from . import website_content from . import coupon_program -from . import res_partner diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py deleted file mode 100644 index 57200ac1..00000000 --- a/indoteknik_api/models/res_partner.py +++ /dev/null @@ -1,14 +0,0 @@ -from odoo import models - - -class ResPartner(models.Model): - _inherit = 'res.partner' - - def get_main_parent(self): - partner = self - - while partner.parent_id: - partner = partner.parent_id - - return partner - \ No newline at end of file diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 969fd79f..c98834bf 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -8,7 +8,6 @@ class SaleOrder(models.Model): APPROVAL_STEP = { 'company': 1, 'cust_manager': 2, - 'cust_procurement': 3, 'cust_director': 3 } diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 1bfaa722..f1f3f9b6 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -121,6 +121,7 @@ 'views/cust_commision.xml', 'views/stock_quant.xml', 'views/purchasing_job_state.xml', + 'views/res_partner_site.xml', 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index 92a0f232..160d2af3 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -110,3 +110,4 @@ from . import cust_commision from . import report_stock_forecasted from . import web_logging from . import sales_order_fullfillment +from . import res_partner_site diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index ad6fd6ec..bc8e2b0d 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -31,6 +31,33 @@ class ResPartner(models.Model): ('director', 'Director'), ('procurement', 'Procurement'), ], string='Web Role') + site_id = fields.Many2one('res.partner.site', string='Site') + main_parent_id = fields.Many2one('res.partner', string='Main Parent', compute='_compute_main_parent_id') + + @api.onchange('site_id') + def _onchange_site_id(self): + for rec in self: + if not rec.site_id: continue + site = rec.site_id + + rec.street = site.street + rec.street2 = site.street2 + rec.city = site.city + rec.state_id = site.state_id + rec.country_id = site.country_id + rec.zip = site.zip + + def get_main_parent(self): + partner = self + + while partner.parent_id: + partner = partner.parent_id + + return partner + + def _compute_main_parent_id(self): + for partner in self: + partner.main_parent_id = partner.get_main_parent() def get_child_ids(self): partner = self.env['res.partner'].search([('id', '=', self.id)], limit=1) diff --git a/indoteknik_custom/models/res_partner_site.py b/indoteknik_custom/models/res_partner_site.py new file mode 100644 index 00000000..00850c97 --- /dev/null +++ b/indoteknik_custom/models/res_partner_site.py @@ -0,0 +1,20 @@ +from odoo import models, fields, api + +class ResPartnerSite(models.Model): + _name = 'res.partner.site' + + partner_ids = fields.One2many('res.partner', 'site_id', string='Partners') + partner_id = fields.Many2one('res.partner', string='Partner') + name = fields.Char(string='Name') + street = fields.Char(string='Street') + street2 = fields.Char(string='Street 2') + city = fields.Char(string='City') + state_id = fields.Many2one('res.country.state', string='State') + country_id = fields.Many2one('res.country', string='Country') + zip = fields.Char(string='Zip') + + @api.model + def create(self, vals): + rec = super(ResPartnerSite, self).create(vals) + rec.partner_id = rec.partner_id.get_main_parent() + return rec \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 6d265748..f03e0118 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -109,4 +109,5 @@ access_report_logbook_sj_line,access.report.logbook.sj.line,model_report_logbook access_cust_commision,access.cust.commision,model_cust_commision,,1,1,1,1 access_report_stock_report_product_product_replenishment,access.report.stock.report_product_product_replenishment,model_report_stock_report_product_product_replenishment,,1,1,1,1 access_sales_order_fullfillment,access.sales.order.fullfillment,model_sales_order_fullfillment,,1,1,1,1 -access_purchasing_job_state,access.purchasing.job.state,model_purchasing_job_state,,1,1,1,1 \ No newline at end of file +access_purchasing_job_state,access.purchasing.job.state,model_purchasing_job_state,,1,1,1,1 +access_res_partner_site,access.res_partner_site,model_res_partner_site,,1,1,1,1 \ No newline at end of file diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index e7b8517a..f79b684e 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -31,6 +31,11 @@ + + + + + diff --git a/indoteknik_custom/views/res_partner_site.xml b/indoteknik_custom/views/res_partner_site.xml new file mode 100644 index 00000000..df4c8c4a --- /dev/null +++ b/indoteknik_custom/views/res_partner_site.xml @@ -0,0 +1,28 @@ + + + + + Partner Site + res.partner.site + +
+ + + + + + +
+
+
+
+
\ No newline at end of file -- cgit v1.2.3 From 3e2166de0c8ef7da2e22d060fce23e4f0d18cc95 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 29 Apr 2024 13:24:54 +0700 Subject: Add email notification on sale order --- indoteknik_custom/models/sale_order.py | 7 +++++ indoteknik_custom/views/sale_order.xml | 56 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 1c85914e..055b545a 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -459,6 +459,12 @@ 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 action_confirm(self): for order in self: order._validate_order() @@ -484,6 +490,7 @@ class SaleOrder(models.Model): order.approval_status = 'approved' order._set_sppkp_npwp_contact() order.calculate_line_no() + order.send_notif_to_salesperson() # order.order_line.get_reserved_from() res = super(SaleOrder, self).action_confirm() diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 23905ef7..df72f618 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -306,4 +306,60 @@ + + + + Sale Order: Notification to Salesperson + + Konsolidasi Pengiriman + sales@indoteknik.com + ${object.user_id.login | safe} + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + +
Dear ${object.user_id.name},
Terdapat pesanan ${object.name} dari ${object.partner_id.main_parent_id.name} untuk site ${object.partner_shipping_id.site_id.name | 'X'} dengan total pembelian ${object.grand_total}
+
+
+
+
+
+
+
\ No newline at end of file -- cgit v1.2.3 From a5727ae0dd3f82bf22b888125d924520833838b4 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 29 Apr 2024 13:30:25 +0700 Subject: Fix sale order notification email --- indoteknik_custom/views/sale_order.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index df72f618..77740dd0 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -343,7 +343,7 @@ - +
Dear ${object.user_id.name},
Terdapat pesanan ${object.name} dari ${object.partner_id.main_parent_id.name} untuk site ${object.partner_shipping_id.site_id.name | 'X'} dengan total pembelian ${object.grand_total}
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}
-- cgit v1.2.3