diff --git a/westech_r2/page/pallet-list/pallet-list.py b/westech_r2/page/pallet-list/pallet-list.py index abac61c..63d0fad 100644 --- a/westech_r2/page/pallet-list/pallet-list.py +++ b/westech_r2/page/pallet-list/pallet-list.py @@ -6,8 +6,16 @@ def get_pallets(page=1, page_size=100, sort_field="pallet_number", sort_dir="des page_size = int(page_size) offset = (page - 1) * page_size - conditions = ["pallet_number IS NOT NULL", "pallet_number != ''", "date_reserved IS NOT NULL"] + # Only pallets with dates AND customer data + conditions = [ + "pallet_number IS NOT NULL", + "pallet_number != ''", + "date_reserved IS NOT NULL", + "customer_number IS NOT NULL", + "customer_number != ''" + ] + # Junk filter junk = ["", "0", "0000", "N/A", "TBD", "null", "999990", "999995"] junk_list = "', '".join(junk) conditions.append("pallet_number NOT IN ('" + junk_list + "')") @@ -21,8 +29,65 @@ def get_pallets(page=1, page_size=100, sort_field="pallet_number", sort_dir="des where_clause = " AND ".join(conditions) + # Get total total = frappe.db.sql("SELECT COUNT(*) FROM tabPallet WHERE " + where_clause)[0][0] - 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 " + where_clause + " ORDER BY CAST(pallet_number AS UNSIGNED) " + sort_dir + " LIMIT " + str(page_size) + " OFFSET " + str(offset), as_dict=True) + # Get main pallets + pallets = frappe.db.sql(""" + SELECT 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 + FROM tabPallet + WHERE """ + where_clause + """ + ORDER BY CAST(pallet_number AS UNSIGNED) """ + sort_dir + """ + LIMIT """ + str(page_size) + """ OFFSET """ + str(offset), as_dict=True) - return {"pallets": pallets, "total": total, "page": page, "page_size": page_size} + # Get input row - next empty pallet number + empty_pallet = frappe.db.sql(""" + SELECT 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 + FROM tabPallet + WHERE date_reserved IS NULL + AND (customer_number IS NULL OR customer_number = '') + AND pallet_number NOT IN ('""" + junk_list + """') + AND pallet_number NOT LIKE '999%' + AND pallet_number REGEXP '^[0-9]' + ORDER BY CAST(pallet_number AS UNSIGNED) DESC + LIMIT 1 + """, as_dict=True) + + input_row = None + if empty_pallet: + empty_pallet[0]["_is_new"] = True + input_row = empty_pallet[0] + + return { + "pallets": pallets, + "input_row": input_row, + "total": total, + "page": page, + "page_size": page_size + } + +@frappe.whitelist() +def update_pallet(docname, field, value): + pallet = frappe.get_doc("Pallet", docname) + pallet.set(field, value) + pallet.save(ignore_permissions=True) + frappe.db.commit() + return {"status": "ok", "message": "Updated " + field} + +@frappe.whitelist() +def create_pallet(data): + data = frappe.parse_json(data) + pallet = frappe.new_doc("Pallet") + pallet.pallet_number = data.get("pallet_number") + pallet.status = data.get("status", "Received") + pallet.date_reserved = data.get("date_reserved") + for field, value in data.items(): + if field not in ["pallet_number", "status", "date_reserved"] and value: + pallet.set(field, value) + pallet.insert(ignore_permissions=True) + frappe.db.commit() + return {"status": "ok", "name": pallet.name}