80 lines
3.4 KiB
Python
80 lines
3.4 KiB
Python
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
|
|
|
from flectra import api, fields, models, _
|
|
from flectra.exceptions import ValidationError
|
|
|
|
|
|
class Partner(models.Model):
|
|
""" Inherit Partner """
|
|
_inherit = 'res.partner'
|
|
|
|
gst_company_partner = fields.Boolean(string='Is company partner?')
|
|
gst_type = fields.Selection([('regular', 'Regular'),
|
|
('unregistered', 'Unregistered'),
|
|
('composite', 'Composite'),
|
|
('volunteer', 'Volunteer')],
|
|
string='GST Type')
|
|
e_commerce = fields.Boolean(string='E-Commerce')
|
|
partner_location = fields.Selection([('inter_state', 'Inter State'),
|
|
('intra_state', 'intra State'),
|
|
('inter_country', 'Inter Country')
|
|
], "Partner Location")
|
|
property_account_position_id = fields.Many2one(
|
|
'account.fiscal.position',
|
|
company_dependent=True,
|
|
string="Nature of Transaction",
|
|
help="The fiscal position will determine taxes and accounts "
|
|
"used for the partner.",
|
|
oldname="property_account_position")
|
|
|
|
@api.multi
|
|
@api.constrains('vat', 'state_id')
|
|
def _check_gstin_format(self):
|
|
for res in self:
|
|
if res.state_id and res.vat and res.state_id.l10n_in_tin \
|
|
and res.state_id.l10n_in_tin != res.vat[:2]:
|
|
raise ValidationError(_('Invalid State Code!'))
|
|
if res.vat and len(res.vat) != 15 and res.gst_type != \
|
|
'unregistered':
|
|
raise ValidationError(_('GSTIN length must be of 15 '
|
|
'characters!'))
|
|
|
|
def _get_partner_location_details(self, company):
|
|
partner_location = False
|
|
if self.country_id and company.country_id:
|
|
partner_location = 'inter_country'
|
|
if self.country_id.id == company.country_id.id:
|
|
partner_location = 'inter_state'
|
|
if self.state_id and company.state_id and self.state_id.id == \
|
|
company.state_id.id:
|
|
partner_location = 'intra_state'
|
|
return partner_location
|
|
|
|
@api.onchange('state_id', 'property_account_position_id', 'country_id')
|
|
def _onchange_state_id(self):
|
|
""" Set state code as a initial characters of GSTIN """
|
|
result = self.company_id.onchange_state(self.gst_type, self.vat,
|
|
self.state_id)
|
|
self.vat = result['vat']
|
|
self.country_id = result['country_id']
|
|
self.partner_location = self._get_partner_location_details(
|
|
self.company_id)
|
|
if self.state_id == self.env.user.company_id.state_id and \
|
|
self.property_account_position_id:
|
|
self.property_account_position_id = False
|
|
return {
|
|
'warning': {
|
|
'title': 'Warning',
|
|
'message': 'Fiscal Position not needed for '
|
|
'same state Customers!'
|
|
}
|
|
}
|
|
|
|
@api.onchange('gst_type')
|
|
def onchange_gst_type(self):
|
|
"""
|
|
If gst type is unregistered then GSTIN Number should be blank
|
|
"""
|
|
if self.gst_type == 'unregistered':
|
|
self.vat = False
|