Skip to content

Commit 30900ca

Browse files
authored
15.0 refact (#39)
* [WIP] Mejoro funciones básicas - Hago un raise en caso de que no coincidan las secuencia locales y los remotas - Permito agregar periodo de comprobantes asociados * [WIP] Obtengo el primer numero de factura desde afip (interviniendo funciones de secuencia del core) ya que todas las secuencias comienzan con 0
1 parent 502783c commit 30900ca

File tree

3 files changed

+77
-5
lines changed

3 files changed

+77
-5
lines changed

l10n_ar_afipws_fe/models/account_move.py

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ class AccountMove(models.Model):
4040
string="CAE/CAI/CAEA due Date",
4141
states={"draft": [("readonly", False)]},
4242
)
43+
afip_associated_period_from = fields.Date(
44+
'AFIP Period from'
45+
)
46+
afip_associated_period_to = fields.Date(
47+
'AFIP Period to'
48+
)
4349
afip_qr_code = fields.Char(compute="_compute_qr_code", string="AFIP QR code")
4450
afip_message = fields.Text(
4551
string="AFIP Message",
@@ -72,6 +78,44 @@ class AccountMove(models.Model):
7278
"- NO: sí el comprobante asociado (original) NO se encuentra rechazado por el comprador",
7379
)
7480

81+
def _get_starting_sequence(self):
82+
""" If use documents then will create a new starting sequence using the document type code prefix and the
83+
journal document number with a 8 padding number """
84+
if self.journal_id.l10n_latam_use_documents and self.company_id.account_fiscal_country_id.code == "AR" and self.journal_id.afip_ws:
85+
if self.l10n_latam_document_type_id :
86+
number = int(
87+
self.journal_id.get_pyafipws_last_invoice(
88+
self.l10n_latam_document_type_id
89+
)
90+
)
91+
return self._get_formatted_sequence(number)
92+
return super()._get_starting_sequence()
93+
94+
def _set_next_sequence(self):
95+
self.ensure_one()
96+
if self._name == 'account.move' and self.journal_id.l10n_latam_use_documents and self.company_id.account_fiscal_country_id.code == "AR" and self.journal_id.afip_ws:
97+
98+
last_sequence = self._get_last_sequence()
99+
new = not last_sequence
100+
if new:
101+
last_sequence = self._get_last_sequence(relaxed=True) or self._get_starting_sequence()
102+
103+
format, format_values = self._get_sequence_format_param(last_sequence)
104+
if new:
105+
format_values['seq'] = int(
106+
self.journal_id.get_pyafipws_last_invoice(
107+
self.l10n_latam_document_type_id
108+
)
109+
)
110+
format_values['year'] = self[self._sequence_date_field].year % (10 ** format_values['year_length'])
111+
format_values['month'] = self[self._sequence_date_field].month
112+
format_values['seq'] = format_values['seq'] + 1
113+
114+
self[self._sequence_field] = format.format(**format_values)
115+
self._compute_split_sequence()
116+
else:
117+
super()._set_next_sequence()
118+
75119
@api.depends("journal_id", "afip_auth_code")
76120
def _compute_validation_type(self):
77121
for rec in self:
@@ -184,6 +228,13 @@ def do_pyafipws_request_cae(self):
184228

185229
# Preparo los datos
186230
invoice_info = inv.map_invoice_info(afip_ws)
231+
number_parts = self._l10n_ar_get_document_number_parts(
232+
inv.l10n_latam_document_number, inv.l10n_latam_document_type_id.code
233+
)
234+
235+
if int(invoice_info["ws_next_invoice_number"]) != int(number_parts["invoice_number"]):
236+
237+
raise UserError(_('Check document number. Next is %s' % invoice_info["ws_next_invoice_number"]))
187238

188239
# Creo la factura en el ambito de pyafipws
189240
inv.pyafipws_create_invoice(ws, invoice_info)
@@ -230,17 +281,17 @@ def do_pyafipws_request_cae(self):
230281
"CAE solicitado con exito. CAE: %s. Resultado %s"
231282
% (ws.CAE, ws.Resultado)
232283
)
233-
inv.write(
234-
{
284+
vals = {
235285
"afip_auth_mode": "CAE",
236286
"afip_auth_code": ws.CAE,
237287
"afip_auth_code_due": vto,
238288
"afip_result": ws.Resultado,
239289
"afip_message": msg,
240290
"afip_xml_request": ws.XmlRequest,
241291
"afip_xml_response": ws.XmlResponse,
242-
}
243-
)
292+
}
293+
294+
inv.write(vals)
244295
# si obtuvimos el cae hacemos el commit porque estoya no se puede
245296
# volver atras
246297
# otra alternativa seria escribir con otro cursor el cae y que

