Merge pull request #16859 from rohitwaghchaure/added_new_tags_e_invoice_xml
fix: added tags for discount amount, multiple customer po no, delivery notes
This commit is contained in:
commit
ea19250884
@ -587,5 +587,5 @@ erpnext.patches.v11_1.setup_guardian_role
|
||||
execute:frappe.delete_doc('DocType', 'Notification Control')
|
||||
erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
|
||||
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
|
||||
erpnext.patches.v11_0.make_italian_localization_fields # 01-03-2019
|
||||
erpnext.patches.v11_1.make_job_card_time_logs
|
||||
erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019
|
||||
erpnext.patches.v11_1.make_job_card_time_logs
|
||||
|
@ -6,7 +6,6 @@ from erpnext.regional.italy.setup import make_custom_fields, setup_report
|
||||
from erpnext.regional.italy import state_codes
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
company = frappe.get_all('Company', filters = {'country': 'Italy'})
|
||||
if not company:
|
||||
@ -27,4 +26,12 @@ def execute():
|
||||
frappe.db.sql("""
|
||||
UPDATE tabAddress set {condition} country_code = UPPER(ifnull((select code
|
||||
from `tabCountry` where name = `tabAddress`.country), ''))
|
||||
where country_code is null and state_code is null
|
||||
""".format(condition=condition))
|
||||
|
||||
frappe.db.sql("""
|
||||
UPDATE `tabSales Invoice Item` si, `tabSales Order` so
|
||||
set si.customer_po_no = so.po_no, si.customer_po_date = so.po_date
|
||||
WHERE
|
||||
si.sales_order = so.name and so.po_no is not null
|
||||
""")
|
||||
|
@ -127,22 +127,42 @@
|
||||
<ImportoBollo>{{ format_float(doc.stamp_duty) }}</ImportoBollo>
|
||||
</DatiBollo>
|
||||
{%- endif %}
|
||||
<ImportoTotaleDocumento>{{ format_float(doc.grand_total) }}</ImportoTotaleDocumento>
|
||||
{%- if doc.discount_amount %}
|
||||
<ScontoMaggiorazione>
|
||||
{%- if doc.discount_amount > 0.0 %}
|
||||
<Tipo>SC</Tipo>
|
||||
{%- else %}
|
||||
<Tipo>MG</Tipo>
|
||||
{%- endif %}
|
||||
{%- if doc.additional_discount_percentage > 0.0 %}
|
||||
<Percentuale>{{ format_float(doc.additional_discount_percentage) }}</Percentuale>
|
||||
{%- endif %}
|
||||
<Importo>{{ format_float(doc.discount_amount) }}</Importo>
|
||||
</ScontoMaggiorazione>
|
||||
{%- endif %}
|
||||
<ImportoTotaleDocumento>{{ format_float(doc.rounded_total or doc.grand_total) }}</ImportoTotaleDocumento>
|
||||
<Causale>VENDITA</Causale>
|
||||
</DatiGeneraliDocumento>
|
||||
{%- if doc.po_no %}
|
||||
<DatiOrdineAcquisto>
|
||||
<IdDocumento>{{ doc.po_no }}</IdDocumento>
|
||||
{%- if doc.po_date %}
|
||||
<Data>{{ doc.po_date }}</Data>
|
||||
{%- endif %}
|
||||
</DatiOrdineAcquisto>
|
||||
{%- endif %}
|
||||
{%- for po_no, po_date in doc.customer_po_data.items() %}
|
||||
<DatiOrdineAcquisto>
|
||||
<IdDocumento>{{ po_no }}</IdDocumento>
|
||||
<Data>{{ po_date }}</Data>
|
||||
</DatiOrdineAcquisto>
|
||||
{%- endfor %}
|
||||
{%- if doc.is_return and doc.return_against_unamended %}
|
||||
<DatiFattureCollegate>
|
||||
<IdDocumento>{{ doc.return_against_unamended }}</IdDocumento>
|
||||
</DatiFattureCollegate>
|
||||
{%- endif %}
|
||||
{%- for row in doc.e_invoice_items %}
|
||||
{%- if row.delivery_note %}
|
||||
<DatiDDT>
|
||||
<NumeroDDT>{{ row.delivery_note }}</NumeroDDT>
|
||||
<DataDDT>{{ frappe.db.get_value('Delivery Note', row.delivery_note, 'posting_date') }}</DataDDT>
|
||||
<RiferimentoNumeroLinea>{{ row.idx }}</RiferimentoNumeroLinea>
|
||||
</DatiDDT>
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
{%- if doc.shipping_address_data %}
|
||||
<DatiTrasporto>
|
||||
<IndirizzoResa>
|
||||
@ -164,7 +184,11 @@
|
||||
<UnitaMisura>{{ item.stock_uom }}</UnitaMisura>
|
||||
<PrezzoUnitario>{{ format_float(item.price_list_rate or item.rate) }}</PrezzoUnitario>
|
||||
{{ render_discount_or_margin(item) }}
|
||||
<PrezzoTotale>{{ format_float(item.amount) }}</PrezzoTotale>
|
||||
{%- if (item.discount_amount or item.rate_with_margin) %}
|
||||
<PrezzoTotale>{{ format_float(item.net_amount) }}</PrezzoTotale>
|
||||
{%- else %}
|
||||
<PrezzoTotale>{{ format_float(item.amount) }}</PrezzoTotale>
|
||||
{%- endif %}
|
||||
<AliquotaIVA>{{ format_float(item.tax_rate) }}</AliquotaIVA>
|
||||
{%- if item.tax_exemption_reason %}
|
||||
<Natura>{{ item.tax_exemption_reason.split("-")[0] }}</Natura>
|
||||
@ -198,7 +222,9 @@
|
||||
<ModalitaPagamento>{{ payment_term.mode_of_payment_code.split("-")[0] }}</ModalitaPagamento>
|
||||
<DataScadenzaPagamento>{{ payment_term.due_date }}</DataScadenzaPagamento>
|
||||
<ImportoPagamento>{{ format_float(payment_term.payment_amount) }}</ImportoPagamento>
|
||||
<IstitutoFinanziario>{{ payment_term.bank_account_name }}</IstitutoFinanziario>
|
||||
{%- if payment_term.bank_account_name %}
|
||||
<IstitutoFinanziario>{{ payment_term.bank_account_name }}</IstitutoFinanziario>
|
||||
{%- endif %}
|
||||
{%- if payment_term.bank_account_iban %}
|
||||
<IBAN>{{ payment_term.bank_account_iban }}</IBAN>
|
||||
<ABI>{{ payment_term.bank_account_iban[5:10] }}</ABI>
|
||||
|
@ -3,15 +3,26 @@ erpnext.setup_e_invoice_button = (doctype) => {
|
||||
refresh: (frm) => {
|
||||
if(frm.doc.docstatus == 1) {
|
||||
frm.add_custom_button('Generate E-Invoice', () => {
|
||||
var w = window.open(
|
||||
frappe.urllib.get_full_url(
|
||||
"/api/method/erpnext.regional.italy.utils.generate_single_invoice?"
|
||||
+ "docname=" + frm.doc.name
|
||||
)
|
||||
)
|
||||
if (!w) {
|
||||
frappe.msgprint(__("Please enable pop-ups")); return;
|
||||
}
|
||||
frm.call({
|
||||
method: "erpnext.regional.italy.utils.generate_single_invoice",
|
||||
args: {
|
||||
docname: frm.doc.name
|
||||
},
|
||||
callback: function(r) {
|
||||
frm.reload_doc();
|
||||
if(r.message) {
|
||||
var w = window.open(
|
||||
frappe.urllib.get_full_url(
|
||||
"/api/method/erpnext.regional.italy.utils.download_e_invoice_file?"
|
||||
+ "file_name=" + r.message
|
||||
)
|
||||
)
|
||||
if (!w) {
|
||||
frappe.msgprint(__("Please enable pop-ups")); return;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,22 @@ def make_custom_fields(update=True):
|
||||
print_hide=1, hidden=1, read_only=1, options="currency")
|
||||
]
|
||||
|
||||
customer_po_fields = [
|
||||
dict(fieldname='customer_po_details', label='Customer PO',
|
||||
fieldtype='Section Break', insert_after='image'),
|
||||
dict(fieldname='customer_po_no', label='Customer PO No',
|
||||
fieldtype='Data', insert_after='customer_po_details',
|
||||
fetch_from = 'sales_order.po_no',
|
||||
print_hide=1, allow_on_submit=1, fetch_if_empty= 1, read_only=1, no_copy=1),
|
||||
dict(fieldname='customer_po_clm_brk', label='',
|
||||
fieldtype='Column Break', insert_after='customer_po_no',
|
||||
print_hide=1, read_only=1),
|
||||
dict(fieldname='customer_po_date', label='Customer PO Date',
|
||||
fieldtype='Date', insert_after='customer_po_clm_brk',
|
||||
fetch_from = 'sales_order.po_date',
|
||||
print_hide=1, allow_on_submit=1, fetch_if_empty= 1, read_only=1, no_copy=1)
|
||||
]
|
||||
|
||||
custom_fields = {
|
||||
'Company': [
|
||||
dict(fieldname='sb_e_invoicing', label='E-Invoicing',
|
||||
@ -128,7 +144,7 @@ def make_custom_fields(update=True):
|
||||
'Purchase Invoice Item': invoice_item_fields,
|
||||
'Sales Order Item': invoice_item_fields,
|
||||
'Delivery Note Item': invoice_item_fields,
|
||||
'Sales Invoice Item': invoice_item_fields,
|
||||
'Sales Invoice Item': invoice_item_fields + customer_po_fields,
|
||||
'Quotation Item': invoice_item_fields,
|
||||
'Purchase Order Item': invoice_item_fields,
|
||||
'Purchase Receipt Item': invoice_item_fields,
|
||||
|
@ -82,6 +82,14 @@ def prepare_invoice(invoice, progressive_number):
|
||||
if item.tax_rate == 0.0 and item.tax_amount == 0.0:
|
||||
item.tax_exemption_reason = tax_data["0.0"]["tax_exemption_reason"]
|
||||
|
||||
customer_po_data = {}
|
||||
for d in invoice.e_invoice_items:
|
||||
if (d.customer_po_no and d.customer_po_date
|
||||
and d.customer_po_no not in customer_po_data):
|
||||
customer_po_data[d.customer_po_no] = d.customer_po_date
|
||||
|
||||
invoice.customer_po_data = customer_po_data
|
||||
|
||||
return invoice
|
||||
|
||||
def get_conditions(filters):
|
||||
@ -267,13 +275,18 @@ def prepare_and_attach_invoice(doc, replace=False):
|
||||
def generate_single_invoice(docname):
|
||||
doc = frappe.get_doc("Sales Invoice", docname)
|
||||
|
||||
|
||||
e_invoice = prepare_and_attach_invoice(doc, True)
|
||||
|
||||
return e_invoice.file_name
|
||||
|
||||
@frappe.whitelist()
|
||||
def download_e_invoice_file(file_name):
|
||||
content = None
|
||||
with open(frappe.get_site_path('private', 'files', e_invoice.file_name), "r") as f:
|
||||
with open(frappe.get_site_path('private', 'files', file_name), "r") as f:
|
||||
content = f.read()
|
||||
|
||||
frappe.local.response.filename = e_invoice.file_name
|
||||
frappe.local.response.filename = file_name
|
||||
frappe.local.response.filecontent = content
|
||||
frappe.local.response.type = "download"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user