From 491dc2be9dddfdeae5b828af5df39669645f574b Mon Sep 17 00:00:00 2001 From: jeowsome Date: Thu, 10 Oct 2024 06:16:51 +0800 Subject: [PATCH] oct 10 tasks update --- supplier-portal/src/pages/NewInvoice.vue | 15 ++++ supplier-portal/src/pages/SupplierInvoice.vue | 14 ++++ .../invoice_payment_references/__init__.py | 0 .../invoice_payment_references.json | 47 +++++++++++++ .../invoice_payment_references.py | 9 +++ .../doctype/invoices/invoices.json | 37 ++++++++-- .../doctype/invoices/invoices.py | 47 +++++++++++-- .../doctype/supplier/supplier.json | 22 +++++- .../doctype/supplier_invoices/__init__.py | 0 .../supplier_invoices/supplier_invoices.json | 69 +++++++++++++++++++ .../supplier_invoices/supplier_invoices.py | 9 +++ .../suppliers_portal/report/__init__.py | 0 .../report/supplier_invoices/__init__.py | 0 .../supplier_invoices/supplier_invoices.js | 30 ++++++++ .../supplier_invoices/supplier_invoices.json | 30 ++++++++ .../supplier_invoices/supplier_invoices.py | 49 +++++++++++++ .../supplier_portal/supplier_portal.json | 55 +++++++++++++++ 17 files changed, 421 insertions(+), 12 deletions(-) create mode 100644 suppliers_portal/suppliers_portal/doctype/invoice_payment_references/__init__.py create mode 100644 suppliers_portal/suppliers_portal/doctype/invoice_payment_references/invoice_payment_references.json create mode 100644 suppliers_portal/suppliers_portal/doctype/invoice_payment_references/invoice_payment_references.py create mode 100644 suppliers_portal/suppliers_portal/doctype/supplier_invoices/__init__.py create mode 100644 suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.json create mode 100644 suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.py create mode 100644 suppliers_portal/suppliers_portal/report/__init__.py create mode 100644 suppliers_portal/suppliers_portal/report/supplier_invoices/__init__.py create mode 100644 suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.js create mode 100644 suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.json create mode 100644 suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.py create mode 100644 suppliers_portal/suppliers_portal/workspace/supplier_portal/supplier_portal.json diff --git a/supplier-portal/src/pages/NewInvoice.vue b/supplier-portal/src/pages/NewInvoice.vue index 19f8356..597a396 100644 --- a/supplier-portal/src/pages/NewInvoice.vue +++ b/supplier-portal/src/pages/NewInvoice.vue @@ -193,6 +193,19 @@ data-bs-parent="#service-address-accordion" >
+
+ +
+ +
+
{ invoice_date: invoiceData.invoice_date, supplier_name: invoiceData.supplier_name, invoice_terms: invoiceData.invoice_terms, + site_code: invoiceData.site_code, street: invoiceData.street, city: invoiceData.city, state: invoiceData.state, diff --git a/supplier-portal/src/pages/SupplierInvoice.vue b/supplier-portal/src/pages/SupplierInvoice.vue index 8c0fa68..bf2050a 100644 --- a/supplier-portal/src/pages/SupplierInvoice.vue +++ b/supplier-portal/src/pages/SupplierInvoice.vue @@ -161,6 +161,20 @@ data-bs-parent="#service-address-accordion" >
+
+ +
+ +
+
self.due_date: + elif self.paid_amount != self.total_amount and nowdate() > self.due_date: self.status = "Overdue" else: self.status = "Unpaid" + + if self.paid_amount != self.total_amount and self.status not in ( + "Paid", + "Overdue", + ): + self.status = "Partially Paid" + + def update_suppliers_invoice(self): + supplier = frappe.get_doc("Supplier", self.supplier) + + # check if invoice already exists + for invoice in supplier.invoices: + if invoice.invoice_number == self.name: + if invoice.total_due != self.total_amount: + invoice.total_amount = self.total_amount + if invoice.invoice_date != self.invoice_date: + invoice.invoice_date = self.invoice_date + if invoice.status != self.status: + invoice.status = self.status + supplier.save() + return + + supplier.append( + "invoices", + {"invoice_number": self.name}, + ) + supplier.save() diff --git a/suppliers_portal/suppliers_portal/doctype/supplier/supplier.json b/suppliers_portal/suppliers_portal/doctype/supplier/supplier.json index 8c606bf..e57f319 100644 --- a/suppliers_portal/suppliers_portal/doctype/supplier/supplier.json +++ b/suppliers_portal/suppliers_portal/doctype/supplier/supplier.json @@ -12,7 +12,9 @@ "street", "city", "state", - "zip_code" + "zip_code", + "section_break_svzz", + "invoices" ], "fields": [ { @@ -56,10 +58,21 @@ "fieldname": "zip_code", "fieldtype": "Data", "label": "Zip Code" + }, + { + "fieldname": "section_break_svzz", + "fieldtype": "Section Break" + }, + { + "fieldname": "invoices", + "fieldtype": "Table", + "label": "Invoices", + "options": "Supplier Invoices", + "read_only": 1 } ], "links": [], - "modified": "2024-09-28 02:13:04.095973", + "modified": "2024-10-09 18:09:28.675273", "modified_by": "Administrator", "module": "Suppliers Portal", "name": "Supplier", @@ -78,7 +91,10 @@ "write": 1 } ], + "search_fields": "company_name", + "show_title_field_in_link": 1, "sort_field": "creation", "sort_order": "DESC", - "states": [] + "states": [], + "title_field": "company_name" } \ No newline at end of file diff --git a/suppliers_portal/suppliers_portal/doctype/supplier_invoices/__init__.py b/suppliers_portal/suppliers_portal/doctype/supplier_invoices/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.json b/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.json new file mode 100644 index 0000000..08b7c71 --- /dev/null +++ b/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.json @@ -0,0 +1,69 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-10-09 16:59:58.079331", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "invoice_number", + "status", + "column_break_mprs", + "invoice_date", + "terms", + "total_due" + ], + "fields": [ + { + "fieldname": "invoice_number", + "fieldtype": "Link", + "label": "Invoice Number", + "options": "Invoices", + "read_only": 1 + }, + { + "fetch_from": "invoice_number.invoice_date", + "fieldname": "invoice_date", + "fieldtype": "Date", + "label": "Invoice Date", + "read_only": 1 + }, + { + "fetch_from": "invoice_number.invoice_terms", + "fieldname": "terms", + "fieldtype": "Data", + "label": "Term", + "read_only": 1 + }, + { + "fetch_from": "invoice_number.total_amount", + "fieldname": "total_due", + "fieldtype": "Currency", + "label": "Total Due", + "read_only": 1 + }, + { + "fetch_from": "invoice_number.status", + "fieldname": "status", + "fieldtype": "Data", + "label": "Status", + "read_only": 1 + }, + { + "fieldname": "column_break_mprs", + "fieldtype": "Column Break" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-10-09 17:33:59.785852", + "modified_by": "Administrator", + "module": "Suppliers Portal", + "name": "Supplier Invoices", + "owner": "Administrator", + "permissions": [], + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.py b/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.py new file mode 100644 index 0000000..65ba615 --- /dev/null +++ b/suppliers_portal/suppliers_portal/doctype/supplier_invoices/supplier_invoices.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, jeowsome15@gmail.com and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class SupplierInvoices(Document): + pass diff --git a/suppliers_portal/suppliers_portal/report/__init__.py b/suppliers_portal/suppliers_portal/report/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/suppliers_portal/suppliers_portal/report/supplier_invoices/__init__.py b/suppliers_portal/suppliers_portal/report/supplier_invoices/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.js b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.js new file mode 100644 index 0000000..51279a1 --- /dev/null +++ b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.js @@ -0,0 +1,30 @@ +frappe.query_reports["Supplier Invoices"] = { + "filters": [ + { + "fieldname": "invoice_date_from", + "label": __("Invoice Date From"), + "fieldtype": "Date", + "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1), // Default to last month + "placeholder": __("Invoice Date From") + }, + { + "fieldname": "invoice_date_to", + "label": __("Invoice Date To"), + "fieldtype": "Date", + "default": frappe.datetime.get_today(), // Default to today + }, + { + "fieldname": "supplier", + "label": __("Supplier"), + "fieldtype": "Link", + "options": "Supplier" + }, + { + "fieldname": "status", + "label": __("Status"), + "fieldtype": "Select", + "options": "All\nPaid\nUnpaid\nOverdue", + "default": "All", + } + ] +}; \ No newline at end of file diff --git a/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.json b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.json new file mode 100644 index 0000000..e226b73 --- /dev/null +++ b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.json @@ -0,0 +1,30 @@ +{ + "add_total_row": 1, + "columns": [], + "creation": "2024-10-09 15:22:34.256149", + "disabled": 1, + "docstatus": 0, + "doctype": "Report", + "filters": [], + "idx": 0, + "is_standard": "Yes", + "letterhead": null, + "modified": "2024-10-09 17:03:58.993246", + "modified_by": "Administrator", + "module": "Suppliers Portal", + "name": "Supplier Invoices", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Invoices", + "report_name": "Supplier Invoices", + "report_type": "Script Report", + "roles": [ + { + "role": "System Manager" + }, + { + "role": "Portal Supplier" + } + ], + "timeout": 0 +} \ No newline at end of file diff --git a/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.py b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.py new file mode 100644 index 0000000..671611b --- /dev/null +++ b/suppliers_portal/suppliers_portal/report/supplier_invoices/supplier_invoices.py @@ -0,0 +1,49 @@ +import frappe + + +def execute(filters=None): + columns = [ + { + "fieldname": "invoice_number", + "label": "Invoice Number", + "fieldtype": "Link", + "options": "Invoices", + }, + { + "fieldname": "supplier_name", + "label": "Supplier Name", + "fieldtype": "Data", + "width": 200, + }, + {"fieldname": "status", "label": "Status", "fieldtype": "Data", "width": 100}, + {"fieldname": "invoice_date", "label": "Invoice Date", "fieldtype": "Date"}, + {"fieldname": "due_date", "label": "Due Date", "fieldtype": "Date"}, + {"fieldname": "total_amount", "label": "Total Amount", "fieldtype": "Currency"}, + ] + + conditions = "" + if filters.get("invoice_date_from"): + conditions += " AND invoice_date >= %(invoice_date_from)s" + if filters.get("invoice_date_to"): + conditions += " AND invoice_date <= %(invoice_date_to)s" + if filters.get("supplier"): + conditions += " AND supplier = %(supplier)s" + if filters.get("status"): + if not filters.get("status") == "All": + conditions += " AND status = %(status)s" + + query = f""" + SELECT + name as invoice_number, + supplier_name, + status, + invoice_date, + due_date, + total_amount + FROM + `tabInvoices` + WHERE + docstatus = 0 {conditions} + """ + data = frappe.db.sql(query, filters, as_dict=True) + return columns, data diff --git a/suppliers_portal/suppliers_portal/workspace/supplier_portal/supplier_portal.json b/suppliers_portal/suppliers_portal/workspace/supplier_portal/supplier_portal.json new file mode 100644 index 0000000..d8ac647 --- /dev/null +++ b/suppliers_portal/suppliers_portal/workspace/supplier_portal/supplier_portal.json @@ -0,0 +1,55 @@ +{ + "app": "suppliers_portal", + "charts": [], + "content": "[{\"id\":\"AyiOTTupgl\",\"type\":\"paragraph\",\"data\":{\"text\":\"Documents\",\"col\":12}},{\"id\":\"64VHemT3p8\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Suppliers\",\"col\":4}},{\"id\":\"_vl927eRbo\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Invoices\",\"col\":4}},{\"id\":\"j428xL5Lje\",\"type\":\"paragraph\",\"data\":{\"text\":\"Reports\",\"col\":12}},{\"id\":\"CDzGMPClRq\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Supplier Invoices Report\",\"col\":4}}]", + "creation": "2024-10-02 17:23:06.804441", + "custom_blocks": [], + "docstatus": 0, + "doctype": "Workspace", + "for_user": "", + "hide_custom": 0, + "icon": "clipboard", + "idx": 0, + "indicator_color": "green", + "is_hidden": 0, + "label": "Supplier Portal", + "links": [], + "modified": "2024-10-09 15:49:04.735953", + "modified_by": "Administrator", + "module": "Suppliers Portal", + "name": "Supplier Portal", + "number_cards": [], + "owner": "Administrator", + "parent_page": "", + "public": 1, + "quick_lists": [], + "roles": [], + "sequence_id": 2.0, + "shortcuts": [ + { + "color": "Grey", + "doc_view": "List", + "label": "Supplier Invoices Report", + "link_to": "Supplier Invoices", + "type": "Report" + }, + { + "color": "Grey", + "doc_view": "List", + "label": "Suppliers", + "link_to": "Supplier", + "stats_filter": "[]", + "type": "DocType" + }, + { + "color": "Grey", + "doc_view": "List", + "label": "Invoices", + "link_to": "Invoices", + "stats_filter": "[]", + "type": "DocType" + } + ], + "title": "Supplier Portal", + "type": "Workspace" +} \ No newline at end of file