diff --git a/custom_ui/api/db.py b/custom_ui/api/db.py index a01bbef..1943d7f 100644 --- a/custom_ui/api/db.py +++ b/custom_ui/api/db.py @@ -171,6 +171,16 @@ def upsert_job(data): pass +@frappe.whitelist() +def upsert_invoice(data): + pass + + +@frappe.whitelist() +def upsert_warranty(data): + pass + + @frappe.whitelist() def upsert_client(data): data = json.loads(data) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index b768b61..c4a6d8c 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -4,6 +4,7 @@ import SideBar from "./components/SideBar.vue"; import CreateClientModal from "./components/modals/CreateClientModal.vue"; import CreateEstimateModal from "./components/modals/CreateEstimateModal.vue"; import CreateJobModal from "./components/modals/CreateJobModal.vue"; +import CreateInvoiceModal from "./components/modals/CreateInvoiceModal.vue"; import GlobalLoadingOverlay from "./components/common/GlobalLoadingOverlay.vue"; import ScrollPanel from "primevue/scrollpanel"; @@ -30,6 +31,7 @@ import ScrollPanel from "primevue/scrollpanel"; + diff --git a/frontend/src/api.js b/frontend/src/api.js index f10b96f..bbfcd7a 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -5,6 +5,7 @@ const FRAPPE_PROXY_METHOD = "custom_ui.api.proxy.request"; const FRAPPE_UPSERT_CLIENT_METHOD = "custom_ui.api.db.upsert_client"; const FRAPPE_UPSERT_ESTIMATE_METHOD = "custom_ui.api.db.upsert_estimate"; const FRAPPE_UPSERT_JOB_METHOD = "custom_ui.api.db.upsert_job"; +const FRAPPE_UPSERT_INVOICE_METHOD = "custom_ui.api.db.upsert_invoice"; class Api { static async request(frappeMethod, args = {}) { @@ -425,6 +426,13 @@ class Api { return result } + static async createInvoice(invoiceData) { + const payload = DataUtils.toSnakeCaseObject(invoiceData); + const result = await this.request(FRAPPE_UPSERT_INVOICE_METHOD, { data: payload }); + console.log("DEBUG: API - Created Invoice: ", result); + return result + } + // External API calls /** diff --git a/frontend/src/components/SideBar.vue b/frontend/src/components/SideBar.vue index 090e301..3435baa 100644 --- a/frontend/src/components/SideBar.vue +++ b/frontend/src/components/SideBar.vue @@ -55,7 +55,7 @@ const createButtons = ref([ { label: "Invoice", command: () => { - alert("Create Invoice clicked"); + modalStore.openModal("createInvoice"); }, }, { diff --git a/frontend/src/components/modals/CreateInvoiceModal.vue b/frontend/src/components/modals/CreateInvoiceModal.vue new file mode 100644 index 0000000..50b3a63 --- /dev/null +++ b/frontend/src/components/modals/CreateInvoiceModal.vue @@ -0,0 +1,398 @@ + + + Create New Invoice + + + + + {{ statusMessage }} + + + + + + + + +