summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/approval_payment_term.py
blob: 81eb19086485c1c1f10a489dea095c083e5512de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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