import frappe import json @frappe.whitelist() def get_pallets(page=1, page_size=100, sort_field="pallet_number", sort_dir="desc", status_filter="", search=""): """Fetch pallets from ERPNext with filters.""" page = int(page) page_size = int(page_size) offset = (page - 1) * page_size # Base filters filters = [ ["Pallet", "pallet_number", "is", "set"], ["Pallet", "date_reserved", "is", "set"], ] if status_filter: filters.append(["Pallet", "status", "=", status_filter]) if search: filters.append(["Pallet", "pallet_number", "like", f"%{search}%"]) fields = [ "name", "pallet_number", "date_reserved", "received_date", "customer_number", "company_name", "inbound_weight", "tester", "description", "qty_to_sales", "weight_to_sales", "finish_date", "notes", "status" ] order_by = f"{sort_field} {sort_dir}" # Get total count count_result = frappe.get_list( "Pallet", filters=filters, fields=["count(*) as total"], as_list=True ) total = count_result[0][0] if count_result else 0 # Get pallets pallets = frappe.get_list( "Pallet", filters=filters, fields=fields, order_by=order_by, limit_page_length=page_size, limit_start=offset ) return { "pallets": pallets, "total": total, "page": page, "page_size": page_size } @frappe.whitelist() def update_pallet(docname, field, value): """Update a single field on a Pallet.""" pallet = frappe.get_doc("Pallet", docname) pallet.set(field, value) pallet.save(ignore_permissions=True) frappe.db.commit() return {"status": "ok", "message": f"Updated {field}"}