l10n_ar_afipws_fe/models/account_move_ws.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ def wsfe_invoice_add_info(self, ws, invoice_info):
219219
self.company_id.vat,
220220
invoice_info["CbteAsoc"].invoice_date.strftime("%Y%m%d"),
221221
)
222+
if invoice_info["afip_associated_period_from"] and invoice_info["afip_associated_period_to"]:
223+
ws.AgregarPeriodoComprobantesAsociados(invoice_info["afip_associated_period_from"],invoice_info["afip_associated_period_to"])
222224
self.pyafipws_add_tax(ws)
223225

224226
def wsbfe_invoice_add_info(self, ws, invoice_info):
@@ -417,6 +419,8 @@ def base_map_invoice_info(self):
417419
invoice_info["moneda_ctz"] = self.l10n_ar_currency_rate
418420
invoice_info["CbteAsoc"] = self.get_related_invoices_data()
419421

422+
invoice_info["afip_associated_period_from"] = self.afip_associated_period_from
423+
invoice_info["afip_associated_period_to"] = self.afip_associated_period_to
420424
return invoice_info
421425

422426
def wsfe_map_invoice_info(self):
@@ -434,6 +438,9 @@ def wsfe_map_invoice_info(self):
434438
invoice_info["fecha_serv_hasta"] = invoice_info[
435439
"fecha_serv_hasta"
436440
].strftime("%Y%m%d")
441+
if invoice_info["afip_associated_period_from"] and invoice_info["afip_associated_period_to"]:
442+
invoice_info["afip_associated_period_from"] = invoice_info["afip_associated_period_from"].strftime("%Y%m%d")
443+
invoice_info["afip_associated_period_to"] = invoice_info["afip_associated_period_to"].strftime("%Y%m%d")
437444

438445
return invoice_info
439446

@@ -453,6 +460,11 @@ def wsbfe_map_invoice_info(self):
453460
"fecha_serv_hasta"
454461
].strftime("%Y%m%d")
455462

463+
if invoice_info["afip_associated_period_from"] and invoice_info["afip_associated_period_to"]:
464+
invoice_info["afip_associated_period_from"] = invoice_info["afip_associated_period_from"].strftime("%Y%m%d")
465+
invoice_info["afip_associated_period_to"] = invoice_info["afip_associated_period_to"].strftime("%Y%m%d")
466+
467+
456468
invoice_info["zona"] = 1 # Nacional (la unica devuelta por afip)
457469
# los responsables no inscriptos no se usan mas
458470
invoice_info["impto_liq_rni"] = 0.0
@@ -495,6 +507,9 @@ def wsfex_map_invoice_info(self):
495507
"Country: %s" % (self.journal_id.afip_ws, country.name)
496508
)
497509
)
510+
if invoice_info["afip_associated_period_from"] and invoice_info["afip_associated_period_to"]:
511+
invoice_info["afip_associated_period_from"] = invoice_info["afip_associated_period_from"].strftime("%Y%m%d")
512+
invoice_info["afip_associated_period_to"] = invoice_info["afip_associated_period_to"].strftime("%Y%m%d")
498513

499514
if self.invoice_incoterm_id:
500515
invoice_info["incoterms"] = self.invoice_incoterm_id.code

l10n_ar_afipws_fe/views/account_move_views.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,17 @@
1515
<button name="action_post" type="object" attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('validation_type', '!=', 'production')]}" string="Validar en AFIP" class="oe_highlight" groups="account.group_account_invoice"/>
1616
<button name="action_post" type="object" attrs="{'invisible': ['|', ('state', '!=', 'draft'), ('validation_type', '!=', 'homologation')]}" string="Validar en HOMOLOGACION" class="oe_highlight" groups="account.group_account_invoice"/>
1717
</button>
18-
1918
<field name="l10n_ar_afip_concept" position="after">
2019
<field name="afip_fce_es_anulacion"/>
20+
<label for="afip_auth_code" string="AFIP associated period" attrs="{'invisible': [('move_type', 'not in', ['out_refund'])]}"/>
21+
<div class="oe_inline" attrs="{'invisible': [('move_type', 'not in', ['out_refund'])]}">
22+
<field name="afip_associated_period_from" class="oe_inline" placeholder="Date From"/> -
23+
<field name="afip_associated_period_to" class="oe_inline" placeholder="Date to"/>
24+
</div>
25+
2126
</field>
2227
<notebook>
28+
2329
<page string="AFIP" name="afip" attrs="{'invisible': [('move_type', 'not in', ['out_invoice', 'out_refund'])]}">
2430
<group>
2531
<field name='validation_type' invisible="1"/>

0 commit comments

Comments
 (0)