summaryrefslogtreecommitdiff
path: root/addons/account_edi_facturx/data/facturx_templates.xml
blob: c68389b1e9fcab72a76b0939e30077f0e333332a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <template id="account_invoice_line_facturx_export">
            <t t-set="line" t-value="line_values['line']"/>
            <t  xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
                xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
                xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
                <ram:IncludedSupplyChainTradeLineItem>
                    <!-- Line number. -->
                    <ram:AssociatedDocumentLineDocument>
                        <ram:LineID t-esc="line_values['index']"/>
                    </ram:AssociatedDocumentLineDocument>

                    <!-- Product. -->
                    <ram:SpecifiedTradeProduct>
                        <ram:GlobalID
                            schemeID="0160"
                            t-if="line.product_id and line.product_id.barcode"
                            t-esc="line.product_id.barcode"/>
                        <ram:SellerAssignedID
                            t-if="line.product_id and line.product_id.default_code"
                            t-esc="line.product_id.default_code"/>
                        <ram:Name t-esc="line.name"/>
                    </ram:SpecifiedTradeProduct>

                    <!-- Amounts. -->
                    <ram:SpecifiedLineTradeAgreement>
                        <ram:GrossPriceProductTradePrice>
                            <ram:ChargeAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(line.price_unit, currency)"/>

                            <!-- Discount. -->
                            <ram:AppliedTradeAllowanceCharge t-if="line.discount">
                                <ram:ChargeIndicator>
                                    <udt:Indicator t-esc="'false' if line.discount == 100 else 'true'"/>
                                </ram:ChargeIndicator>
                                <ram:CalculationPercent t-esc="line.discount"/>
                            </ram:AppliedTradeAllowanceCharge>
                        </ram:GrossPriceProductTradePrice>
                    </ram:SpecifiedLineTradeAgreement>

                    <!-- Quantity. -->
                    <ram:SpecifiedLineTradeDelivery>
                        <ram:BilledQuantity
                            t-esc="line.quantity"/>
                    </ram:SpecifiedLineTradeDelivery>

                    <ram:SpecifiedLineTradeSettlement>
                        <t t-foreach="line_values['tax_details']" t-as="tax_vals">
                            <t t-set="tax" t-value="tax_vals['tax']"/>
                            <ram:ApplicableTradeTax t-if="tax.amount_type == 'percent'">
                                <ram:RateApplicablePercent t-esc="tax.amount"/>
                            </ram:ApplicableTradeTax>
                        </t>
                        <!-- Subtotal. -->
                        <ram:SpecifiedTradeSettlementLineMonetarySummation>
                            <ram:LineTotalAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(line.price_subtotal, currency)"/>
                        </ram:SpecifiedTradeSettlementLineMonetarySummation>
                    </ram:SpecifiedLineTradeSettlement>

                </ram:IncludedSupplyChainTradeLineItem>
            </t>
        </template>

        <template id="account_invoice_partner_facturx_export">
            <t  xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
                xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
                xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
                <!-- Contact. -->
                <ram:Name t-if="partner.name" t-esc="partner.name"/>
                <ram:DefinedTradeContact>
                    <ram:PersonName t-esc="partner.name"/>
                    <ram:TelephoneUniversalCommunication t-if="partner.phone or partner.mobile">
                        <ram:CompleteNumber t-esc="partner.phone or partner.mobile"/>
                    </ram:TelephoneUniversalCommunication>
                    <ram:EmailURIUniversalCommunication t-if="partner.email">
                        <ram:URIID schemeID='SMTP' t-esc="partner.email"/>
                    </ram:EmailURIUniversalCommunication>
                </ram:DefinedTradeContact>

                <!-- Address. -->
                <ram:PostalTradeAddress>
                    <ram:PostcodeCode t-if="partner.zip" t-esc="partner.zip"/>
                    <ram:LineOne t-if="partner.street" t-esc="partner.street"/>
                    <ram:LineTwo t-if="partner.street2" t-esc="partner.street2"/>
                    <ram:CityName t-if="partner.city" t-esc="partner.city"/>
                    <ram:CountryID t-if="partner.country_id" t-esc="partner.country_id.code"/>
                </ram:PostalTradeAddress>
            </t>
        </template>

        <template id="account_invoice_facturx_export">
            <t t-set="currency" t-value="record.currency_id or record.company_currency_id"/>
            <rsm:CrossIndustryInvoice
                xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
                xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
                xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
                <!-- Factur-x level:
                    * minimum or basicwl:   urn:factur-x.eu:1p0...
                    * basic:                urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:basic
                    * en16931:              urn:cen.eu:en16931:2017
                -->
                <rsm:ExchangedDocumentContext>
                    <ram:GuidelineSpecifiedDocumentContextParameter>
                        <ram:ID>urn:cen.eu:en16931:2017</ram:ID>
                    </ram:GuidelineSpecifiedDocumentContextParameter>
                </rsm:ExchangedDocumentContext>

                <!-- Document Headers. -->
                <rsm:ExchangedDocument>
                    <ram:ID t-esc="record.name"/>
                    <ram:TypeCode t-esc="'381' if 'refund' in record.move_type else '380'"/>
                    <ram:IssueDateTime>
                        <udt:DateTimeString format="102" t-esc="format_date(record.invoice_date)"/>
                    </ram:IssueDateTime>
                    <ram:IncludedNote t-if="record.narration">
                        <ram:Content t-esc="record.narration"/>
                    </ram:IncludedNote>
                </rsm:ExchangedDocument>

                <rsm:SupplyChainTradeTransaction>
                    <!-- Invoice lines. -->
                    <t t-foreach="invoice_line_values" t-as="line_values">
                        <t t-call="account_edi_facturx.account_invoice_line_facturx_export"/>
                    </t>

                    <!-- Partners. -->
                    <ram:ApplicableHeaderTradeAgreement>
                        <!-- Seller. -->
                        <ram:SellerTradeParty>
                            <!-- Address. -->
                            <t t-call="account_edi_facturx.account_invoice_partner_facturx_export">
                                <t t-set="partner" t-value="record.company_id.partner_id"/>
                            </t>

                            <!-- VAT. -->
                            <ram:SpecifiedTaxRegistration t-if="record.company_id.vat">
                                <ram:ID schemeID="VA" t-esc="record.company_id.vat"/>
                            </ram:SpecifiedTaxRegistration>
                        </ram:SellerTradeParty>

                        <!-- Customer. -->
                        <ram:BuyerTradeParty>
                            <!-- Address. -->
                            <t t-call="account_edi_facturx.account_invoice_partner_facturx_export">
                                <t t-set="partner" t-value="record.commercial_partner_id"/>
                            </t>

                            <!-- VAT. -->
                            <ram:SpecifiedTaxRegistration t-if="record.commercial_partner_id.vat">
                                <ram:ID schemeID="VA" t-esc="record.commercial_partner_id.vat"/>
                            </ram:SpecifiedTaxRegistration>
                        </ram:BuyerTradeParty>

                        <!-- Reference. -->
                        <ram:BuyerOrderReferencedDocument>
                            <ram:IssuerAssignedID t-esc="'%s: %s' % (record.name, record.payment_reference) if record.payment_reference else record.name"/>
                        </ram:BuyerOrderReferencedDocument>
                    </ram:ApplicableHeaderTradeAgreement>

                    <!-- Delivery. Don't make a dependency with sale only for one field. -->
                    <ram:ApplicableHeaderTradeDelivery>
                        <ram:ShipToTradeParty
                            t-if="'partner_shipping_id' in record._fields and record.partner_shipping_id">
                            <t t-call="account_edi_facturx.account_invoice_partner_facturx_export">
                                <t t-set="partner" t-value="record.partner_shipping_id"/>
                            </t>
                        </ram:ShipToTradeParty>
                    </ram:ApplicableHeaderTradeDelivery>

                    <!-- Taxes. -->
                    <ram:ApplicableHeaderTradeSettlement>

                        <!-- Bank account. -->
                        <ram:SpecifiedTradeSettlementPaymentMeans t-if="record.partner_bank_id.acc_type == 'iban'">
                            <ram:PayeePartyCreditorFinancialAccount>
                                <ram:IBANID t-esc="record.partner_bank_id.sanitized_acc_number"/>
                            </ram:PayeePartyCreditorFinancialAccount>
                        </ram:SpecifiedTradeSettlementPaymentMeans>

                        <!-- Tax Summary. -->
                        <t t-foreach="tax_details" t-as="tax_vals">
                            <t t-set="tax_line" t-value="tax_vals['line']"/>
                            <ram:ApplicableTradeTax>
                                <ram:CalculatedAmount
                                    t-att-currencyID="currency.name"
                                    t-esc="format_monetary(tax_vals['tax_amount'], currency)"/>
                                <ram:BasisAmount
                                    t-att-currencyID="currency.name"
                                    t-esc="format_monetary(tax_vals['tax_base_amount'], currency)"/>
                                <ram:RateApplicablePercent
                                    t-if="tax_line.tax_line_id.amount_type == 'percent'"
                                    t-esc="tax_line.tax_line_id.amount"/>
                            </ram:ApplicableTradeTax>
                        </t>

                        <!-- Payment Term. -->
                        <ram:SpecifiedTradePaymentTerms>
                            <ram:Description t-if="record.invoice_payment_term_id" t-esc="record.invoice_payment_term_id.name"/>
                            <ram:DueDateDateTime t-if="record.invoice_date_due">
                                <udt:DateTimeString t-esc="format_date(record.invoice_date_due)"/>
                            </ram:DueDateDateTime>
                        </ram:SpecifiedTradePaymentTerms>

                        <!-- Summary. -->
                        <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
                            <ram:LineTotalAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_untaxed, currency)"/>
                            <ram:TaxBasisTotalAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_untaxed, currency)"/>
                            <ram:TaxTotalAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_tax, currency)"/>
                            <ram:GrandTotalAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_total, currency)"/>
                            <ram:TotalPrepaidAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_total - record.amount_residual, currency)"/>
                            <ram:DuePayableAmount
                                t-att-currencyID="currency.name"
                                t-esc="format_monetary(record.amount_residual, currency)"/>
                        </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
                    </ram:ApplicableHeaderTradeSettlement>
                </rsm:SupplyChainTradeTransaction>
            </rsm:CrossIndustryInvoice>
        </template>
    </data>
</odoo>