diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2024-05-10 07:43:40 +0000 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2024-05-10 07:43:40 +0000 |
| commit | e2cf27c1fc540ad24b457d23c89ddd1ea4e6034a (patch) | |
| tree | a635964dbd0b9729c1d161e16ca7e8dabb02a3c8 /indoteknik_custom/models | |
| parent | cb9ae6021dd4858372ed78d16ab491226c95f1d2 (diff) | |
| parent | 844339e517540826f6990456a63945dc879e37d5 (diff) | |
Merged in dev/request-by-abl (pull request #141)
Dev/request by abl
Diffstat (limited to 'indoteknik_custom/models')
| -rwxr-xr-x | indoteknik_custom/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/res_partner.py | 32 | ||||
| -rw-r--r-- | indoteknik_custom/models/res_partner_site.py | 20 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 14 |
4 files changed, 62 insertions, 5 deletions
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 abb7f739..eee19b2f 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -28,14 +28,42 @@ 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') + site_id = fields.Many2one('res.partner.site', string='Site') + main_parent_id = fields.Many2one('res.partner', string='Main Parent', compute='_compute_main_parent_id') pareto_status = fields.Selection([ ('PR', 'Pareto Repeating'), ('PPR', 'Potensi Pareto Repeating'), ('PNR', 'Pareto Non Repeating'), ('NP', 'Non Pareto') ]) + + @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) @@ -47,7 +75,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/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/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 620953b9..aa34b0f4 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -93,7 +93,8 @@ 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") @@ -458,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() @@ -467,8 +474,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 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') @@ -483,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() |
