Skip to content

Commit

Permalink
[IMP] l10n_ar_edi_ux: boarding permission
Browse files Browse the repository at this point in the history
Task: 29241
  • Loading branch information
pablohmontenegro committed Nov 29, 2023
1 parent 905a132 commit c67b9ec
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 1 deletion.
3 changes: 2 additions & 1 deletion l10n_ar_edi_ux/__manifest__.py
@@ -1,6 +1,6 @@
{
'name': 'Argentinian Electronic Invoicing UX',
'version': "16.0.1.1.0",
'version': "16.0.1.2.0",
'category': 'Localization/Argentina',
'sequence': 14,
'author': 'ADHOC SA',
Expand All @@ -21,6 +21,7 @@
'views/res_partner_view.xml',
'views/account_move_view.xml',
'views/account_journal_view.xml',
'views/l10n_ar_boarding_permission_view.xml',
'security/ir.model.access.csv',
],
'demo': [
Expand Down
1 change: 1 addition & 0 deletions l10n_ar_edi_ux/models/__init__.py
Expand Up @@ -6,3 +6,4 @@
from . import res_partner
from . import account_move
from . import account_journal
from . import l10n_ar_boarding_permission
27 changes: 27 additions & 0 deletions l10n_ar_edi_ux/models/account_move.py
Expand Up @@ -16,6 +16,7 @@ class AccountMove(models.Model):
states={'draft': [('readonly', False)]},
help='Set this field if it is you are reporting debit/credit note and have not related invoice.'
' IMPORTANT: This is only applies on "Electronic Invoice - Web Service"')
l10n_ar_boarding_permission_ids = fields.Many2many('l10n_ar.boarding_permission', string="Permiso de Embarque", check_company=True, ondelete='restrict', help="Solo se envía esta información si la factura es de exportación y el 'Concepto AFIP' es 'Products / Definitive export of goods'")

def _found_related_invoice(self):
"""
Expand Down Expand Up @@ -88,3 +89,29 @@ def _post(self, soft=True):
raise UserError(msg)

return super(AccountMove, self - purchase_ar_edi_invoices)._post(soft=soft)

def _get_permissions(self):
""" Get 'permiso de embarque' for foreign invoices. """
self.ensure_one()
res = []
for permiso in self.l10n_ar_boarding_permission_ids:
res.append({'Id_permiso': permiso.number, 'Dst_merc': permiso.dst_country.l10n_ar_afip_code})
return res

@api.model
def wsfex_get_cae_request(self, last_id, client):
""" Set permiso de embarque to foreign invoice. """
res = super(AccountMove, self).wsfex_get_cae_request(last_id, client)
if int(self.l10n_latam_document_type_id.code) == 19 and int(self.l10n_ar_afip_concept) == 1:
ArrayOfPermisions = client.get_type('ns0:ArrayOfPermiso')
permisos = self._get_permissions()
permiso_existente = "S" if permisos else "N"
res.update({'Permisos': ArrayOfPermisions(permisos) if permisos else None})
res.update({'Permiso_existente': permiso_existente})
return res

def check_valid_boarding_permission(self):
""" Este método sirve para verificar que los permisos de embarque ingresados en la factura de exportación son válidos. Recibe las credenciales de autenticación, cuit del usuario representado, código de despacho y país de destino y verifica la existencia en la base de datos aduanera. """
client, auth = self.company_id._l10n_ar_get_connection(self.journal_id.l10n_ar_afip_ws)._get_client()
for perm in self.l10n_ar_boarding_permission_ids:
response = client.service['FEXCheck_Permiso'](auth, Id_permiso=perm.number, Dst_merc=int(perm.dst_country.l10n_ar_afip_code))
27 changes: 27 additions & 0 deletions l10n_ar_edi_ux/models/l10n_ar_boarding_permission.py
@@ -0,0 +1,27 @@
from odoo import fields, models, api


class L10nArBoardingPermission(models.Model):
_name = "l10n_ar.boarding_permission"
_description = 'Boarding Permission'

number = fields.Char(string="Permiso de embarque", required=True, size=16)
dst_country = fields.Many2one('res.country', string="País Origen", help="País donde se aplica permiso de embarque", required=True)
company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company)

def name_get(self):
result = []
for rec in self:
result.append(
(rec.id, "%s - %s" % (rec.number, rec.dst_country.display_name)))
return result

@api.model
def name_search(self, name, args=None, operator='ilike', limit=100):
args = args or []
recs = self.browse()
if name:
recs = self.search([('number', operator, name)] + args, limit=limit)
if not recs:
recs = self.search([('dst_country', operator, name)] + args, limit=limit)
return recs.name_get()
1 change: 1 addition & 0 deletions l10n_ar_edi_ux/security/ir.model.access.csv
Expand Up @@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_res_partner_update_from_padron_field,access_res_partner_update_from_padron_field,model_res_partner_update_from_padron_field,base.group_user,1,1,1,1
access_res_partner_update_from_padron_wizard,access_res_partner_update_from_padron_wizard,model_res_partner_update_from_padron_wizard,base.group_user,1,1,1,0
access_res_partner_update_from_padron_info,access_res_partner_update_from_padron_info,model_res_partner_update_from_padron_info,base.group_user,1,1,1,1
access_l10n_ar_boarding_permission,access_l10n_ar_boarding_permission,model_l10n_ar_boarding_permission,base.group_user,1,1,1,1
2 changes: 2 additions & 0 deletions l10n_ar_edi_ux/views/account_move_view.xml
Expand Up @@ -11,6 +11,8 @@
<div>
<field name="l10n_ar_afip_asoc_period_start" class="oe_inline"/> to <field name="l10n_ar_afip_asoc_period_end" class="oe_inline"/>
</div>
<field name='l10n_ar_boarding_permission_ids' widget="many2many_tags" attrs="{'invisible': [('l10n_ar_afip_ws', '!=', 'wsfex')]}" options="{'no_create_edit': False}"/>
<button name="check_valid_boarding_permission" string="Validar permisos de embarque" type="object"/>
</field>
</field>
</record>
Expand Down
37 changes: 37 additions & 0 deletions l10n_ar_edi_ux/views/l10n_ar_boarding_permission_view.xml
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="l10n_ar_boarding_permission_tree" model="ir.ui.view">
<field name="name">l10n_ar.boarding_permission.tree</field>
<field name="model">l10n_ar.boarding_permission</field>
<field name="arch" type="xml">
<tree>
<field name="number"/>
<field name="dst_country"/>
<field name="company_id"/>
</tree>
</field>
</record>

<record id="l10n_ar_boarding_permission_form" model="ir.ui.view">
<field name="name">l10n_ar.boarding_permission.form</field>
<field name="model">l10n_ar.boarding_permission</field>
<field name="arch" type="xml">
<form>
<group>
<field name="number"/>
<field name="dst_country"/>
<field name="company_id"/>
</group>
</form>
</field>
</record>

<record model="ir.actions.act_window" id="action_l10n_ar_boarding_permission">
<field name="name">Permisos de embarque</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">l10n_ar.boarding_permission</field>
<field name="view_mode">tree,form</field>
</record>

<menuitem name="Permisos de embarque" action="action_l10n_ar_boarding_permission" id="menu_action_l10n_ar_boarding_permission" parent="l10n_ar.menu_afip_config"/>
</odoo>

0 comments on commit c67b9ec

Please sign in to comment.