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
|
from odoo import models, api, fields
from odoo.exceptions import AccessError, UserError, ValidationError
from datetime import timedelta, date
import logging
_logger = logging.getLogger(__name__)
class VendorApproval(models.Model):
_name = "vendor.approval"
_description = "Vendor Approval"
_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="Customer", readonly=True)
order_id = fields.Many2one('sale.order', string="SO", readonly=True)
vendor_approval_line = fields.One2many('vendor.approval.line', 'vendor_approval_id', string='Vendor Approval Lines', auto_join=True)
state = fields.Selection([('draft', 'Draft'), ('done', 'Done'), ('cancel', 'Reject')], string='State', tracking=True)
create_date_so = fields.Datetime(string='Create Date SO', readonly=True)
@api.model
def create(self, vals):
vals['number'] = self.env['ir.sequence'].next_by_code('vendor.approval') or '0'
result = super(VendorApproval, self).create(vals)
return result
def action_approve(self):
if not self.env.user.has_group('indoteknik_custom.group_role_merchandiser'):
raise UserError('Hanya Merchandiser yang bisa approve')
self.state = 'done'
self.order_id.vendor_approval = True
message = "Vendor Approval approved by %s" % (self.env.user.name)
self.order_id.message_post(body=message)
if not self.order_id.due_id:
self.order_id.action_confirm()
def action_reject(self):
if not self.env.user.has_group('indoteknik_custom.group_role_merchandiser'):
raise UserError('Hanya Merchandiser yang bisa cancel')
self.state = 'cancel'
message = "Vendor Approval rejected by %s" % (self.env.user.name)
self.order_id.message_post(body=message)
def unlink(self):
res = super(VendorApproval, self).unlink()
if not self._name == 'vendor.approval':
raise UserError('Vendor Approval tidak bisa didelete')
return res
class VendorApprovalLine(models.Model):
_name = 'vendor.approval.line'
_description = 'Vendor Approval Line'
_order = 'vendor_approval_id, id'
vendor_approval_id = fields.Many2one('vendor.approval', string='Vendor Approval Ref', required=True, ondelete='cascade', index=True, copy=False)
product_id = fields.Many2one('product.product', string='Product')
product_uom_qty = fields.Float(string='Quantity')
vendor_id = fields.Many2one('res.partner', string='Vendor')
vendor_md_id = fields.Many2one('res.partner', string='Vendor MD')
sales_price = fields.Float(string='Sales Price')
margin_before = fields.Float(string='Margin Before')
margin_after = fields.Float(string='Margin After')
purchase_price = fields.Float(string='Purchase Price')
purchase_price_md= fields.Float(string='Purchase Price MD')
purchase_tax_id = fields.Many2one('account.tax', string='Purchase Tax', domain=['|', ('active', '=', False), ('active', '=', True)])
sales_tax_id = fields.Many2one('account.tax', string='Sales Tax', domain=['|', ('active', '=', False), ('active', '=', True)])
percent_margin_difference = fields.Float(string='Percent Margin Difference')
|