From 301530dcf4109f8a3969169a90ed92aecc501c73 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Fri, 14 Nov 2025 19:24:21 +0000 Subject: [PATCH 01/13] update: logo replacement with the pms logo --- urypos/public/URY.svg | 1970 ++++++++++++++++++++++++++- urypos/public/ury.ico | Bin 15406 -> 3494 bytes urypos/src/assets/logos/URY_POS.jpg | Bin 26432 -> 23966 bytes 3 files changed, 1897 insertions(+), 73 deletions(-) diff --git a/urypos/public/URY.svg b/urypos/public/URY.svg index 248c66a2..aaa6a22b 100644 --- a/urypos/public/URY.svg +++ b/urypos/public/URY.svg @@ -1,73 +1,1897 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/urypos/public/ury.ico b/urypos/public/ury.ico index 5e542eec53d22ed0fbd6089a2351dbcbcc2432c5..c11df359b0163cce5145618a5eff900de3f22741 100644 GIT binary patch literal 3494 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 Pvt(P1m^_vLuZ{l#8O|Nk literal 26432 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 Date: Sun, 16 Nov 2025 17:18:07 +0000 Subject: [PATCH 02/13] update: error in payment of pos --- ury/ury/hooks/ury_pos_invoice.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ury/ury/hooks/ury_pos_invoice.py b/ury/ury/hooks/ury_pos_invoice.py index 3236237d..2a7acbd3 100644 --- a/ury/ury/hooks/ury_pos_invoice.py +++ b/ury/ury/hooks/ury_pos_invoice.py @@ -1,6 +1,7 @@ import frappe from datetime import datetime from frappe.utils import now_datetime, get_time,now +from frappe.utils import now, get_datetime def before_insert(doc, method): @@ -83,15 +84,22 @@ def validate_customer(doc, method): ) + + def calculate_and_set_times(doc, method): + # Set arrived_time to creation time doc.arrived_time = doc.creation - current_time_str = now() + # Get current time as datetime object + current_time = get_datetime(now()) - current_time = datetime.strptime(current_time_str, "%Y-%m-%d %H:%M:%S.%f") + # Convert doc.creation from string to datetime object + creation_datetime = get_datetime(doc.creation) - time_difference = current_time - doc.creation + # Calculate time difference (both are now datetime objects) + time_difference = current_time - creation_datetime + # Format the time difference total_seconds = int(time_difference.total_seconds()) hours, remainder = divmod(total_seconds, 3600) minutes, seconds = divmod(remainder, 60) From 4b0f8fb1e4ad95cfd4acda42569fcd9970c0d966 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Tue, 2 Dec 2025 09:41:51 +0000 Subject: [PATCH 03/13] fix: amount not showing on order cards in v2 --- pos/public/ury.ico | Bin 15406 -> 3494 bytes pos/public/ury_pos.png | Bin 52623 -> 23966 bytes pos/src/pages/Orders.tsx | 17 +++++++++++++---- ury/public/Images/URY-POS.jpg | Bin 26432 -> 23966 bytes ury/public/Images/ury-logo.jpg | Bin 28817 -> 23966 bytes 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pos/public/ury.ico b/pos/public/ury.ico index 5e542eec53d22ed0fbd6089a2351dbcbcc2432c5..c11df359b0163cce5145618a5eff900de3f22741 100644 GIT binary patch literal 3494 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 Pvt(P1m^_vLuZ{l#8O|Nk literal 52623 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 WR*TdV-5w3p_bbS%%9Kl+2LB&^<)*&? diff --git a/pos/src/pages/Orders.tsx b/pos/src/pages/Orders.tsx index 4a281e7a..4f3e547a 100644 --- a/pos/src/pages/Orders.tsx +++ b/pos/src/pages/Orders.tsx @@ -72,6 +72,7 @@ export default function Orders() { }; const handleOrderClick = (order: any) => { + console.log('Order clicked:', order); selectOrder(order); }; @@ -92,6 +93,14 @@ export default function Orders() { } }; + // Helper function to get order total with fallback + const getOrderTotal = (order: any) => { + // Try rounded_total first, then grand_total, then fallback to 0 + const total = order.rounded_total || order.grand_total || 0; + console.log(`Order ${order.name}: rounded_total=${order.rounded_total}, grand_total=${order.grand_total}, using=${total}`); + return total; + }; + async function handleCancelOrder() { if (!selectedOrder) return; if (!cancelReason.trim()) { @@ -258,7 +267,7 @@ export default function Orders() { {/* Total - pushed to bottom like MenuCard */}
- {formatCurrency(order.rounded_total)} + {formatCurrency(getOrderTotal(order))}
@@ -480,7 +489,7 @@ export default function Orders() { )} {/* Total */} - {formatCurrency(selectedOrder.rounded_total)} + {formatCurrency(getOrderTotal(selectedOrder))} @@ -491,7 +500,7 @@ export default function Orders() { setShowPaymentDialog(false)} grandTotal={selectedOrder.grand_total} - roundedTotal={selectedOrder.rounded_total} + roundedTotal={selectedOrder.rounded_total || selectedOrder.grand_total} invoice={selectedOrder.name} customer={selectedOrder.customer} posProfile={posStore.posProfile?.name || ''} @@ -504,4 +513,4 @@ export default function Orders() { )} ); -}; +}; \ No newline at end of file diff --git a/ury/public/Images/URY-POS.jpg b/ury/public/Images/URY-POS.jpg index 781f3b69a2ddb8c941f42716463ea886e8255241..7f44b35387f4f2c112f1d8ca6f3a37688fd270d1 100644 GIT binary patch literal 23966 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 Pvt(P1m^_vLuZ{l#8O|Nk literal 26432 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 Pvt(P1m^_vLuZ{l#8O|Nk literal 28817 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 From 40447219009bf096ba32f3e62f9b43c0b7de1b56 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Wed, 3 Dec 2025 11:39:16 +0000 Subject: [PATCH 04/13] fix: print issue resolve from the orders page --- ury/ury/api/ury_print.py | 202 ++++++++++++++++++++++++++++++--------- 1 file changed, 158 insertions(+), 44 deletions(-) diff --git a/ury/ury/api/ury_print.py b/ury/ury/api/ury_print.py index 75255bd5..ff741658 100644 --- a/ury/ury/api/ury_print.py +++ b/ury/ury/api/ury_print.py @@ -23,14 +23,18 @@ def network_printing( no_letterhead=0, file_path=None, ): + """Print directly as text - faster and more reliable than PDF""" try: + # Get printer settings print_settings = frappe.get_doc("Network Printer Settings", printer_setting) + # Import cups try: import cups except ImportError: return "Failed to import cups" + # Connect to CUPS try: cups.setServer(print_settings.server_ip) cups.setPort(print_settings.port) @@ -38,46 +42,102 @@ def network_printing( except Exception as e: return f"Failed to connect to the printer: {str(e)}" + # TEXT PRINTING LOGIC (proven to work) try: - output = PdfWriter() - output = frappe.get_print( - doctype, - name, - print_format, - doc=doc, - no_letterhead=no_letterhead, - as_pdf=True, - output=output, - ) - if not file_path: - file_path = os.path.join( - "/", "tmp", f"frappe-pdf-{frappe.generate_hash()}.pdf" - ) - with open(file_path, "wb") as f: - output.write(f) + # Get the document + doc_obj = frappe.get_doc(doctype, name) if not doc else doc + + # ========== ENHANCED TEXT TEMPLATE ========== + # Create text content with proper formatting + text_content = f""" +{'=' * 50} +{'INVOICE'.center(50)} +{'=' * 50} +Invoice: {doc_obj.name} +Date: {doc_obj.posting_date} {doc_obj.posting_time} +Customer: {doc_obj.customer_name if hasattr(doc_obj, 'customer_name') else doc_obj.customer} +Table: {doc_obj.get('restaurant_table', 'Take Away') or 'Take Away'} +Order Type: {doc_obj.get('order_type', 'N/A')} +Waiter: {doc_obj.get('waiter', 'N/A')} +{'-' * 50} +{'ITEMS'.center(50)} +{'-' * 50} +""" + + # Add items with proper formatting + if hasattr(doc_obj, 'items'): + # Header + text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" + text_content += f"{'-' * 57}\n" + + # Items + for item in doc_obj.items: + # Truncate long item names + item_name = (item.item_name[:27] + '...') if len(item.item_name) > 30 else item.item_name + text_content += f"{item.qty:<5.1f} {item_name:<30} {float(item.rate):>10.2f} {float(item.amount):>12.2f}\n" + + # Add totals section + text_content += f""" +{'-' * 50} +{'TOTALS'.center(50)} +{'-' * 50} +""" + + # Check for different total fields + if hasattr(doc_obj, 'net_total'): + text_content += f"Net Total: {float(doc_obj.net_total):>40.2f}\n" + + if hasattr(doc_obj, 'total_taxes_and_charges'): + text_content += f"Tax: {float(doc_obj.total_taxes_and_charges):>44.2f}\n" + + if hasattr(doc_obj, 'grand_total'): + text_content += f"{'=' * 50}\n" + text_content += f"GRAND TOTAL: {float(doc_obj.grand_total):>37.2f}\n" + text_content += f"{'=' * 50}\n" + + # Footer + text_content += f""" +Thank you for your business! +""" + # ========== END ENHANCED TEMPLATE ========== + + # Create temp file + import tempfile + import os + with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: + f.write(text_content) + file_path = f.name + + # Print the text file conn.printFile(print_settings.printer_name, file_path, name, {}) - - restaurant_table, invoice_printed, name = frappe.db.get_value( - "POS Invoice", name, ["restaurant_table", "invoice_printed", "name"] - ) - + + # Clean up temp file + os.unlink(file_path) + + # Update invoice and table status + restaurant_table = doc_obj.get('restaurant_table') + invoice_printed = doc_obj.get('invoice_printed', 0) + if restaurant_table and invoice_printed == 0: - frappe.db.set_value("POS Invoice", name, "invoice_printed", 1) + frappe.db.set_value(doctype, name, "invoice_printed", 1) frappe.db.set_value( "URY Table", restaurant_table, {"occupied": 0, "latest_invoice_time": None}, ) else: - frappe.db.set_value("POS Invoice", name, "invoice_printed", 1) + frappe.db.set_value(doctype, name, "invoice_printed", 1) return "Success" + except Exception as e: + import traceback + traceback.print_exc() return f"Failed to print: {str(e)}" + except Exception as e: import traceback - - traceback.print_exc() # Print the full traceback for debugging + traceback.print_exc() return f"An error occurred: {str(e)}" @@ -154,25 +214,79 @@ def qz_print_update(invoice): @frappe.whitelist() def print_pos_page(doctype, name, print_format): - data = {"name": name, "doctype": doctype, "print_format": print_format} - - restaurant_table, branch, name = frappe.db.get_value( - "POS Invoice", name, ["restaurant_table", "branch", "name"] - ) - print_channel = "{}_{}".format("print", branch) - frappe.publish_realtime(print_channel, {"data": data}) - - invoice_printed = frappe.db.get_value("POS Invoice", name, "invoice_printed") - - if invoice_printed == 0: - frappe.db.set_value("POS Invoice", name, "invoice_printed", 1) + """ACTUALLY PRINT instead of just sending realtime events""" + print("=" * 60) + print("DEBUG: print_pos_page called") + print(f" doctype: {doctype}") + print(f" name: {name}") + print(f" print_format: {print_format}") + print("=" * 60) + + try: + # Get default printer setting + printer_settings = frappe.get_all('Network Printer Settings', limit=1) + + print(f" Found {len(printer_settings)} printer settings") + + if not printer_settings: + print(" ERROR: No printer configured") + return {"status": "error", "message": "No printer configured"} + + printer_setting = printer_settings[0]['name'] + print(f" Using printer setting: {printer_setting}") + + # Call network_printing to actually print + print(" Calling network_printing...") + result = network_printing( + doctype=doctype, + name=name, + printer_setting=printer_setting, + print_format=print_format + ) + + print(f" network_printing result: {result}") + + # Also send realtime event for UI updates + restaurant_table, branch, invoice_name = frappe.db.get_value( + "POS Invoice", name, ["restaurant_table", "branch", "name"] + ) + + print(f" Branch: {branch}, Table: {restaurant_table}") + + if branch: + print_channel = "{}_{}".format("print", branch) + frappe.publish_realtime(print_channel, {"data": {"name": name, "doctype": doctype, "print_format": print_format}}) + print(f" Sent realtime event to channel: {print_channel}") + + # Update status if not already done by network_printing + invoice_printed = frappe.db.get_value("POS Invoice", name, "invoice_printed") + print(f" Current invoice_printed status: {invoice_printed}") + + if invoice_printed == 0: + frappe.db.set_value("POS Invoice", name, "invoice_printed", 1) + print(f" Updated invoice_printed to 1") - if restaurant_table: - frappe.db.set_value( - "URY Table", - restaurant_table, - {"occupied": 0, "latest_invoice_time": None}, - ) + if restaurant_table: + frappe.db.set_value( + "URY Table", + restaurant_table, + {"occupied": 0, "latest_invoice_time": None}, + ) + print(f" Updated table {restaurant_table} status") + + if result == "Success": + print(" ✓ Returning success") + return {"status": "success", "message": "Printed successfully"} + else: + print(f" ✗ Returning error: {result}") + return {"status": "error", "message": result} + + except Exception as e: + print(f" EXCEPTION: {type(e).__name__}: {e}") + import traceback + traceback.print_exc() + frappe.log_error(f"print_pos_page error: {str(e)}", "Print Error") + return {"status": "error", "message": str(e)} @frappe.whitelist() @@ -188,4 +302,4 @@ def signature_promise(): site_config = frappe.get_site_config() key_value = site_config.get("qz_private_key") - return key_value + return key_value \ No newline at end of file From f1e93bc66d850121c91f32d235ba38953b1f8f27 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Wed, 3 Dec 2025 13:28:27 +0000 Subject: [PATCH 05/13] fix: kot print when order is made --- ury/hooks.py | 5 +- ury/ury/api/ury_print.py | 288 ++++++++++++++++++++++++++++++++------- 2 files changed, 242 insertions(+), 51 deletions(-) diff --git a/ury/hooks.py b/ury/hooks.py index e75c3fcf..ca6721c3 100644 --- a/ury/hooks.py +++ b/ury/hooks.py @@ -144,7 +144,10 @@ }, "URY Menu Course": { "validate": "ury.ury.api.ury_menu_course_validation.validate_priority", - } + }, + "URY KOT":{ + "after_insert":"ury.ury.api.ury_print.print_kot_on_create" + } } # Scheduled Tasks diff --git a/ury/ury/api/ury_print.py b/ury/ury/api/ury_print.py index ff741658..6532f651 100644 --- a/ury/ury/api/ury_print.py +++ b/ury/ury/api/ury_print.py @@ -22,6 +22,7 @@ def network_printing( doc=None, no_letterhead=0, file_path=None, + is_kot=False ): """Print directly as text - faster and more reliable than PDF""" try: @@ -42,14 +43,66 @@ def network_printing( except Exception as e: return f"Failed to connect to the printer: {str(e)}" - # TEXT PRINTING LOGIC (proven to work) + # TEXT PRINTING LOGIC try: # Get the document doc_obj = frappe.get_doc(doctype, name) if not doc else doc - # ========== ENHANCED TEXT TEMPLATE ========== - # Create text content with proper formatting - text_content = f""" + # ========== KOT-SPECIFIC TEMPLATE ========== + if doctype == "URY KOT": + text_content = f""" +{'=' * 50} +{'KITCHEN ORDER TICKET'.center(50)} +{'=' * 50} +KOT #: {doc_obj.name} +Time: {doc_obj.creation} +Table: {doc_obj.get('restaurant_table', 'N/A')} +Order Type: {doc_obj.get('order_type', 'Dine In')} +Customer: {doc_obj.get('customer_name', 'N/A')} +{'-' * 50} +{'ITEMS'.center(50)} +{'-' * 50} +""" + + # KOT items with special instructions + if hasattr(doc_obj, 'items'): + for item in doc_obj.items: + # FIX: Handle both dict and object items + if isinstance(item, dict): + item_name = item.get('item_name', '') + qty = item.get('qty', 0) + notes = item.get('notes') + item_variant = item.get('item_variant') + else: + item_name = getattr(item, 'item_name', '') + qty = getattr(item, 'qty', 0) + notes = getattr(item, 'notes', None) + item_variant = getattr(item, 'item_variant', None) + + # Truncate long item names + display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name + text_content += f"\n{qty:<5.1f} x {display_name:<30}\n" + + # Add item notes if any + if notes: + text_content += f" NOTE: {notes[:40]}\n" + + # Add variants if any + if item_variant: + text_content += f" Variant: {item_variant}\n" + + text_content += f""" +{'-' * 50} +Special Instructions: {doc_obj.get('special_instructions', 'None')} +{'-' * 50} +Urgent: {'YES' if doc_obj.get('is_urgent') else 'NO'} +Course: {doc_obj.get('course', 'Main')} +{'-' * 50} +""" + + # ========== INVOICE TEMPLATE (existing code) ========== + else: + text_content = f""" {'=' * 50} {'INVOICE'.center(50)} {'=' * 50} @@ -63,45 +116,60 @@ def network_printing( {'ITEMS'.center(50)} {'-' * 50} """ - - # Add items with proper formatting - if hasattr(doc_obj, 'items'): - # Header - text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" - text_content += f"{'-' * 57}\n" + # Add items for invoice (existing code) + if hasattr(doc_obj, 'items'): + # Header + text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" + text_content += f"{'-' * 57}\n" + + # Items + for item in doc_obj.items: + # Handle both dict and object items + if isinstance(item, dict): + item_name = item.get('item_name', '') + qty = item.get('qty', 0) + rate = item.get('rate', 0) + amount = item.get('amount', 0) + else: + item_name = getattr(item, 'item_name', '') + qty = getattr(item, 'qty', 0) + rate = getattr(item, 'rate', 0) + amount = getattr(item, 'amount', 0) + + # Truncate long item names + display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name + text_content += f"{qty:<5.1f} {display_name:<30} {float(rate):>10.2f} {float(amount):>12.2f}\n" - # Items - for item in doc_obj.items: - # Truncate long item names - item_name = (item.item_name[:27] + '...') if len(item.item_name) > 30 else item.item_name - text_content += f"{item.qty:<5.1f} {item_name:<30} {float(item.rate):>10.2f} {float(item.amount):>12.2f}\n" - - # Add totals section - text_content += f""" + # Add totals section + text_content += f""" {'-' * 50} {'TOTALS'.center(50)} {'-' * 50} """ - - # Check for different total fields - if hasattr(doc_obj, 'net_total'): - text_content += f"Net Total: {float(doc_obj.net_total):>40.2f}\n" - - if hasattr(doc_obj, 'total_taxes_and_charges'): - text_content += f"Tax: {float(doc_obj.total_taxes_and_charges):>44.2f}\n" - - if hasattr(doc_obj, 'grand_total'): - text_content += f"{'=' * 50}\n" - text_content += f"GRAND TOTAL: {float(doc_obj.grand_total):>37.2f}\n" - text_content += f"{'=' * 50}\n" - - # Footer - text_content += f""" + + # Check for different total fields + if hasattr(doc_obj, 'net_total'): + net_total = doc_obj.net_total if not isinstance(doc_obj.net_total, str) else float(doc_obj.net_total) + text_content += f"Net Total: {float(net_total):>40.2f}\n" + + if hasattr(doc_obj, 'total_taxes_and_charges'): + tax = doc_obj.total_taxes_and_charges if not isinstance(doc_obj.total_taxes_and_charges, str) else float(doc_obj.total_taxes_and_charges) + text_content += f"Tax: {float(tax):>44.2f}\n" + + if hasattr(doc_obj, 'grand_total'): + grand_total = doc_obj.grand_total if not isinstance(doc_obj.grand_total, str) else float(doc_obj.grand_total) + text_content += f"{'=' * 50}\n" + text_content += f"GRAND TOTAL: {float(grand_total):>37.2f}\n" + text_content += f"{'=' * 50}\n" + + # Footer + text_content += f""" Thank you for your business! """ - # ========== END ENHANCED TEMPLATE ========== - # Create temp file + # ========== END TEMPLATE ========== + + # Create temp file and print import tempfile import os with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: @@ -111,23 +179,26 @@ def network_printing( # Print the text file conn.printFile(print_settings.printer_name, file_path, name, {}) - # Clean up temp file + # Clean up os.unlink(file_path) - # Update invoice and table status - restaurant_table = doc_obj.get('restaurant_table') - invoice_printed = doc_obj.get('invoice_printed', 0) + # Update status - handle case where field might not exist + if doctype == "URY KOT": + try: + # Try to update printed field if it exists + frappe.db.sql(""" + UPDATE `tabURY KOT` + SET printed = 1 + WHERE name = %s + """, name) + except: + # Field doesn't exist, try alternative field names + try: + frappe.db.set_value("URY KOT", name, "kot_printed", 1) + except: + # No printed field exists, just skip + pass - if restaurant_table and invoice_printed == 0: - frappe.db.set_value(doctype, name, "invoice_printed", 1) - frappe.db.set_value( - "URY Table", - restaurant_table, - {"occupied": 0, "latest_invoice_time": None}, - ) - else: - frappe.db.set_value(doctype, name, "invoice_printed", 1) - return "Success" except Exception as e: @@ -302,4 +373,121 @@ def signature_promise(): site_config = frappe.get_site_config() key_value = site_config.get("qz_private_key") - return key_value \ No newline at end of file + return key_value + + +@frappe.whitelist() +def print_kot_on_create(doc, method=None): + """Auto-print KOT when URY KOT doctype is created""" + try: + # Debug: Print that we're starting + print(f"\n=== KOT PRINT HOOK FIRED ===") + + # If called from hook (doc is a document object) + if isinstance(doc, str): + # Called via API with string name + kot_name = doc + kot = frappe.get_doc("URY KOT", kot_name) + else: + # Called from hook with document object + kot = doc + kot_name = doc.name + + print(f"KOT: {kot_name}") + print(f"POS Profile: {kot.pos_profile}") + + # 1. Get the associated POS Profile + pos_profile = kot.pos_profile + + if not pos_profile: + print("ERROR: No POS Profile") + frappe.log_error(f"No POS Profile found for KOT {kot_name}", "KOT Print Error") + return {"status": "error", "message": "No POS Profile configured"} + + # 2. Get printer settings from the POS Profile + # IMPORTANT: The field name is "printer_settings" (from your output) + printer_settings = frappe.get_all( + "URY Printer Settings", + filters={"parent": pos_profile, "parentfield": "printer_settings", "custom_kot_print": 1}, + fields=["name", "printer", "custom_kot_print_format"] + ) + + print(f"Found {len(printer_settings)} printer settings with custom_kot_print=1") + + if not printer_settings: + print("ERROR: No KOT printers configured") + frappe.log_error(f"No printer with custom_kot_print enabled for POS Profile {pos_profile}", "KOT Print Error") + return {"status": "error", "message": "No KOT printer configured"} + + # 3. Loop through all printers with custom_kot_print enabled + results = [] + for setting in printer_settings: + printer = setting.get("printer") + print_format = setting.get("custom_kot_print_format") + + print(f"Printing to: {printer}, format: {print_format}") + + if not printer: + print("Skipping - no printer linked") + continue + + # 4. Print to this printer using existing network_printing function + result = network_printing( + doctype="URY KOT", + name=kot_name, + printer_setting=printer, + print_format=print_format or None, + doc=kot + ) + + print(f"Print result: {result}") + + results.append({ + "printer": printer, + "status": "success" if result == "Success" else "failed", + "message": result + }) + + # 5. Update KOT status if at least one print was successful + successful_prints = [r for r in results if r["status"] == "success"] + if successful_prints: + try: + frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1) + frappe.db.commit() + print(f"Updated KOT status to printed") + except: + try: + frappe.db.sql(""" + UPDATE `tabURY KOT` + SET printed = 1 + WHERE name = %s + """, kot_name) + frappe.db.commit() + print(f"Updated KOT printed field") + except: + print(f"Could not update KOT printed status - field doesn't exist") + + return { + "status": "success", + "message": f"KOT printed to {len(successful_prints)} printer(s)", + "results": results + } + + except Exception as e: + error_msg = f"KOT print error: {str(e)}" + print(f"EXCEPTION: {error_msg}") + import traceback + traceback.print_exc() + frappe.log_error(error_msg, "KOT Print Error") + return {"status": "error", "message": str(e)} + + +@frappe.whitelist() +def get_kot_printers(pos_profile): + """Get all KOT printers for a POS Profile""" + printers = frappe.get_all( + "URY Printer Settings", + filters={"parent": pos_profile, "custom_kot_print": 1}, + fields=["name", "printer", "custom_kot_print_format"] + ) + return printers \ No newline at end of file From 45605fd7bc829ca764fbf96d8237ce980a9d5a7d Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Wed, 3 Dec 2025 15:43:15 +0000 Subject: [PATCH 06/13] fix: print with kot print format --- ury/ury/api/ury_print.py | 360 +++++++++++++++++++++------------------ 1 file changed, 196 insertions(+), 164 deletions(-) diff --git a/ury/ury/api/ury_print.py b/ury/ury/api/ury_print.py index 6532f651..a47c8789 100644 --- a/ury/ury/api/ury_print.py +++ b/ury/ury/api/ury_print.py @@ -13,44 +13,12 @@ from frappe.www.printview import validate_print_permission -@frappe.whitelist() -def network_printing( - doctype, - name, - printer_setting, - print_format=None, - doc=None, - no_letterhead=0, - file_path=None, - is_kot=False -): - """Print directly as text - faster and more reliable than PDF""" +def _print_as_text(conn, printer_name, doc_obj, doctype, name): + """Print document as plain text""" try: - # Get printer settings - print_settings = frappe.get_doc("Network Printer Settings", printer_setting) - - # Import cups - try: - import cups - except ImportError: - return "Failed to import cups" - - # Connect to CUPS - try: - cups.setServer(print_settings.server_ip) - cups.setPort(print_settings.port) - conn = cups.Connection() - except Exception as e: - return f"Failed to connect to the printer: {str(e)}" - - # TEXT PRINTING LOGIC - try: - # Get the document - doc_obj = frappe.get_doc(doctype, name) if not doc else doc - - # ========== KOT-SPECIFIC TEMPLATE ========== - if doctype == "URY KOT": - text_content = f""" + # ========== KOT-SPECIFIC TEMPLATE ========== + if doctype == "URY KOT": + text_content = f""" {'=' * 50} {'KITCHEN ORDER TICKET'.center(50)} {'=' * 50} @@ -63,35 +31,35 @@ def network_printing( {'ITEMS'.center(50)} {'-' * 50} """ - - # KOT items with special instructions - if hasattr(doc_obj, 'items'): - for item in doc_obj.items: - # FIX: Handle both dict and object items - if isinstance(item, dict): - item_name = item.get('item_name', '') - qty = item.get('qty', 0) - notes = item.get('notes') - item_variant = item.get('item_variant') - else: - item_name = getattr(item, 'item_name', '') - qty = getattr(item, 'qty', 0) - notes = getattr(item, 'notes', None) - item_variant = getattr(item, 'item_variant', None) - - # Truncate long item names - display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name - text_content += f"\n{qty:<5.1f} x {display_name:<30}\n" - - # Add item notes if any - if notes: - text_content += f" NOTE: {notes[:40]}\n" - - # Add variants if any - if item_variant: - text_content += f" Variant: {item_variant}\n" - - text_content += f""" + + # KOT items with special instructions + if hasattr(doc_obj, 'items'): + for item in doc_obj.items: + # Handle both dict and object items + if isinstance(item, dict): + item_name = item.get('item_name', '') + qty = item.get('qty', 0) + notes = item.get('notes') + item_variant = item.get('item_variant') + else: + item_name = getattr(item, 'item_name', '') + qty = getattr(item, 'qty', 0) + notes = getattr(item, 'notes', None) + item_variant = getattr(item, 'item_variant', None) + + # Truncate long item names + display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name + text_content += f"\n{qty:<5.1f} x {display_name:<30}\n" + + # Add item notes if any + if notes: + text_content += f" NOTE: {notes[:40]}\n" + + # Add variants if any + if item_variant: + text_content += f" Variant: {item_variant}\n" + + text_content += f""" {'-' * 50} Special Instructions: {doc_obj.get('special_instructions', 'None')} {'-' * 50} @@ -100,9 +68,9 @@ def network_printing( {'-' * 50} """ - # ========== INVOICE TEMPLATE (existing code) ========== - else: - text_content = f""" + # ========== INVOICE TEMPLATE ========== + else: + text_content = f""" {'=' * 50} {'INVOICE'.center(50)} {'=' * 50} @@ -116,95 +84,173 @@ def network_printing( {'ITEMS'.center(50)} {'-' * 50} """ - # Add items for invoice (existing code) - if hasattr(doc_obj, 'items'): - # Header - text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" - text_content += f"{'-' * 57}\n" - - # Items - for item in doc_obj.items: - # Handle both dict and object items - if isinstance(item, dict): - item_name = item.get('item_name', '') - qty = item.get('qty', 0) - rate = item.get('rate', 0) - amount = item.get('amount', 0) - else: - item_name = getattr(item, 'item_name', '') - qty = getattr(item, 'qty', 0) - rate = getattr(item, 'rate', 0) - amount = getattr(item, 'amount', 0) - - # Truncate long item names - display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name - text_content += f"{qty:<5.1f} {display_name:<30} {float(rate):>10.2f} {float(amount):>12.2f}\n" + # Add items for invoice + if hasattr(doc_obj, 'items'): + # Header + text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" + text_content += f"{'-' * 57}\n" - # Add totals section - text_content += f""" + # Items + for item in doc_obj.items: + # Handle both dict and object items + if isinstance(item, dict): + item_name = item.get('item_name', '') + qty = item.get('qty', 0) + rate = item.get('rate', 0) + amount = item.get('amount', 0) + else: + item_name = getattr(item, 'item_name', '') + qty = getattr(item, 'qty', 0) + rate = getattr(item, 'rate', 0) + amount = getattr(item, 'amount', 0) + + # Truncate long item names + display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name + text_content += f"{qty:<5.1f} {display_name:<30} {float(rate):>10.2f} {float(amount):>12.2f}\n" + + # Add totals section + text_content += f""" {'-' * 50} {'TOTALS'.center(50)} {'-' * 50} """ - - # Check for different total fields - if hasattr(doc_obj, 'net_total'): - net_total = doc_obj.net_total if not isinstance(doc_obj.net_total, str) else float(doc_obj.net_total) - text_content += f"Net Total: {float(net_total):>40.2f}\n" - - if hasattr(doc_obj, 'total_taxes_and_charges'): - tax = doc_obj.total_taxes_and_charges if not isinstance(doc_obj.total_taxes_and_charges, str) else float(doc_obj.total_taxes_and_charges) - text_content += f"Tax: {float(tax):>44.2f}\n" - - if hasattr(doc_obj, 'grand_total'): - grand_total = doc_obj.grand_total if not isinstance(doc_obj.grand_total, str) else float(doc_obj.grand_total) - text_content += f"{'=' * 50}\n" - text_content += f"GRAND TOTAL: {float(grand_total):>37.2f}\n" - text_content += f"{'=' * 50}\n" - - # Footer - text_content += f""" -Thank you for your business! -""" - - # ========== END TEMPLATE ========== - # Create temp file and print - import tempfile - import os - with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: - f.write(text_content) - file_path = f.name + # Check for different total fields + if hasattr(doc_obj, 'net_total'): + net_total = doc_obj.net_total if not isinstance(doc_obj.net_total, str) else float(doc_obj.net_total) + text_content += f"Net Total: {float(net_total):>40.2f}\n" - # Print the text file - conn.printFile(print_settings.printer_name, file_path, name, {}) + if hasattr(doc_obj, 'total_taxes_and_charges'): + tax = doc_obj.total_taxes_and_charges if not isinstance(doc_obj.total_taxes_and_charges, str) else float(doc_obj.total_taxes_and_charges) + text_content += f"Tax: {float(tax):>44.2f}\n" - # Clean up - os.unlink(file_path) - - # Update status - handle case where field might not exist - if doctype == "URY KOT": - try: - # Try to update printed field if it exists - frappe.db.sql(""" - UPDATE `tabURY KOT` - SET printed = 1 - WHERE name = %s - """, name) - except: - # Field doesn't exist, try alternative field names - try: - frappe.db.set_value("URY KOT", name, "kot_printed", 1) - except: - # No printed field exists, just skip - pass - - return "Success" + if hasattr(doc_obj, 'grand_total'): + grand_total = doc_obj.grand_total if not isinstance(doc_obj.grand_total, str) else float(doc_obj.grand_total) + text_content += f"{'=' * 50}\n" + text_content += f"GRAND TOTAL: {float(grand_total):>37.2f}\n" + text_content += f"{'=' * 50}\n" + # Footer + text_content += f""" +Thank you for your business! +""" + + # Create temp file and print + import tempfile + import os + with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: + f.write(text_content) + file_path = f.name + + # Print the text file + conn.printFile(printer_name, file_path, name, {}) + + # Clean up + os.unlink(file_path) + + return "Success" + + except Exception as e: + import traceback + traceback.print_exc() + return f"Failed to print: {str(e)}" + + +def _update_kot_status(kot_name): + """Update KOT printed status""" + try: + # Try to update printed field if it exists + frappe.db.sql(""" + UPDATE `tabURY KOT` + SET printed = 1 + WHERE name = %s + """, kot_name) + except: + # Field doesn't exist, try alternative field names + try: + frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1) + except: + # No printed field exists, just skip + pass + + +@frappe.whitelist() +def network_printing( + doctype, + name, + printer_setting, + print_format=None, + doc=None, + no_letterhead=0, + file_path=None, + is_kot=False +): + """Print document with optional print format""" + try: + # Get printer settings + print_settings = frappe.get_doc("Network Printer Settings", printer_setting) + + # Import cups + try: + import cups + except ImportError: + return "Failed to import cups" + + # Connect to CUPS + try: + cups.setServer(print_settings.server_ip) + cups.setPort(print_settings.port) + conn = cups.Connection() except Exception as e: - import traceback - traceback.print_exc() - return f"Failed to print: {str(e)}" + return f"Failed to connect to the printer: {str(e)}" + + # Get the document + doc_obj = frappe.get_doc(doctype, name) if not doc else doc + + # If print_format is specified, use Frappe's print format system + if print_format: + try: + print(f"Using print format: {print_format}") + + # Get HTML content from print format + html = frappe.get_print( + doctype=doctype, + name=name, + print_format=print_format, + doc=doc_obj, + no_letterhead=no_letterhead + ) + + # Convert HTML to PDF + from frappe.utils.pdf import get_pdf + pdf_content = get_pdf(html) + + # Create temp PDF file + import tempfile + with tempfile.NamedTemporaryFile(mode='wb', delete=False, suffix='.pdf') as f: + f.write(pdf_content) + pdf_file_path = f.name + + # Print the PDF file + conn.printFile(print_settings.printer_name, pdf_file_path, f"{name} - {print_format}", {}) + + # Clean up + import os + os.unlink(pdf_file_path) + + # Update status for KOT + if doctype == "URY KOT": + _update_kot_status(name) + + return "Success" + + except Exception as e: + print(f"Error with print format {print_format}: {e}") + # Fall back to text printing + return _print_as_text(conn, print_settings.printer_name, doc_obj, doctype, name) + + # No print format specified, use text printing + return _print_as_text(conn, print_settings.printer_name, doc_obj, doctype, name) except Exception as e: import traceback @@ -405,7 +451,6 @@ def print_kot_on_create(doc, method=None): return {"status": "error", "message": "No POS Profile configured"} # 2. Get printer settings from the POS Profile - # IMPORTANT: The field name is "printer_settings" (from your output) printer_settings = frappe.get_all( "URY Printer Settings", filters={"parent": pos_profile, "parentfield": "printer_settings", "custom_kot_print": 1}, @@ -451,21 +496,8 @@ def print_kot_on_create(doc, method=None): # 5. Update KOT status if at least one print was successful successful_prints = [r for r in results if r["status"] == "success"] if successful_prints: - try: - frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1) - frappe.db.commit() - print(f"Updated KOT status to printed") - except: - try: - frappe.db.sql(""" - UPDATE `tabURY KOT` - SET printed = 1 - WHERE name = %s - """, kot_name) - frappe.db.commit() - print(f"Updated KOT printed field") - except: - print(f"Could not update KOT printed status - field doesn't exist") + _update_kot_status(kot_name) + print(f"Updated KOT status to printed") return { "status": "success", From 43320b1918ed0259e52c24c4999b26c259f337e6 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Tue, 9 Dec 2025 14:13:07 +0000 Subject: [PATCH 07/13] fix:Add QZ Tray integration for cloud-based POS printing --- pos/find-complete-flow.sh | 26 ++ pos/public/assets/ury/files/cert.pem | 19 ++ pos/src/App.tsx | 6 +- pos/src/lib/kot-listener.ts | 118 +++++++ pos/src/lib/print-qz.ts | 59 ++-- pos/src/lib/print-qz.ts.backup | 50 +++ pos/src/lib/print.ts | 10 +- pos/src/lib/print.ts.backup | 41 +++ pos/src/lib/qz-init.ts | 9 + pos/src/main.tsx | 2 + pos/src/main.tsx.backup | 10 + pos/src/privateKey.ts | 31 ++ pos/test-qz-setup.sh | 50 +++ ury/hooks.py | 1 + ury/public/js/qz_test.js | 65 ++++ ury/public/js/qz_tray_handler.js | 0 ury/ury/api/ury_print.py | 464 ++++++++++++--------------- ury/ury/doctype/ury_kot/ury_kot.json | 15 +- ury/ury_pos/api.py | 115 +++++++ ury/www/pos.js | 126 ++++++++ 20 files changed, 938 insertions(+), 279 deletions(-) create mode 100755 pos/find-complete-flow.sh create mode 100644 pos/public/assets/ury/files/cert.pem create mode 100644 pos/src/lib/kot-listener.ts create mode 100644 pos/src/lib/print-qz.ts.backup create mode 100644 pos/src/lib/print.ts.backup create mode 100644 pos/src/lib/qz-init.ts create mode 100644 pos/src/main.tsx.backup create mode 100644 pos/src/privateKey.ts create mode 100755 pos/test-qz-setup.sh create mode 100644 ury/public/js/qz_test.js create mode 100644 ury/public/js/qz_tray_handler.js create mode 100644 ury/www/pos.js diff --git a/pos/find-complete-flow.sh b/pos/find-complete-flow.sh new file mode 100755 index 00000000..acba0c0e --- /dev/null +++ b/pos/find-complete-flow.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +echo "=== Finding Complete Print Flow ===" +echo "" + +echo "1. Print function usage:" +grep -r "print(" . --include="*.ts" --include="*.tsx" 2>/dev/null | grep -v node_modules | grep -v "console.log\|print:" | head -10 + +echo "" +echo "2. Invoice/Payment completion:" +grep -r "complete.*payment\|submit.*invoice\|process.*payment" . --include="*.ts" --include="*.tsx" 2>/dev/null | grep -v node_modules | head -10 + +echo "" +echo "3. Files that import print functions:" +grep -r "from.*print" . --include="*.ts" --include="*.tsx" 2>/dev/null | grep -v node_modules + +echo "" +echo "4. Checking PaymentDialog.tsx for print calls:" +grep -n "print\|complete\|submit" components/PaymentDialog.tsx 2>/dev/null | head -15 + +echo "" +echo "5. Checking pos-store.ts for relevant functions:" +grep -n "const.*=.*(" store/pos-store.ts 2>/dev/null | grep -i "pay\|invoice\|order\|complete" | head -10 + +echo "" +echo "=== Flow search complete ===" diff --git a/pos/public/assets/ury/files/cert.pem b/pos/public/assets/ury/files/cert.pem new file mode 100644 index 00000000..3f19eec9 --- /dev/null +++ b/pos/public/assets/ury/files/cert.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCTCCAfGgAwIBAgIUIZxF0ANqYD5fB1Vyri+tz31AM1YwDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MTIwNjE2MTAzMloXDTI2MTIw +NjE2MTAzMlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAwHFxEeKJKuPZvaERJToplCFmr+UnEBCOdWb1LfCw99W/ +TnRwDjpYMdlHbhZKGVVOLE+CBZNR2lJ1OBZffYDqP75gbv4XLblxZkdwfTDpydXS +q3UFrZe1fqYI0BGZnnF405FQhKNxf7Vmmd8V7zw5V6mvx/GQF9DNNhbJWZvCixRZ +DrtHFGh8CJFqxxRjdg2uwAa7g7UuCED9Sd3xrw++7PB3T+wYVer2FOLiNBBMXihz +vyGq3vb1MatssfAfvqq4fzeogDLx5mAzn0TbFkfeSEgmb5kuYY/WtcTgfNGZYnTr +VDCMED0EF3SxB2FhPkGxtjxe/toG1RRLu1imYNGOaQIDAQABo1MwUTAdBgNVHQ4E +FgQU9A6xJl0jtU7wXrEJ5bcK3q78VKMwHwYDVR0jBBgwFoAU9A6xJl0jtU7wXrEJ +5bcK3q78VKMwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAF0Kr +ArH3A8FbJlVMAHdemGrufsW2P5LPRgBZONuWKuJuHmIqfLTAD4hiVFoqmp17y6+x +kMARzXn1zRNb+tnKzK9CfKmQlm9N6b8JG/TjUeFFOkPJmdoPjaqHj1e8Ivjhe6u/ +Kp0l2BEvwpIIKu+jYt83N8M8tPCivfcSyG5zSXt8skzkEQM2myFhMAhjM0tieDCY +nRLiGdMCVX8F7xNvG1Mn/oUKAVTgzfdHMglEF4LKpvSx0qYo/A328/5pV4c54832 +c5Bs9xG2FrfGejatNEzuXO8Bj8XQAjPNHJ3daH5KzTB/Jl5/qvR9/Vh13y8X4iZb +ylJEHZBAxeWVR5RpUg== +-----END CERTIFICATE----- diff --git a/pos/src/App.tsx b/pos/src/App.tsx index e74b5635..f178ccae 100644 --- a/pos/src/App.tsx +++ b/pos/src/App.tsx @@ -10,6 +10,7 @@ import ScreenSizeProvider from './components/ScreenSizeProvider'; import { ToastProvider } from './components/ui/toast'; import { usePOSStore } from './store/pos-store'; import { useEffect } from 'react'; +import { setupKotListener } from './lib/kot-listener'; function App() { const { @@ -18,7 +19,10 @@ function App() { useEffect(() => { initializeApp(); + // Initialize KOT listener after app is ready + setupKotListener(); }, [initializeApp]); + return ( <> @@ -45,4 +49,4 @@ function App() { ); } -export default App; +export default App; \ No newline at end of file diff --git a/pos/src/lib/kot-listener.ts b/pos/src/lib/kot-listener.ts new file mode 100644 index 00000000..5be4fc1b --- /dev/null +++ b/pos/src/lib/kot-listener.ts @@ -0,0 +1,118 @@ +import { printKotWithQz } from './print-qz'; + +let pollingInterval: NodeJS.Timeout | null = null; +let lastCheckedKot: string | null = null; + +export function setupKotListener() { + if (typeof window === 'undefined') return; + + console.log('✅ KOT polling listener initialized'); + + // Poll every 3 seconds for new KOTs + pollingInterval = setInterval(async () => { + try { + await checkForNewKots(); + } catch (error) { + console.error('Error checking for KOTs:', error); + } + }, 3000); +} + +async function checkForNewKots() { + try { + // Get the latest KOT + const response = await fetch('/api/method/ury.ury_pos.api.get_latest_kot'); + const result = await response.json(); + + if (!result?.message) return; + + const { kot_name, pos_profile, printers, kot_printed } = result.message; + + // Skip if already printed or if we've already processed this KOT + if (kot_printed || kot_name === lastCheckedKot) return; + + console.log('🔔 New KOT detected:', kot_name); + lastCheckedKot = kot_name; + + if (!printers || printers.length === 0) { + console.error('No printers configured for KOT'); + return; + } + + // Print to each configured printer + for (const printerSetting of printers) { + const printerName = printerSetting.printer; + const printFormat = printerSetting.custom_kot_print_format || 'KOT Print'; + + try { + console.log(`🖨️ Printing KOT ${kot_name} to ${printerName}`); + + // Fetch KOT HTML + const html = await getKotPrintHtml(kot_name, printFormat); + + // Print with QZ to specific printer + await printKotWithQz(printerName, html); + + console.log(`✅ KOT printed to ${printerName}`); + + // Mark as printed + await markKotAsPrinted(kot_name); + } catch (error) { + console.error(`❌ Failed to print KOT to ${printerName}:`, error); + } + } + } catch (error) { + // Silently fail if no KOTs found + } +} + +async function getKotPrintHtml(kotName: string, printFormat: string): Promise { + const params = new URLSearchParams({ + doc: 'URY KOT', + name: kotName, + print_format: printFormat, + _lang: 'en', + no_letterhead: '1', + letterhead: 'No Letterhead', + settings: '{}' + }); + + const response = await fetch(`/api/method/frappe.www.printview.get_html_and_style?${params}`); + const result = await response.json(); + + if (!result?.message?.html) { + throw new Error('Failed to fetch KOT HTML'); + } + + return ` + + + + + ${result.message.html} + + `; +} + +async function markKotAsPrinted(kotName: string): Promise { + try { + // Use GET request which doesn't require CSRF + const response = await fetch(`/api/method/ury.ury_pos.api.mark_kot_printed?kot_name=${encodeURIComponent(kotName)}`); + + if (!response.ok) { + console.error('Failed to mark KOT as printed:', response.status); + } else { + console.log('✅ KOT marked as printed in database'); + } + } catch (error) { + console.error('Error marking KOT as printed:', error); + } +} + +export function stopKotListener() { + if (pollingInterval) { + clearInterval(pollingInterval); + pollingInterval = null; + console.log('🛑 KOT polling listener stopped'); + } +} \ No newline at end of file diff --git a/pos/src/lib/print-qz.ts b/pos/src/lib/print-qz.ts index 1de0a89f..220b3de6 100644 --- a/pos/src/lib/print-qz.ts +++ b/pos/src/lib/print-qz.ts @@ -1,14 +1,21 @@ -import qz from 'qz-tray'; +import qz from './qz-init'; import axios from 'axios'; -import { privateKey } from '../../privateKey'; -import { KEYUTIL, KJUR, stob64, hextorstr } from 'jsrsasign'; export async function loadQzPrinter(host: string): Promise { qz.security.setCertificatePromise((resolve: (data: string) => void, reject: (err?: string) => void) => { - axios.get('/assets/ury/files/cert.pem') + axios.get('/assets/ury/pos/assets/ury/files/cert.pem') .then(({ data }) => resolve(data)) .catch((err) => reject('Error fetching certificate: ' + String(err))); }); + + // Bypass signature - return empty string + qz.security.setSignaturePromise((toSign: string) => { + return (resolve: (sig: string) => void) => { + console.log('⚠️ Signature bypassed for testing'); + resolve(''); + }; + }); + if (!qz.websocket.isActive()) { await qz.websocket.connect({ host, usingSecure: false }); } @@ -19,26 +26,16 @@ export function disconnectQzPrinter(): void { } export async function printWithQz(host: string, htmlToPrint: string): Promise { - qz.security.setSignatureAlgorithm('SHA512'); - qz.security.setSignaturePromise((toSign: string) => (resolve: (sig: string) => void, reject: (err?: string) => void) => { - try { - // @ts-expect-error: privateKey must be provided securely - const pk = KEYUTIL.getKey(privateKey); - const sig = new KJUR.crypto.Signature({ alg: 'SHA512withRSA' }); - sig.init(pk); - sig.updateString(toSign); - const hex = sig.sign(); - resolve(stob64(hextorstr(hex))); - } catch (err) { - reject(String(err)); - } - }); - const printing = async () => { const printer = await qz.printers.getDefault(); + console.log('🖨️ Selected printer:', printer); + const data = [{ type: 'html', format: 'plain', data: htmlToPrint }]; const config = qz.configs.create(printer); + + console.log('📄 Sending to printer...'); await qz.print(config, data as any); + console.log('✅ Print job sent successfully'); }; if (qz.websocket.isActive()) { @@ -47,4 +44,26 @@ export async function printWithQz(host: string, htmlToPrint: string): Promise { + const host = 'localhost'; + + const printing = async () => { + console.log(`🖨️ Printing to specific printer: ${printerName}`); + + const data = [{ type: 'html', format: 'plain', data: htmlToPrint }]; + const config = qz.configs.create(printerName); + + console.log('📄 Sending KOT to printer...'); + await qz.print(config, data as any); + console.log('✅ KOT print job sent successfully'); + }; + + if (qz.websocket.isActive()) { + await printing(); + } else { + await loadQzPrinter(host); + await printing(); + } +} diff --git a/pos/src/lib/print-qz.ts.backup b/pos/src/lib/print-qz.ts.backup new file mode 100644 index 00000000..1de0a89f --- /dev/null +++ b/pos/src/lib/print-qz.ts.backup @@ -0,0 +1,50 @@ +import qz from 'qz-tray'; +import axios from 'axios'; +import { privateKey } from '../../privateKey'; +import { KEYUTIL, KJUR, stob64, hextorstr } from 'jsrsasign'; + +export async function loadQzPrinter(host: string): Promise { + qz.security.setCertificatePromise((resolve: (data: string) => void, reject: (err?: string) => void) => { + axios.get('/assets/ury/files/cert.pem') + .then(({ data }) => resolve(data)) + .catch((err) => reject('Error fetching certificate: ' + String(err))); + }); + if (!qz.websocket.isActive()) { + await qz.websocket.connect({ host, usingSecure: false }); + } +} + +export function disconnectQzPrinter(): void { + if (qz.websocket.isActive()) qz.websocket.disconnect(); +} + +export async function printWithQz(host: string, htmlToPrint: string): Promise { + qz.security.setSignatureAlgorithm('SHA512'); + qz.security.setSignaturePromise((toSign: string) => (resolve: (sig: string) => void, reject: (err?: string) => void) => { + try { + // @ts-expect-error: privateKey must be provided securely + const pk = KEYUTIL.getKey(privateKey); + const sig = new KJUR.crypto.Signature({ alg: 'SHA512withRSA' }); + sig.init(pk); + sig.updateString(toSign); + const hex = sig.sign(); + resolve(stob64(hextorstr(hex))); + } catch (err) { + reject(String(err)); + } + }); + + const printing = async () => { + const printer = await qz.printers.getDefault(); + const data = [{ type: 'html', format: 'plain', data: htmlToPrint }]; + const config = qz.configs.create(printer); + await qz.print(config, data as any); + }; + + if (qz.websocket.isActive()) { + await printing(); + } else { + await loadQzPrinter(host); + await printing(); + } +} \ No newline at end of file diff --git a/pos/src/lib/print.ts b/pos/src/lib/print.ts index feffd6b5..faecb06d 100644 --- a/pos/src/lib/print.ts +++ b/pos/src/lib/print.ts @@ -13,9 +13,10 @@ interface PrintOrderParams { } export async function printOrder({ orderId, posProfile }: PrintOrderParams): Promise<'qz' | 'network' | 'socket'> { - const { print_type, qz_host, print_format, printer, name, cashier, multiple_cashier } = posProfile; + const { qz_print, qz_host, print_format, printer, name, cashier, multiple_cashier } = posProfile; - if (print_type === 'qz') { + // Use qz_print field instead of print_type + if (qz_print === 1) { if (!qz_host) { throw new Error('QZ host is not set'); } @@ -23,7 +24,8 @@ export async function printOrder({ orderId, posProfile }: PrintOrderParams): Pro await printWithQz(qz_host, html); await updatePrintStatus(orderId); return 'qz'; - } else if (print_type === 'network') { + } else if (printer) { + // Network printing if (cashier && !multiple_cashier) { await networkPrint(orderId, printer as string, print_format as string); } else { @@ -38,4 +40,4 @@ export async function printOrder({ orderId, posProfile }: PrintOrderParams): Pro await updatePrintStatus(orderId); return 'socket'; } -} \ No newline at end of file +} diff --git a/pos/src/lib/print.ts.backup b/pos/src/lib/print.ts.backup new file mode 100644 index 00000000..feffd6b5 --- /dev/null +++ b/pos/src/lib/print.ts.backup @@ -0,0 +1,41 @@ +import { printWithQz } from './print-qz'; +import { + getInvoicePrintHtml, + networkPrint, + selectNetworkPrinter, + updatePrintStatus +} from './invoice-api'; +import { PosProfileCombined } from './pos-profile-api'; + +interface PrintOrderParams { + orderId: string; + posProfile: PosProfileCombined +} + +export async function printOrder({ orderId, posProfile }: PrintOrderParams): Promise<'qz' | 'network' | 'socket'> { + const { print_type, qz_host, print_format, printer, name, cashier, multiple_cashier } = posProfile; + + if (print_type === 'qz') { + if (!qz_host) { + throw new Error('QZ host is not set'); + } + const html = await getInvoicePrintHtml(orderId, print_format as string); + await printWithQz(qz_host, html); + await updatePrintStatus(orderId); + return 'qz'; + } else if (print_type === 'network') { + if (cashier && !multiple_cashier) { + await networkPrint(orderId, printer as string, print_format as string); + } else { + await selectNetworkPrinter(orderId, name, print_format); + } + await updatePrintStatus(orderId); + return 'network'; + } else { + // Redirect to printview page + const url = `/printview?doctype=POS Invoice&name=${orderId}&format=${print_format}&no_letterhead=1&settings={}&letterhead=No Letterhead&trigger_print=1&_lang=en`; + window.open(url, '_blank', 'noopener,noreferrer'); + await updatePrintStatus(orderId); + return 'socket'; + } +} \ No newline at end of file diff --git a/pos/src/lib/qz-init.ts b/pos/src/lib/qz-init.ts new file mode 100644 index 00000000..7f1d74e7 --- /dev/null +++ b/pos/src/lib/qz-init.ts @@ -0,0 +1,9 @@ +import qz from 'qz-tray'; + +// Expose QZ Tray globally so it's available as window.qz +if (typeof window !== 'undefined') { + (window as any).qz = qz; + console.log('✅ QZ Tray exposed globally as window.qz'); +} + +export default qz; diff --git a/pos/src/main.tsx b/pos/src/main.tsx index bef5202a..287446b6 100644 --- a/pos/src/main.tsx +++ b/pos/src/main.tsx @@ -2,6 +2,8 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' import App from './App.tsx' +import './lib/qz-init'; +import { setupKotListener } from './lib/kot-listener'; createRoot(document.getElementById('root')!).render( diff --git a/pos/src/main.tsx.backup b/pos/src/main.tsx.backup new file mode 100644 index 00000000..bef5202a --- /dev/null +++ b/pos/src/main.tsx.backup @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/pos/src/privateKey.ts b/pos/src/privateKey.ts new file mode 100644 index 00000000..6ef16850 --- /dev/null +++ b/pos/src/privateKey.ts @@ -0,0 +1,31 @@ +// Private key for QZ Tray signing +export const privateKey = `PRIVATE_KEY_PLACEHOLDER`; + +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAcXER4okq49m9 +oRElOimUIWav5ScQEI51ZvUt8LD31b9OdHAOOlgx2UduFkoZVU4sT4IFk1HaUnU4 +Fl99gOo/vmBu/hctuXFmR3B9MOnJ1dKrdQWtl7V+pgjQEZmecXjTkVCEo3F/tWaZ +3xXvPDlXqa/H8ZAX0M02FslZm8KLFFkOu0cUaHwIkWrHFGN2Da7ABruDtS4IQP1J +3fGvD77s8HdP7BhV6vYU4uI0EExeKHO/Iare9vUxq2yx8B++qrh/N6iAMvHmYDOf +RNsWR95ISCZvmS5hj9a1xOB80ZlidOtUMIwQPQQXdLEHYWE+QbG2PF7+2gbVFEu7 +WKZg0Y5pAgMBAAECggEASBU16SEVh/84vBLsvSkAEgBA2nnXG+lXsxoRlFense1a +bySmJG4uQt3EJ7QppTuSwH43kacQ7dodFhkrQ3NaSu4gaPK78+CWXV09AWek6nkx +JA/9RHyi+wFuI6G0DOkr/PNdWZFvHgrwl4o8SRQh1ng044vUEVegxjXazbnOMRGS +eGf62r5iHWjQZZurlSSI3DpIMThSmTXU++3LnKp8XwLMAEPeL7jKfgEm0kpU6mmE +DG0QV2prLJ9nQbKUs6b9MyQ+Wg7eWadv7sEZRzLYxc0awPgVbUaBpRGUK96frYpw +1GzITE7koHMbpKj0m30eRsEIuA3aSsQ61Ik8VcC+0QKBgQD8IzcG0m4e5M37U71k +kqL2kq9ZqjetfJdIBLtS5CeGQp67YBR6XAuOd9apf0e9XLBOuWfwkt/zpW8nAKuG +bA6icnil/1oQyXDFcGb8YhqPtZn8xtFYqC2xa2fAEKcsl8jpqmSbLxqbbAxU6lkb +w8C38VXsNdBUu5HZw4AAEY7VRwKBgQDDZCDlQCven2pbUaz/dsALuQJn8e3sfGQb +HiUrbVytMvvQLZSj51y7mMFAo0BevBLA41dmPPXmUYRFrlQszQCbw2XEffTIKZkG +FVOrpH27cLSUt89RhIg98rBKtKLGbwuh5jlEK9pb1BTuMu0PfuhTNKjiO/mx18iM +0vhik4kWzwKBgHNx0EUgXmloy+NSYTpGZbVOTllYtauKi13fRMHcUziHElSq1lV8 +BZKSzkfHTlqmsNcqzyt4pG/ThIQwK1kd6sl4bkNbGqrrAOZ148GVTaIVPU9e3QWh +42ID0no/ZbvmN4i9itj/BUi6fR74OhqbU4clSfkgXqYdR9eUSuw9HdALAoGAONfW +YhtrJ9cE4BBA3gk0EbT/KDJP327IyMLaWWn1fkXI0GWSSqSya7ki76UOwwDAC/GX +qZyuhRTOAF+ZCXeSZ75Oyv1By0GezRBDSToPggpl3qYi4DpIUI1cED/A4y3HGpCZ +tGV1nyVx+WJDaTCochxtzXNZTw3RwHZX4IW/ai0CgYEAxPO2sRB+3EEf4KWwlVpb +vJlClKnlw/DYruy5Hroj+a0tPb127yVNnDpO3STbV//m0O+5m79aDTfCZkAs+owi +rD9OpDmd8hY49FCrNTuO5PnAMUAY+Rx9XlytKadnsrC0BkjjIK3UHSu2jbyTz/0k +F8ClKaiiP80SzOe1E0e+jh0= +-----END PRIVATE KEY----- diff --git a/pos/test-qz-setup.sh b/pos/test-qz-setup.sh new file mode 100755 index 00000000..27f59ad5 --- /dev/null +++ b/pos/test-qz-setup.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo "=== QZ Tray Setup Verification ===" +echo "" + +echo "1. Checking certificate file..." +if [ -f "public/assets/ury/files/cert.pem" ]; then + echo " ✓ cert.pem exists" + echo " Size: $(wc -c < public/assets/ury/files/cert.pem) bytes" +else + echo " ✗ cert.pem NOT FOUND" +fi + +echo "" +echo "2. Checking private key..." +if [ -f "src/privateKey.ts" ]; then + echo " ✓ privateKey.ts exists" + if grep -q "BEGIN PRIVATE KEY" src/privateKey.ts; then + echo " ✓ Private key appears valid" + else + echo " ✗ Private key appears empty or invalid" + fi +else + echo " ✗ privateKey.ts NOT FOUND" +fi + +echo "" +echo "3. Checking print-qz.ts..." +if [ -f "src/lib/print-qz.ts" ]; then + echo " ✓ print-qz.ts exists" +else + echo " ✗ print-qz.ts NOT FOUND" +fi + +echo "" +echo "4. Checking dependencies..." +if grep -q "qz-tray" package.json; then + echo " ✓ qz-tray is in package.json" +else + echo " ✗ qz-tray NOT in package.json" +fi + +if grep -q "jsrsasign" package.json; then + echo " ✓ jsrsasign is in package.json" +else + echo " ✗ jsrsasign NOT in package.json" +fi + +echo "" +echo "=== Setup verification complete ===" diff --git a/ury/hooks.py b/ury/hooks.py index ca6721c3..34f44d5f 100644 --- a/ury/hooks.py +++ b/ury/hooks.py @@ -19,6 +19,7 @@ "/assets/ury/js/pos_print.js", "/assets/ury/js/restrict_qty_edit_pos.js", "/assets/ury/js/ury_pos_kot.js" + ] # include js, css files in header of web template diff --git a/ury/public/js/qz_test.js b/ury/public/js/qz_test.js new file mode 100644 index 00000000..05bfc155 --- /dev/null +++ b/ury/public/js/qz_test.js @@ -0,0 +1,65 @@ +console.log("🖨️ QZ Test Script Loaded"); + +// Wait for page to fully load +frappe.ready(function() { + console.log("Frappe ready, testing QZ Tray in 2 seconds..."); + + setTimeout(async function() { + try { + // Check if QZ is loaded + if (typeof qz === 'undefined') { + console.error("❌ QZ Tray library not found!"); + return; + } + console.log("✓ QZ Tray library loaded"); + + // Get certificates + console.log("Fetching certificates from server..."); + const certResponse = await frappe.call({ + method: 'ury.ury.page.ury_print.qz_certificate' + }); + + const keyResponse = await frappe.call({ + method: 'ury.ury.page.ury_print.signature_promise' + }); + + console.log("✓ Certificates fetched"); + console.log(" Cert length:", certResponse.message ? certResponse.message.length : 0); + console.log(" Key length:", keyResponse.message ? keyResponse.message.length : 0); + + // Set up security + qz.security.setCertificatePromise(function(resolve, reject) { + resolve(certResponse.message); + }); + + qz.security.setSignaturePromise(function(toSign) { + return function(resolve, reject) { + // For testing, we'll skip actual signing + resolve(); + }; + }); + + // Try to connect + console.log("Attempting to connect to QZ Tray..."); + await qz.websocket.connect(); + console.log("✅ QZ Tray connected successfully!"); + + // List printers + const printers = await qz.printers.find(); + console.log("✅ Available printers:", printers); + + frappe.show_alert({ + message: 'QZ Tray Connected! Found ' + printers.length + ' printer(s)', + indicator: 'green' + }, 5); + + } catch (error) { + console.error("❌ Error:", error); + frappe.msgprint({ + title: 'QZ Tray Error', + message: error.toString(), + indicator: 'red' + }); + } + }, 2000); +}); diff --git a/ury/public/js/qz_tray_handler.js b/ury/public/js/qz_tray_handler.js new file mode 100644 index 00000000..e69de29b diff --git a/ury/ury/api/ury_print.py b/ury/ury/api/ury_print.py index a47c8789..582ee9e4 100644 --- a/ury/ury/api/ury_print.py +++ b/ury/ury/api/ury_print.py @@ -1,21 +1,34 @@ import frappe from frappe import _ - import os +import tempfile +import traceback -from pypdf import PdfWriter - -no_cache = 1 - -base_template_path = "www/printview.html" -standard_format = "templates/print_formats/standard.html" +# Safe import for cups +try: + import cups +except ImportError: + cups = None from frappe.www.printview import validate_print_permission +logger = frappe.logger("pos_printing") + +def _get_qz_status(pos_profile): + """ + Helper to check if QZ Print is enabled for the given POS Profile. + Returns True if QZ is enabled, False otherwise. + """ + if not pos_profile: + return False + + return frappe.db.get_value("POS Profile", pos_profile, "qz_print") == 1 def _print_as_text(conn, printer_name, doc_obj, doctype, name): - """Print document as plain text""" + """Print document as plain text template (CUPS Only)""" try: + text_content = "" + # ========== KOT-SPECIFIC TEMPLATE ========== if doctype == "URY KOT": text_content = f""" @@ -31,11 +44,9 @@ def _print_as_text(conn, printer_name, doc_obj, doctype, name): {'ITEMS'.center(50)} {'-' * 50} """ - - # KOT items with special instructions + # KOT items if hasattr(doc_obj, 'items'): for item in doc_obj.items: - # Handle both dict and object items if isinstance(item, dict): item_name = item.get('item_name', '') qty = item.get('qty', 0) @@ -47,15 +58,11 @@ def _print_as_text(conn, printer_name, doc_obj, doctype, name): notes = getattr(item, 'notes', None) item_variant = getattr(item, 'item_variant', None) - # Truncate long item names display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name text_content += f"\n{qty:<5.1f} x {display_name:<30}\n" - # Add item notes if any if notes: text_content += f" NOTE: {notes[:40]}\n" - - # Add variants if any if item_variant: text_content += f" Variant: {item_variant}\n" @@ -84,15 +91,11 @@ def _print_as_text(conn, printer_name, doc_obj, doctype, name): {'ITEMS'.center(50)} {'-' * 50} """ - # Add items for invoice if hasattr(doc_obj, 'items'): - # Header text_content += f"{'Qty':<5} {'Item':<30} {'Rate':>10} {'Amount':>12}\n" text_content += f"{'-' * 57}\n" - # Items for item in doc_obj.items: - # Handle both dict and object items if isinstance(item, dict): item_name = item.get('item_name', '') qty = item.get('qty', 0) @@ -104,115 +107,91 @@ def _print_as_text(conn, printer_name, doc_obj, doctype, name): rate = getattr(item, 'rate', 0) amount = getattr(item, 'amount', 0) - # Truncate long item names display_name = (item_name[:27] + '...') if len(item_name) > 30 else item_name text_content += f"{qty:<5.1f} {display_name:<30} {float(rate):>10.2f} {float(amount):>12.2f}\n" - # Add totals section text_content += f""" {'-' * 50} {'TOTALS'.center(50)} {'-' * 50} """ - - # Check for different total fields if hasattr(doc_obj, 'net_total'): - net_total = doc_obj.net_total if not isinstance(doc_obj.net_total, str) else float(doc_obj.net_total) - text_content += f"Net Total: {float(net_total):>40.2f}\n" + val = doc_obj.net_total + net_total = float(val) if val else 0.0 + text_content += f"Net Total: {net_total:>40.2f}\n" if hasattr(doc_obj, 'total_taxes_and_charges'): - tax = doc_obj.total_taxes_and_charges if not isinstance(doc_obj.total_taxes_and_charges, str) else float(doc_obj.total_taxes_and_charges) - text_content += f"Tax: {float(tax):>44.2f}\n" + val = doc_obj.total_taxes_and_charges + tax = float(val) if val else 0.0 + text_content += f"Tax: {tax:>44.2f}\n" if hasattr(doc_obj, 'grand_total'): - grand_total = doc_obj.grand_total if not isinstance(doc_obj.grand_total, str) else float(doc_obj.grand_total) + val = doc_obj.grand_total + grand_total = float(val) if val else 0.0 text_content += f"{'=' * 50}\n" - text_content += f"GRAND TOTAL: {float(grand_total):>37.2f}\n" + text_content += f"GRAND TOTAL: {grand_total:>37.2f}\n" text_content += f"{'=' * 50}\n" - # Footer - text_content += f""" -Thank you for your business! -""" + text_content += "\nThank you for your business!\n" - # Create temp file and print - import tempfile - import os with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f: f.write(text_content) file_path = f.name - # Print the text file - conn.printFile(printer_name, file_path, name, {}) - - # Clean up - os.unlink(file_path) - - return "Success" + try: + conn.printFile(printer_name, file_path, name, {}) + return {"status": "success", "message": "Printed text successfully"} + finally: + if os.path.exists(file_path): + os.unlink(file_path) except Exception as e: - import traceback - traceback.print_exc() - return f"Failed to print: {str(e)}" + logger.error(f"Text Print Error: {traceback.format_exc()}") + return {"status": "error", "message": f"Failed to print text: {str(e)}"} def _update_kot_status(kot_name): - """Update KOT printed status""" + """Update KOT printed status safely""" try: - # Try to update printed field if it exists - frappe.db.sql(""" - UPDATE `tabURY KOT` - SET printed = 1 - WHERE name = %s - """, kot_name) - except: - # Field doesn't exist, try alternative field names - try: - frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1) - except: - # No printed field exists, just skip - pass + if not frappe.db.exists("URY KOT", kot_name): + return + + meta = frappe.get_meta("URY KOT") + if meta.has_field("kot_printed"): + frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1, update_modified=False) + elif meta.has_field("printed"): + frappe.db.set_value("URY KOT", kot_name, "printed", 1, update_modified=False) + except Exception: + logger.error(f"Failed to update KOT status for {kot_name}") @frappe.whitelist() -def network_printing( - doctype, - name, - printer_setting, - print_format=None, - doc=None, - no_letterhead=0, - file_path=None, - is_kot=False -): - """Print document with optional print format""" +def network_printing(doctype, name, printer_setting, print_format=None, doc=None, no_letterhead=0, file_path=None, is_kot=False): + """ + Standard Server-Side CUPS Printing. + NOTE: This does NOT handle QZ Tray logic. That is handled in the wrappers. + """ try: - # Get printer settings - print_settings = frappe.get_doc("Network Printer Settings", printer_setting) + if not cups: + return {"status": "error", "message": "CUPS module not installed on server"} - # Import cups - try: - import cups - except ImportError: - return "Failed to import cups" + if not frappe.db.exists("Network Printer Settings", printer_setting): + return {"status": "error", "message": f"Printer setting '{printer_setting}' not found"} + + print_settings = frappe.get_doc("Network Printer Settings", printer_setting) - # Connect to CUPS try: cups.setServer(print_settings.server_ip) cups.setPort(print_settings.port) conn = cups.Connection() except Exception as e: - return f"Failed to connect to the printer: {str(e)}" + return {"status": "error", "message": f"Connection to printer failed: {str(e)}"} - # Get the document doc_obj = frappe.get_doc(doctype, name) if not doc else doc - # If print_format is specified, use Frappe's print format system + # 1. HTML/PDF Printing if print_format: try: - print(f"Using print format: {print_format}") - - # Get HTML content from print format html = frappe.get_print( doctype=doctype, name=name, @@ -220,140 +199,134 @@ def network_printing( doc=doc_obj, no_letterhead=no_letterhead ) - - # Convert HTML to PDF from frappe.utils.pdf import get_pdf pdf_content = get_pdf(html) - # Create temp PDF file - import tempfile with tempfile.NamedTemporaryFile(mode='wb', delete=False, suffix='.pdf') as f: f.write(pdf_content) pdf_file_path = f.name - # Print the PDF file - conn.printFile(print_settings.printer_name, pdf_file_path, f"{name} - {print_format}", {}) - - # Clean up - import os - os.unlink(pdf_file_path) - - # Update status for KOT - if doctype == "URY KOT": - _update_kot_status(name) - - return "Success" - + try: + conn.printFile(print_settings.printer_name, pdf_file_path, f"{name} - {print_format}", {}) + if os.path.exists(pdf_file_path): + os.unlink(pdf_file_path) + + if doctype == "URY KOT": + _update_kot_status(name) + + return {"status": "success", "message": "Printed PDF successfully"} + except Exception as e: + if os.path.exists(pdf_file_path): + os.unlink(pdf_file_path) + raise e except Exception as e: - print(f"Error with print format {print_format}: {e}") - # Fall back to text printing - return _print_as_text(conn, print_settings.printer_name, doc_obj, doctype, name) + logger.error(f"PDF Print failed for {print_format}, falling back to text. Error: {e}") - # No print format specified, use text printing + # 2. Fallback Text Printing return _print_as_text(conn, print_settings.printer_name, doc_obj, doctype, name) except Exception as e: - import traceback - traceback.print_exc() - return f"An error occurred: {str(e)}" + logger.error(f"Network Printing Error: {traceback.format_exc()}") + return {"status": "error", "message": str(e)} @frappe.whitelist() def select_network_printer(pos_profile, invoice_id): + """ + Called by JS to decide how to print an invoice. + """ + # 1. CHECK QZ STATUS FIRST + if _get_qz_status(pos_profile): + # If QZ is enabled, we DO NOT print here. + # We return a specific status so the JS knows to run the QZ logic. + return {"status": "qz_enabled", "message": "Client will handle printing"} + + # 2. Proceed with CUPS Logic table = frappe.db.get_value("POS Invoice", invoice_id, "restaurant_table") print_format = frappe.db.get_value("POS Profile", pos_profile, "print_format") + + printer_setting_name = None if table: room = frappe.db.get_value("URY Table", table, "restaurant_room") - room_bill_printer = frappe.db.get_value( - "URY Printer Settings", {"parent": room, "bill": 1}, "printer" + printer_setting_name = frappe.db.get_value( + "URY Printer Settings", + {"parent": room, "bill": 1}, + "printer" ) - if room_bill_printer: - print = network_printing( - "POS Invoice", invoice_id, room_bill_printer, print_format - ) - return print - else: - pos_bill_printer = frappe.db.get_value( - "URY Printer Settings", {"parent": pos_profile, "bill": 1}, "printer" + if not printer_setting_name: + printer_setting_name = frappe.db.get_value( + "URY Printer Settings", + {"parent": pos_profile, "bill": 1}, + "printer" ) - if pos_bill_printer: - print = network_printing( - "POS Invoice", invoice_id, pos_bill_printer, print_format - ) - return print + + if printer_setting_name: + return network_printing( + "POS Invoice", invoice_id, printer_setting_name, print_format + ) + + return {"status": "error", "message": "No suitable printer found configuration"} @frappe.whitelist() def qz_print_update(invoice): + """ + Called by JS AFTER QZ Tray successfully prints, or to update status. + """ try: table = frappe.db.get_value("POS Invoice", invoice, "restaurant_table") - if table == None or table == "": - # Update invoice_printed - frappe.db.set_value( - "POS Invoice", invoice, "invoice_printed", 1, update_modified=False - ) - - # Validate the update - new_invoice_printed = frappe.db.get_value("POS Invoice", invoice, "invoice_printed") - if new_invoice_printed != 1: - return {"status": "Failure"} - else: - invoice_printed = frappe.db.get_value("POS Invoice", invoice, "invoice_printed") + frappe.db.set_value("POS Invoice", invoice, "invoice_printed", 1, update_modified=False) + + if frappe.db.get_value("POS Invoice", invoice, "invoice_printed") != 1: + return {"status": "Failure"} - if invoice_printed == 0: - # Update invoice_printed - frappe.db.set_value( - "POS Invoice", invoice, "invoice_printed", 1, update_modified=False - ) - - # Update table status - frappe.db.set_value( - "URY Table", table, {"occupied": 0, "latest_invoice_time": None} - ) - - # Validate both updates - new_invoice_printed = frappe.db.get_value("POS Invoice", invoice, "invoice_printed") - new_table_status = frappe.db.get_value("URY Table", table, "occupied") - - if new_invoice_printed != 1 or new_table_status != 0: - return {"status": "Failure"} + if table: + frappe.db.set_value( + "URY Table", + table, + {"occupied": 0, "latest_invoice_time": None}, + update_modified=True + ) + + if frappe.db.get_value("URY Table", table, "occupied") != 0: + return {"status": "Failure"} return {"status": "Success"} except Exception as e: - frappe.log_error(message=e, title="Print Fail") - frappe.throw(_("Error while printing order",e)) + frappe.log_error(title="Print Update Fail", message=traceback.format_exc()) return {"status": "Failure"} @frappe.whitelist() def print_pos_page(doctype, name, print_format): - """ACTUALLY PRINT instead of just sending realtime events""" - print("=" * 60) - print("DEBUG: print_pos_page called") - print(f" doctype: {doctype}") - print(f" name: {name}") - print(f" print_format: {print_format}") - print("=" * 60) + """ + Endpoint to trigger printing. + If QZ is enabled, it returns 'qz_enabled' so JS takes over. + If QZ is disabled, it prints via CUPS. + """ + logger.debug(f"print_pos_page called for {name}") try: - # Get default printer setting - printer_settings = frappe.get_all('Network Printer Settings', limit=1) - - print(f" Found {len(printer_settings)} printer settings") + # Fetch POS Profile from the Invoice + pos_profile = frappe.db.get_value(doctype, name, "pos_profile") + # 1. CHECK QZ STATUS + if _get_qz_status(pos_profile): + # QZ is ON. We do NOT print from server. + # We return success/qz status so the JS knows to proceed with client-side print. + return {"status": "qz_enabled", "message": "QZ Enabled, Handled by Client"} + + # 2. CUPS PRINTING (Legacy/Server-side) + printer_settings = frappe.get_all('Network Printer Settings', limit=1) if not printer_settings: - print(" ERROR: No printer configured") return {"status": "error", "message": "No printer configured"} printer_setting = printer_settings[0]['name'] - print(f" Using printer setting: {printer_setting}") - # Call network_printing to actually print - print(" Calling network_printing...") result = network_printing( doctype=doctype, name=name, @@ -361,27 +334,20 @@ def print_pos_page(doctype, name, print_format): print_format=print_format ) - print(f" network_printing result: {result}") - - # Also send realtime event for UI updates - restaurant_table, branch, invoice_name = frappe.db.get_value( - "POS Invoice", name, ["restaurant_table", "branch", "name"] + # UI Realtime updates (Only needed for Server side print usually) + restaurant_table, branch = frappe.db.get_value( + "POS Invoice", name, ["restaurant_table", "branch"] ) - print(f" Branch: {branch}, Table: {restaurant_table}") - if branch: - print_channel = "{}_{}".format("print", branch) - frappe.publish_realtime(print_channel, {"data": {"name": name, "doctype": doctype, "print_format": print_format}}) - print(f" Sent realtime event to channel: {print_channel}") - - # Update status if not already done by network_printing - invoice_printed = frappe.db.get_value("POS Invoice", name, "invoice_printed") - print(f" Current invoice_printed status: {invoice_printed}") + print_channel = f"print_{branch}" + frappe.publish_realtime(print_channel, { + "data": {"name": name, "doctype": doctype, "print_format": print_format} + }) - if invoice_printed == 0: + # Update Status (Since server handled the print) + if frappe.db.get_value("POS Invoice", name, "invoice_printed") == 0: frappe.db.set_value("POS Invoice", name, "invoice_printed", 1) - print(f" Updated invoice_printed to 1") if restaurant_table: frappe.db.set_value( @@ -389,137 +355,133 @@ def print_pos_page(doctype, name, print_format): restaurant_table, {"occupied": 0, "latest_invoice_time": None}, ) - print(f" Updated table {restaurant_table} status") - if result == "Success": - print(" ✓ Returning success") - return {"status": "success", "message": "Printed successfully"} - else: - print(f" ✗ Returning error: {result}") - return {"status": "error", "message": result} + return result except Exception as e: - print(f" EXCEPTION: {type(e).__name__}: {e}") - import traceback - traceback.print_exc() frappe.log_error(f"print_pos_page error: {str(e)}", "Print Error") return {"status": "error", "message": str(e)} @frappe.whitelist() def qz_certificate(): - site_config = frappe.get_site_config() - qz_key_value = site_config.get("qz_cert") - - return qz_key_value + return frappe.get_site_config().get("qz_cert") @frappe.whitelist() def signature_promise(): - site_config = frappe.get_site_config() - key_value = site_config.get("qz_private_key") - - return key_value + return frappe.get_site_config().get("qz_private_key") @frappe.whitelist() def print_kot_on_create(doc, method=None): - """Auto-print KOT when URY KOT doctype is created""" + """ + Auto-print KOT. + If QZ is enabled, publish realtime event for client-side printing. + Otherwise use CUPS server-side printing. + """ try: - # Debug: Print that we're starting - print(f"\n=== KOT PRINT HOOK FIRED ===") - - # If called from hook (doc is a document object) if isinstance(doc, str): - # Called via API with string name kot_name = doc kot = frappe.get_doc("URY KOT", kot_name) else: - # Called from hook with document object kot = doc kot_name = doc.name - print(f"KOT: {kot_name}") - print(f"POS Profile: {kot.pos_profile}") - - # 1. Get the associated POS Profile pos_profile = kot.pos_profile + # 1. CHECK QZ STATUS + if _get_qz_status(pos_profile): + # Get printer settings for this POS Profile + printer_settings = frappe.get_all( + "URY Printer Settings", + filters={ + "parent": pos_profile, + "parentfield": "printer_settings", + "custom_kot_print": 1 + }, + fields=["name", "printer", "custom_kot_print_format", "item_group"] + ) + + if not printer_settings: + return {"status": "error", "message": "No KOT printer configured"} + + # Publish realtime event with printer details + frappe.publish_realtime( + event="ury_kot_created", + message={ + "kot_name": kot_name, + "pos_profile": pos_profile, + "printers": printer_settings + }, + user=frappe.session.user + ) + + logger.info(f"Published KOT event for {kot_name} to {len(printer_settings)} printer(s)") + return {"status": "qz_enabled", "message": f"KOT event published for {len(printer_settings)} printer(s)"} + + # 2. CUPS PRINTING (unchanged) if not pos_profile: - print("ERROR: No POS Profile") - frappe.log_error(f"No POS Profile found for KOT {kot_name}", "KOT Print Error") return {"status": "error", "message": "No POS Profile configured"} - # 2. Get printer settings from the POS Profile printer_settings = frappe.get_all( "URY Printer Settings", - filters={"parent": pos_profile, "parentfield": "printer_settings", "custom_kot_print": 1}, + filters={ + "parent": pos_profile, + "parentfield": "printer_settings", + "custom_kot_print": 1 + }, fields=["name", "printer", "custom_kot_print_format"] ) - print(f"Found {len(printer_settings)} printer settings with custom_kot_print=1") - if not printer_settings: - print("ERROR: No KOT printers configured") - frappe.log_error(f"No printer with custom_kot_print enabled for POS Profile {pos_profile}", "KOT Print Error") return {"status": "error", "message": "No KOT printer configured"} - # 3. Loop through all printers with custom_kot_print enabled results = [] + success_count = 0 + for setting in printer_settings: printer = setting.get("printer") - print_format = setting.get("custom_kot_print_format") - - print(f"Printing to: {printer}, format: {print_format}") + fmt = setting.get("custom_kot_print_format") - if not printer: - print("Skipping - no printer linked") - continue + if not printer: continue - # 4. Print to this printer using existing network_printing function - result = network_printing( + res = network_printing( doctype="URY KOT", name=kot_name, printer_setting=printer, - print_format=print_format or None, + print_format=fmt, doc=kot ) - print(f"Print result: {result}") - + status = res.get("status") if isinstance(res, dict) else "unknown" + if status == "success": + success_count += 1 + results.append({ "printer": printer, - "status": "success" if result == "Success" else "failed", - "message": result + "status": status, + "message": res.get("message") if isinstance(res, dict) else str(res) }) - # 5. Update KOT status if at least one print was successful - successful_prints = [r for r in results if r["status"] == "success"] - if successful_prints: + if success_count > 0: _update_kot_status(kot_name) - print(f"Updated KOT status to printed") return { "status": "success", - "message": f"KOT printed to {len(successful_prints)} printer(s)", + "message": f"KOT printed to {success_count} printer(s)", "results": results } except Exception as e: - error_msg = f"KOT print error: {str(e)}" - print(f"EXCEPTION: {error_msg}") - import traceback - traceback.print_exc() - frappe.log_error(error_msg, "KOT Print Error") + frappe.log_error(f"KOT Print Error: {str(e)}", "KOT Print Error") return {"status": "error", "message": str(e)} @frappe.whitelist() def get_kot_printers(pos_profile): - """Get all KOT printers for a POS Profile""" - printers = frappe.get_all( + return frappe.get_all( "URY Printer Settings", filters={"parent": pos_profile, "custom_kot_print": 1}, fields=["name", "printer", "custom_kot_print_format"] - ) - return printers \ No newline at end of file + ) \ No newline at end of file diff --git a/ury/ury/doctype/ury_kot/ury_kot.json b/ury/ury/doctype/ury_kot/ury_kot.json index c2adbf61..57dfbfaf 100644 --- a/ury/ury/doctype/ury_kot/ury_kot.json +++ b/ury/ury/doctype/ury_kot/ury_kot.json @@ -39,7 +39,8 @@ "customer_group", "table_takeaway", "user", - "amended_from" + "amended_from", + "kot_printed" ], "fields": [ { @@ -253,13 +254,20 @@ "fieldtype": "Data", "label": "Total Production Time", "read_only": 1 + }, + { + "allow_on_submit": 1, + "default": "0", + "fieldname": "kot_printed", + "fieldtype": "Check", + "label": "KOT Printed" } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2024-08-26 12:28:58.664903", - "modified_by": "Administrator", + "modified": "2025-12-09 11:16:15.073592", + "modified_by": "obed.odai@gmail.com", "module": "URY", "name": "URY KOT", "naming_rule": "By \"Naming Series\" field", @@ -305,6 +313,7 @@ "write": 1 } ], + "row_format": "Dynamic", "sort_field": "modified", "sort_order": "DESC", "states": [] diff --git a/ury/ury_pos/api.py b/ury/ury_pos/api.py index 0cbf4b72..b4455eae 100644 --- a/ury/ury_pos/api.py +++ b/ury/ury_pos/api.py @@ -683,3 +683,118 @@ def validate_pos_close(pos_profile): return "Success" +@frappe.whitelist() +def get_latest_kot(): + """Get the latest unprinted KOT for the current user's POS Profile""" + try: + current_user = frappe.session.user + + # Get user's active POS Profile + pos_opening = frappe.get_all( + "POS Opening Entry", + filters={ + "user": current_user, + "docstatus": 1, + "status": "Open" + }, + fields=["pos_profile"], + limit=1 + ) + + if not pos_opening: + return {"debug": "no_pos_opening", "user": current_user} + + pos_profile = pos_opening[0].pos_profile + + # Check if QZ is enabled + qz_print = frappe.db.get_value("POS Profile", pos_profile, "qz_print") + + if qz_print != 1: + return {"debug": "qz_not_enabled", "qz_print": qz_print, "pos_profile": pos_profile} + + # Get latest unprinted KOT + kot = frappe.get_all( + "URY KOT", + filters={ + "pos_profile": pos_profile, + "kot_printed": 0, + "docstatus": ["!=", 2] + }, + fields=["name", "kot_printed", "creation"], + order_by="creation desc", + limit=1 + ) + + if not kot: + return {"debug": "no_unprinted_kots", "pos_profile": pos_profile} + + kot_doc = kot[0] + + # Get printer settings + printer_settings = frappe.get_all( + "URY Printer Settings", + filters={ + "parent": pos_profile, + "parentfield": "printer_settings", + "custom_kot_print": 1 + }, + fields=["name", "printer", "custom_kot_print_format"] + ) + + if not printer_settings: + return {"debug": "no_printers", "pos_profile": pos_profile, "kot": kot_doc.name} + + return { + "kot_name": kot_doc.name, + "pos_profile": pos_profile, + "kot_printed": kot_doc.kot_printed, + "printers": printer_settings + } + + except Exception as e: + import traceback + return { + "debug": "exception", + "error": str(e), + "traceback": traceback.format_exc() + } + + +@frappe.whitelist(methods=['GET']) +def mark_kot_printed(kot_name): + """Mark a KOT as printed""" + try: + if not frappe.db.exists("URY KOT", kot_name): + return {"status": "error", "message": "KOT not found"} + + frappe.db.set_value("URY KOT", kot_name, "kot_printed", 1, update_modified=False) + frappe.db.commit() + + return {"status": "success"} + except Exception as e: + frappe.log_error(f"mark_kot_printed error: {str(e)}") + return {"status": "error", "message": str(e)} + + +@frappe.whitelist() +def test_get_kots(): + """Test function to see all unprinted KOTs""" + try: + kots = frappe.get_all( + "URY KOT", + filters={ + "kot_printed": 0, + "docstatus": ["!=", 2] + }, + fields=["name", "kot_printed", "pos_profile", "creation"], + order_by="creation desc", + limit=3 + ) + + return { + "user": frappe.session.user, + "kots_count": len(kots), + "kots": kots + } + except Exception as e: + return {"error": str(e)} \ No newline at end of file diff --git a/ury/www/pos.js b/ury/www/pos.js new file mode 100644 index 00000000..e11d1608 --- /dev/null +++ b/ury/www/pos.js @@ -0,0 +1,126 @@ +console.log("🖨️ POS Page JS Loaded"); + +// Load QZ Tray library first +function loadQZTray() { + return new Promise((resolve, reject) => { + // Check if already loaded + if (typeof qz !== 'undefined') { + console.log("✓ QZ Tray already loaded"); + resolve(); + return; + } + + // Load the script + const script = document.createElement('script'); + script.src = '/assets/ury/js/qz-tray.js'; + script.onload = () => { + console.log("✓ QZ Tray library loaded"); + resolve(); + }; + script.onerror = () => { + console.error("❌ Failed to load QZ Tray library"); + reject(new Error("Failed to load QZ Tray")); + }; + document.head.appendChild(script); + }); +} + +// Initialize QZ Tray +async function initQZTray() { + console.log("🔧 Initializing QZ Tray..."); + + try { + // Load library first + await loadQZTray(); + + // Get certificates from server + console.log("📜 Fetching certificates from server..."); + const certResponse = await frappe.call({ + method: 'ury.ury.page.ury_print.qz_certificate' + }); + + const keyResponse = await frappe.call({ + method: 'ury.ury.page.ury_print.signature_promise' + }); + + if (!certResponse.message || !keyResponse.message) { + console.error("❌ Certificates not found in server"); + frappe.msgprint({ + title: 'QZ Configuration Error', + message: 'QZ certificates not found. Please contact administrator.', + indicator: 'red' + }); + return false; + } + + console.log("✓ Certificates fetched"); + console.log(" Cert length:", certResponse.message.length); + console.log(" Key length:", keyResponse.message.length); + + // Set up QZ security + qz.security.setCertificatePromise(function(resolve, reject) { + resolve(certResponse.message); + }); + + qz.security.setSignaturePromise(function(toSign) { + return function(resolve, reject) { + // For now, we'll skip signing + // In production, you'd sign the data here + resolve(); + }; + }); + + // Connect to QZ Tray + if (qz.websocket.isActive()) { + console.log("✓ QZ Tray already connected"); + } else { + console.log("🔌 Connecting to QZ Tray..."); + await qz.websocket.connect(); + console.log("✅ QZ Tray connected successfully!"); + } + + // Get available printers + const printers = await qz.printers.find(); + console.log("✅ Found printers:", printers); + + // Show success message + frappe.show_alert({ + message: '✅ QZ Tray Connected! Found ' + printers.length + ' printer(s)', + indicator: 'green' + }, 5); + + return true; + + } catch (error) { + console.error("❌ QZ Tray Error:", error); + frappe.msgprint({ + title: 'QZ Tray Connection Failed', + message: 'Could not connect to QZ Tray. Make sure it is running.

Error: ' + error.message, + indicator: 'red' + }); + return false; + } +} + +// Auto-initialize when page loads +frappe.ready(function() { + console.log("📄 Frappe ready on POS page"); + + // Wait a bit for page to fully load + setTimeout(function() { + initQZTray(); + }, 1000); +}); + +// Make functions globally available for manual testing +window.qz_init = initQZTray; +window.qz_test = async function() { + console.log("Running manual QZ test..."); + await initQZTray(); + + if (qz.websocket.isActive()) { + const printers = await qz.printers.find(); + console.log("Test successful! Printers:", printers); + return printers; + } +}; From 9fb9e4eb66eac6e12a2f111b924f861772dc7f6e Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Tue, 9 Dec 2025 14:44:59 +0000 Subject: [PATCH 08/13] Ignore QZ Tray certificate file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 92890b8c..c46fc1b8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ ury/www/URYMosaic.html build *.lock +ury/public/pos/assets/ury/files/cert.pem From 71bd7f50fb82e7a042fbfadd000da376df6f2df6 Mon Sep 17 00:00:00 2001 From: Carbonite Solutions Ltd Date: Fri, 12 Dec 2025 14:46:43 +0000 Subject: [PATCH 09/13] feat: logos and translation and special comment --- URYMosaic/index.html | 2 +- URYMosaic/public/URY.svg | 148 ++++++++++++++++++--------- URYMosaic/public/ury.ico | Bin 15406 -> 576 bytes pos/index.html | 2 +- pos/public/ury.ico | Bin 3494 -> 576 bytes pos/public/ury_pos.png | Bin 23966 -> 11345 bytes pos/src/components/ProductDialog.tsx | 7 +- ury/public/Images/URY-POS.jpg | Bin 23966 -> 11345 bytes ury/public/Images/ury-logo.jpg | Bin 23966 -> 11345 bytes ury/translations/en.csv | 23 +++++ ury/ury/workspace/ury/ury.json | 42 +++++--- 11 files changed, 160 insertions(+), 64 deletions(-) create mode 100644 ury/translations/en.csv diff --git a/URYMosaic/index.html b/URYMosaic/index.html index 6cb0d2b4..b85b430e 100644 --- a/URYMosaic/index.html +++ b/URYMosaic/index.html @@ -4,7 +4,7 @@ - URY Mosaic + Ex Kitchen
diff --git a/URYMosaic/public/URY.svg b/URYMosaic/public/URY.svg index 79c9accb..d7811615 100644 --- a/URYMosaic/public/URY.svg +++ b/URYMosaic/public/URY.svg @@ -1,48 +1,104 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/URYMosaic/public/ury.ico b/URYMosaic/public/ury.ico index 5e542eec53d22ed0fbd6089a2351dbcbcc2432c5..99a08f5d2d68545d3cca9880cf2efd46c1a42b9b 100644 GIT binary patch literal 576 zcmV-G0>AwL0096201yxW0000W04f3i02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|5C8xG z5C{SQ005AYXf^-<0r5#hK~#90m6E$_R8bJdzd7gJyJy{dcab#+VkHCw3$d}Y(IQx+ z5Mq%=d;~&3Vi5~l!9PK;S|LRUiH#v3CJAD zG&3-KGaoZQn!U{UpD_JIw7((pPeD zOxmMUr;DrCbr|mTJBhn<3+=WsMwkbN`zDR|a<#$EpU z#Y9yx0E7Wx^?^KF(@_leP@3WzTHEULmOF7WXea*T21=HMMF9YTJ*-8whA2i{!-0w< zJ2ZN{7@sij*K?)l(zN862ME_Dc%hMraGtw%Qgqs`+i^Rs{PxZC*Uuu^Ev6^)`Foj& zU%a19U1U=(Q*&KCTq7{rcW?OZYXX9o&-u_{*XfYbpxGB&7A9`SxD2B-3B$a3|vCk6355b0cNc|i5(d@-s6uuk) O0000-awZVWjzl=~v(bLyC|Z9=8By1wC+481sUBsk zm!sm%72H=&^sVro?MCCyEjazb+7a6qJ{E^QhaHt~twi~n=TVcm0Tr)3ht>nhC|D2; zD(`J>7`Bh<_g{g}-HYawB-Dzwrl;rQ&-f*1Nct4!ANQc+)NwR^wRza~vS92H7;;hY zBa_yd5E18zNbA#ZVeBoF5+wo>0f~S_V7w#HQ+Eb+n>X^lqkek=+?G~Wx#^qja2XB! z-tY0CY1ikxmr(6#*}D^GHodDRNA>JJT>*X6BUC5;{#Dv0QZG&-94D#kp z<9?fVZ{@P)lrJ?orl%ej?Jm>Oqj{-KT+jWs9sZ7+)BcEbXx{TR%g?#%X7si+BKyvp zkT-WKd>*$Z#I; zCC@HKXNi&hh4#oT`*(AGbMg+Z=kJdy-)(N@rp|&K?oY)(GyF;vi*Y7BNPf${T`)bf zK-fMJF`%P%m?@JeqC+Y@AIL4TLNt9M^LxrL!OiLf1v8Umthg( z+$;WHP@3AQf&QOViT^Bi-5+X}d`bi)0ulj5U*1D;!XV3-vKS8=|k8gU17 z9#4JMZ{4Kj2l~Zhv+_ASaW52!ugQO4hGvI8>NLEf%TaR+BMmm6Zk z{&C(vR{9e+Kx0g?BO_fKUgGVF9-qVcbXQ2#pZtpM0#&^Jg4V7kVV%~FUxZH*2d1BP zE!U}DC+-sUoc(*90Hv%)f70}D73FEYdTbUjrzh+xSQxG8ui85JNq%nm`GD4z?oE}g zTE_lJ^@y+Ot}NBc1Nq{w{^V<=LN~fgMm$aS^c&dz{QIKdwwhVB_7lgD6(RUMF`v{i zAdYSD{0Ni{{_3A4{GWI>3O;d{jn*H=`0iWa%+tdw=8thvEaw$Iau3@{+#sz{#2p4Y z{2TqfT`p7z-jMV+2p^$!xFP8i#+}B=_FEcrY)0XKRHtaky?iGxkTwj~ztd#Yx~A_H zbBpKsKh0mdmsq`F4NT%m+#~5$ymT&T{^Z7mbDFqOPlt_thIo9kM?du%n8p1;sNX+L z+UQ?Y{f!G_1U4O7N3>qhxABp zAnx3fmOA7&p6sFZl_GJ@w8ofI_iC~2(0<+{kUqZN9==ma<-{9PS_@)5C9b~h@b|EY rb(O|e28n<~Kq4R!kO)WwBmxoviGV~vA|MeMKM08HK{7}LMvcH - URY POS + Ex POS
diff --git a/pos/public/ury.ico b/pos/public/ury.ico index c11df359b0163cce5145618a5eff900de3f22741..99a08f5d2d68545d3cca9880cf2efd46c1a42b9b 100644 GIT binary patch literal 576 zcmV-G0>AwL0096201yxW0000W04f3i02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|5C8xG z5C{SQ005AYXf^-<0r5#hK~#90m6E$_R8bJdzd7gJyJy{dcab#+VkHCw3$d}Y(IQx+ z5Mq%=d;~&3Vi5~l!9PK;S|LRUiH#v3CJAD zG&3-KGaoZQn!U{UpD_JIw7((pPeD zOxmMUr;DrCbr|mTJBhn<3+=WsMwkbN`zDR|a<#$EpU z#Y9yx0E7Wx^?^KF(@_leP@3WzTHEULmOF7WXea*T21=HMMF9YTJ*-8whA2i{!-0w< zJ2ZN{7@sij*K?)l(zN862ME_Dc%hMraGtw%Qgqs`+i^Rs{PxZC*Uuu^Ev6^)`Foj& zU%a19U1U=(Q*&KCTq7{rcW?OZYXX9o&-u_{*XfYbpxGB&7A9`SxD2B-3B$a3|vCk6355b0cNc|i5(d@-s6uuk) O0000-ah0}4S+ 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 ZS{R1@Lu4=feFbL8G~)OME~*~p{ugw^jxhiL literal 23966 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 Pvt(P1m^_vLuZ{l#8O|Nk diff --git a/pos/src/components/ProductDialog.tsx b/pos/src/components/ProductDialog.tsx index c83f9d58..711aaab3 100644 --- a/pos/src/components/ProductDialog.tsx +++ b/pos/src/components/ProductDialog.tsx @@ -247,11 +247,12 @@ const ProductDialog: React.FC = ({ removeFromOrder(itemToReplace.uniqueId); } - // Add main item as a cart line + // Add main item as a cart line with comments const orderItem: OrderItem = { ...selectedItem, quantity: numericQuantity, - price: basePrice + price: basePrice, + comment: comments.trim() || undefined }; addToOrder(orderItem); @@ -484,4 +485,4 @@ const ProductDialog: React.FC = ({ ); }; -export default ProductDialog; \ No newline at end of file +export default ProductDialog; \ No newline at end of file diff --git a/ury/public/Images/URY-POS.jpg b/ury/public/Images/URY-POS.jpg index 7f44b35387f4f2c112f1d8ca6f3a37688fd270d1..de48464d0aa4d2b811b9baba28063b578491b532 100644 GIT binary patch literal 11345 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 ZS{R1@Lu4=feFbL8G~)OME~*~p{ugw^jxhiL literal 23966 zcmdpe1yEg0v*5)&xVr?0;BJB77CcyRcXtWy?(XjH5-fOdcXxLPd-?R=_kVBqy{g^X zs-0_nT4s8BdU|Hg%ssF3uj>FL2@!D-00;;OKn(Z-yl#S0iVF#8eU_IM5tkAM5&!^D zEC4WpGXMYA9|)rv{SG_7!MeZ0VQ;XlqP!50CkqHu8vP5b`!BGQy|q1%=f@kr zp0({8ybOeSEX*C=%6dz08p9h{Dk%VezW_gY06Ty@KolSdg#VAGzwK$20|0Q`003Z7 zf8%tM0f0t-003+8ZyZ?`0D$NR05ptS>)7i2rVKdn8`RJc0Jtm!01#9G0MwrV0Id3- zivBJ8cU$}?btMAI-~sDt1$-F+%mD@fB7iu+5}*g52SQ8$1^^>~?R5zt1ONvEdwYX} zfkS|ULqNhpK>`y33@kJ(A_5W;A_C$&WK=9PWE4!4cZleC=$P2pxVX4TX!wNqID}X@ zxHxZ_fPh0lKte#mLqWmgAR{8<{I}EVcK|Xp2qriO7zhaf6d42z8RWGWSOE|K2*jKJ z{*|CWKp`NZ!N7r3Tp$4y?0=$yLx4d-fr7j)0^q@bL?kdIpa*1jLBwB$SC2$p8~d)8 ztvaP!q50Qp=>+r=bp4g>e*s{!`j!$~+CSKTd~Y@`XT|p-mV4M8Vfw9UOv${W&OJd*eL_pt^fc)0Cv{(uutIq zZyYX&9YT9qt^fcqr_&Zb74$QJPVK*O0h9v=TU~eg!diD+5Hm?q%S0}q6pX7Jf4q07 zYv&+H744p|t9!=ixvp^O9JQK3zmF|EG;E*m>FxTDS%GkLPnEq$+I!Gs=v>%ADcFu$ zUTsplVgW#$?+|o0#dy7e5+DjYVEb>9_lQ{lMDIsn_gUxjUZ_uON>@2T9Kl7z>4-P{ z2HU?PH+H>3s&!rSHPoyA`0yCdF=XpSulwp&2wiB_ha4CR-sIlC0l+)}0KVUH<)ipQ z?T}e)_5Cc-*>)VLf%45JbqnR22JgBzwE+OgDRSeh{Bg#gH-m1w(b8j+o_E(%=;9+^tnF z$7Vj5C()DA1zJkYI+(+UJzb?#rAq^5tXi7BHHD`xOPMDUzs&IrE1fULm}HARm9i$O zQ*bdgm1Kkv=xgzGdAXN+6(yzB-;roD56t5@oj=-q`N}-&(v7RnuGHbLA_(TXS|vZa zMm51w+_NzZ3l-B?`pb3pVyTqXoRQFhkA!?+WHeQ^Xg_=N%M;(m`I>%u%39j~18+*K zL%J3i$=qIt%M4cwN#%0RhDrzXJwhj|xldGLTMA+5W2#_a^`SiEp17jgF0O}L@OVn3 ziqOnbo<0qGmk00r=j)4W|Mx3aWA*9{39d<*2Fn?C%gnR?iBX@px)sXr-WMg8Q)w|B zZeH^9x*~RXI-_P;SD!p&AMI4!vddlW$t@Z$fLM(CX9qv=JUu~G0@SX0+y~Pu0~?p^ zyY>$DC@7a|k8tKJE5*9n>5Ot8L!~ihql*U`lS&IsUjgpQQRQ(q41g{a)=zUekv))tTvZrkt&dPP(P*}b?X^7)@8SIN8A!GUhI7xY)d-V z@>KL-SG4nU8={eKKp$32CU(nWkU}3 zmCZR)8bK7qhvt4g=3I^5q0g)T$+uyYw_n9Bbk+Akx@-s1zH$wF!*0|(l3m8Yw@&kF zLVT*Rxi!Af%>vOK!}UWT?F~EajMZ0?(j0F9W~B8o0XeX%Th*4KbFJB`1*c3S=14{p zbk6zEcURf_sZ*`lO8Sl3G6ZbT5BZk2L?&`YNYe|b+ntDJv|wfwyQ-hucg(A+$gLSX zvBNfSL~n&*L>0}seI1@?+nH$8Xvyi33(86UN||*O*}5UzmdVa1w@}W)7b41i6OnoY zA8j9mTJqponDwk%>FMzbK)ayO8sCNcB`j=>*ld*ponAeDja{k-ZB@E%n*Jn??g0+- zRV~<{+&4l~Vp55a!z>2PqvF;SJ<_6GW|8lr>SD<+<%t-w9K+TUyUtH`?d+0ownce*vu!b~v~`|z2nQOz!*p8XbV3T^ zDqZt!;W$3xINA!;)N}U)U$uqcTDsZu(oEW!YMYs0ZZ5?ap&WDj@+gfft9Po0mZ~MI zZNe(TzYP!bJW@czt{DNNXUBFuDr+U>FCo2HSc}vb#xKg7(yR$d^rxC<FMg*eL2aI6=erW&DDL3Q02BHu zJGEY-gE%_Ivz9r3z<0KXQM+NAcAF&~4czB%-zEFrJE& z$}0N$387X=tbB|`+Gp8ZnWw(;ZvJmWKtqzo`1n_UzK481jw$$;3h>(g#6mw!|7rK; zY2}o6!orPw)6GZOoTrKT9c!T{zV#0HznqSr>2Sr7JK)5=n6;N0?62DH4_9c~h9ZcN zg}gT|@U3u@UB0`1zMDad(5D$wIaMH&)B+dw8JfQ>A!xj@|JvBGbk!+bmtM+}DaO@l z`annJ8pXTI#hh?E_~<2A&8ePY@TElY>f%G(Qb1qguYR(%TY7#nD*R0sl47v50K@@FdQc#Y9DeZX%?uA$;EZrb< zyuTBqT;QldOUV{Z zQtk{Q{(eit&cHt`s_nt3xY@AO^#WZJ4FG6!3)H?~01o*c>DtA!PchR{vsqH)R-$u{ zwzUH11aFvpMutG)fc|uejT2KC+dGY4}3xPM-6rI0o@LP5m3K-7OG{bVV z^&W%t`6kqnsUAF4IA;bc)r(VOTC&UtK}-M$yCjOD*22*erk?B8z5q`LAN}yeUIONh z%;Y_C8()Lq^Z|FPj2^sMJIEVMP7TymyauuhBAy>0aeeI~%PD5GA1Zfp;h(o42XVQ5 zbNjWgC;@=>!%@|%FgD=a1^4&>Li(;Pb7eiX{9_8=N#0R<6oZC0u;c#61RMvECFY*p z_6x(`Ph1s%@q5p@8S7R3N4B?X=JH~@;jM4d(?A$xo$nbjqx<@w_z*il&iVBJi2^xu ziq^20N`bNiQua^t)PIus3kTvhQ20rk46Z}dIkUu8d&celFVcSv&}`oRRxGVfV7Zp2 zDeqYZ#ikSPRuzEzUlaa=3-*OvY+wHl_>AG*&0Q7`Jh%DyX0q{%R8*lvx|Gqu0%^;a-rg& z!ZKRclhG-nQSal|v@tT2N?@0F^p#VtP$N+Jl1H0xzZX5_H!v+w5HXfAmcmDIL4Qv3 zaTuhke+8VVb8-uBX%&(zv7?F3<#ywAUDB(wlPcQT4L_JXaZA>3$oPAGAWAo^Oj>L3 zk7Ln`!7D*!XW{c_5X4sK5l&!jFx-*Encpi3d`Zt=Joo&K*{i96oF`yt5Zyk1OB!ci zoe^g^QATV68)_iR?nzRze*FdZ*Vm6+51*w_qg`%OL4a>&%dCkscgbMty1J$JvL7R1 z)fo?=96gNjnKhH|Ki8{LM=rwqTVQ-Nq%OEg&&mGo*y{qdbg}x5PMLaA2EEt7M3z-` zsZ!IAb~^;dLKF#SHKNGDxRE0&)CSKJ!yMDo(eWE4jHM_Vjk##C=xoY9Skz#qPkgbN z)$ruU4ujlal35hAv5d(KHQmnjCWBw?o^Xy-FpR(JW-a(0FU=e-8EJ9GFrF8Zht6!E zSTrGI&_7D9`94U9(os3re?PpWn^6q<+{}}sdo*W8;1|f!J1j?iPoRY%g-##^)fU8a zxxBLdD>i(wf!2DE!A`Hq-0TxiyLN*Pub<{P!xgIt_ngJnCvaJU>$=88L(zU$hxK4;)KU; zXJ%^+|De#Ko;uY)XQkw8uS|)*SdY;cJwbaf&xif2aeoh?pOUSZDBaCLZHh*q8R8%< zSfVlB_-OJGLxMmgIW_&dDt@yuM1|JXFSez4T~Bd$vz}}upW~e?QjFC&$x+Dg-8$!x z1oD*w!q!$dKmN@~jRIDDWJ`jTgeKz+%~4Z7tazK^PfXC(S{LF}qc&@-X*xuP-uRD0 zGH|JV4HmbA8c#jnleu~&f_W`FVII+++k6}@%lUSaRav%hJ7VpKwEI;@TynN!W2{oM zD}rg6@0%RA!rsB{%2vlkaSvy(2YB8%QsWTO|&8l5BVs$NNbP`_hM6 zmysktsz@+tAM`Hu#g}?qlgN?lSHJ{B z8uj|>calxjC|F&QgY# zg)f^cv5&K9uvsZPQT51*9G1CC&f1%$WZQl@`Wwliw6O-z`jI^bPrL3jEDaV=o=SF3 zsNY4Akt7BoZ4j`gBDM>|MCdXuQu{mTFBdx~bvKXigUFkfd2O!Cl|Bzsr7GU=C?o!? z+}TF0j5oQXT}hu}@Vgq?y{vo%u)S%tl8C^k#9QtBOe^5zzUuMC^g!86Sc7g&VJ%=Y zEO*u&0jKDu*9}FqaS)v(esmnM>8%qOxiwfYDNeey@fin3-e3k7CBsA&)b6MEbkC$imnL2Ui7wk-olIc(?T&{KK$CrUqqa9RW z4_T#W7~kC7J#I3&JU9s**w6)Q-MuY%1G_tg{e1%q7gnVWG?0Z!wTuDb4t`Ti1O9pk$JT#$Qp5c0qF*x~2Rp`{ zHownV{#+<`r=mVP%G}88>lIsLI`u8p&19^!o>@+wZr+e0I7{qOhg)j;MAJFzC}j!yRcP$b~-*bdcN^c z;WK~Rof4TT2P40-JM=PhQsY&yYnlfa@S`0ykKuT`ArB^OqYE25M-7$-``f;)^J^W5`#+c*c29nAmdu`7HOtDspZQjS-&y;NCawC@`u#myi~oY!Bh;bPU?fW zt2qq2%!lEo1S``xTyPLEc?EV%%3S*^P_=DCay*n=+V=_f*s+6*rqnoTaMZEoFrBs1s?PZjJFiT)Tg zl{0Mzx0edeXgI~I$ts2*(76WIf#$HiHD`HH{KFizE;l+5)8=`aKV#MlvkwA4ARCLj z#f=&B_O&8ki*5D$$gf*=RcI7lSYnyvlfE1K2sOAqon6d}`ehFk*nGAY@ivLFOSNR_ zlR4k(uT*@PG>v%xEOA$Nu~XR1@D#Yp*mBt>!xrC&*gJLq_I?r#D&OxVq0(O4z5 zR6T#cb~@F>grT;VJwhBP<0q(k=5TE7z&Km3gJ|A1MsLbff~9nj_DRWOFXPX;3EY|` z^w-D#AoEd5SFvV1RQAhTCThY{K5!q_m^EkGj&`S?N(5;5iK-aGTrY7)_)MwnfBdAe z5u+0#C@e9>CVlL=I70khV>w5TtojM@_cCjq>357oM#%{=GOC_kd(O*J>!&uYNDhkV z#z{V#We7~G4pm4|F+BRt5{8WMS5l^H07pT?qtnjjnwKl~6))Rh_aobK`kmCuR?pqx z^;94sP|`e;dYauYViF+_SB$=7vZk}SR#tG%1QLiq)jBRbwZLe__kwI(c)@cz|AKW^ z=^^2)a8DwRZ$LsSi8FOiY@(pN=J!bA1uhJMM+IjU9eFMR{bVs!O^C6|k%q!(TBRk| zpBpZU6TymS$}w$IwDte(C8~Z)HjT|?c6$bPPo3TXaLUe!44krqf`dUqfI@-2T5TY zM7V~SHs2=GWaJ1xBoeat&{se^J-pLgvB_3Eb=;2d_+!w7T2MGb;yqkjFJ)=c14}dp zH3^G!?la7)9$e4l!ViA_nIqYv+03s8MWM;zCO6>v?w#_6!XuWX(HkvvNQDWtyk#ZGa!Pr&geidw?-jm!7!`!sqp0{NzuTd>#m3peitQZQq2`6-)=uIdL7^4oZw zXL+k>Mhawc8}NX82-$=ROCV>3L`Y}Y4VhH$kxCCf+q)U^*4|}?6$w32`zGB;jg!nF zw^Ax5^^k?8Jz{R8!KhsFNQsZK38Ef7&mo><4z*Jh!H{1+`Jw!DXDU;WaATv-*+z>e z7Kw*UQ;>XLm<;Q8N6}pDqO+*-TqwE3)%zedW&^Dn4P75B)fP`@s86m!F0KM$LX>>QM}Ur3JA^fK@yV=<+>ZuczMtl_7wP;cSTzi zk1iM`t|IXbzfS^rJhD!r$}^met32n|cQ(9)2Td>NRG4}ClP2hsUU@RdB4gE%%5P3f zEOqtQ@!ffoj*M`HgqaElPpqi-SYB~fu~B;8 zSoIM`J|!sJGATAh$&DfMhca;y;T??KTDrwnd(HR5Het*sbS==c2F0S{WIDRaD3gE% znK-0A+V?a6lw=PET5-Y5e26E*h@_vu*G6>55^BD8pnGnLUMn5L%e&ioKIleb zWtvyr4gbWqcvmR#05fm8YZ~IELxOuDGgh#mVE1WKmY|pzbAPys5bS%h*>0mN_cuYMVQxGE+@3!Ob&h*l!($#vBK=2S^+m}vf@P_H9kzND_ z5*IPSxWR{=;5AVr^2+{)f30QikSldPODR;TLZ(do2g>L~x=j;MZYrG`3%)m>PC!2| zy+h&8snphu-AcV1Msx0cG6?MW`c1t=N@%y+os4um7Jt|Ko5TX8xC>{qs%pa#fVPR`pRpqzF zr>xZ%;;t!$L3gQ9$T!=F=ff%ZLH>gnd=Z9>`Xp5$jr0aut|3Rx1za~FxPx+&+Cgc$ zOhlPv81~-a={J|B<-J1N3FT7z9g`=RiY@)%pDiYr|B;#{{ReqFFV$2T*HvVxdZ683 z5i^*_Wjl|KM^RPy8;Ne&qA+<(h%K*D0_}krEzO3?DVdkBKp({b`&k0zMeyw~;&VG_ zxrFe?&L^Z;g#FOT0|VG}65BGLjYHyIOE~aFVaFmn{6(uge}9~?W_r|$#P0$j%W%{u zr1ga^6*;hiQLc)DXpO`?GDM%^g2Q5q(9e>ZpDqW*s1Lq8r;JK;zJcv(x!zC7dqsHIYM_zb%G#d=N)`hr%)BjH;C_+ z-#}h7_d$w7j}iD0r_4A{^1}2C{yi*%%m-Zgl%ARX=1-}D&x5KEI$s|`GdpQ>MGWr4 zPst*^rRh;PV)apc#J{vg3>aM21~*Y_kfjgS;2KXAEJJCBUJsw+7&J)ypn)JuQ05c* zO(p1{9*Jo`WCEG0sTGr^V`R@{PcW&52~`O56`jVAVVcMd2CEk)XcL5lxI~b7U7$XY zxpm`$7AsLt79~Sxx@5`Yd|-m@5QKghFP-X|5)nCjh${j9uFwR?ow_fUM9Hs!)V#LV z{un-ewuyZ@tJxHJ_a7FyQ#Unv>p%!v1zmzTeAOOy+|Y$&8MT8TDgN!%FvD?X%qrI_ka^E8e{+n z7&!0^oMrtn&jKFN07pUw#%^L}BBqaWBm!uH+N7W5f16r?zD=!ax6Sn~<&|SkWKu-k zf%iWf#Bms=ObU^~AK(Kip5dJ3+eDU&3G_Mn*Hgcjd&+b+`c!#veBp2OsXnlRHL@V) zZ;yLdzUs5BwRd&+35U`6C<;F|`C(l(MMm2`ww2HEdq7@*8Ihp9C#(>9Eo$BxLN$1fvqE_XK z7(F2W6>x)cof15H&?fkRQ5+<;Bt#*;AYByR6ZiOI>3hgW${%$n@UgInlpO*Z6^h3P zKLqvI9ns8@!{GG4{#jN@zKv&brJby9R$|G>Vt!Lx31OgVb`2IPayRM|eX*WOA8J zQp^0v8Gcx!QU>1A+*f;$f0}=3D8KWEic@n+5RKE=BRCB1^`TQggAFp+UM$hW>Qcum z;gpOh_`N0Noy!#`$?C~mMOSA$m4vQL*PNy9;1r!li`pDZF0&+M1S4u+0VXx9TNm|a zj1OwiQWXN)Iw*jl2sz3V(M)@fD8zOQ?cfy+nN#I zY!J?*A;q7*N|rA2v`{~T$=EP?Hk|&-t>mJJiWQ?=OSj^!;RP~)?L*HN@Dv=(sqZeTP|P9c2De5zaMs% zuyfXQ@thst)Kq!N*>n+zYN>n@5k+2Jcq6=_PA%s!&Vi-nY;LUp^9oHn^`O-u1sbC6 zm%>wB2eFCA-knMADKd}`i9Kn*md$M~9m+)LFe3D=YM~=|xs|et- z9`5u1tv5^1KrS$f3L*icC;$Qi0TKcX;N^2;Z7Eg+KpTgF|GL{HN{MvuYf3oCjImUI_Ub;Wqf?EDCzRa z5p!cznNh6GMwM+`#~HI)K$%gKA-;!KRQQrgjc9*tcsYrM4H6n?JUTn?r?7|;#JP@B2yviL4}7br?k>W*568<6+X2Ip8J)KPn7D2-vn z%J${q0;j^VD*Ta$Yu3$&+|a7m0en6OgSC-2BEsBeD>KDu)N($v@tfteOlRue9sL$K zUXPjdxS6*xcci*1R{a>U;8uRz{H)(W-f6hdZu^yb1I5X@dZRC+tVJ^0u2%3< z;-=^IK~b`cRR5HvL0iL*MOzUvwu5>7U#u8+CXK*0HB7u* zw0FuvNpzY5kz;daa1+0u6OA`N8z@Fo`2)#8C$}(g&MeXs(zIz)Y~3w0+>A z?e@sI>i($KQu_oUdc5HgLBonZ%2Ld_^&fSeD#&Tx85y(S8D_J`7w7inkIyIA_snUg z;Xz)m$>9|?KzO9n^M+*8XU^Ms8L5an#P-=f;Z~tAp06olLUQ1=v=7+k;F&!Mesab* zSs&MJ93XdW`|?>|8o{_rlQ#X^3D@iqWE$Z^E26&gqmX(BKdOC=T-;QU@C4JGnIn5T z-sn3M)%M~0&dog$jEgj1B5gC_6~~}LWl;N^9$MzLF`BYtnDX`ah!=uNx^jcy@6#Lmu(S9yEcREce{DQlR@A{+vxinkFC?)RiW39< zIdyvMtP*^`z)}G}gpr%u#$?X=0MXQu?Hn8rHUSSe)KTSK&rUZ+D+jfhC!TuEdcHj5 z2#gC@vzw+V_L%=)V= z576}v7{L}lPDHJ{^bMvkIL0e#AG3e72@6lQ<>qtf6j(vQizUx^t79zY~G#2 z-3?^i3{|Z;u<4?ZIHgCx@qaXOnmwr?f`}Q+wX28HTnSPaEzCFXz^C4i#?cx~u9!@4b9Jf&004L)VXX<5U%7*Va+i? ziQ(dz5xGqVHFuu@TGNxg_q*Qg=pQf5QsW2t6BrfW{nU$y)12VSe z{wbSgjWLqOzg!P$sag0$9VpVWaSVHazs9IRXj7zuxO~kz(U2PV^~NFr>dVG+)*yRv z3;Bf`ac9_Vb$r~OV@ zvv4@{R<$Cd71hR*+5DFf#uc$OO^$>#QMbI7!VBn=j)+|Ajt#H}bXcc`XYPN;mG%6- z{1{s6!zL3uIJo|R;V9t=@Hs?n6|vKYkoBiN@>k`0E>^v7H)co4s3DbX&UI%J@Cs4}zW%nU5&>^HPfELz3er^okHJ!k}0 zAKB9XsEDm{nG-#ue6#vQJ$nw{S=u}k-ciRR|6{$nt6W}a`>5x#b^e0SLGwqN%0 z*}Zq9EM)l<`^;ye#(cj`%9YPFhyWz!TiKDopL|Z+9b!aWAEFv;oPXY`-%4JrIf4xkGC%1G@=5v zY>M7<$BSTZQLuyAu22+XVKB0}UDLW@IR5u>AY<4}6}-$Je} z!9e+sR+1K(?mZ1V(NKiqn7(g#sDH+$2-xm?=B9F)1U<9#@c%?R{jlx!f}hIq;mK`= zYq!QS*JF&cruuSlU$^IzBROX+^*=e?UAQK=g(oMu3w@DJAT`sVchd(Gv+1*c8xnMK zk&O6nKDBak%ns)6_L{-ed_Pii#*rD?n0K!bn!jnr)K?Lo=Q*{{cETbbg!4^t#{8>a z@}`Jx4;tjGx+N>{mRYH)5>EMdstR8=wV(E;R^39_N1P>9ApRLlmZX89q?(ML&UsIe z%OYC5GO1L}0)1!fwz}N_t4O(q&&e+3&ZPg>D`4HUNv)@4bOL5d#=@>rKb`U&sXU^O zz~Ql@wX&j~vnRfi0(VCvS#B^OK9GZ*sW86$Ma}@s%}Q#soO5&qfii+ted$tb!jYXW z`QedTSu$sm1y_^w58u%E-8GynzAf^caG>FAH4RSKsD{@kN}c!L#Dh^jvbeY6ZH@mq zapMimyztj&Zl#bLYZ`eeUE97DY*1-Fo!zoH$CZczG%IG%#EWl+lBb`URfEq$_tGm- zgzU&WR{(zo^P~T<>v7^0-DtxwfkAR62hg`^Vj3;u}EqZVtdhzexi#5ssN8 zxXsWtL-g;9#M^i)?e{`IJCFzw8!j)xh4H9hIae@T zh>UqZ%rH$Eq0ZO@hHN3C_Y+XZ8_Dj;k6G)P6Gk1s!?Bul+GZHKv)OanX4VT*+rtG8 zbZvVsvtGmk#&z+nlaRm89)Af2ZRog-GYF~)M`peP_@k1e?0c+3D+wWD!R)SD(^lx% zFrLY0e7d!(zR+U8LHxf5)R!H9Wo!4}CEh9g3RmwHTruM81g`ODk$|THL7?95l>Kpv z5CnjXL`2N^QSO{UC)?&5aA|k(*?M9_;Lp_@2tRSNd;$mAIH*!UL(dK$0(C8OCf144 z=_}waNhxB!B^xkSU1iF$uIFvqbyRPs7mD{+)&-u3{IuBpKe_uabaq{ z*oum-_^*JUks!J_8*X0No}je$CFD9YJ$kbHS|BKqJ^Vk%L1>z??wVc!nZw#5AB%Lt zU?pW>tqTPVaaXl=2*7OG!^~PM^8j&^l_QWo2|98j4k2tZam;7W$>`-@j|ATR!ZC{9 zzlT}L#2_4IVO8bo@-msnrg2P`V&a@| zq)M6R$93IJlMnsS)-PO^{dG^tz+X*e-?xV!J`Zk%cj&tCMS35^h3%3*T#l^`GR~u? zRXR~39+I(1*WV4+B@mK~jPPQ)Rap`S=zd=%g_|i~-2fT2PeP0;Gf=6yfPF46%lWCdL&QmW-Jk>b$x;uY{0-ZtgQfLzK*vnEk=1s3WsH8| zd#N1&oXO^+;PfFT!vP9t?Sfw}x03r1PdUP!p#8g2HUr=?8yaye2)o8;IiMn-KQcfC zoxjXYGcP~QesYGR907L5y9%8igz=U!o1Df<(N_Q*@Jx%mTShd zNQ97)QWl*iqxzFVw6xpOE=BDA{kxRH(kBWNiSCLb&1_{;h-EfwACmGCvsVD7OL;ju zhfyK#4jnUTjzm|zU7(3CXd?6{f}ogy{-j$=$}*4TW5N44KmbPd3@F2VEEr#civ6Bp zYN`~wD5{ZJz!bED$t!@KdR>F&CSx)tR8f&TTn7X)Rx&cwpH*gLeEN}HODn*N3ee9P zYR9ufoPti;LZV1ubuF!AK+M=1H(bXs#G6mc!UzwNGqtZt9PksT%9Wh7pJW{$k&!1; zw9Ec^ZDA4=GKb7nNoBQZm#zJ4JP`;t9XwNfj`=(sGln1Fi|LvD7X)UNC1>5Or>d7= zMJw&woI)1mcciZX9}!A47*#cuzWrvk6k$D?m7MT+1aY-ZHR2!=#{Kz@v(gD;2ozSF zZ%tx24lpNzlXpoOvbpPAo>s>#GRTMB#ZTQ(D7bMSsar>}*e1OjlNL9biMde~qjEBo zR3wX_T$aEU5UCU;7UOY-%=4Mg(vt=ip9Me;EG$reQlqWnB%aBRPHMmvI(r0TUCOXD_UIQ6VOUOK#-I$)4j)>L_HfmZ|4@P>PfPMW^1Dj#@+;s6 z?07gIcGrE-4YJZAR+1WNiCoQ-ilzlqHr-jLd@o**in&7E&)1%e4JHLaZ|`Vs6E(3xlb zWJJ2y6=FVzI;j9hEp3i2YMi+N(N!v_1a>OBbcCZm?(8!xkYQa=le8#f=rzjE{`jz4 zj$UJpZ7ve0j#hvZU#Id4Xp|I*FTI`W8!CuN4?5#Q!||6RNtK#^1@wbtDdGI##cy>X zzhYjolWKX93<%`sTGca?VIF16cJ-L*Z!a{SJ8Kqy@}NVp_g-tCD|&?euIk^_A)N%H zbXUayne{byi|A4}+8Y0n$u_w>$6dqTnefc+XT;1n^P^4(l5R+`1eT81JZ3~Gb%c;h zvnsO%)uw)(V`fIE5HW>crCrL7F&*jd+Fw3t_uXSzfUqc8{YX-ye=cN?J>&fjM|g#E zr=%m82jqkjm7&oAcrVEp0~6`IDdrQ$B5CRHbtUh<8FO>C!wln}Uhjv(T{i5+Ic3pr ztYM1X6VV+dM)D39QU$TpKuj5_VD1;0y-$8cNdzUmZ#n67dc1VPOPIaFr6avm3H`KK z0#(0kn6~8Jd+9+4GIix;&?i+nm`KGX;L*P8m`G(}#aO@DEWH=(B13AH!9RIIkaXta zo4W7-lZYO(I1?0A1LF~&H3_Rd!4R<9N06e__X%Xc*y`zfSqWQ+ZrIS1*KjsD#o41$ zwg7dFk4fMQ{W~?iHC(*Cnf3bV;>K#!31f;~It}w4mE=avM&Nk$Rc0$>aaGSC<)cf% zOI6)vj0A%ga%_F2xDSNz?a3d}`k}LC3#4e^u|VKFKyRUYz(wxb8v@injJ*p+Os&KN z&LzAOeaMPOa>xc(N`Lo%KN0HdVJ3eSf)}<^K%Az z9n5mDzwmeZL$&p9&FF?YEP0;YY@c$Jm+!Kvw+~b;Lm_@bDgAaAyDA!oinGUP^;bwZ zV2HLh*p%szIr?m8K`N-@ zLAQb@#1(y;M78f$8El$@_E4TcXa`GLODy;ACvYzb{rIKN4WTTDX+r5zLP*)vi&FsW z#O{BxX{(0FMM{OFSzRsM-|ane8q)--%~X=99-(K}XPY{Xvj%7KyF#-+-bL;E zH-Cb+4g5%Rk4vr0jBBl;WxE?W{TxjvUtwmO^X{X!Oa+W#v~@h}bEtx+U%O?{?9H91 ziKarSg+uhuEDAV{4ZHeL$FKChLh76wZB1racSm6^N8B#^MUo3fZ+DP1mhd(7gyGEOqroIBAdFB@Ef>wSx%1CWG@~0HOa9plAaU!hk)-I+c zj~siks`0B%K~-6~^-oFs2y+A;I!eh;fFCUu&+GL!edbS@l(zYo`PCNF|C+W-Zt<5(@WCs;1eMl>9yycteQiXZ)h4lR6<~IYryTD-yU!9+ZH<# z0D^26_?M*rMq&ol7x-_mzp?U@W&JlL0Q|r|sr_35g$JUDzWo~>i1Y@QqWup9p|&o7 zEAGL+Q%FI9IDYWI3Bawgx7{*u0GmCC0*$Np@0S21fj5@lO$6Ho6nVR>N5P>M_yCLC zB<0=)7RgZOjq9`umIe42w#L*2srB_e)JPzj?ni)!?#Q1apjk-gAd=7^oB*izj~-p7 zKfM86fDQ)0H54zPOYnfr-NzeXBn7V@g%0>z1Vh^%1R8XdBI^Wf3P7d+d?pB>tqO20 z-0cSgC)w!Tk_8uOO%8bHYyY>%JE$%kXu!9MD&PT%TX0Z;$m12jI^aeEBn!0p=Gq%J z3lG2m!T|a)>~9fF2E;{ZfbW|KxWWkdP?eZ+=%V*EI0isW-31f?o5cbYQBYaN`dfqv zwWkXUC6Fcy1Uw`M1j(M1K>+T?^ja1WP=#3p|BWQe31IyZEM5Rf^$&}IWje?z|c!9OHuqJKaF0OS9N{a+zjyZ%?yf1<(d1780xzV5cXfzRyu{p<`V7!+{F z_s>U~yxkFayCI-slU?0S6n)Mh@NMEk`}4+M$C8l(rzs5;`&3}SsRHg_0bT&-z9{R@ zrq0kFO@v)j%7OcIlv-7U-RtEB*ofyfcJSVuZpjC;xxMpCuURp zu!Jf%2~DP?#6P`ot$$FgB-rk@8yfiV9`*41)K4Szh(LUL64n($NW%-nHfXQDm}nPa zr}%kA(_AWNF@f!VF3kp=Adu!m z!roKHFtm7&K#sD3 zP(X~yMizCD2Oe zB#3!fVQ`3db}|Bqdsu9HA?zw8+{? zBrO~QZvJ+yBOiy1nEdk#I99CjJ@%t#kYLI8JJJg=N_1sibOe-RRiGBJ(_r(ZL}dC( zyV;;&kkEd<3|I!3%h`y;q`i;?;r>YP=7RmuoG4qwGbZfS&M8j7)4L-EbYVXU4~}(( z3KC;fK`>E@tJwQ|Fa@O#_xec<9qFA(PZg^|sY7*)QCi1b;SME~?M?sj(F$r4i`EUo z?93QcrK+t!5}IXM5?ROD`Asi@YN;=~!2nKCL2U$3-JX(J0^-eejJgsv79Kn)cDFcX ziucQy-7-!!;10b#yH(%22)-bv*vfiF`5Jub-W0XpLt;CBLi91MXa2-oOYda~+D=;7#qZ1f;zL;1Nv-Mu|d&GL1|!eXNwrMv69sn)zwgc4#T5kCrMd^Qlv zqG)?VLqNlPlzYkPdF&7(esJlvI?^;;%EGEIc`Nq7t|q!;m+Zu5A$iW80naXUvm_)r zH$jw~Aiyl*^z`y9gW@t7diNlG8|$UBVz4)qA>)C6;r~R$f&@~)KSN#=-vZQes zbOv`F+=6S+;O>$DgS%S@KDb+OcP9)M0s#hh7#tE37$87^0Kr2Dce!uxd%OE5Z2!`y z<#bn9SASiny1K3he&RsL-siF0U~scH#&<9Sn7gDH{m^i9u`ZSL4-7(Z7`kwx7sm*y z2|OnSEcsAfdf7On9G(7q3Sj#mR@ntxKoN?ML2k_7j6q{G(>+$E)VBk&wF-84U?Uk5dL?=wxcS3#YZb`|TIs#19 zs0#)G`sD?34&6{kBuj}H6N)FES_#FmREB-55>1~#GfGPHqvV6WwE$e${6xTr+8GL! zy~y7Bg*jCY(EH);EdA+w+Z7f zl)*#1lt=dCJ2pv-%gH<#lIiiH;s2&hqReavoCT^ubrt>ujBFqjG&Iz|qg4HUyZy^45&r<bfI0+V*BiStb!9vNBkDNL?7tH-twN7(_lA+!NW%Cr6eF%bAH;hKq$SbvBD8>|dyH|VgjOHuxKbz&@S$Qd5O;vmJo7Mu5 zm#FL4brGT0<Y{g22v77D}@jhw_+SW0?kYHp6M} zJ{kf2y`&|Y2%!lHDLux?6{phZvxghwLtKe(p@KD1k;bkoH{#kOmXvos$-6sp2A6@! z2Q>EiNbP2gx?e`ac)aZb!FKBA{K$^}{_`THr|RGl^DPRSW&Y15^r(B+I`FtNkX>*h z&B4<+u6-_|o;3Cn7PPRj-c-}YnlT*}>5sy~U6lo*?zTD72j53h&5F&gZ)2Oy(*Wr=~CUCi(DvW=`+j)cj?j^Xy;$gziq?HamU3HluyK z&no@e%n@B$&gwYDf5l~!O+9CnbP4}QkpIchd>lF*Z#(-#^5bIw)O(G7;5MFm zgMshPB=lR}tl`?9c?6zJ^}yMi?p0cDOT4vbTN~8g5X!W&=QZt%G;VwSSNDLp7aa-3 z95dcQaR|$2y8`^nx!{>csEzKMeKpE!Px<~R>)AJ0y*KwnY4gZ;_v5Q;?8M3ryo@{) zW%S<7C)Rbse4?B3aMim?N|0rYG+P5obGoafC`HROILHG(?vKorExzrY!JYn0E;2%( zHF)I_MzgnylI?;mMQgxfi-?&}*x>BY*up&M5SQ<&vPhXI+H;|RaqdWjSLdw+yhK8W ze>z`>H%Hv$Q~`U1_LB9umR}G-sqM1|ULUuSkucam5gnxav14(|k!kLpf%l$|q=$Hv zdBwa~(fjq*s^F#Pw8VP2ndG=wO-|1j1$VC=j3}RMhjfwFus9s09}3Q<(u1!AaqZga zu;!wTSJGM)Vy>X(A%v7s(}G%x8J|gp-kW@8aNdzcpERNOqR#NSd4(SM>RFLp`|F}X z-|(!QVG6}bP&PPAl8OeNYE`0_Y;5*>0b={HZ}x>a3F@_^u z*%(ZtgC_G~{H5WDOHXwbRz*Ho3J`|1;TclSlmjs^z%+J-I1YMHFdO&frU1BhtRkcs zMr*=q0Yc%XlUMX+KKQl{){nen==%xIK-*DkXfRq~q;D}TXy^)BSkh>D#U(~sKf=F^ zdkuHjV#&4MmBo&K01}F=Ne~R+`#1TkjWR1c4fctblB9_rkxEnE{oEa&+G0*ALq*#( z`<=iNl6*{TBBqzks&f=Fh8ZiGp5Yb~7fjRlA|JFRyuoZN2}pKX2iygsvE`lvat5PH z7nQG6drH2H)`L(*<6W>ScuMs;cWP$wE>b$_mBEJbPSF$VTBC@Zfz275K->$Rz)^1= zvi*$mbTGnSU_@TVMrT3wYhx6ezsacwx1!O(f#{A|iqe&WSEZm`RtK2PqeOT@@7n+a zg`MwA)*e_*Bdc`a7K!;7udZB9EI}d}VU~P>fgPC!Nd-_o_^cM((ZD$1BU3|&Q`4rn z5BfcJy)5MJ+wHSG>FUQ?>VzwjWgzC5nB`h;xl=ZAN)ivx7=%~ZJ5TrJ-Ep!QP%r7{F@e>vi$Dg4*^1d$3&*!p>&MT4isST^=nj6kS8)n@ z#700(&WRzGNTRECiMn#Log?B`0v}j23hh#NiBv_2CS%v%tI3P?PzVjH(`7%ey`$}# zFkc@Wo?!LExQL1~Zku37`7;8U)fb__qtk>U_hg3F$(^u2CPUxJ4BqUD)mdI; zVFqQMcQ4lnR5uxS>mIRRs_*t~#OJkc-NC7AYFQ>f6$6{3qit&G`~)wA|&H>OLp zc>dT7?6?{&_Ctn|cx;gW=tlfdT78jLgdb~nu)Q}q&f)KI&PjGt;bj>#T?DHm?-|P3 zt(%m2WSpL>t)kaD9QGfJ97;V@Sllui=oC~*TNxT@9{teK>3+-JB%XNFJP}p!Se9&- zesfOKl)-2U0Dy0PFXYPyFfCxQ18x zU6=oPkJ5{XkR=UD!(WJb;_d;tqN>9!??5fv{D{mSQ~JKx)D4t1Z~d(EixZYI>RKj_ zzSm_d&}-p;lI2^Ut&1`l^s5Y-FTV3$Inn6l>z-S-Fc3}*W^IzC`4cL0mwdqsZi&}j zEF7U{Sl5Vb6mi6k)gDV>aKRr6^K6f@sb!o!%Nc@zVYu?f-n-7N#8pTnELhQKYzF&hCd_{)P57qlA zRO{j*nmYUi{C&DRDhVnKZGL4R!!I&V$k~*0%-i{TDoB)>x3s8usK@n@&HUy;<>%Ap zk=>-ys*p^ii^XXSCTAOM-}D>rfQs)46YlMYxUylmqZz!4L#??-f*51;1PbspeYCDC zGPXUZ>V0r_@rr@eAa+8gbXY^T$Z|L;tAm8&VIz3~I+w!n>@}Iv62mIkSI?|xCtk(A zhd&=;y4~oJ+t2m^ALA_nDwQtQ%V}C!sT10rjxBh0?0=H41Yd*y%LL*uJ=Kz~U-CWeHQa<`+3jqnQ zjnmBZ0Q0p`+Ql=H3?TdSHX@?SK zakkQimBjalg4^eW{C{)TWHx9z{kVmjjM~T6(B(&*)#4L(>(>E<(3|+SFKe141Kzf{Cl<38ucdw!k>0HUv>j?SNLC16@kG--eZv{i1 zw8XGF^6xUceYt&ODE-q!u8M4@w#T zo7S2PqKG8wImjO)Z4#ijvItXXhVEy(o=H!$hq)&)Z&1)wUv(rm6vfq+(L!5hPG9s8 za?;U zxl~Dbqkq{hBqml__2+%Jbbl%lZ<*pYOPpgb$I4`n(nW+_Ub8TRp=s;m4OUHOXc9U1 zz88;|(KwiC(}RQR0MpwT2^O4IO*vv){IO@hI)#z402Ke@sx6w=e#eq8+6$6uX#?xVF zA>yx$nsx%-;k4x$QObQRoY|=1CWqdqkBj&-=O$`_aIAzPZJ~|P#LnBg`XbK?;=#VTs_u@0LSrMEV(!CQKb}d2Fw^skz$Nzd%CiUV6RH9^%c{k})YilyPlkVC z&aYaAWQ2KPRnS6beIn5sAZ39jUC2=L*k(Km#J?ol8g7$EOh-11PnC3w*+gH3R@UZK z*ZQV(UA9#y2v;AVQI6imO@Hhb%SfOd&15r^3hBmhHIs(4K-INcRaEMse730jXRm{a zv^u?C{j%5~E>~ksyWaAU-Yp*7I}Hw@Pn$)u}+b!KbI(gy>S?oX;c$ zpVn1rwZE4p5dd#e3QVwFRTwmJF(uKN@0)19E$Ik{JPyWMmD$;eOv!RQ4*rSMJfRYQ zV2Gl6x9~(Z1g?!T64uXDV2)t`+h^f$182ykPDCB3YUT}-L02=PK^IS;V9bT`Y_&l3 zn&dg$nJ&+NLM%+U3T-8i1>_DA$|l`P$ua_qJk%w#u}^9D<^bM)BvYooj%B4YW?5eZ zZqH}Mk|ZEkk_f)G@Vhz0kb+Gv*dSMeA+)y|Fe;ywmS(cz;|+55rwPZpNe=N@Y}9*2xLkl&vYdE$O@XMT8Ijh4M*;J;o?;kbC=DvRGWQSZ(LXe+TBl zS8MKn7ph%d|0$^!65v99muz(8FRAamd_2B<{rHlk(t z0~iL)Un)kUHSPQQCU4Ve(3rZ=WkTo!0@tEdr?5Xpbti--W7h1 z4(P&D2j}}1o;1AX&P&~(KBGC#@}lH32=g8o_()Mnz+Wj#={@;)9@ Pvt(P1m^_vLuZ{l#8O|Nk diff --git a/ury/public/Images/ury-logo.jpg b/ury/public/Images/ury-logo.jpg index 7f44b35387f4f2c112f1d8ca6f3a37688fd270d1..de48464d0aa4d2b811b9baba28063b578491b532 100644 GIT binary patch literal 11345 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 ZS{R1@Lu4=feFbL8G~)OME~*~p{ugw^jxhiL literal 23966 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 Pvt(P1m^_vLuZ{l#8O|Nk diff --git a/ury/translations/en.csv b/ury/translations/en.csv new file mode 100644 index 00000000..30d6271b --- /dev/null +++ b/ury/translations/en.csv @@ -0,0 +1,23 @@ +URY, ExPOS, +URY Menu, ExPOS Menu, +URY Restaurant, ExPOS Restaurant, +URY Menu Course, ExPOS Menu Course, +URY Table, ExPOS Table, +URY Room, ExPOS Room, +URY KOT, ExPOS KOT, +URY KOT Items, ExPOS KOT Items, +URY User, ExPOS User, +URY Report Settings, ExPOS Report Settings, +URY Order, ExPOS Order, +URY Daily P and L, ExPOS Daily P and L, +URY Materials, ExPOS Materials, +URY Notification Recipient, ExPOS Notification Recipient, +URY Order Item, ExPOS Order Item, +URY P and L Breakup, ExPOS P and L Breakup, +URY Variable Expenses, ExPOS Variable Expenses, +URY Fixed Expenses, ExPOS Fixed Expenses, +URY Printer Settings, ExPOS Printer Expenses, +URY Production Item Groups, ExPOS Production Item Groups, +URY KOT Error Log, ExPOS KOT Error Log, +URY Cost Of Goods, ExPOS Cost Of Goods + diff --git a/ury/ury/workspace/ury/ury.json b/ury/ury/workspace/ury/ury.json index 3abdf2a3..258a63be 100644 --- a/ury/ury/workspace/ury/ury.json +++ b/ury/ury/workspace/ury/ury.json @@ -1,15 +1,11 @@ { "charts": [], - "content": "[{\"id\":\"3XhkKI6EJA\",\"type\":\"card\",\"data\":{\"card_name\":\"URY Setup\",\"col\":3}},{\"id\":\"YXLBzy46Bq\",\"type\":\"custom_block\",\"data\":{\"custom_block_name\":\"URY POS\",\"col\":2}},{\"id\":\"OJsNZQxJi3\",\"type\":\"custom_block\",\"data\":{\"custom_block_name\":\"POS V1\",\"col\":2}}]", + "content": "[{\"id\":\"3XhkKI6EJA\",\"type\":\"card\",\"data\":{\"card_name\":\"URY Setup\",\"col\":3}},{\"id\":\"YXLBzy46Bq\",\"type\":\"custom_block\",\"data\":{\"custom_block_name\":\"URY POS\",\"col\":2}}]", "creation": "2023-11-30 12:04:38.330350", "custom_blocks": [ { "custom_block_name": "URY POS", "label": "URY POS" - }, - { - "custom_block_name": "POS V1", - "label": "POS V1" } ], "docstatus": 0, @@ -25,7 +21,7 @@ "hidden": 0, "is_query_report": 0, "label": "URY Setup", - "link_count": 8, + "link_count": 10, "link_type": "DocType", "onboard": 0, "type": "Card Break" @@ -43,7 +39,7 @@ { "hidden": 0, "is_query_report": 0, - "label": "URY Restaurant", + "label": "ExPOS Restaurant", "link_count": 0, "link_to": "URY Restaurant", "link_type": "DocType", @@ -63,7 +59,7 @@ { "hidden": 0, "is_query_report": 0, - "label": "URY Menu", + "label": "ExPOS Menu", "link_count": 0, "link_to": "URY Menu", "link_type": "DocType", @@ -73,7 +69,7 @@ { "hidden": 0, "is_query_report": 0, - "label": "URY Menu Course", + "label": "ExPOS Menu Course", "link_count": 0, "link_to": "URY Menu Course", "link_type": "DocType", @@ -83,7 +79,7 @@ { "hidden": 0, "is_query_report": 0, - "label": "URY Table", + "label": "ExPOS Table", "link_count": 0, "link_to": "URY Table", "link_type": "DocType", @@ -93,7 +89,7 @@ { "hidden": 0, "is_query_report": 0, - "label": "URY Room", + "label": "ExPOS Room", "link_count": 0, "link_to": "URY Room", "link_type": "DocType", @@ -109,10 +105,30 @@ "link_type": "DocType", "onboard": 0, "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "POS Opening Entry", + "link_count": 0, + "link_to": "POS Opening Entry", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, + { + "hidden": 0, + "is_query_report": 0, + "label": "POS Closing Entry", + "link_count": 0, + "link_to": "POS Closing Entry", + "link_type": "DocType", + "onboard": 0, + "type": "Link" } ], - "modified": "2025-07-25 10:51:43.683224", - "modified_by": "Administrator", + "modified": "2025-12-12 14:35:22.770117", + "modified_by": "obed.odai@gmail.com", "module": "URY", "name": "URY", "number_cards": [], From 58568c3ae8739d0e426f637bc0197bfc8cd9d6c1 Mon Sep 17 00:00:00 2001 From: Someonegreat Date: Mon, 15 Dec 2025 20:28:18 +0000 Subject: [PATCH 10/13] ury pos display test --- pos/src/lib/pos-display.ts | 125 +++++++++++++++++++++++++++++++++++++ pos/src/main.tsx | 1 + 2 files changed, 126 insertions(+) create mode 100644 pos/src/lib/pos-display.ts diff --git a/pos/src/lib/pos-display.ts b/pos/src/lib/pos-display.ts new file mode 100644 index 00000000..80e2036f --- /dev/null +++ b/pos/src/lib/pos-display.ts @@ -0,0 +1,125 @@ +// pos-display.ts +// Ury POS Display - Sends total to dual screen display + +const BRIDGE_URL = "http://localhost:8000"; +const DEBUG = true; + +const log = (...args: any[]) => DEBUG && console.log("[pos_display]", ...args); + +let lastTotal: number | null = null; +let isDialogOpen = false; + +async function sendTotal(value: number): Promise { + try { + const r = await fetch(`${BRIDGE_URL}/update_display`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ type: "total", value }), + }); + const j = await r.json(); + log("Sent total:", value, "| Response:", j.status); + return j?.status === "success"; + } catch (e) { + log("Bridge error:", e); + return false; + } +} + +async function clearDisplay(): Promise { + await sendTotal(0); + log("Display cleared"); +} + +function isPaymentDialogVisible(): boolean { + const h2s = document.querySelectorAll("h2"); + const h3s = document.querySelectorAll("h3"); + + let hasPayment = false; + let hasOrderSummary = false; + + for (const h2 of h2s) { + if (h2.textContent?.trim() === "Payment") { + hasPayment = true; + break; + } + } + for (const h3 of h3s) { + if (h3.textContent?.trim() === "Order Summary") { + hasOrderSummary = true; + break; + } + } + + return hasPayment && hasOrderSummary; +} + +function extractFinalTotal(): number | null { + const h3s = document.querySelectorAll("h3"); + + for (const h3 of h3s) { + if (h3.textContent?.trim() !== "Order Summary") continue; + + const container = h3.parentElement; + if (!container) continue; + + const borderTDiv = container.querySelector(".border-t"); + if (borderTDiv) { + const text = borderTDiv.textContent || ""; + const matches = text.match(/[\d,]+\.?\d*/g); + if (matches) { + for (const match of matches) { + const value = parseFloat(match.replace(/,/g, "")); + if (value > 0) return value; + } + } + } + } + return null; +} + +async function checkAndUpdate(): Promise { + const dialogVisible = isPaymentDialogVisible(); + + if (dialogVisible && !isDialogOpen) { + log("✅ Payment dialog OPENED"); + isDialogOpen = true; + } + + if (!dialogVisible && isDialogOpen) { + log("❌ Payment dialog CLOSED"); + isDialogOpen = false; + lastTotal = null; + await clearDisplay(); + return; + } + + if (dialogVisible) { + const total = extractFinalTotal(); + if (total !== null && total !== lastTotal) { + log("💰 Sending total:", total); + await sendTotal(total); + lastTotal = total; + } + } +} + +// Initialize +function init(): void { + const observer = new MutationObserver(() => { + setTimeout(checkAndUpdate, 50); + }); + + observer.observe(document.body, { childList: true, subtree: true }); + checkAndUpdate(); + + log("✅ POS Display initialized"); +} + +// Start when DOM is ready +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); +} else { + init(); +} + +export {}; \ No newline at end of file diff --git a/pos/src/main.tsx b/pos/src/main.tsx index 287446b6..08a693a3 100644 --- a/pos/src/main.tsx +++ b/pos/src/main.tsx @@ -3,6 +3,7 @@ import { createRoot } from 'react-dom/client' import './index.css' import App from './App.tsx' import './lib/qz-init'; +import './lib/pos-display'; import { setupKotListener } from './lib/kot-listener'; createRoot(document.getElementById('root')!).render( From 35fa24d74c13147461fdddb4f088fab2cdcc7eb5 Mon Sep 17 00:00:00 2001 From: Someonegreat Date: Tue, 16 Dec 2025 06:49:18 +0000 Subject: [PATCH 11/13] fix: POS Display not showing --- pos/src/App.tsx | 7 +++ pos/src/lib/pos-display.ts | 95 +++++++++++++++++++++++++++++--------- pos/src/main.tsx | 3 +- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/pos/src/App.tsx b/pos/src/App.tsx index f178ccae..bef486ca 100644 --- a/pos/src/App.tsx +++ b/pos/src/App.tsx @@ -11,6 +11,7 @@ import { ToastProvider } from './components/ui/toast'; import { usePOSStore } from './store/pos-store'; import { useEffect } from 'react'; import { setupKotListener } from './lib/kot-listener'; +import { initPosDisplay, destroyPosDisplay } from './lib/pos-display'; function App() { const { @@ -21,6 +22,12 @@ function App() { initializeApp(); // Initialize KOT listener after app is ready setupKotListener(); + // Initialize POS display for dual screen + initPosDisplay(); + + return () => { + destroyPosDisplay(); + }; }, [initializeApp]); return ( diff --git a/pos/src/lib/pos-display.ts b/pos/src/lib/pos-display.ts index 80e2036f..33255b3e 100644 --- a/pos/src/lib/pos-display.ts +++ b/pos/src/lib/pos-display.ts @@ -1,13 +1,47 @@ -// pos-display.ts -// Ury POS Display - Sends total to dual screen display +// src/lib/pos-display.ts const BRIDGE_URL = "http://localhost:8000"; const DEBUG = true; -const log = (...args: any[]) => DEBUG && console.log("[pos_display]", ...args); +const log = (...args: unknown[]) => DEBUG && console.log("[ury_display]", ...args); let lastTotal: number | null = null; let isDialogOpen = false; +let enabled = false; +let posType = ""; +let observer: MutationObserver | null = null; +let initialized = false; + +async function fetchSettings(): Promise { + try { + const [enabledRes, posTypeRes] = await Promise.all([ + fetch("/api/method/frappe.client.get_single_value?" + new URLSearchParams({ + doctype: "POS Dual Screen Settings", + field: "enabled" + })), + fetch("/api/method/frappe.client.get_single_value?" + new URLSearchParams({ + doctype: "POS Dual Screen Settings", + field: "pos_type" + })) + ]); + + const [enabledData, posTypeData] = await Promise.all([ + enabledRes.json(), + posTypeRes.json() + ]); + + enabled = enabledData.message === 1 || enabledData.message === "1"; + posType = (posTypeData.message || "").toLowerCase().trim(); + + log("Settings loaded:", { enabled, posType }); + return true; + } catch (e) { + log("Settings fetch error:", e); + enabled = true; + posType = "ury"; + return false; + } +} async function sendTotal(value: number): Promise { try { @@ -38,16 +72,10 @@ function isPaymentDialogVisible(): boolean { let hasOrderSummary = false; for (const h2 of h2s) { - if (h2.textContent?.trim() === "Payment") { - hasPayment = true; - break; - } + if (h2.textContent?.trim() === "Payment") { hasPayment = true; break; } } for (const h3 of h3s) { - if (h3.textContent?.trim() === "Order Summary") { - hasOrderSummary = true; - break; - } + if (h3.textContent?.trim() === "Order Summary") { hasOrderSummary = true; break; } } return hasPayment && hasOrderSummary; @@ -78,6 +106,8 @@ function extractFinalTotal(): number | null { } async function checkAndUpdate(): Promise { + if (!enabled || posType !== "ury") return; + const dialogVisible = isPaymentDialogVisible(); if (dialogVisible && !isDialogOpen) { @@ -103,23 +133,42 @@ async function checkAndUpdate(): Promise { } } -// Initialize -function init(): void { - const observer = new MutationObserver(() => { +export async function initPosDisplay(): Promise { + if (initialized) { + log("Already initialized, skipping"); + return; + } + + log("🚀 Initializing POS Display..."); + + await fetchSettings(); + + if (!enabled) { + log("⛔ POS Display is disabled"); + return; + } + + if (posType !== "ury") { + log("⛔ POS type is not Ury:", posType); + return; + } + + observer = new MutationObserver(() => { setTimeout(checkAndUpdate, 50); }); observer.observe(document.body, { childList: true, subtree: true }); checkAndUpdate(); - log("✅ POS Display initialized"); + initialized = true; + log("✅ Ury POS Display active"); } -// Start when DOM is ready -if (document.readyState === "loading") { - document.addEventListener("DOMContentLoaded", init); -} else { - init(); -} - -export {}; \ No newline at end of file +export function destroyPosDisplay(): void { + if (observer) { + observer.disconnect(); + observer = null; + } + initialized = false; + log("POS Display destroyed"); +} \ No newline at end of file diff --git a/pos/src/main.tsx b/pos/src/main.tsx index 08a693a3..5f67222b 100644 --- a/pos/src/main.tsx +++ b/pos/src/main.tsx @@ -3,11 +3,10 @@ import { createRoot } from 'react-dom/client' import './index.css' import App from './App.tsx' import './lib/qz-init'; -import './lib/pos-display'; import { setupKotListener } from './lib/kot-listener'; createRoot(document.getElementById('root')!).render( , -) +) \ No newline at end of file From 18a9659a9a43bc6ab97c581aa837729cb12fe6bf Mon Sep 17 00:00:00 2001 From: carbonitesolutionsltd <110477288+carbonitesolutions@users.noreply.github.com> Date: Tue, 16 Dec 2025 07:18:24 -0800 Subject: [PATCH 12/13] Fix get_latest_kot function and printer settings Updated get_latest_kot function to improve debug information and removed non-existent item_group from printer settings retrieval. --- ury/ury_pos/api.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ury/ury_pos/api.py b/ury/ury_pos/api.py index b4455eae..163106e8 100644 --- a/ury/ury_pos/api.py +++ b/ury/ury_pos/api.py @@ -683,7 +683,7 @@ def validate_pos_close(pos_profile): return "Success" -@frappe.whitelist() +@frappe.whitelist(allow_guest=True) def get_latest_kot(): """Get the latest unprinted KOT for the current user's POS Profile""" try: @@ -730,7 +730,7 @@ def get_latest_kot(): kot_doc = kot[0] - # Get printer settings + # Get printer settings - FIXED: Removed item_group which doesn't exist printer_settings = frappe.get_all( "URY Printer Settings", filters={ @@ -738,12 +738,17 @@ def get_latest_kot(): "parentfield": "printer_settings", "custom_kot_print": 1 }, - fields=["name", "printer", "custom_kot_print_format"] + fields=["printer", "custom_kot_print_format"] ) if not printer_settings: - return {"debug": "no_printers", "pos_profile": pos_profile, "kot": kot_doc.name} + return { + "debug": "no_printers", + "pos_profile": pos_profile, + "kot_name": kot_doc.name # FIXED: Include kot_name in debug response + } + # FIXED: Return proper structure return { "kot_name": kot_doc.name, "pos_profile": pos_profile, @@ -759,7 +764,6 @@ def get_latest_kot(): "traceback": traceback.format_exc() } - @frappe.whitelist(methods=['GET']) def mark_kot_printed(kot_name): """Mark a KOT as printed""" @@ -797,4 +801,4 @@ def test_get_kots(): "kots": kots } except Exception as e: - return {"error": str(e)} \ No newline at end of file + return {"error": str(e)} From 2f62e7227f83abdf04cb7fdc54896ccec1031a59 Mon Sep 17 00:00:00 2001 From: carbonitesolutionsltd <110477288+carbonitesolutions@users.noreply.github.com> Date: Tue, 16 Dec 2025 07:36:00 -0800 Subject: [PATCH 13/13] Remove 'item_group' from printer fields --- ury/ury/api/ury_print.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ury/ury/api/ury_print.py b/ury/ury/api/ury_print.py index 582ee9e4..d0721065 100644 --- a/ury/ury/api/ury_print.py +++ b/ury/ury/api/ury_print.py @@ -400,7 +400,7 @@ def print_kot_on_create(doc, method=None): "parentfield": "printer_settings", "custom_kot_print": 1 }, - fields=["name", "printer", "custom_kot_print_format", "item_group"] + fields=["name", "printer", "custom_kot_print_format"] ) if not printer_settings: @@ -484,4 +484,4 @@ def get_kot_printers(pos_profile): "URY Printer Settings", filters={"parent": pos_profile, "custom_kot_print": 1}, fields=["name", "printer", "custom_kot_print_format"] - ) \ No newline at end of file + )