Skip to content

Commit

Permalink
feat(E Invoice Import): link or view existing Purchase Invoice
Browse files Browse the repository at this point in the history
  • Loading branch information
barredterra committed Nov 30, 2024
1 parent 7cbabd0 commit 433f3f4
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,33 @@ frappe.ui.form.on("E Invoice Import", {
};

if (frm.doc.docstatus === 1) {
frm.add_custom_button(
__("Purchase Invoice"),
function () {
const { linked_invoice, unlinked_invoice } = frm.doc.__onload;
if (linked_invoice && frappe.model.can_read("Purchase Invoice")) {
frm.add_custom_button(__("View {0}", [linked_invoice]), function () {
frappe.set_route("Form", "Purchase Invoice", linked_invoice);
});
} else if (unlinked_invoice && frappe.model.can_write("Purchase Invoice")) {
frm.add_custom_button(__("Link to {0}", [unlinked_invoice]), function () {
frappe
.xcall(
"eu_einvoice.european_e_invoice.doctype.e_invoice_import.e_invoice_import.link_to_purchase_invoice",
{
einvoice: frm.doc.name,
purchase_invoice: unlinked_invoice,
}
)
.then(() => {
frm.reload_doc();
});
});
} else if (frappe.model.can_create("Purchase Invoice")) {
frm.add_custom_button(__("Create Purchase Invoice"), function () {
frappe.model.open_mapped_doc({
method: "eu_einvoice.european_e_invoice.doctype.e_invoice_import.e_invoice_import.create_purchase_invoice",
frm: frm,
});
},
__("Create")
);
});
}
}
},
create_supplier: function (frm) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,23 @@ def before_submit(self):
def on_submit(self):
self.add_seller_product_ids_to_items()

def onload(self):
if self.docstatus == 0:
return

invoices = frappe.get_list(
"Purchase Invoice",
filters={"bill_no": self.id, "supplier": self.supplier, "company": self.company},
fields=["name", "e_invoice_import"],
)
linked_invoice = next(
(invoice.name for invoice in invoices if invoice.e_invoice_import == self.name), None
)
unlinked_invoice = next((invoice.name for invoice in invoices if not invoice.e_invoice_import), None)

self.set_onload("linked_invoice", linked_invoice)
self.set_onload("unlinked_invoice", unlinked_invoice)

def get_xml_bytes(self) -> bytes:
return get_xml_bytes(Path(get_site_path(self.einvoice.lstrip("/"))).resolve())

Expand Down Expand Up @@ -460,3 +477,21 @@ def create_einvoice_from_po(source_name, target_doc=None):
},
target_doc,
)


@frappe.whitelist()
def link_to_purchase_invoice(einvoice: str, purchase_invoice: str):
"""Link an existing E Invoice Import to an existing Purchase Invoice."""
pi = frappe.get_doc("Purchase Invoice", purchase_invoice)
pi.check_permission("write")
if pi.e_invoice_import:
frappe.throw(
_("Purchase Invoice {0} is already linked to E Invoice Import {1}").format(
purchase_invoice, pi.e_invoice_import
)
)

if not frappe.db.get_list("E Invoice Import", filters={"name": einvoice}, limit=1):
frappe.throw(_("E Invoice Import {0} does not exist").format(einvoice))

pi.db_set("e_invoice_import", einvoice)
42 changes: 29 additions & 13 deletions eu_einvoice/locale/de.po
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: European e-Invoice VERSION\n"
"Report-Msgid-Bugs-To: hallo@alyf.de\n"
"POT-Creation-Date: 2024-11-25 18:57+0053\n"
"POT-Creation-Date: 2024-11-30 21:02+0053\n"
"PO-Revision-Date: 2024-11-25 18:57+0053\n"
"Last-Translator: hallo@alyf.de\n"
"Language: de\n"
Expand Down Expand Up @@ -128,7 +128,6 @@ msgid "Correct German Federal Administration Invoice"
msgstr "Korrekte XRechnung"

#: eu_einvoice/european_e_invoice/custom/purchase_order.js:12
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:70
msgid "Create"
msgstr "Erstellen"

Expand All @@ -137,6 +136,10 @@ msgstr "Erstellen"
msgid "Create Item"
msgstr "Artikel erstellen"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:82
msgid "Create Purchase Invoice"
msgstr "Eingangsrechnung erstellen"

#. Label of the create_supplier (Button) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Create Supplier"
Expand Down Expand Up @@ -193,6 +196,10 @@ msgstr "Fälligkeitsdatum"
msgid "E Invoice Import"
msgstr "E-Rechnungs-Import"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:495
msgid "E Invoice Import {0} does not exist"
msgstr "E-Rechnungs-Import {0} existiert nicht"

#. Name of a DocType
#: eu_einvoice/european_e_invoice/doctype/e_invoice_item/e_invoice_item.json
msgid "E Invoice Item"
Expand All @@ -213,7 +220,7 @@ msgstr "E-Rechnungs-Steuer"
msgid "E-Invoice"
msgstr "E-Rechnung"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:114
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:167
msgid "European Invoice"
msgstr "Europäische Rechnung"

Expand All @@ -223,7 +230,7 @@ msgstr "Europäische Rechnung"
msgid "File Section"
msgstr "Datei-Abschnitt"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:115
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:175
msgid "German Federal Administration Invoice"
msgstr "Deutsche Bundesverwaltung"

