Skip to content
Snippets Groups Projects

[MOD] Res Partner Perception IIBB Sit Load

Merged Reviewer Intergaláctico requested to merge 8.0-SitIIBB_Load into 8.0-stage
2 files
+ 112
62
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 98
61
@@ -6,7 +6,8 @@
# All Rights Reserved. See AUTHORS for details.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# it under the terms of the GNU Affero General
# Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
@@ -21,12 +22,35 @@
##############################################################################
from openerp import models, fields, api, _
from openerp.exceptions import except_orm, Warning, RedirectWarning
from openerp.exceptions import except_orm
class res_partner(models.Model):
_inherit = 'res.partner'
@api.model
def _compute_sit_iibb(self, padron_tax):
# TODO Is this the correct thing to do?
if padron_tax.multilateral:
multilateral_record = self.env.ref(
'l10n_ar_perceptions.iibb_situation_multilateral')
sit_iibb = multilateral_record
else:
local_record = self.env.ref(
'l10n_ar_perceptions.iibb_situation_local')
sit_iibb = local_record
return sit_iibb.id
@api.model
def _compute_allowed_padron_tax_commands(self, old_commands, new_commands):
allowed_to_keep_comms = []
padron_tax_ids = map(lambda x: x[1], new_commands)
for command in old_commands:
if command[0] in [0, 1, 2, 4] and \
command[1] not in padron_tax_ids:
allowed_to_keep_comms.append(command)
return allowed_to_keep_comms
@api.model
def _check_padron_retention_agip(self, vat):
padron_agip_obj = self.env['padron.agip_percentages']
@@ -38,6 +62,9 @@ class res_partner(models.Model):
if not retent_ids:
return res
padron_retent = ret_ids[0]
# TODO: Sit IIBB calculada a partir de multilateral en
# padron_retent (Cuando exista el campo en partner_retentions)
# sit_iibb = self._compute_sit_iibb(padron_retent)
res = {
'retention_id': retent_ids[0].id,
'percent': padron_retent.percentage_retention,
@@ -57,10 +84,12 @@ class res_partner(models.Model):
if not percep_ids:
return res
padron_percep = per_ids[0]
sit_iibb = self._compute_sit_iibb(padron_percep)
res = {
'perception_id': percep_ids[0].id,
'percent': padron_percep.percentage_perception,
'multilateral': padron_percep.multilateral,
'sit_iibb': sit_iibb,
'from_padron': True,
}
return res
@@ -76,11 +105,13 @@ class res_partner(models.Model):
if not retent_ids:
return res
padron_retent = ret_ids[0]
# TODO: Sit IIBB calculada a partir de multilateral en
# padron_retent (Cuando exista el campo en partner_retentions)
# sit_iibb = self._compute_sit_iibb(padron_retent)
res = {
'retention_id': retent_ids[0].id,
'percent': padron_retent.percentage,
'multilateral': padron_retent.multilateral,
'from_padron': True,
}
return res
@@ -96,11 +127,12 @@ class res_partner(models.Model):
if not percep_ids:
return res
padron_percep = per_ids[0]
sit_iibb = self._compute_sit_iibb(padron_percep)
res = {
'perception_id': percep_ids[0].id,
'percent': padron_percep.percentage,
'multilateral': padron_percep.multilateral,
'from_padron': True,
'sit_iibb': sit_iibb,
}
return res
@@ -115,18 +147,10 @@ class res_partner(models.Model):
if perc_arba:
perceptions_list.append((0, 0, perc_arba))
if 'multilateral' in perc_arba:
multilateral = perc_arba.pop('multilateral')
vals['sit_iibb'] = multilateral and '2' or '1'
perc_agip = self._check_padron_perception_agip(vat)
if perc_agip:
perceptions_list.append((0, 0, perc_agip))
if 'multilateral' in perc_agip:
multilateral = perc_agip.pop('multilateral')
vals['sit_iibb'] = multilateral and '2' or '1'
vals['perception_ids'] = perceptions_list
# Retenciones
@@ -138,18 +162,10 @@ class res_partner(models.Model):
if ret_arba:
retentions_list.append((0, 0, ret_arba))
if 'multilateral' in ret_arba:
multilateral = ret_arba.pop('multilateral')
vals['sit_iibb'] = multilateral and '2' or '1'
ret_agip = self._check_padron_retention_agip(vat)
if ret_agip:
retentions_list.append((0, 0, ret_agip))
if 'multilateral' in ret_agip:
multilateral = ret_agip.pop('multilateral')
vals['sit_iibb'] = multilateral and '2' or '1'
vals['retention_ids'] = retentions_list
return super(res_partner, self).create(vals)
@@ -167,7 +183,9 @@ class res_partner(models.Model):
('activity_id', '=', False)])
if len(partner_retention_ids) > 1:
raise except_orm(_("Retention Error!"), _("Partner already has the retention more than one"))
raise except_orm(
_("Retention Error!"),
_("Partner already has the retention more than one"))
if not partner_retention_ids:
res['retention_ids'] = [(0, 0, retention)]
@@ -190,7 +208,9 @@ class res_partner(models.Model):
('activity_id', '=', False)])
if len(partner_perception_ids) > 1:
raise except_orm(_("Perception Error!"), _("Partner already has the perception more than one"))
raise except_orm(
_("Perception Error!"),
_("Partner already has the perception more than once"))
if not partner_perception_ids:
res['perception_ids'] = [(0, 0, perception)]
@@ -203,8 +223,12 @@ class res_partner(models.Model):
@api.multi
def write(self, vals):
for partner in self:
vat_changed = False
if 'vat' in vals and vals['vat']:
vat = vals['vat']
old_vat = partner.read(['vat'])[0]['vat']
if vat != old_vat:
vat_changed = True
else:
vat = partner.read(['vat'])[0]['vat']
@@ -218,70 +242,83 @@ class res_partner(models.Model):
else:
supplier = partner.read(['supplier'])[0]['supplier']
# TODO: Hay como un problema entre este metodo y la actualizacion masiva
# Tenemos que corregirlo de alguna manera, por ahora el workaround es
# que si se escribe las perception_ids no se hace el chequeo en el padron
# TODO: Hay como un problema entre este metodo
# y la actualizacion masiva
# Tenemos que corregirlo de alguna manera,
# por ahora el workaround es que si se escribe las perception_ids
# no se hace el chequeo en el padron
# porque suponemos que viene de la actualizacion masiva
sit_iibb = vals.get('sit_iibb', False)
if 'perception_ids' not in vals and customer:
if vat:
# Obtenemos la percepcion desde el padron de percepciones de ARBA
if vat:
if customer:
# Obtenemos la percepcion desde el
# padron de percepciones de ARBA
perception_ids_lst = []
perc_arba = partner._check_padron_perception_arba(vat)
if perc_arba:
res_arba = partner._update_perception_partner(perc_arba)
perception_ids_lst.append(res_arba['perception_ids'][0])
if 'multilateral' in perc_arba:
multilateral = perc_arba.pop('multilateral')
sit_iibb = multilateral and '2' or '1'
res_arba = partner._update_perception_partner(
perc_arba)
perception_ids_lst.append(
res_arba['perception_ids'][0])
perc_agip = partner._check_padron_perception_agip(vat)
if perc_agip:
res_agip = partner._update_perception_partner(perc_agip)
perception_ids_lst.append(res_agip['perception_ids'][0])
if 'multilateral' in perc_agip:
multilateral = perc_agip.pop('multilateral')
sit_iibb = multilateral and '2' or '1'
res_agip = partner._update_perception_partner(
perc_agip)
perception_ids_lst.append(
res_agip['perception_ids'][0])
if 'perception_ids' in vals:
old_comms = self._compute_allowed_padron_tax_commands(
vals['perception_ids'], perception_ids_lst)
else:
old_comms = []
if vat_changed:
old_perceps = partner.read(
['perception_ids'])[0]['perception_ids']
old_comms = map(lambda x: (2, x, False), old_perceps)
keep_percep_comms = []
for comm in perception_ids_lst:
if comm[1] not in old_perceps:
keep_percep_comms.append(comm)
perception_ids_lst = keep_percep_comms
vals.update({
'perception_ids': perception_ids_lst,
'sit_iibb': sit_iibb,
'perception_ids': old_comms + perception_ids_lst,
})
if 'retention_ids' not in vals and supplier:
if vat:
# Obtenemos la percepcion desde el padron de percepciones de ARBA
if supplier:
# Obtenemos la percepcion desde el padron
# de percepciones de ARBA
retention_ids_lst = []
ret_arba = partner._check_padron_retention_arba(vat)
if ret_arba:
res_arba = partner._update_retention_partner(ret_arba)
retention_ids_lst.append(res_arba['retention_ids'][0])
if 'multilateral' in ret_arba:
multilateral = ret_arba.pop('multilateral')
sit_iibb = multilateral and '2' or '1'
ret_agip = partner._check_padron_retention_agip(vat)
if ret_agip:
res_agip = partner._update_retention_partner(ret_agip)
retention_ids_lst.append(res_agip['retention_ids'][0])
if 'multilateral' in ret_agip:
multilateral = ret_agip.pop('multilateral')
sit_iibb = multilateral and '2' or '1'
if 'retention_ids' in vals:
old_comms = self._compute_allowed_padron_tax_commands(
vals['retention_ids'], retention_ids_lst)
else:
old_comms = []
if vat_changed:
old_retent = partner.read(
['retention_ids'])[0]['retention_ids']
old_comms = map(lambda x: (2, x, False), old_retent)
keep_retent_comms = []
for comm in perception_ids_lst:
if comm[1] not in old_retent:
keep_retent_comms.append(comm)
perception_ids_lst = keep_retent_comms
vals.update({
'retention_ids': retention_ids_lst,
'sit_iibb': sit_iibb,
'retention_ids': old_comms + retention_ids_lst,
})
return super(res_partner, self).write(vals)
res_partner()
class res_partner_perception(models.Model):
_name = "res.partner.perception"
Loading