diff --git a/pos/src/lib/customer-api.ts b/pos/src/lib/customer-api.ts index 00b9912..a168899 100644 --- a/pos/src/lib/customer-api.ts +++ b/pos/src/lib/customer-api.ts @@ -38,10 +38,11 @@ export interface CreateCustomerData { } export interface CreateCustomerResponse { - data: Customer; + data: CreateCustomerData; _server_messages?: string; } + export async function getCustomerGroups() { const groups = await db.getDocList(DOCTYPES.CUSTOMER_GROUP, { fields: ['name'], @@ -66,16 +67,31 @@ export async function getCustomerTerritories() { return territories; } -export async function addCustomer(customerData: CreateCustomerData): Promise { +export async function addCustomer( + customerData: CreateCustomerData +): Promise { try { - const response = await db.createDoc(DOCTYPES.CUSTOMER, customerData); - return { data: response as Customer }; + const response = await call.post('ury.ury_pos.api.create_customer', customerData); + const msg = response.message; + if (!msg || msg.status !== "success") { + throw new Error("Failed to create Customer,API Response error"); + } + return { + data: { + customer_name: msg.customer_name, + mobile_number: msg.mobile_number, + customer_group: msg.customer_group, + territory: msg.territory + } + }; + } catch (error) { console.error('Error creating customer:', error); throw error; } } + export async function searchCustomers(search: string, limit = 5) { if (!search.trim()) return []; try { diff --git a/ury/hooks.py b/ury/hooks.py index e75c3fc..0625bb7 100644 --- a/ury/hooks.py +++ b/ury/hooks.py @@ -131,7 +131,6 @@ "before_insert": "ury.ury.hooks.ury_sales_invoice.before_insert", "on_update":"ury.ury.hooks.ury_sales_invoice.on_update", }, - "Customer": {"before_save": "ury.ury.hooks.ury_customer.before_insert"}, "Item": {"validate": "ury.ury.hooks.ury_item.validate"}, "POS Opening Entry": { "validate":"ury.ury.hooks.ury_pos_opening_entry.set_cashier_room", diff --git a/ury/ury/hooks/ury_customer.py b/ury/ury/hooks/ury_customer.py deleted file mode 100644 index 99bae90..0000000 --- a/ury/ury/hooks/ury_customer.py +++ /dev/null @@ -1,10 +0,0 @@ -import frappe - - -def before_insert(doc, event): - validate_mobile_number(doc, event) - - -def validate_mobile_number(doc, event): - if not doc.mobile_number: - frappe.throw("Mobile Number is Mandatory") diff --git a/ury/ury/workspace/ury/ury.json b/ury/ury/workspace/ury/ury.json index 3abdf2a..436f7e4 100644 --- a/ury/ury/workspace/ury/ury.json +++ b/ury/ury/workspace/ury/ury.json @@ -111,7 +111,7 @@ "type": "Link" } ], - "modified": "2025-07-25 10:51:43.683224", + "modified": "2026-01-16 11:47:19.008936", "modified_by": "Administrator", "module": "URY", "name": "URY", diff --git a/ury/ury_pos/api.py b/ury/ury_pos/api.py index 64d48ec..59ae35b 100644 --- a/ury/ury_pos/api.py +++ b/ury/ury_pos/api.py @@ -1,6 +1,7 @@ import frappe from frappe import _ from datetime import date, datetime, timedelta +from frappe.utils import validate_phone_number @@ -650,7 +651,44 @@ def getAggregatorMOP(aggregator): {"mode_of_payment": modeOfPayment, "opening_amount": float(0)} ) return modeOfPaymentsList +@frappe.whitelist() +def create_customer(customer_name, mobile_number=None, customer_group="Individual", territory="India"): + if not customer_name: + frappe.throw("Customer name is required") + if not mobile_number: + frappe.throw("Mobile Number is required") + try: + validate_phone_number(mobile_number, throw=True) + except Exception: + frappe.throw("Invalid mobile number format") + + """Create a new customer""" + try: + customer = frappe.get_doc({ + "doctype": "Customer", + "customer_name": customer_name, + "mobile_number": mobile_number, + "customer_group": customer_group, + "territory": territory + }) + customer.insert(ignore_permissions=True) + frappe.db.commit() + + return { + "status": "success", + "message": "Customer created successfully", + "customer_name": customer_name, + "mobile_number": mobile_number, + "customer_group": customer_group, + "territory": territory + } + except Exception as e: + frappe.log_error(message=frappe.get_traceback(), title="Customer Creation Failed") + return { + "status": "error", + "message": str(e) + } @frappe.whitelist() def validate_pos_close(pos_profile):