from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError from datetime import timedelta, date, datetime import logging _logger = logging.getLogger(__name__) class ApprovalPaymentTerm(models.Model): _name = "approval.payment.term" _description = "Approval Payment Term" _inherit = ['mail.thread'] _rec_name = 'number' number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True) partner_id = fields.Many2one('res.partner', string='Partner', copy=False) property_payment_term_id = fields.Many2one('account.payment.term', string='Payment Term', copy=False, tracking=True) parent_id = fields.Many2one('res.partner', string='Related Company', copy=False) blocking_stage = fields.Float(string='Blocking Amount', help="Cannot make sales once the selected " "customer is crossed blocking amount." "Set its value to 0.00 to disable " "this feature", tracking=True, copy=False) warning_stage = fields.Float(string='Warning Amount', help="A warning message will appear once the " "selected customer is crossed warning " "amount. Set its value to 0.00 to" " disable this feature", tracking=True, copy=False) active_limit = fields.Boolean('Active Credit Limit', copy=False, tracking=True) approve_sales_manager = fields.Boolean('Approve Sales Manager', tracking=True, copy=False) approve_finance = fields.Boolean('Approve Finance', tracking=True, copy=False) approve_leader = fields.Boolean('Approve Pimpinan', tracking=True, copy=False) reason = fields.Text('Reason', tracking=True) approve_date = fields.Datetime('Approve Date') @api.constrains('partner_id') def constrains_partner_id(self): if self.partner_id: self.parent_id = self.partner_id.parent_id.id if self.partner_id.parent_id else None self.blocking_stage = self.partner_id.blocking_stage self.warning_stage = self.partner_id.warning_stage self.active_limit = self.partner_id.active_limit self.property_payment_term_id = self.partner_id.property_payment_term_id.id def button_approve(self): user = self.env.user is_it = user.has_group('indoteknik_custom.group_role_it') if is_it or user.id == 19: self.approve_sales_manager = True return if is_it or user.id == 688 and self.approve_sales_manager: self.approve_finance = True return if is_it or user.id == 7 and self.approve_sales_manager and self.approve_finance: self.approve_leader = True if not is_it or not self.approve_finance: raise UserError('Harus Approval Finance!!') if not is_it or not self.approve_leader: raise UserError('Harus Approval Pimpinan!!') if user.id == 7: if not self.approve_finance: raise UserError('Belum Di Approve Oleh Finance') if self.approve_leader == True: self.partner_id.write({ 'blocking_stage': self.blocking_stage, 'warning_stage': self.warning_stage, 'active_limit': self.active_limit, 'property_payment_term_id': self.property_payment_term_id.id }) self.approve_date = datetime.utcnow() @api.model def create(self, vals): vals['number'] = self.env['ir.sequence'].next_by_code('approval.payment.term') or '0' result = super(ApprovalPaymentTerm, self).create(vals) return result