85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
import frappe
|
|
from frappe import _
|
|
|
|
@frappe.whitelist()
|
|
def search_customers(q=""):
|
|
if not q or len(q) < 2:
|
|
return []
|
|
q = q.strip().lower()
|
|
customers = frappe.db.sql("""
|
|
SELECT c.name, c.customer_name, c.customer_number, c.mobile_no,
|
|
a.address_line1, a.city, a.state, a.pincode
|
|
FROM tabCustomer c
|
|
LEFT JOIN `tabDynamic Link` dl ON dl.link_doctype = 'Customer' AND dl.link_name = c.name AND dl.parenttype = 'Address'
|
|
LEFT JOIN tabAddress a ON a.name = dl.parent
|
|
WHERE LOWER(c.customer_name) LIKE %s OR LOWER(c.customer_number) LIKE %s OR LOWER(c.mobile_no) LIKE %s
|
|
ORDER BY c.customer_name
|
|
LIMIT 20
|
|
""", ("%" + q + "%", "%" + q + "%", "%" + q + "%"), as_dict=True)
|
|
return customers
|
|
|
|
@frappe.whitelist()
|
|
def get_customer(name):
|
|
if not name:
|
|
return {}
|
|
cust = frappe.get_doc("Customer", name)
|
|
result = cust.as_dict()
|
|
addr = frappe.db.sql("""
|
|
SELECT a.address_line1, a.city, a.state, a.pincode, a.phone
|
|
FROM tabAddress a
|
|
JOIN `tabDynamic Link` dl ON dl.parent = a.name AND dl.link_doctype = 'Customer' AND dl.link_name = %s
|
|
LIMIT 1
|
|
""", (name,), as_dict=True)
|
|
if addr:
|
|
result.update({
|
|
"address_line1": addr[0].address_line1,
|
|
"city": addr[0].city,
|
|
"state": addr[0].state,
|
|
"pincode": addr[0].pincode,
|
|
"address_phone": addr[0].phone
|
|
})
|
|
return result
|
|
|
|
@frappe.whitelist()
|
|
def create_customer_from_intake(data):
|
|
data = frappe.parse_json(data)
|
|
if not data.get("customer_name"):
|
|
frappe.throw(_("Customer name required"))
|
|
customer = frappe.new_doc("Customer")
|
|
customer.customer_name = data.get("customer_name")
|
|
customer.customer_group = data.get("customer_group", "IT Recycling")
|
|
customer.customer_type = "Company"
|
|
customer.customer_number = data.get("customer_number")
|
|
customer.mobile_no = data.get("phone")
|
|
customer.email_id = data.get("email_id")
|
|
customer.legacy_notes = data.get("legacy_notes")
|
|
customer.hours_of_operation = data.get("hours_of_operation")
|
|
customer.contact_persons = data.get("contact_persons")
|
|
customer.save()
|
|
if data.get("address_line1") or data.get("city"):
|
|
addr = frappe.new_doc("Address")
|
|
addr.address_title = customer.customer_name
|
|
addr.address_type = "Billing"
|
|
addr.address_line1 = data.get("address_line1", "Unknown")
|
|
addr.city = data.get("city", "Unknown")
|
|
addr.state = data.get("state", "")
|
|
addr.pincode = data.get("pincode", "")
|
|
addr.country = "United States"
|
|
addr.append("links", {"link_doctype": "Customer", "link_name": customer.name})
|
|
addr.save()
|
|
return {"status": "ok", "customer": customer.name}
|
|
|
|
@frappe.whitelist()
|
|
def create_pallet(data):
|
|
data = frappe.parse_json(data)
|
|
if not data.get("customer"):
|
|
frappe.throw(_("Customer required"))
|
|
pallet = frappe.new_doc("Pallet")
|
|
pallet.customer = data.get("customer")
|
|
pallet.customer_number = data.get("customer_number")
|
|
pallet.data_status = data.get("data_status", "D0")
|
|
pallet.status = data.get("status", "Received")
|
|
pallet.inbound_weight = data.get("inbound_weight", "")
|
|
pallet.save()
|
|
return {"status": "ok", "pallet": pallet.name}
|