blob: 049a7eba61a17aa47ef59288fa4f88fb6df34762 [file] [log] [blame]
rohitwaghchaurecdcff6c2019-09-09 10:15:01 +05301{%- macro format_float(value, precision=2) -%}
rohitwaghchaure76df7822019-09-16 19:43:17 +05302{%- if frappe.utils.cint(precision) == 3 %}
3{{ "%.3f" % value|abs }}
4{%- elif frappe.utils.cint(precision) == 4 -%}
5{{ "%.4f" % value|abs }}
6{%- else -%}
7{{ "%.2f" % value|abs }}
8{%- endif %}
Gauravf1e28e02019-02-13 16:46:24 +05309{%- endmacro -%}
10
11{%- macro render_address(address) %}
12<Indirizzo>{{ address.address_line1 }}</Indirizzo>
13<CAP>{{ address.pincode }}</CAP>
14<Comune>{{ address.city }}</Comune>
Gaurav3f046132019-02-19 16:28:22 +053015{%- if address.state_code %}
16<Provincia>{{ address.state_code }}</Provincia>
Gauravf1e28e02019-02-13 16:46:24 +053017{%- endif %}
Rohit Waghchaure74cfe572019-02-26 20:08:26 +053018<Nazione>{{ address.country_code }}</Nazione>
Gauravf1e28e02019-02-13 16:46:24 +053019{%- endmacro %}
20
21{%- macro render_discount_or_margin(item) -%}
Chinmay D. Pai01aca672019-10-05 10:18:21 +053022{%- if (item.discount_percentage and item.discount_percentage > 0.0) or item.margin_type %}
Gauravf1e28e02019-02-13 16:46:24 +053023<ScontoMaggiorazione>
24 {%- if item.discount_percentage > 0.0 %}
25 <Tipo>SC</Tipo>
26 <Percentuale>{{ format_float(item.discount_percentage) }}</Percentuale>
27 {%- endif %}
28 {%- if item.margin_rate_or_amount > 0.0 -%}
29 <Tipo>MG</Tipo>
30 {%- if item.margin_type == "Percentage" -%}
31 <Percentuale>{{ format_float(item.margin_rate_or_amount) }}</Percentuale>
32 {%- elif item.margin_type == "Amount" -%}
33 <Importo>{{ format_float(item.margin_rate_or_amount) }}</Importo>
34 {%- endif -%}
35 {%- endif %}
36</ScontoMaggiorazione>
37{%- endif -%}
38{%- endmacro -%}
39
40<?xml version='1.0' encoding='UTF-8'?>
Rohit Waghchaure0f98cb82019-02-26 15:01:30 +053041<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
42 xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
43 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44 versione="{{ doc.transmission_format_code }}"
Gauravf1e28e02019-02-13 16:46:24 +053045 xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd">
46 <FatturaElettronicaHeader>
47 <DatiTrasmissione>
48 <IdTrasmittente>
Rohit Waghchaure74cfe572019-02-26 20:08:26 +053049 <IdPaese>{{ doc.company_address_data.country_code }}</IdPaese>
Gauravf1e28e02019-02-13 16:46:24 +053050 <IdCodice>{{ doc.company_fiscal_code or doc.company_tax_id | replace("IT","") }}</IdCodice>
51 </IdTrasmittente>
52 <ProgressivoInvio>{{ doc.progressive_number }}</ProgressivoInvio>
53 <FormatoTrasmissione>{{ doc.transmission_format_code }}</FormatoTrasmissione>
54 <CodiceDestinatario>{{ doc.customer_data.recipient_code }}</CodiceDestinatario>
55 {% if doc.company_data.phone or doc.company_data.email -%}
56 <ContattiTrasmittente>
57 {% if doc.company_data.phone -%}<Telefono>{{ doc.company_data.phone }}</Telefono>{%- endif %}
58 {% if doc.company_data.email -%}<Email>{{ doc.company_data.email }}</Email>{%- endif %}
59 </ContattiTrasmittente>
60 {% endif -%}
61 </DatiTrasmissione>
62 <CedentePrestatore>
63 <DatiAnagrafici>
64 <IdFiscaleIVA>
Rohit Waghchaure74cfe572019-02-26 20:08:26 +053065 <IdPaese>{{ doc.company_address_data.country_code }}</IdPaese>
Gauravf1e28e02019-02-13 16:46:24 +053066 <IdCodice>{{ doc.company_tax_id | replace("IT","") }}</IdCodice>
67 </IdFiscaleIVA>
68 {%- if doc.company_fiscal_code %}
69 <CodiceFiscale>{{ doc.company_fiscal_code }}</CodiceFiscale>
70 {%- endif %}
71 <Anagrafica>
72 <Denominazione>{{ doc.company }}</Denominazione>
73 </Anagrafica>
74 <RegimeFiscale>{{ doc.company_fiscal_regime.split("-")[0] }}</RegimeFiscale>
75 </DatiAnagrafici>
76 <Sede>
77 {{ render_address(doc.company_address_data) }}
78 </Sede>
79 {%- if doc.company_data.registration_number %}
80 <IscrizioneREA>
81 <Ufficio>{{ doc.company_data.registrar_office_province }}</Ufficio>
82 <NumeroREA>{{ doc.company_data.registration_number }}</NumeroREA>
83 {%- if doc.company_data.share_capital_amount %}
84 <CapitaleSociale>{{ format_float(doc.company_data.share_capital_amount) }}</CapitaleSociale>
85 {%- endif %}
86 {%- if doc.company_data.no_of_members %}
87 <SocioUnico>{{ doc.company_data.no_of_members.split("-")[0] }}</SocioUnico>
88 {%- endif %}
89 {%- if doc.company_data.liquidation_state %}
90 <StatoLiquidazione>{{ doc.company_data.liquidation_state.split("-")[0] }}</StatoLiquidazione>
91 {%- endif %}
92 </IscrizioneREA>
93 {%- endif %}
94 </CedentePrestatore>
95 <CessionarioCommittente>
96 <DatiAnagrafici>
97 {%- if doc.customer_data.customer_type == "Individual" %}
98 <CodiceFiscale>{{ doc.customer_data.fiscal_code }}</CodiceFiscale>
99 <Anagrafica>
100 <Nome>{{ doc.customer_data.first_name }}</Nome>
101 <Cognome>{{ doc.customer_data.last_name }}</Cognome>
102 </Anagrafica>
103 {%- else %}
Gauravf1e28e02019-02-13 16:46:24 +0530104 <IdFiscaleIVA>
Rohit Waghchaure74cfe572019-02-26 20:08:26 +0530105 <IdPaese>{{ doc.customer_address_data.country_code }}</IdPaese>
Gauravf1e28e02019-02-13 16:46:24 +0530106 <IdCodice>{{ doc.tax_id | replace("IT","") }}</IdCodice>
107 </IdFiscaleIVA>
Himanshu138e0302019-03-22 23:22:52 +0530108 {%- if doc.customer_data.fiscal_code %}
109 <CodiceFiscale>{{ doc.customer_data.fiscal_code }}</CodiceFiscale>
110 {%- endif %}
Gauravf1e28e02019-02-13 16:46:24 +0530111 <Anagrafica>
112 <Denominazione>{{ doc.customer_name }}</Denominazione>
113 </Anagrafica>
114 {%- endif %}
115 </DatiAnagrafici>
116 {%- if doc.customer_address_data %}
117 <Sede>
118 {{ render_address(doc.customer_address_data) }}
119 </Sede>
120 {%- endif %}
121 </CessionarioCommittente>
122 </FatturaElettronicaHeader>
123 <FatturaElettronicaBody>
124 <DatiGenerali>
125 <DatiGeneraliDocumento>
126 <TipoDocumento>{{ doc.type_of_document }}</TipoDocumento>
Nabin Hait34c551d2019-07-03 10:34:31 +0530127 <Divisa>{{ doc.currency }}</Divisa>
Gauravf1e28e02019-02-13 16:46:24 +0530128 <Data>{{ doc.posting_date }}</Data>
129 <Numero>{{ doc.unamended_name }}</Numero>
130 {%- if doc.stamp_duty %}
131 <DatiBollo>
132 <BolloVirtuale>SI</BolloVirtuale>
133 <ImportoBollo>{{ format_float(doc.stamp_duty) }}</ImportoBollo>
134 </DatiBollo>
135 {%- endif %}
Rohit Waghchaure22ebaf12019-03-07 15:18:49 +0530136 {%- if doc.discount_amount %}
137 <ScontoMaggiorazione>
138 {%- if doc.discount_amount > 0.0 %}
139 <Tipo>SC</Tipo>
140 {%- else %}
141 <Tipo>MG</Tipo>
142 {%- endif %}
143 {%- if doc.additional_discount_percentage > 0.0 %}
144 <Percentuale>{{ format_float(doc.additional_discount_percentage) }}</Percentuale>
145 {%- endif %}
146 <Importo>{{ format_float(doc.discount_amount) }}</Importo>
147 </ScontoMaggiorazione>
148 {%- endif %}
149 <ImportoTotaleDocumento>{{ format_float(doc.rounded_total or doc.grand_total) }}</ImportoTotaleDocumento>
Gauravf1e28e02019-02-13 16:46:24 +0530150 <Causale>VENDITA</Causale>
151 </DatiGeneraliDocumento>
Rohit Waghchaure1b7059b2019-03-12 17:44:29 +0530152 {%- for po_no, po_date in doc.customer_po_data.items() %}
153 <DatiOrdineAcquisto>
154 <IdDocumento>{{ po_no }}</IdDocumento>
155 <Data>{{ po_date }}</Data>
156 </DatiOrdineAcquisto>
Rohit Waghchaure22ebaf12019-03-07 15:18:49 +0530157 {%- endfor %}
Gauravf1e28e02019-02-13 16:46:24 +0530158 {%- if doc.is_return and doc.return_against_unamended %}
159 <DatiFattureCollegate>
160 <IdDocumento>{{ doc.return_against_unamended }}</IdDocumento>
161 </DatiFattureCollegate>
162 {%- endif %}
Rohit Waghchaure22ebaf12019-03-07 15:18:49 +0530163 {%- for row in doc.e_invoice_items %}
164 {%- if row.delivery_note %}
165 <DatiDDT>
166 <NumeroDDT>{{ row.delivery_note }}</NumeroDDT>
167 <DataDDT>{{ frappe.db.get_value('Delivery Note', row.delivery_note, 'posting_date') }}</DataDDT>
168 <RiferimentoNumeroLinea>{{ row.idx }}</RiferimentoNumeroLinea>
169 </DatiDDT>
170 {%- endif %}
171 {%- endfor %}
Gauravf1e28e02019-02-13 16:46:24 +0530172 {%- if doc.shipping_address_data %}
173 <DatiTrasporto>
174 <IndirizzoResa>
175 {{ render_address(doc.shipping_address_data) }}
176 </IndirizzoResa>
177 </DatiTrasporto>
178 {%- endif %}
179 </DatiGenerali>
180 <DatiBeniServizi>
Gaurav2670ad72019-02-19 10:17:17 +0530181 {%- for item in doc.e_invoice_items %}
Gauravf1e28e02019-02-13 16:46:24 +0530182 <DettaglioLinee>
183 <NumeroLinea>{{ item.idx }}</NumeroLinea>
184 <CodiceArticolo>
185 <CodiceTipo>CODICE</CodiceTipo>
186 <CodiceValore>{{ item.item_code }}</CodiceValore>
187 </CodiceArticolo>
Rohit Waghchaure74cfe572019-02-26 20:08:26 +0530188 <Descrizione>{{ html2text(item.description or '') or item.item_name }}</Descrizione>
Gauravf1e28e02019-02-13 16:46:24 +0530189 <Quantita>{{ format_float(item.qty) }}</Quantita>
190 <UnitaMisura>{{ item.stock_uom }}</UnitaMisura>
rohitwaghchaurecdcff6c2019-09-09 10:15:01 +0530191 <PrezzoUnitario>{{ format_float(item.price_list_rate or item.rate, item_meta.get_field("rate").precision) }}</PrezzoUnitario>
Gauravf1e28e02019-02-13 16:46:24 +0530192 {{ render_discount_or_margin(item) }}
rohitwaghchaurecdcff6c2019-09-09 10:15:01 +0530193 <PrezzoTotale>{{ format_float(item.amount, item_meta.get_field("amount").precision) }}</PrezzoTotale>
194 <AliquotaIVA>{{ format_float(item.tax_rate, item_meta.get_field("tax_rate").precision) }}</AliquotaIVA>
Gauravf1e28e02019-02-13 16:46:24 +0530195 {%- if item.tax_exemption_reason %}
196 <Natura>{{ item.tax_exemption_reason.split("-")[0] }}</Natura>
197 {%- endif %}
198 </DettaglioLinee>
199 {%- endfor %}
200 {%- for tax, data in doc.tax_data.items() %}
201 <DatiRiepilogo>
202 <AliquotaIVA>{{ format_float(tax|flt) }}</AliquotaIVA>
203 {%- if data.tax_exemption_reason %}
204 <Natura>{{ data.tax_exemption_reason.split("-")[0] }}</Natura>
205 {%- endif %}
rohitwaghchaurecdcff6c2019-09-09 10:15:01 +0530206 <ImponibileImporto>{{ format_float(data.taxable_amount, item_meta.get_field("tax_amount").precision) }}</ImponibileImporto>
207 <Imposta>{{ format_float(data.tax_amount, item_meta.get_field("tax_amount").precision) }}</Imposta>
Gauravf1e28e02019-02-13 16:46:24 +0530208 <EsigibilitaIVA>{{ doc.vat_collectability.split("-")[0] }}</EsigibilitaIVA>
209 {%- if data.tax_exemption_law %}
210 <RiferimentoNormativo>{{ data.tax_exemption_law }}</RiferimentoNormativo>
211 {%- endif %}
212 </DatiRiepilogo>
213 {%- endfor %}
214 </DatiBeniServizi>
215 {%- if doc.payment_schedule %}
216 <DatiPagamento>
217 {%- if payment_schedule|length > 1 %}
218 <CondizioniPagamento>TP01</CondizioniPagamento>
219 {%- else %}
220 <CondizioniPagamento>TP02</CondizioniPagamento>
221 {%- endif %}
222 {%- for payment_term in doc.payment_schedule %}
223 <DettaglioPagamento>
224 <ModalitaPagamento>{{ payment_term.mode_of_payment_code.split("-")[0] }}</ModalitaPagamento>
225 <DataScadenzaPagamento>{{ payment_term.due_date }}</DataScadenzaPagamento>
226 <ImportoPagamento>{{ format_float(payment_term.payment_amount) }}</ImportoPagamento>
Rohit Waghchaure22ebaf12019-03-07 15:18:49 +0530227 {%- if payment_term.bank_account_name %}
228 <IstitutoFinanziario>{{ payment_term.bank_account_name }}</IstitutoFinanziario>
229 {%- endif %}
Gauravb30a9b12019-03-01 12:33:19 +0530230 {%- if payment_term.bank_account_iban %}
231 <IBAN>{{ payment_term.bank_account_iban }}</IBAN>
232 <ABI>{{ payment_term.bank_account_iban[5:10] }}</ABI>
233 <CAB>{{ payment_term.bank_account_iban[10:15] }}</CAB>
234 {%- endif %}
235 {%- if payment_term.bank_account_swift_number %}
236 <BIC>{{ payment_term.bank_account_swift_number }}</BIC>
237 {%- endif %}
Gauravf1e28e02019-02-13 16:46:24 +0530238 </DettaglioPagamento>
239 {%- endfor %}
240 </DatiPagamento>
241 {%- endif %}
242 </FatturaElettronicaBody>
243</p:FatturaElettronica>