Fix 2024 pallet numbering and update pallet-list page
This commit is contained in:
@@ -1,50 +1,40 @@
|
||||
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"],
|
||||
]
|
||||
# Only pallets with dates (filters empty rows)
|
||||
conditions = ["pallet_number IS NOT NULL", "pallet_number != ", "date_reserved IS NOT NULL"]
|
||||
|
||||
# Junk filter (same as EIM)
|
||||
junk = ["", "0", "0000", "N/A", "TBD", "null"]
|
||||
conditions.append("pallet_number NOT IN ( + , .join(junk) + )")
|
||||
|
||||
if status_filter:
|
||||
filters.append(["Pallet", "status", "=", status_filter])
|
||||
conditions.append("status = {0}".format(frappe.db.escape(status_filter)))
|
||||
if search:
|
||||
filters.append(["Pallet", "pallet_number", "like", f"%{search}%"])
|
||||
conditions.append("pallet_number LIKE %{0}%".format(frappe.db.escape(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"
|
||||
]
|
||||
where_clause = " AND ".join(conditions)
|
||||
|
||||
order_by = f"{sort_field} {sort_dir}"
|
||||
# Get total
|
||||
total = frappe.db.sql("""SELECT COUNT(*) FROM tabPallet WHERE {0}""".format(where_clause))[0][0]
|
||||
|
||||
# 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
|
||||
)
|
||||
# Get pallets - convert pallet_number to unsigned int for numeric sort
|
||||
# Use natural sort: convert to int for proper numeric ordering
|
||||
pallets = frappe.db.sql("""
|
||||
SELECT
|
||||
name, pallet_number, date_reserved, received_date,
|
||||
customer_number, inbound_weight, tester,
|
||||
description, qty_to_sales, weight_to_sales, finish_date, notes, status
|
||||
FROM tabPallet
|
||||
WHERE {0}
|
||||
ORDER BY CAST(pallet_number AS UNSIGNED) {1}
|
||||
LIMIT {2} OFFSET {3}
|
||||
""".format(where_clause, sort_dir, page_size, offset), as_dict=True)
|
||||
|
||||
return {
|
||||
"pallets": pallets,
|
||||
@@ -52,12 +42,3 @@ def get_pallets(page=1, page_size=100, sort_field="pallet_number", sort_dir="des
|
||||
"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}"}
|
||||
|
||||
Reference in New Issue
Block a user