Skip to content

Commit ba61c51

Browse files
author
matteo.tognini
committed
[IMP]l10n_it_edi_delivery_note: module dependency from l10n_it_stock_ddt
1 parent f8377ae commit ba61c51

6 files changed

Lines changed: 146 additions & 206 deletions

File tree

l10n_it_edi_delivery_note/README.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ITA - Fatturazione Elettronica - Documento di Trasporto
77
!! This file is generated by oca-gen-addon-readme !!
88
!! changes will be overwritten. !!
99
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10-
!! source digest: sha256:33a6a6421087debc578f5893942948d27d41d03a3eca27f7bfafca1d630434d9
10+
!! source digest: sha256:23567b454199a3ec7b97de1e3fbc1fd31099eef96513d46f01da84524effb83c
1111
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1212
1313
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -102,7 +102,7 @@ Authors
102102
Contributors
103103
------------
104104

105-
- Nextev Srl <<`www.nextev.it>\\> <http://www.nextev.it>\>>`__
105+
- Nextev Srl <`https://www.nextev.it\\> <https://www.nextev.it\>>`__
106106

107107
Maintainers
108108
-----------

l10n_it_edi_delivery_note/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"depends": [
1313
"l10n_it_edi",
1414
"l10n_it_delivery_note",
15+
"l10n_it_stock_ddt",
1516
],
1617
"data": [
1718
"data/l10n_it_edi_delivery_note_template.xml",

l10n_it_edi_delivery_note/data/l10n_it_edi_delivery_note_template.xml

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@
22
<odoo>
33
<template
44
id="l10n_it_edi_delivery_note_data"
5-
inherit_id="l10n_it_edi.account_invoice_it_FatturaPA_export"
5+
inherit_id="l10n_it_stock_ddt.my_view_name"
6+
priority="99"
67
>
7-
<xpath expr='//DatiDDT' position="after">
8-
<t
9-
t-if="record.delivery_note_ids"
10-
t-foreach="record.delivery_note_ids"
11-
t-as="delivery_note"
12-
>
8+
<xpath expr='//DatiDDT[@t-if="record.l10n_it_ddt_id"]' position="replace">
9+
<t t-if="dati_ddt_list" t-foreach="dati_ddt_list" t-as="ddt_data">
1310
<DatiDDT>
1411
<NumeroDDT
15-
t-if="delivery_note.name"
16-
t-esc="format_alphanumeric(delivery_note.name[-20:])"
12+
t-if="ddt_data.get('NumeroDDT')"
13+
t-esc="format_alphanumeric(ddt_data['NumeroDDT'][-20:])"
1714
/>
18-
<DataDDT t-esc="format_date(delivery_note.date)" />
15+
<DataDDT t-esc="format_date(ddt_data['DataDDT'])" />
16+
<t
17+
t-if="ddt_data.get('RiferimentoNumeroLinea')"
18+
t-foreach="ddt_data.get('RiferimentoNumeroLinea')"
19+
t-as="NumeroLinea"
20+
>
21+
<RiferimentoNumeroLinea t-esc="NumeroLinea" />
22+
</t>
1923
</DatiDDT>
2024
</t>
2125
</xpath>

l10n_it_edi_delivery_note/models/account_invoice.py

Lines changed: 73 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,82 @@
66
class AccountMove(models.Model):
77
_inherit = "account.move"
88

9-
def _l10n_it_edi_document_type_mapping(self):
10-
"""Deferred invoices (not direct) require TD24 FatturaPA Document Type."""
11-
res = super()._l10n_it_edi_document_type_mapping()
12-
for document_type, infos in res.items():
13-
if document_type == "TD07":
14-
continue
15-
infos["direct_invoice"] = True
16-
res["TD24"] = {
17-
"move_types": ["out_invoice"],
18-
"import_type": "in_invoice",
19-
"direct_invoice": False,
20-
}
21-
return res
22-
239
def _l10n_it_edi_invoice_is_direct(self):
2410
"""An invoice is direct if ddt are all done the same day as the invoice."""
2511
for ddt in self.delivery_note_ids:
2612
if not ddt.date or ddt.date != self.invoice_date:
2713
return False
28-
return True
14+
return super()._l10n_it_edi_invoice_is_direct()
15+
16+
def _l10n_it_edi_get_values(self, pdf_values=None):
17+
"""Extend to add dati_ddt_list for delivery notes."""
18+
values = super()._l10n_it_edi_get_values(pdf_values)
19+
values["dati_ddt_list"] = self._get_dati_ddt()
20+
return values
21+
22+
def _get_dati_ddt(self):
23+
"""
24+
Get the data for rendering DatiDDT.
25+
26+
:return: a list of dictionaries, with one dictionary per involved DdT.
27+
Each dictionary has shape:
28+
{
29+
'_delivery_note': <stock.delivery.note record of the involved the DdT>,
30+
'NumeroDDT': <string representing the DdT>,
31+
'DataDDT': <date of the DdT>,
32+
'_invoice_lines': (optional)
33+
<account.move.line records of invoice lines involved in the DdT>,
34+
'RiferimentoNumeroLinea': (optional)
35+
<list of integers representing invoice line numbers>,
36+
}
37+
"""
38+
self.ensure_one()
39+
dati_ddt_list = []
40+
41+
if not self.delivery_note_ids:
42+
return dati_ddt_list
43+
44+
e_invoice_lines = self.line_ids.filtered(
45+
lambda x: x.display_type == "product"
46+
).sorted(lambda line: line.sequence)
47+
e_invoice_lines_list = list(e_invoice_lines)
48+
49+
for delivery_note in self.delivery_note_ids:
50+
ddt_data = {
51+
"_delivery_note": delivery_note,
52+
"NumeroDDT": delivery_note.name,
53+
"DataDDT": delivery_note.date,
54+
}
55+
56+
# Find invoice lines linked to this delivery note
57+
e_invoice_delivery_note_lines = e_invoice_lines.filtered(
58+
lambda line, dn=delivery_note: line.delivery_note_id == dn
59+
)
60+
61+
if e_invoice_delivery_note_lines:
62+
# RiferimentoNumeroLinea contains 1-based line numbers
63+
lines_refs_list = [
64+
e_invoice_lines_list.index(line) + 1
65+
for line in e_invoice_delivery_note_lines
66+
]
67+
ddt_data.update(
68+
{
69+
"_invoice_lines": e_invoice_delivery_note_lines,
70+
"RiferimentoNumeroLinea": lines_refs_list,
71+
}
72+
)
73+
elif len(self.delivery_note_ids) == 1:
74+
# If there's only one DDT and no lines are linked, include all lines
75+
# This handles the case where update_delivery_note_lines() wasn't called
76+
ddt_data.update(
77+
{
78+
"_invoice_lines": e_invoice_lines,
79+
"RiferimentoNumeroLinea": list(
80+
range(1, len(e_invoice_lines_list) + 1)
81+
),
82+
}
83+
)
84+
85+
dati_ddt_list.append(ddt_data)
2986

30-
def _l10n_it_edi_features_for_document_type_selection(self):
31-
res = super()._l10n_it_edi_features_for_document_type_selection()
32-
res["direct_invoice"] = self._l10n_it_edi_invoice_is_direct()
33-
return res
87+
return dati_ddt_list
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
- Nextev Srl \<<www.nextev.it>\>
1+
- Nextev Srl \<https://www.nextev.it\>

0 commit comments

Comments
 (0)