Expand Down Expand Up @@ -254,12 +261,16 @@ msgstr "Artikel"
msgid "Items"
msgstr "Positionen"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:68
msgid "Link to {0}"
msgstr "Mit {0} verknüpfen"

#. Label of the net_rate (Currency) field in DocType 'E Invoice Item'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_item/e_invoice_item.json
msgid "Net Rate"
msgstr "Nettopreis"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:283
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:312
msgid "No XML data found in PDF file."
msgstr "Keine XML-Daten in der PDF-Datei gefunden."

Expand Down Expand Up @@ -303,9 +314,9 @@ msgstr "Produktbeschreibung"
msgid "Product Name"
msgstr "Produktname"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:63
msgid "Purchase Invoice"
msgstr "Eingangsrechnung"
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:489
msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}"
msgstr "Eingangsrechnung {0} ist bereits mit E-Rechnungs-Import {1} verknüpft"

#. Name of a role
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
Expand Down Expand Up @@ -429,7 +440,7 @@ msgstr "Einheit"
msgid "Unit Code"
msgstr "Einheits-Code"

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:287
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:316
msgid "Unsupported file format '{0}'"
msgstr "Nicht unterstütztes Dateiformat '{0}'"

Expand All @@ -438,17 +449,22 @@ msgstr "Nicht unterstütztes Dateiformat '{0}'"
msgid "Upload the <code>.xml</code> or <code>.pdf</code> file provided by your supplier."
msgstr "Laden Sie die von Ihrem Lieferanten bereitgestellte <code>.xml</code>- oder <code>.pdf</code>-Datei hoch."

#. Label of the validation_tab (Tab Break) field in DocType 'E Invoice Import'
#. Label of the validation_details_section (Section Break) field in DocType 'E
#. Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Validation"
msgstr "Validierung"
msgid "Validation Details"
msgstr "Validierungsdetails"

#. Label of the validation_errors (Text) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Validation Errors"
msgstr "Validierungsfehler"

#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:362
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:64
msgid "View {0}"
msgstr "{0} ansehen"

#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:476
msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice"
msgstr "{0} Zeile #{1}: Typ '{2}' wird in der E-Rechnung nicht unterstützt"

40 changes: 28 additions & 12 deletions eu_einvoice/locale/main.pot
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: European e-Invoice VERSION\n"
"Report-Msgid-Bugs-To: hallo@alyf.de\n"
"POT-Creation-Date: 2024-11-25 18:57+0053\n"
"PO-Revision-Date: 2024-11-25 18:57+0053\n"
"POT-Creation-Date: 2024-11-30 21:02+0053\n"
"PO-Revision-Date: 2024-11-30 21:02+0053\n"
"Last-Translator: hallo@alyf.de\n"
"Language-Team: hallo@alyf.de\n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -126,7 +126,6 @@ msgid "Correct German Federal Administration Invoice"
msgstr ""

#: eu_einvoice/european_e_invoice/custom/purchase_order.js:12
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:70
msgid "Create"
msgstr ""

Expand All @@ -135,6 +134,10 @@ msgstr ""
msgid "Create Item"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:82
msgid "Create Purchase Invoice"
msgstr ""

#. Label of the create_supplier (Button) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Create Supplier"
Expand Down Expand Up @@ -191,6 +194,10 @@ msgstr ""
msgid "E Invoice Import"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:495
msgid "E Invoice Import {0} does not exist"
msgstr ""

#. Name of a DocType
#: eu_einvoice/european_e_invoice/doctype/e_invoice_item/e_invoice_item.json
msgid "E Invoice Item"
Expand All @@ -211,7 +218,7 @@ msgstr ""
msgid "E-Invoice"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:114
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:167
msgid "European Invoice"
msgstr ""

Expand All @@ -221,7 +228,7 @@ msgstr ""
msgid "File Section"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:115
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:175
msgid "German Federal Administration Invoice"
msgstr ""

Expand Down Expand Up @@ -252,12 +259,16 @@ msgstr ""
msgid "Items"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:68
msgid "Link to {0}"
msgstr ""

#. Label of the net_rate (Currency) field in DocType 'E Invoice Item'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_item/e_invoice_item.json
msgid "Net Rate"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:283
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:312
msgid "No XML data found in PDF file."
msgstr ""

Expand Down Expand Up @@ -301,8 +312,8 @@ msgstr ""
msgid "Product Name"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:63
msgid "Purchase Invoice"
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:489
msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}"
msgstr ""

#. Name of a role
Expand Down Expand Up @@ -427,7 +438,7 @@ msgstr ""
msgid "Unit Code"
msgstr ""

#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:287
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:316
msgid "Unsupported file format '{0}'"
msgstr ""

Expand All @@ -436,17 +447,22 @@ msgstr ""
msgid "Upload the <code>.xml</code> or <code>.pdf</code> file provided by your supplier."
msgstr ""

#. Label of the validation_tab (Tab Break) field in DocType 'E Invoice Import'
#. Label of the validation_details_section (Section Break) field in DocType 'E
#. Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Validation"
msgid "Validation Details"
msgstr ""

#. Label of the validation_errors (Text) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Validation Errors"
msgstr ""

#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:362
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.js:64
msgid "View {0}"
msgstr ""

#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:476
msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice"
msgstr ""

0 comments on commit 433f3f4

Please sign in to comment.