from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError from datetime import datetime class GroupPartner(models.Model): _name = 'group.partner' name = fields.Char(string='Name') class ResPartner(models.Model): _inherit = 'res.partner' reference_number = fields.Char(string="Reference Number") company_type_id = fields.Many2one('res.partner.company_type', string='Company Type') custom_pricelist_id = fields.Many2one('product.pricelist', string='Price Matrix') group_partner_id = fields.Many2one('group.partner', string='Group Partner') customer_type = fields.Selection([ ('pkp', 'PKP'), ('nonpkp', 'Non PKP') ]) sppkp = fields.Char(string="SPPKP") counter = fields.Integer(string="Counter", default=0) leadtime = fields.Integer(string="Leadtime", default=0) digital_invoice_tax = fields.Boolean(string="Digital Invoice & Faktur Pajak") is_potential = fields.Boolean(string='Potential') pakta_integritas = fields.Boolean(string='Pakta Integritas') use_so_approval = fields.Boolean(string='Use SO Approval') use_only_ready_stock = fields.Boolean(string='Use Only Ready Stock') web_role = fields.Selection([ ('manager', 'Manager'), ('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') ]) email_finance = fields.Char(string='Email Finance') email_sales = fields.Char(string='Email Sales') user_payment_terms_sales = fields.Many2one('res.users', string='Users Update Payment Terms') date_payment_terms_sales = fields.Datetime(string='Date Update Payment Terms') user_payment_terms_purchase = fields.Many2one('res.users', string='Users Update Payment Terms') date_payment_terms_purchase = fields.Datetime(string='Date Update Payment Terms') @api.model def _default_payment_term(self): return self.env.ref('__export__.account_payment_term_26_484409e2').id property_payment_term_id = fields.Many2one( 'account.payment.term', string='Payment Terms', default=_default_payment_term ) def write(self, vals): res = super(ResPartner, self).write(vals) # if 'property_payment_term_id' in vals: # if not self.env.user.is_accounting and vals['property_payment_term_id'] != 26: # raise UserError('Hanya Finance Accounting yang dapat merubah payment term') # group_id = self.env.ref('indoteknik_custom.group_role_merchandiser').id # users_in_group = self.env['res.users'].search([('groups_id', 'in', [group_id])]) # if self.env.user.id not in users_in_group.mapped('id'): # raise UserError('You name it') return res @api.constrains('property_payment_term_id') def updated_by_payment_term(self): for rec in self: rec.user_payment_terms_sales = self.env.user.id rec.date_payment_terms_sales = datetime.utcnow() @api.constrains('property_supplier_payment_term_id') def updated_by_payment_term(self): for rec in self: rec.user_payment_terms_purchase = self.env.user.id rec.date_payment_terms_purchase = datetime.utcnow() @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) partner_child_ids = [x['id'] for x in partner.child_ids] + [partner.id] if partner.parent_id: partner_child_ids += [x['id'] for x in partner.parent_id.child_ids] partner_child_ids += [partner.parent_id.id] return partner_child_ids def get_approve_partner_ids(self, type=False): parent = self.parent_id or self partners = self.search([('parent_id', '=', parent.id), ('web_role', '!=', False)]) if type == 'email_comma_sep': return ",".join([x.email for x in partners]) return partners @api.constrains('kota_id') def update_product_solr_flag(self): for partner in self: partner.city = partner.kota_id.name def unlink(self): if self._name == 'res.partner': raise UserError('Maaf anda tidak bisa delete contact') @api.onchange('customer_type') def _onchange_customer_type(self): if self.customer_type == 'nonpkp': self.npwp = '00.000.000.0-000.000'