diff --git a/dashboard/src/components/MenuPage/Cart.jsx b/dashboard/src/components/MenuPage/Cart.jsx index cd0f4ab..e9778dd 100644 --- a/dashboard/src/components/MenuPage/Cart.jsx +++ b/dashboard/src/components/MenuPage/Cart.jsx @@ -206,10 +206,12 @@ const Cart = () => { } + // Place Order (F10) - Just open payment dialog, don't create sales invoice + // Sales invoice will be created only when Make Payment is clicked setIsSubmitting(true); try { - - let selectedCustomer = customer; + // Get customer - use selected customer or get default + let selectedCustomer = customerName || customer; if (!selectedCustomer) { selectedCustomer = await getDefaultCustomer(); if (!selectedCustomer) { @@ -222,46 +224,31 @@ const Cart = () => { } } - - const items = cart.map((item) => ({ - item_code: item.name || item.item_name, - qty: item.quantity || 1, - rate: item.price || item.standard_rate || 0, - })); + const payload = { + order_type: orderType || "Take Away", + customer_name: selectedCustomer, + order_items: cart.map((item) => ({ + item_code: item.name || item.item_name, + qty: item.quantity || 1, + rate: item.price || item.standard_rate || 0, + })), + table: activeTableId || null, + waiter: activeWaiterId || null, + agent: selectedAgent || null, + }; - // Create Sales Invoice first - const invoiceResult = await createTransaction( - "Sales Invoice", - selectedCustomer, - items, - null, // company - orderType || "Take Away", // order_type - activeTableId || null, // table - activeWaiterId || null, // waiter - customerName || selectedCustomer, // customer_name - selectedAgent - ); - - if (invoiceResult && invoiceResult.success !== false && invoiceResult.name) { - - setPaymentState({ - open: true, - orderId: null, - items: cart, - payload: null, - isExistingTransaction: true, - transactionDoctype: "Sales Invoice", - transactionName: invoiceResult.name, - }); - } else { - toast.error("Failed to create sales invoice", { - description: invoiceResult?.message || invoiceResult?.details || "Please try again later.", - duration: 5000, - }); - } + setPaymentState({ + open: true, + orderId: null, + items: cart, + payload: payload, + isExistingTransaction: false, + transactionDoctype: null, + transactionName: null, + }); } catch (err) { - console.error("Sales Invoice creation error:", err); - toast.error("Failed to create sales invoice", { + console.error("Error preparing payment:", err); + toast.error("Failed to prepare payment", { description: err?.message || "Please try again later.", duration: 5000, }); diff --git a/dashboard/src/components/MenuPage/MultiCurrencyDialog.jsx b/dashboard/src/components/MenuPage/MultiCurrencyDialog.jsx index 840f18c..b697652 100644 --- a/dashboard/src/components/MenuPage/MultiCurrencyDialog.jsx +++ b/dashboard/src/components/MenuPage/MultiCurrencyDialog.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, useMemo } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, @@ -30,6 +30,8 @@ export default function MultiCurrencyDialog({ onOpenChange, total, setPaymentDialogOpenState, + cartItems = [], + orderPayload = null, }) { const BASE_TOTAL = total || 0; const { exchangeRates: defaultExchangeRates } = useCurrencyExchange(); @@ -40,6 +42,29 @@ export default function MultiCurrencyDialog({ const { submitPayment, loading, error, success } = useMultiCurrencyPayment(); const clearCart = useCartStore((state) => state.clearCart); const [loadingRates, setLoadingRates] = useState(true); + + // Get cart items from store if not provided as prop + const cartStoreItems = useCartStore((state) => state.cart || []); + // Format cart items to ensure they have the right structure + const itemsToUse = useMemo(() => { + const items = cartItems && cartItems.length > 0 ? cartItems : cartStoreItems; + if (!items || items.length === 0) { + console.warn("MultiCurrencyDialog: No cart items found", { cartItems, cartStoreItems }); + return []; + } + // Ensure items are in the correct format for the API + const formattedItems = items.map(item => ({ + name: item.name || item.item_code || item.item_name, + item_code: item.item_code || item.name || item.item_name, + item_name: item.item_name || item.name, + quantity: item.quantity || item.qty || 1, + qty: item.qty || item.quantity || 1, + price: item.price || item.rate || item.standard_rate || 0, + rate: item.rate || item.price || item.standard_rate || 0, + })); + console.log("MultiCurrencyDialog: Formatted cart items", formattedItems); + return formattedItems; + }, [cartItems, cartStoreItems]); const { register, watch, setValue, reset, setFocus, control, handleSubmit } = useForm({ @@ -421,8 +446,19 @@ export default function MultiCurrencyDialog({ } }); + // Validate that we have cart items + if (!itemsToUse || itemsToUse.length === 0) { + toast.error("No items in cart", { + description: "Please add items to cart before making payment.", + duration: 5000, + }); + return; + } + await submitPayment({ payments: paymentData, + cartItems: itemsToUse, + orderPayload: orderPayload, }); onOpenChange(false); diff --git a/dashboard/src/components/MenuPage/PaymentDialog.jsx b/dashboard/src/components/MenuPage/PaymentDialog.jsx index 0889458..e18bf32 100644 --- a/dashboard/src/components/MenuPage/PaymentDialog.jsx +++ b/dashboard/src/components/MenuPage/PaymentDialog.jsx @@ -10,7 +10,7 @@ import { import MultiCurrencyDialog from "./MultiCurrencyDialog"; import Keyboard from "@/components/ui/Keyboard"; import { Textarea } from "@/components/ui/textarea"; -import { createOrderAndPay, makePaymentForTransaction,get_invoice_json } from "@/lib/utils"; +import { createInvoiceAndPaymentQueue, makePaymentForTransaction, get_invoice_json } from "@/lib/utils"; import { db, call } from "@/lib/frappeClient"; export default function PaymentDialog({ @@ -216,20 +216,30 @@ export default function PaymentDialog({ paymentBreakdown.length > 0 ? paymentBreakdown : null ); } else { - // Create new order and payment (original flow) + // Create new order and payment using queue (sales invoice and payment created in background) const payload = orderPayload || ({ order_type: "Take Away", - customer_name: customer, + customer_name: customer || (orderPayload && orderPayload.customer_name) || "", order_items: cartItems, }); - res = await createOrderAndPay( - payload, + // Ensure customer is set + const finalCustomer = payload.customer_name || customer; + if (!finalCustomer) { + throw new Error("Customer is required. Please select a customer or configure a default customer in Settings."); + } + + // Use queue system for async processing + res = await createInvoiceAndPaymentQueue( + cartItems, + finalCustomer, + paymentBreakdown.length > 0 ? paymentBreakdown : null, + paymentBreakdown.length === 1 ? payment_method : null, paidTotal > 0 ? paidTotal : null, - payment_method, - fullNote + fullNote, + payload ); } @@ -258,7 +268,8 @@ export default function PaymentDialog({ return () => { document.removeEventListener("keydown", handleKeyDown); }; - }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [loading, paymentStatus.hasDue]) return ( <> @@ -325,6 +336,8 @@ export default function PaymentDialog({ onOpenChange={setOpenMultiCurrencyDialog} setPaymentDialogOpenState={onOpenChange} total={total} + cartItems={cartItems} + orderPayload={orderPayload} /> diff --git a/dashboard/src/hooks/useMultiCurrencyPayment.js b/dashboard/src/hooks/useMultiCurrencyPayment.js index 7e3a639..004dad9 100644 --- a/dashboard/src/hooks/useMultiCurrencyPayment.js +++ b/dashboard/src/hooks/useMultiCurrencyPayment.js @@ -2,6 +2,7 @@ import { useState } from "react"; import { call } from "@/lib/frappeClient"; import { useCartStore } from "@/stores/useCartStore"; import { getDefaultCustomer } from "@/lib/utils"; +import { createInvoiceAndPaymentQueue } from "@/lib/utils"; function useMultiCurrencyPayment() { const [loading, setLoading] = useState(false); @@ -11,12 +12,25 @@ function useMultiCurrencyPayment() { let customer = useCartStore((state) => state.customer); - const submitPayment = async ({ payments }) => { + const submitPayment = async ({ payments, cartItems, orderPayload }) => { setLoading(true); setError(null); setSuccess(false); try { + // Validate cart items + if (!cartItems || !Array.isArray(cartItems) || cartItems.length === 0) { + throw new Error("No items in cart: Cannot create invoice without items."); + } + + // Ensure customer is set + if (!customer) { + customer = await getDefaultCustomer(); + if (!customer) { + throw new Error("Customer is required. Please select a customer or configure a default customer in Settings."); + } + } + // 🔹 Remove zero / empty payments // Payments can be either {key: amount} or {key: {mode, currency, amount}} const cleanedPayments = {}; @@ -39,26 +53,31 @@ function useMultiCurrencyPayment() { throw new Error("No valid payments provided. Please enter payment amounts."); } - const res = await call.post("havano_restaurant_pos.api.make_multi_currency_payment", { + // Create invoice and payment in queue (invoice created first, then payment entries) + const res = await createInvoiceAndPaymentQueue( + cartItems, customer, - payments: cleanedPayments, - }); - - const data = res?.message; + null, // payment_breakdown (not used for multi-currency) + null, // payment_method (not used for multi-currency) + null, // amount (calculated from payments) + null, // note + orderPayload, + cleanedPayments // multi_currency_payments + ); - if (!data?.success) { + if (!res?.success) { // Include details in the error message for better debugging - const errorMsg = data?.details - ? `${data?.message || "Payment failed"}: ${data?.details}` - : data?.message || "Payment failed"; + const errorMsg = res?.details + ? `${res?.message || "Payment failed"}: ${res?.details}` + : res?.message || "Payment failed"; const error = new Error(errorMsg); - error.details = data?.details; - error.errors = data?.errors; + error.details = res?.details; + error.errors = res?.errors; throw error; } setSuccess(true); - return data; + return res; } catch (err) { console.error("Error in submitPayment:", err); const msg = err?.details || err?.message || err?.response?.message || "Something went wrong"; diff --git a/dashboard/src/lib/utils.js b/dashboard/src/lib/utils.js index 606bc96..7420d5d 100644 --- a/dashboard/src/lib/utils.js +++ b/dashboard/src/lib/utils.js @@ -78,7 +78,7 @@ async function attemptWithRetries(action, description, attempts = MAX_ORDER_RETR async function initDefaultCurrency() { try { - const { message } = await db.getSingleValue("System Settings", "currency"); + const { message } = await db.getSingleValue("Global Defaults", "default_currency"); if (message) defaultCurrency = message; } catch (err) { console.warn("Could not fetch default currency:", err); @@ -463,6 +463,48 @@ export async function makePaymentForTransaction(doctype, docname, amount = null, ); } +/** + * Create sales invoice and payment entries in background queue. + * Returns immediately with job ID for async processing. + * @param {Array} cartItems - Cart items + * @param {string} customer - Customer name + * @param {Array} paymentBreakdown - Array of {payment_method, amount} objects (for multi-currency) + * @param {string} paymentMethod - Single payment method (for regular payment) + * @param {number} amount - Payment amount + * @param {string} note - Payment notes + * @param {Object} orderPayload - Optional order payload for HA Order creation + */ +export async function createInvoiceAndPaymentQueue( + cartItems, + customer, + paymentBreakdown = null, + paymentMethod = null, + amount = null, + note = null, + orderPayload = null, + multiCurrencyPayments = null +) { + return attemptWithRetries( + async () => { + const { message } = await call.post( + "havano_restaurant_pos.api.create_invoice_and_payment_queue", + { + cart_items: cartItems, + customer, + payment_breakdown: paymentBreakdown, + payment_method: paymentMethod, + amount, + note, + order_payload: orderPayload, + multi_currency_payments: multiCurrencyPayments, + } + ); + return message; + }, + "Create invoice and payment" + ); +} + /** * Convert a Quotation to Sales Invoice. * @param {string} quotationName - Name of the Quotation diff --git a/havano_restaurant_pos/api.py b/havano_restaurant_pos/api.py index b35652d..fa2f399 100644 --- a/havano_restaurant_pos/api.py +++ b/havano_restaurant_pos/api.py @@ -473,13 +473,14 @@ def create_order_and_payment(payload, amount=None, payment_method=None, note=Non except Exception: total += 0 - customer = ( - payload.get("customer_name") - or frappe.db.get_single_value( - "Sample Pos Settings", "default_dine_in_customer" - ) - or "" - ) + customer = payload.get("customer_name") or get_default_customer() or "" + + if not customer: + return { + "success": False, + "message": "Party is mandatory", + "details": "Customer is required. Please select a customer or configure a default customer in HA POS Settings.", + } # 2) Get company and account info (optimized: single query for company data) company = frappe.defaults.get_user_default( @@ -566,7 +567,7 @@ def create_order_and_payment(payload, amount=None, payment_method=None, note=Non target_exchange_rate = 1.0 received_amount = paid_amount - # 3) Create all documents in sequence, batch commit at end + # 3 Create all documents in sequence, batch commit at end try: # Create payment entry payment_entry = frappe.new_doc("Payment Entry") @@ -590,8 +591,8 @@ def create_order_and_payment(payload, amount=None, payment_method=None, note=Non payment_entry.reference_date = frappe.utils.nowdate() else: payment_entry.reference_no = None - payment_entry.reference_date = frappe.utils.nowdate() - + payment_entry.reference_date = None + payment_entry.remarks = note or "POS Payment" payment_entry.mode_of_payment = payment_method @@ -1510,7 +1511,7 @@ def make_payment_for_transaction( mode_type = None if original_method and mode_exists: mode_type = frappe.get_cached_value("Mode of Payment", original_method, "type") - + source_exchange_rate = 1.0 target_exchange_rate = 1.0 received_amount = paid_amount @@ -1988,10 +1989,10 @@ def create_product_bundle(new_item, price, items): "Product Bundle Cleanup", ) - return { - "success": False, - "message": str(e) or "Failed to create product bundle", - } + return { + "success": False, + "message": str(e) or "Failed to create product bundle", + } @frappe.whitelist() @@ -2540,9 +2541,483 @@ def make_multi_currency_payment(customer, payments): frappe.log_error(f"Make Multi Currency Payment Failed: {error_type}: {error_msg}", "Make Multi Currency Payment Failed") except: pass # If even basic logging fails, just continue - + return { "success": False, "message": "Failed to make multi-currency payment", "details": f"{error_type}: {error_msg}", } + + +@frappe.whitelist() +def create_invoice_and_payment_queue(payload=None, **kwargs): + """Create sales invoice and payment entries in background queue. + Returns immediately with job ID for async processing. + + Args: + payload: Dict containing all parameters, or individual kwargs + kwargs: Individual parameters (for backward compatibility) + """ + try: + # Support both payload dict and individual kwargs + if payload and isinstance(payload, dict): + cart_items = payload.get("cart_items", []) + customer = payload.get("customer") + payment_breakdown = payload.get("payment_breakdown") + payment_method = payload.get("payment_method") + amount = payload.get("amount") + note = payload.get("note") + order_payload = payload.get("order_payload") + multi_currency_payments = payload.get("multi_currency_payments") + else: + # Use kwargs (from frontend POST body) + cart_items = kwargs.get("cart_items", []) + customer = kwargs.get("customer") + payment_breakdown = kwargs.get("payment_breakdown") + payment_method = kwargs.get("payment_method") + amount = kwargs.get("amount") + note = kwargs.get("note") + order_payload = kwargs.get("order_payload") + multi_currency_payments = kwargs.get("multi_currency_payments") + + # Prepare items for sales invoice + items = [] + for item in cart_items or []: + item_code = item.get("name") or item.get("item_code") or item.get("item_name") + qty = item.get("quantity") or item.get("qty") or 1 + rate = item.get("price") or item.get("rate") or 0 + items.append({"item_code": item_code, "qty": qty, "rate": rate}) + + if not items: + return { + "success": False, + "message": "No items in cart", + "details": "Cannot create invoice without items.", + } + + # 1. Create Sales Invoice synchronously (immediate) + from havano_restaurant_pos.havano_restaurant_pos.doctype.ha_pos_invoice.ha_pos_invoice import ( + create_sales_invoice, + ) + + try: + inv = create_sales_invoice(customer, items) + invoice_name = inv.get("name") if isinstance(inv, dict) else inv + + if not invoice_name: + return { + "success": False, + "message": "Failed to create sales invoice", + "details": f"Sales invoice creation returned no name. Response: {inv}", + } + except Exception as inv_error: + error_msg = f"Error creating sales invoice: {str(inv_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Create Invoice and Payment - Invoice Creation Error") + return { + "success": False, + "message": "Failed to create sales invoice", + "details": str(inv_error), + } + + # 2. Process payment entries (try background, fallback to synchronous) + # Try to enqueue in background first, but if queue fails, process immediately + payment_processed_async = False + job_id = None + + try: + # Prepare job arguments for payment processing only + job_kwargs = { + "method": "havano_restaurant_pos.havano_restaurant_pos.api.process_payment_entries", + "queue": "default", + "timeout": 300, + "is_async": True, # True background processing + "invoice_name": invoice_name, + "payment_breakdown": payment_breakdown, + "payment_method": payment_method, + "amount": amount, + "note": note, + "order_payload": order_payload, + "multi_currency_payments": multi_currency_payments + } + + # Add job_name if supported (optional parameter) + try: + job_kwargs["job_name"] = f"process_payment_entries_{invoice_name}_{frappe.utils.now_datetime().strftime('%Y%m%d%H%M%S')}" + except: + pass # job_name not supported in this Frappe version + + job = frappe.enqueue(**job_kwargs) + job_id = job.id if hasattr(job, 'id') else (job if isinstance(job, str) else None) + payment_processed_async = True + + frappe.logger().info(f"Payment entries queued for invoice {invoice_name}, job_id: {job_id}") + + except Exception as queue_error: + # Log the error - will process synchronously below + error_msg = f"Queue enqueue failed for payment entries: {str(queue_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Create Payment Entries Queue Error") + payment_processed_async = False + + # Process payment entries synchronously (either as fallback or always for reliability) + # This ensures payments are always created even if queue worker isn't running + try: + payment_result = process_payment_entries( + invoice_name, + payment_breakdown, + payment_method, + amount, + note, + order_payload, + multi_currency_payments + ) + + if payment_processed_async: + # Queue was successful, but we also processed synchronously for reliability + # In production, you might want to remove this and rely on queue only + return { + "success": True, + "message": "Sales invoice created successfully. Payment entries processed.", + "sales_invoice": invoice_name, + "job_id": job_id, + "payment_result": payment_result, + "status": "invoice_created_payment_processed" + } + else: + # Queue failed, processed synchronously + return { + "success": True, + "message": "Sales invoice and payment entries created successfully (processed synchronously - queue unavailable)", + "sales_invoice": invoice_name, + "payment_result": payment_result, + "queue_failed": True + } + except Exception as sync_error: + # Invoice was created but payment failed + error_msg = f"Payment processing failed after invoice creation: {str(sync_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Create Payment Entries Sync Error") + return { + "success": True, # Invoice was created successfully + "message": f"Sales invoice created successfully, but payment processing failed: {str(sync_error)}", + "sales_invoice": invoice_name, + "payment_error": str(sync_error), + "warning": "Please process payment manually for this invoice" + } + + except Exception as e: + frappe.log_error(frappe.get_traceback(), "Create Invoice and Payment Queue Error") + return { + "success": False, + "message": "Failed to queue invoice and payment", + "details": str(e), + } + + +def process_payment_entries( + invoice_name, + payment_breakdown=None, + payment_method=None, + amount=None, + note=None, + order_payload=None, + multi_currency_payments=None +): + """Background job to create payment entries for an existing sales invoice. + This runs asynchronously in the queue. + IMPORTANT: This function must be callable from frappe.enqueue. + """ + frappe.set_user("Administrator") # Ensure proper permissions in background job + try: + # Verify invoice exists + if not frappe.db.exists("Sales Invoice", invoice_name): + error_msg = f"Sales Invoice {invoice_name} not found" + frappe.log_error(error_msg, "Process Payment Entries") + return { + "success": False, + "message": "Sales invoice not found", + "details": error_msg, + } + + # Create Payment Entries + result = None + try: + if multi_currency_payments and isinstance(multi_currency_payments, dict): + # Multi-currency payment (from MultiCurrencyDialog) + # Convert multi_currency_payments format to payment_breakdown format + # Format: {key: {mode, currency, amount}} -> [{payment_method: mode, amount: amount}] + payment_breakdown_list = [] + for key, payment_info in multi_currency_payments.items(): + if isinstance(payment_info, dict): + mode = payment_info.get("mode", "Cash") + amount_val = float(payment_info.get("amount", 0)) + if amount_val > 0: + payment_breakdown_list.append({ + "payment_method": mode, + "amount": amount_val + }) + + if payment_breakdown_list: + result = make_payment_for_transaction( + "Sales Invoice", + invoice_name, + amount=None, # Let it calculate from breakdown + payment_method=None, + note=note, + payment_breakdown=payment_breakdown_list + ) + else: + result = { + "success": False, + "message": "No valid payments in multi-currency payments", + } + elif payment_breakdown and isinstance(payment_breakdown, list) and len(payment_breakdown) > 0: + # Multi-payment method (regular payment with breakdown) + result = make_payment_for_transaction( + "Sales Invoice", + invoice_name, + amount=amount, + payment_method=None, + note=note, + payment_breakdown=payment_breakdown + ) + else: + # Single payment method + result = make_payment_for_transaction( + "Sales Invoice", + invoice_name, + amount=amount, + payment_method=payment_method or "Cash", + note=note, + payment_breakdown=None + ) + + # Check if payment creation was successful + if not result or not result.get("success"): + error_msg = f"Payment creation failed: {result.get('message') if result else 'No result returned'}" + frappe.log_error(error_msg, "Process Payment Entries - Payment Failed") + return result + except Exception as payment_error: + error_msg = f"Error creating payment entries: {str(payment_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Process Payment Entries - Payment Error") + result = { + "success": False, + "message": "Failed to create payment entries", + "details": str(payment_error), + } + + # Create HA Order if order_payload provided + order_id = None + if order_payload: + try: + def safe(value): + if not value: + return "" + return str(value)[:140] + + if isinstance(order_payload, str): + import json + order_payload = json.loads(order_payload) + + # Check if an order was already created for this invoice to prevent duplicates + # This can happen if the function is called multiple times (queue + sync) + existing_order = frappe.db.get_value( + "HA Order", + {"sales_invoice": invoice_name}, + "name" + ) + + if existing_order: + # Order already exists, skip creation + order_id = existing_order + frappe.logger().info(f"HA Order {order_id} already exists for invoice {invoice_name}, skipping creation") + else: + # Create new order + order = frappe.new_doc("HA Order") + + # Get customer from invoice if not in payload + invoice = frappe.get_doc("Sales Invoice", invoice_name) + customer = invoice.customer + + order.order_type = safe(order_payload.get("order_type")) + order.customer_name = safe(order_payload.get("customer_name") or customer) + order.table = safe(order_payload.get("table")) + order.waiter = safe(order_payload.get("waiter")) + order.payment_status = "Paid" + # Link to sales invoice to prevent duplicates (if field exists) + if hasattr(order, 'sales_invoice'): + order.sales_invoice = invoice_name + + # Add order items - menu_item is mandatory, so skip items without it + for item in order_payload.get("order_items", []): + # Get menu_item from various possible fields + menu_item = item.get("name") or item.get("item_code") or item.get("item_name") or item.get("menu_item") + + # Skip items without a valid menu_item (mandatory field) + if not menu_item: + frappe.log_error( + f"Skipping order item without menu_item: {item}", + "Process Payment Entries - Missing Menu Item" + ) + continue + + order.append( + "order_items", + { + "menu_item": str(menu_item), # Ensure it's a string + "qty": item.get("quantity") or 1, + "rate": item.get("price") or item.get("rate") or 0, + "amount": (item.get("price") or item.get("rate") or 0) * (item.get("quantity") or 1), + "preparation_remark": safe(item.get("remark")), + }, + ) + + # Only insert order if it has at least one item + if not order.order_items or len(order.order_items) == 0: + frappe.log_error( + f"Cannot create HA Order without order items for invoice {invoice_name}", + "Process Payment Entries - No Order Items" + ) + order_id = None + else: + frappe.flags.ignore_validate = True + try: + # Try to insert the order + order.insert(ignore_permissions=True) + order_id = order.name + frappe.logger().info(f"Successfully created HA Order {order_id} for invoice {invoice_name}") + except frappe.DuplicateEntryError as dup_error: + # Order already exists - this can happen if function is called multiple times + # Extract order name from error if possible + error_msg = str(dup_error) + # Try to extract order name from error message + import re + match = re.search(r"'([^']+)'", error_msg) + if match: + existing_order_name = match.group(1) + order_id = existing_order_name + frappe.logger().info(f"HA Order {order_id} already exists (found from error), using existing order") + else: + frappe.log_error( + f"HA Order already exists (duplicate entry prevented) for invoice {invoice_name}. Error: {error_msg}", + "Process Payment Entries - Duplicate Order" + ) + order_id = None + except Exception as insert_error: + # Other insert errors - log and skip + error_msg = f"Error inserting HA Order: {str(insert_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Process Payment Entries - Order Insert Error") + order_id = None + finally: + frappe.flags.ignore_validate = False + + except Exception as e: + frappe.log_error(f"Error creating HA Order: {str(e)}\n{frappe.get_traceback()}", "Process Payment Entries Order Error") + order_id = None + + # Commit all changes + frappe.db.commit() + + # Log success for monitoring + frappe.logger().info(f"Successfully processed payment entries for invoice {invoice_name}") + + return { + "success": True, + "message": "Payment entries processed successfully", + "sales_invoice": invoice_name, + "order_id": order_id, + "payment_result": result, + } + + except Exception as e: + frappe.db.rollback() + error_traceback = frappe.get_traceback() + error_msg = f"Error in process_payment_entries: {str(e)}\n{error_traceback}" + frappe.log_error(error_msg, "Process Payment Entries Error") + + # Also log to console for immediate visibility in queue worker + print(f"ERROR in process_payment_entries: {error_msg}") + + return { + "success": False, + "message": "Failed to process payment entries", + "details": str(e), + } + + +def process_invoice_and_payment( + cart_items, + customer, + payment_breakdown=None, + payment_method=None, + amount=None, + note=None, + order_payload=None, + multi_currency_payments=None +): + """Background job to create sales invoice and payment entries. + This runs asynchronously in the queue. + IMPORTANT: This function must be callable from frappe.enqueue. + NOTE: This function is kept for backward compatibility. + New implementation creates invoice synchronously and processes payments in background. + """ + frappe.set_user("Administrator") # Ensure proper permissions in background job + try: + # 1. Create Sales Invoice + from havano_restaurant_pos.havano_restaurant_pos.doctype.ha_pos_invoice.ha_pos_invoice import ( + create_sales_invoice, + ) + + try: + inv = create_sales_invoice(customer, cart_items) + invoice_name = inv.get("name") if isinstance(inv, dict) else inv + + if not invoice_name: + error_msg = f"Sales invoice creation returned no name. Response: {inv}" + frappe.log_error(error_msg, "Process Invoice and Payment") + return { + "success": False, + "message": "Failed to create sales invoice", + "details": error_msg, + } + except Exception as inv_error: + error_msg = f"Error creating sales invoice: {str(inv_error)}\n{frappe.get_traceback()}" + frappe.log_error(error_msg, "Process Invoice and Payment - Invoice Creation") + return { + "success": False, + "message": "Failed to create sales invoice", + "details": str(inv_error), + } + + # 2. Create Payment Entries using the new function + payment_result = process_payment_entries( + invoice_name, + payment_breakdown, + payment_method, + amount, + note, + order_payload, + multi_currency_payments + ) + + # Return combined result + return { + "success": True, + "message": "Invoice and payment processed successfully", + "sales_invoice": invoice_name, + "order_id": payment_result.get("order_id"), + "payment_result": payment_result, + } + + except Exception as e: + frappe.db.rollback() + error_traceback = frappe.get_traceback() + error_msg = f"Error in process_invoice_and_payment: {str(e)}\n{error_traceback}" + frappe.log_error(error_msg, "Process Invoice and Payment Error") + + # Also log to console for immediate visibility in queue worker + print(f"ERROR in process_invoice_and_payment: {error_msg}") + + return { + "success": False, + "message": "Failed to process invoice and payment", + "details": str(e), + } diff --git a/havano_restaurant_pos/public/dashboard/assets/index-2WrpPwoZ.js b/havano_restaurant_pos/public/dashboard/assets/index-2WrpPwoZ.js deleted file mode 100644 index c5f8b9f..0000000 --- a/havano_restaurant_pos/public/dashboard/assets/index-2WrpPwoZ.js +++ /dev/null @@ -1,213 +0,0 @@ -var G_=Object.defineProperty,X_=Object.defineProperties;var Q_=Object.getOwnPropertyDescriptors;var md=Object.getOwnPropertySymbols;var Db=Object.prototype.hasOwnProperty,Mb=Object.prototype.propertyIsEnumerable;var Yi=(e,n)=>(n=Symbol[e])?n:Symbol.for("Symbol."+e),K_=e=>{throw TypeError(e)};var Ob=(e,n,a)=>n in e?G_(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a,_=(e,n)=>{for(var a in n||(n={}))Db.call(n,a)&&Ob(e,a,n[a]);if(md)for(var a of md(n))Mb.call(n,a)&&Ob(e,a,n[a]);return e},ee=(e,n)=>X_(e,Q_(n));var _e=(e,n)=>{var a={};for(var o in e)Db.call(e,o)&&n.indexOf(o)<0&&(a[o]=e[o]);if(e!=null&&md)for(var o of md(e))n.indexOf(o)<0&&Mb.call(e,o)&&(a[o]=e[o]);return a};var Z_=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var we=(e,n,a)=>new Promise((o,i)=>{var l=h=>{try{d(a.next(h))}catch(f){i(f)}},u=h=>{try{d(a.throw(h))}catch(f){i(f)}},d=h=>h.done?o(h.value):Promise.resolve(h.value).then(l,u);d((a=a.apply(e,n)).next())}),Hs=function(e,n){this[0]=e,this[1]=n},vm=(e,n,a)=>{var o=(u,d,h,f)=>{try{var p=a[u](d),g=(d=p.value)instanceof Hs,x=p.done;Promise.resolve(g?d[0]:d).then(w=>g?o(u==="return"?u:"next",d[1]?{done:w.done,value:w.value}:w,h,f):h({value:w,done:x})).catch(w=>o("throw",w,h,f))}catch(w){f(w)}},i=u=>l[u]=d=>new Promise((h,f)=>o(u,d,h,f)),l={};return a=a.apply(e,n),l[Yi("asyncIterator")]=()=>l,i("next"),i("throw"),i("return"),l},bm=e=>{var n=e[Yi("asyncIterator")],a=!1,o,i={};return n==null?(n=e[Yi("iterator")](),o=l=>i[l]=u=>n[l](u)):(n=n.call(e),o=l=>i[l]=u=>{if(a){if(a=!1,l==="throw")throw u;return u}return a=!0,{done:!1,value:new Hs(new Promise(d=>{var h=n[l](u);h instanceof Object||K_("Object expected"),d(h)}),1)}}),i[Yi("iterator")]=()=>i,o("next"),"throw"in n?o("throw"):i.throw=l=>{throw l},"return"in n&&o("return"),i},Rb=(e,n,a)=>(n=e[Yi("asyncIterator")])?n.call(e):(e=e[Yi("iterator")](),n={},a=(o,i)=>(i=e[o])&&(n[o]=l=>new Promise((u,d,h)=>(l=i.call(e,l),h=l.done,Promise.resolve(l.value).then(f=>u({value:f,done:h}),d)))),a("next"),a("return"),n);var lL=Z_(Nt=>{function J_(e,n){for(var a=0;ao[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const u of l.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&o(u)}).observe(document,{childList:!0,subtree:!0});function a(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(i){if(i.ep)return;i.ep=!0;const l=a(i);fetch(i.href,l)}})();var eC=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function Ax(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var xm={exports:{}},_c={};var Ab;function tC(){if(Ab)return _c;Ab=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function a(o,i,l){var u=null;if(l!==void 0&&(u=""+l),i.key!==void 0&&(u=""+i.key),"key"in i){l={};for(var d in i)d!=="key"&&(l[d]=i[d])}else l=i;return i=l.ref,{$$typeof:e,type:o,key:u,ref:i!==void 0?i:null,props:l}}return _c.Fragment=n,_c.jsx=a,_c.jsxs=a,_c}var jb;function nC(){return jb||(jb=1,xm.exports=tC()),xm.exports}var y=nC(),wm={exports:{}},St={};var kb;function rC(){if(kb)return St;kb=1;var e=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.consumer"),u=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),g=Symbol.iterator;function x(z){return z===null||typeof z!="object"?null:(z=g&&z[g]||z["@@iterator"],typeof z=="function"?z:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,T={};function O(z,re,me){this.props=z,this.context=re,this.refs=T,this.updater=me||w}O.prototype.isReactComponent={},O.prototype.setState=function(z,re){if(typeof z!="object"&&typeof z!="function"&&z!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,z,re,"setState")},O.prototype.forceUpdate=function(z){this.updater.enqueueForceUpdate(this,z,"forceUpdate")};function A(){}A.prototype=O.prototype;function j(z,re,me){this.props=z,this.context=re,this.refs=T,this.updater=me||w}var L=j.prototype=new A;L.constructor=j,S(L,O.prototype),L.isPureReactComponent=!0;var q=Array.isArray,D={H:null,A:null,T:null,S:null,V:null},N=Object.prototype.hasOwnProperty;function k(z,re,me,V,ue,Ee){return me=Ee.ref,{$$typeof:e,type:z,key:re,ref:me!==void 0?me:null,props:Ee}}function F(z,re){return k(z.type,re,void 0,void 0,void 0,z.props)}function B(z){return typeof z=="object"&&z!==null&&z.$$typeof===e}function te(z){var re={"=":"=0",":":"=2"};return"$"+z.replace(/[=:]/g,function(me){return re[me]})}var ne=/\/+/g;function K(z,re){return typeof z=="object"&&z!==null&&z.key!=null?te(""+z.key):re.toString(36)}function pe(){}function ve(z){switch(z.status){case"fulfilled":return z.value;case"rejected":throw z.reason;default:switch(typeof z.status=="string"?z.then(pe,pe):(z.status="pending",z.then(function(re){z.status==="pending"&&(z.status="fulfilled",z.value=re)},function(re){z.status==="pending"&&(z.status="rejected",z.reason=re)})),z.status){case"fulfilled":return z.value;case"rejected":throw z.reason}}throw z}function ie(z,re,me,V,ue){var Ee=typeof z;(Ee==="undefined"||Ee==="boolean")&&(z=null);var xe=!1;if(z===null)xe=!0;else switch(Ee){case"bigint":case"string":case"number":xe=!0;break;case"object":switch(z.$$typeof){case e:case n:xe=!0;break;case p:return xe=z._init,ie(xe(z._payload),re,me,V,ue)}}if(xe)return ue=ue(z),xe=V===""?"."+K(z,0):V,q(ue)?(me="",xe!=null&&(me=xe.replace(ne,"$&/")+"/"),ie(ue,re,me,"",function(Le){return Le})):ue!=null&&(B(ue)&&(ue=F(ue,me+(ue.key==null||z&&z.key===ue.key?"":(""+ue.key).replace(ne,"$&/")+"/")+xe)),re.push(ue)),1;xe=0;var je=V===""?".":V+":";if(q(z))for(var Ce=0;Ce>>1,z=P[Se];if(0>>1;Sei(V,Y))uei(Ee,V)?(P[Se]=Ee,P[ue]=Y,Se=ue):(P[Se]=V,P[me]=Y,Se=me);else if(uei(Ee,Y))P[Se]=Ee,P[ue]=Y,Se=ue;else break e}}return Q}function i(P,Q){var Y=P.sortIndex-Q.sortIndex;return Y!==0?Y:P.id-Q.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var u=Date,d=u.now();e.unstable_now=function(){return u.now()-d}}var h=[],f=[],p=1,g=null,x=3,w=!1,S=!1,T=!1,O=!1,A=typeof setTimeout=="function"?setTimeout:null,j=typeof clearTimeout=="function"?clearTimeout:null,L=typeof setImmediate!="undefined"?setImmediate:null;function q(P){for(var Q=a(f);Q!==null;){if(Q.callback===null)o(f);else if(Q.startTime<=P)o(f),Q.sortIndex=Q.expirationTime,n(h,Q);else break;Q=a(f)}}function D(P){if(T=!1,q(P),!S)if(a(h)!==null)S=!0,N||(N=!0,K());else{var Q=a(f);Q!==null&&ie(D,Q.startTime-P)}}var N=!1,k=-1,F=5,B=-1;function te(){return O?!0:!(e.unstable_now()-BP&&te());){var Se=g.callback;if(typeof Se=="function"){g.callback=null,x=g.priorityLevel;var z=Se(g.expirationTime<=P);if(P=e.unstable_now(),typeof z=="function"){g.callback=z,q(P),Q=!0;break t}g===a(h)&&o(h),q(P)}else o(h);g=a(h)}if(g!==null)Q=!0;else{var re=a(f);re!==null&&ie(D,re.startTime-P),Q=!1}}break e}finally{g=null,x=Y,w=!1}Q=void 0}}finally{Q?K():N=!1}}}var K;if(typeof L=="function")K=function(){L(ne)};else if(typeof MessageChannel!="undefined"){var pe=new MessageChannel,ve=pe.port2;pe.port1.onmessage=ne,K=function(){ve.postMessage(null)}}else K=function(){A(ne,0)};function ie(P,Q){k=A(function(){P(e.unstable_now())},Q)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(P){P.callback=null},e.unstable_forceFrameRate=function(P){0>P||125Se?(P.sortIndex=Y,n(f,P),a(h)===null&&P===a(f)&&(T?(j(k),k=-1):T=!0,ie(D,Y-Se))):(P.sortIndex=z,n(h,P),S||w||(S=!0,N||(N=!0,K()))),P},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(P){var Q=x;return function(){var Y=x;x=Q;try{return P.apply(this,arguments)}finally{x=Y}}}})(_m)),_m}var Ub;function oC(){return Ub||(Ub=1,Em.exports=aC()),Em.exports}var Cm={exports:{}},fr={};var Bb;function sC(){if(Bb)return fr;Bb=1;var e=_p();function n(h){var f="https://react.dev/errors/"+h;if(1z||(t.current=Se[z],Se[z]=null,z--)}function V(t,r){z++,Se[z]=t.current,t.current=r}var ue=re(null),Ee=re(null),xe=re(null),je=re(null);function Ce(t,r){switch(V(xe,r),V(Ee,t),V(ue,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?nb(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=nb(r),t=rb(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}me(ue),V(ue,t)}function Le(){me(ue),me(Ee),me(xe)}function Fe(t){t.memoizedState!==null&&V(je,t);var r=ue.current,s=rb(r,t.type);r!==s&&(V(Ee,t),V(ue,s))}function Xe(t){Ee.current===t&&(me(ue),me(Ee)),je.current===t&&(me(je),bc._currentValue=Y)}var Ze=Object.prototype.hasOwnProperty,bt=e.unstable_scheduleCallback,Ot=e.unstable_cancelCallback,nn=e.unstable_shouldYield,bn=e.unstable_requestPaint,Bt=e.unstable_now,Zn=e.unstable_getCurrentPriorityLevel,fn=e.unstable_ImmediatePriority,G=e.unstable_UserBlockingPriority,ce=e.unstable_NormalPriority,ye=e.unstable_LowPriority,He=e.unstable_IdlePriority,Be=e.log,ze=e.unstable_setDisableYieldValue,X=null,Re=null;function nt(t){if(typeof Be=="function"&&ze(t),Re&&typeof Re.setStrictMode=="function")try{Re.setStrictMode(X,t)}catch(r){}}var gt=Math.clz32?Math.clz32:$t,ln=Math.log,cn=Math.LN2;function $t(t){return t>>>=0,t===0?32:31-(ln(t)/cn|0)|0}var hn=256,Jn=4194304;function Pn(t){var r=t&42;if(r!==0)return r;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Dn(t,r,s){var c=t.pendingLanes;if(c===0)return 0;var m=0,v=t.suspendedLanes,E=t.pingedLanes;t=t.warmLanes;var R=c&134217727;return R!==0?(c=R&~v,c!==0?m=Pn(c):(E&=R,E!==0?m=Pn(E):s||(s=R&~t,s!==0&&(m=Pn(s))))):(R=c&~v,R!==0?m=Pn(R):E!==0?m=Pn(E):s||(s=c&~t,s!==0&&(m=Pn(s)))),m===0?0:r!==0&&r!==m&&(r&v)===0&&(v=m&-m,s=r&-r,v>=s||v===32&&(s&4194048)!==0)?r:m}function er(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function Mn(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Rn(){var t=hn;return hn<<=1,(hn&4194048)===0&&(hn=256),t}function mt(){var t=Jn;return Jn<<=1,(Jn&62914560)===0&&(Jn=4194304),t}function zt(t){for(var r=[],s=0;31>s;s++)r.push(t);return r}function rt(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Lt(t,r,s,c,m,v){var E=t.pendingLanes;t.pendingLanes=s,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=s,t.entangledLanes&=s,t.errorRecoveryDisabledLanes&=s,t.shellSuspendCounter=0;var R=t.entanglements,$=t.expirationTimes,he=t.hiddenUpdates;for(s=E&~s;0)":-1m||$[c]!==he[m]){var Ne=` -`+$[c].replace(" at new "," at ");return t.displayName&&Ne.includes("")&&(Ne=Ne.replace("",t.displayName)),Ne}while(1<=c&&0<=m);break}}}finally{kr=!1,Error.prepareStackTrace=s}return(s=t?t.displayName||t.name:"")?cr(s):""}function Co(t){switch(t.tag){case 26:case 27:case 5:return cr(t.type);case 16:return cr("Lazy");case 13:return cr("Suspense");case 19:return cr("SuspenseList");case 0:case 15:return on(t.type,!1);case 11:return on(t.type.render,!1);case 1:return on(t.type,!0);case 31:return cr("Activity");default:return""}}function Ra(t){try{var r="";do r+=Co(t),t=t.return;while(t);return r}catch(s){return` -Error generating stack: `+s.message+` -`+s.stack}}function nr(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Tl(t){var r=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(r==="checkbox"||r==="radio")}function Ef(t){var r=Tl(t)?"checked":"value",s=Object.getOwnPropertyDescriptor(t.constructor.prototype,r),c=""+t[r];if(!t.hasOwnProperty(r)&&typeof s!="undefined"&&typeof s.get=="function"&&typeof s.set=="function"){var m=s.get,v=s.set;return Object.defineProperty(t,r,{configurable:!0,get:function(){return m.call(this)},set:function(E){c=""+E,v.call(this,E)}}),Object.defineProperty(t,r,{enumerable:s.enumerable}),{getValue:function(){return c},setValue:function(E){c=""+E},stopTracking:function(){t._valueTracker=null,delete t[r]}}}}function si(t){t._valueTracker||(t._valueTracker=Ef(t))}function au(t){if(!t)return!1;var r=t._valueTracker;if(!r)return!0;var s=r.getValue(),c="";return t&&(c=Tl(t)?t.checked?"true":"false":t.value),t=c,t!==s?(r.setValue(t),!0):!1}function ii(t){if(t=t||(typeof document!="undefined"?document:void 0),typeof t=="undefined")return null;try{return t.activeElement||t.body}catch(r){return t.body}}var ou=/[\n"\\]/g;function yr(t){return t.replace(ou,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function ua(t,r,s,c,m,v,E,R){t.name="",E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"?t.type=E:t.removeAttribute("type"),r!=null?E==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+nr(r)):t.value!==""+nr(r)&&(t.value=""+nr(r)):E!=="submit"&&E!=="reset"||t.removeAttribute("value"),r!=null?su(t,E,nr(r)):s!=null?su(t,E,nr(s)):c!=null&&t.removeAttribute("value"),m==null&&v!=null&&(t.defaultChecked=!!v),m!=null&&(t.checked=m&&typeof m!="function"&&typeof m!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?t.name=""+nr(R):t.removeAttribute("name")}function Nl(t,r,s,c,m,v,E,R){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(t.type=v),r!=null||s!=null){if(!(v!=="submit"&&v!=="reset"||r!=null))return;s=s!=null?""+nr(s):"",r=r!=null?""+nr(r):s,R||r===t.value||(t.value=r),t.defaultValue=r}c=c!=null?c:m,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=R?t.checked:!!c,t.defaultChecked=!!c,E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"&&(t.name=E)}function su(t,r,s){r==="number"&&ii(t.ownerDocument)===t||t.defaultValue===""+s||(t.defaultValue=""+s)}function To(t,r,s,c){if(t=t.options,r){r={};for(var m=0;m=zr),jl=" ",ha=!1;function kl(t,r){switch(t){case"keyup":return mi.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function hu(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var br=!1;function jo(t,r){switch(t){case"compositionend":return hu(r);case"keypress":return r.which!==32?null:(ha=!0,jl);case"textInput":return t=r.data,t===jl&&ha?null:t;default:return null}}function Ll(t,r){if(br)return t==="compositionend"||!Za&&kl(t,r)?(t=cu(),ws=Ro=da=null,br=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:s,offset:r-t};t=c}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=Eg(s)}}function Cg(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?Cg(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function Tg(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=ii(t.document);r instanceof t.HTMLIFrameElement;){try{var s=typeof r.contentWindow.location.href=="string"}catch(c){s=!1}if(s)t=r.contentWindow;else break;r=ii(t.document)}return r}function Mf(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var DE=Zr&&"documentMode"in document&&11>=document.documentMode,gi=null,Rf=null,Hl=null,Af=!1;function Ng(t,r,s){var c=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;Af||gi==null||gi!==ii(c)||(c=gi,"selectionStart"in c&&Mf(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Hl&&Pl(Hl,c)||(Hl=c,c=Ju(Rf,"onSelect"),0>=E,m-=E,eo=1<<32-gt(r)+m|s<v?v:8;var E=P.T,R={};P.T=R,yh(t,!1,r,s);try{var $=m(),he=P.S;if(he!==null&&he(R,$),$!==null&&typeof $=="object"&&typeof $.then=="function"){var Ne=BE($,c);tc(t,r,Ne,qr(t))}else tc(t,r,c,qr(t))}catch(De){tc(t,r,{then:function(){},status:"rejected",reason:De},qr())}finally{Q.p=v,P.T=E}}function qE(){}function ph(t,r,s,c){if(t.tag!==5)throw Error(o(476));var m=Oy(t).queue;Ny(t,m,r,Y,s===null?qE:function(){return Dy(t),s(c)})}function Oy(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ao,lastRenderedState:Y},next:null};var s={};return r.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ao,lastRenderedState:s},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function Dy(t){var r=Oy(t).next.queue;tc(t,r,{},qr())}function gh(){return dr(bc)}function My(){return kn().memoizedState}function Ry(){return kn().memoizedState}function YE(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var s=qr();t=zo(s);var c=Uo(r,t,s);c!==null&&(Yr(c,r,s),Xl(c,r,s)),r={cache:If()},t.payload=r;return}r=r.return}}function WE(t,r,s){var c=qr();s={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null},ju(t)?jy(r,s):(s=zf(t,r,s,c),s!==null&&(Yr(s,t,c),ky(s,r,c)))}function Ay(t,r,s){var c=qr();tc(t,r,s,c)}function tc(t,r,s,c){var m={lane:c,revertLane:0,action:s,hasEagerState:!1,eagerState:null,next:null};if(ju(t))jy(r,m);else{var v=t.alternate;if(t.lanes===0&&(v===null||v.lanes===0)&&(v=r.lastRenderedReducer,v!==null))try{var E=r.lastRenderedState,R=v(E,s);if(m.hasEagerState=!0,m.eagerState=R,Br(R,E))return gu(t,r,m,0),an===null&&pu(),!1}catch($){}if(s=zf(t,r,m,c),s!==null)return Yr(s,t,c),ky(s,r,c),!0}return!1}function yh(t,r,s,c){if(c={lane:2,revertLane:Xh(),action:c,hasEagerState:!1,eagerState:null,next:null},ju(t)){if(r)throw Error(o(479))}else r=zf(t,s,c,2),r!==null&&Yr(r,t,2)}function ju(t){var r=t.alternate;return t===Ct||r!==null&&r===Ct}function jy(t,r){Ti=Nu=!0;var s=t.pending;s===null?r.next=r:(r.next=s.next,s.next=r),t.pending=r}function ky(t,r,s){if((s&4194048)!==0){var c=r.lanes;c&=t.pendingLanes,s|=c,r.lanes=s,Je(t,s)}}var ku={readContext:dr,use:Du,useCallback:Tn,useContext:Tn,useEffect:Tn,useImperativeHandle:Tn,useLayoutEffect:Tn,useInsertionEffect:Tn,useMemo:Tn,useReducer:Tn,useRef:Tn,useState:Tn,useDebugValue:Tn,useDeferredValue:Tn,useTransition:Tn,useSyncExternalStore:Tn,useId:Tn,useHostTransitionStatus:Tn,useFormState:Tn,useActionState:Tn,useOptimistic:Tn,useMemoCache:Tn,useCacheRefresh:Tn},Ly={readContext:dr,use:Du,useCallback:function(t,r){return Cr().memoizedState=[t,r===void 0?null:r],t},useContext:dr,useEffect:vy,useImperativeHandle:function(t,r,s){s=s!=null?s.concat([t]):null,Au(4194308,4,Sy.bind(null,r,t),s)},useLayoutEffect:function(t,r){return Au(4194308,4,t,r)},useInsertionEffect:function(t,r){Au(4,2,t,r)},useMemo:function(t,r){var s=Cr();r=r===void 0?null:r;var c=t();if(Ls){nt(!0);try{t()}finally{nt(!1)}}return s.memoizedState=[c,r],c},useReducer:function(t,r,s){var c=Cr();if(s!==void 0){var m=s(r);if(Ls){nt(!0);try{s(r)}finally{nt(!1)}}}else m=r;return c.memoizedState=c.baseState=m,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:m},c.queue=t,t=t.dispatch=WE.bind(null,Ct,t),[c.memoizedState,t]},useRef:function(t){var r=Cr();return t={current:t},r.memoizedState=t},useState:function(t){t=dh(t);var r=t.queue,s=Ay.bind(null,Ct,r);return r.dispatch=s,[t.memoizedState,s]},useDebugValue:hh,useDeferredValue:function(t,r){var s=Cr();return mh(s,t,r)},useTransition:function(){var t=dh(!1);return t=Ny.bind(null,Ct,t.queue,!0,!1),Cr().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,s){var c=Ct,m=Cr();if(Ht){if(s===void 0)throw Error(o(407));s=s()}else{if(s=r(),an===null)throw Error(o(349));(Ut&124)!==0||ny(c,r,s)}m.memoizedState=s;var v={value:s,getSnapshot:r};return m.queue=v,vy(ay.bind(null,c,v,t),[t]),c.flags|=2048,Oi(9,Ru(),ry.bind(null,c,v,s,r),null),s},useId:function(){var t=Cr(),r=an.identifierPrefix;if(Ht){var s=to,c=eo;s=(c&~(1<<32-gt(c)-1)).toString(32)+s,r="«"+r+"R"+s,s=Ou++,0ft?(Xn=tt,tt=null):Xn=tt.sibling;var Pt=ge(se,tt,de[ft],Oe);if(Pt===null){tt===null&&(tt=Xn);break}t&&tt&&Pt.alternate===null&&r(se,tt),J=v(Pt,J,ft),Dt===null?Ie=Pt:Dt.sibling=Pt,Dt=Pt,tt=Xn}if(ft===de.length)return s(se,tt),Ht&&Ds(se,ft),Ie;if(tt===null){for(;ftft?(Xn=tt,tt=null):Xn=tt.sibling;var es=ge(se,tt,Pt.value,Oe);if(es===null){tt===null&&(tt=Xn);break}t&&tt&&es.alternate===null&&r(se,tt),J=v(es,J,ft),Dt===null?Ie=es:Dt.sibling=es,Dt=es,tt=Xn}if(Pt.done)return s(se,tt),Ht&&Ds(se,ft),Ie;if(tt===null){for(;!Pt.done;ft++,Pt=de.next())Pt=De(se,Pt.value,Oe),Pt!==null&&(J=v(Pt,J,ft),Dt===null?Ie=Pt:Dt.sibling=Pt,Dt=Pt);return Ht&&Ds(se,ft),Ie}for(tt=c(tt);!Pt.done;ft++,Pt=de.next())Pt=be(tt,se,ft,Pt.value,Oe),Pt!==null&&(t&&Pt.alternate!==null&&tt.delete(Pt.key===null?ft:Pt.key),J=v(Pt,J,ft),Dt===null?Ie=Pt:Dt.sibling=Pt,Dt=Pt);return t&&tt.forEach(function($_){return r(se,$_)}),Ht&&Ds(se,ft),Ie}function Kt(se,J,de,Oe){if(typeof de=="object"&&de!==null&&de.type===S&&de.key===null&&(de=de.props.children),typeof de=="object"&&de!==null){switch(de.$$typeof){case x:e:{for(var Ie=de.key;J!==null;){if(J.key===Ie){if(Ie=de.type,Ie===S){if(J.tag===7){s(se,J.sibling),Oe=m(J,de.props.children),Oe.return=se,se=Oe;break e}}else if(J.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===F&&Uy(Ie)===J.type){s(se,J.sibling),Oe=m(J,de.props),rc(Oe,de),Oe.return=se,se=Oe;break e}s(se,J);break}else r(se,J);J=J.sibling}de.type===S?(Oe=Ns(de.props.children,se.mode,Oe,de.key),Oe.return=se,se=Oe):(Oe=vu(de.type,de.key,de.props,null,se.mode,Oe),rc(Oe,de),Oe.return=se,se=Oe)}return E(se);case w:e:{for(Ie=de.key;J!==null;){if(J.key===Ie)if(J.tag===4&&J.stateNode.containerInfo===de.containerInfo&&J.stateNode.implementation===de.implementation){s(se,J.sibling),Oe=m(J,de.children||[]),Oe.return=se,se=Oe;break e}else{s(se,J);break}else r(se,J);J=J.sibling}Oe=Pf(de,se.mode,Oe),Oe.return=se,se=Oe}return E(se);case F:return Ie=de._init,de=Ie(de._payload),Kt(se,J,de,Oe)}if(ie(de))return pt(se,J,de,Oe);if(K(de)){if(Ie=K(de),typeof Ie!="function")throw Error(o(150));return de=Ie.call(de),ut(se,J,de,Oe)}if(typeof de.then=="function")return Kt(se,J,Lu(de),Oe);if(de.$$typeof===L)return Kt(se,J,Su(se,de),Oe);zu(se,de)}return typeof de=="string"&&de!==""||typeof de=="number"||typeof de=="bigint"?(de=""+de,J!==null&&J.tag===6?(s(se,J.sibling),Oe=m(J,de),Oe.return=se,se=Oe):(s(se,J),Oe=Bf(de,se.mode,Oe),Oe.return=se,se=Oe),E(se)):s(se,J)}return function(se,J,de,Oe){try{nc=0;var Ie=Kt(se,J,de,Oe);return Di=null,Ie}catch(tt){if(tt===$l||tt===_u)throw tt;var Dt=Pr(29,tt,null,se.mode);return Dt.lanes=Oe,Dt.return=se,Dt}}}var Mi=By(!0),Py=By(!1),ra=re(null),ja=null;function Po(t){var r=t.alternate;V(Yn,Yn.current&1),V(ra,t),ja===null&&(r===null||Ci.current!==null||r.memoizedState!==null)&&(ja=t)}function Hy(t){if(t.tag===22){if(V(Yn,Yn.current),V(ra,t),ja===null){var r=t.alternate;r!==null&&r.memoizedState!==null&&(ja=t)}}else Ho()}function Ho(){V(Yn,Yn.current),V(ra,ra.current)}function oo(t){me(ra),ja===t&&(ja=null),me(Yn)}var Yn=re(0);function Uu(t){for(var r=t;r!==null;){if(r.tag===13){var s=r.memoizedState;if(s!==null&&(s=s.dehydrated,s===null||s.data==="$?"||im(s)))return r}else if(r.tag===19&&r.memoizedProps.revealOrder!==void 0){if((r.flags&128)!==0)return r}else if(r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return null;r=r.return}r.sibling.return=r.return,r=r.sibling}return null}function vh(t,r,s,c){r=t.memoizedState,s=s(c,r),s=s==null?r:p({},r,s),t.memoizedState=s,t.lanes===0&&(t.updateQueue.baseState=s)}var bh={enqueueSetState:function(t,r,s){t=t._reactInternals;var c=qr(),m=zo(c);m.payload=r,s!=null&&(m.callback=s),r=Uo(t,m,c),r!==null&&(Yr(r,t,c),Xl(r,t,c))},enqueueReplaceState:function(t,r,s){t=t._reactInternals;var c=qr(),m=zo(c);m.tag=1,m.payload=r,s!=null&&(m.callback=s),r=Uo(t,m,c),r!==null&&(Yr(r,t,c),Xl(r,t,c))},enqueueForceUpdate:function(t,r){t=t._reactInternals;var s=qr(),c=zo(s);c.tag=2,r!=null&&(c.callback=r),r=Uo(t,c,s),r!==null&&(Yr(r,t,s),Xl(r,t,s))}};function Fy(t,r,s,c,m,v,E){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(c,v,E):r.prototype&&r.prototype.isPureReactComponent?!Pl(s,c)||!Pl(m,v):!0}function Vy(t,r,s,c){t=r.state,typeof r.componentWillReceiveProps=="function"&&r.componentWillReceiveProps(s,c),typeof r.UNSAFE_componentWillReceiveProps=="function"&&r.UNSAFE_componentWillReceiveProps(s,c),r.state!==t&&bh.enqueueReplaceState(r,r.state,null)}function zs(t,r){var s=r;if("ref"in r){s={};for(var c in r)c!=="ref"&&(s[c]=r[c])}if(t=t.defaultProps){s===r&&(s=p({},s));for(var m in t)s[m]===void 0&&(s[m]=t[m])}return s}var Bu=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var r=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(r))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function qy(t){Bu(t)}function Yy(t){console.error(t)}function Wy(t){Bu(t)}function Pu(t,r){try{var s=t.onUncaughtError;s(r.value,{componentStack:r.stack})}catch(c){setTimeout(function(){throw c})}}function Iy(t,r,s){try{var c=t.onCaughtError;c(s.value,{componentStack:s.stack,errorBoundary:r.tag===1?r.stateNode:null})}catch(m){setTimeout(function(){throw m})}}function xh(t,r,s){return s=zo(s),s.tag=3,s.payload={element:null},s.callback=function(){Pu(t,r)},s}function $y(t){return t=zo(t),t.tag=3,t}function Gy(t,r,s,c){var m=s.type.getDerivedStateFromError;if(typeof m=="function"){var v=c.value;t.payload=function(){return m(v)},t.callback=function(){Iy(r,s,c)}}var E=s.stateNode;E!==null&&typeof E.componentDidCatch=="function"&&(t.callback=function(){Iy(r,s,c),typeof m!="function"&&(Io===null?Io=new Set([this]):Io.add(this));var R=c.stack;this.componentDidCatch(c.value,{componentStack:R!==null?R:""})})}function $E(t,r,s,c,m){if(s.flags|=32768,c!==null&&typeof c=="object"&&typeof c.then=="function"){if(r=s.alternate,r!==null&&Yl(r,s,m,!0),s=ra.current,s!==null){switch(s.tag){case 13:return ja===null?Yh():s.alternate===null&&wn===0&&(wn=3),s.flags&=-257,s.flags|=65536,s.lanes=m,c===Xf?s.flags|=16384:(r=s.updateQueue,r===null?s.updateQueue=new Set([c]):r.add(c),Ih(t,c,m)),!1;case 22:return s.flags|=65536,c===Xf?s.flags|=16384:(r=s.updateQueue,r===null?(r={transitions:null,markerInstances:null,retryQueue:new Set([c])},s.updateQueue=r):(s=r.retryQueue,s===null?r.retryQueue=new Set([c]):s.add(c)),Ih(t,c,m)),!1}throw Error(o(435,s.tag))}return Ih(t,c,m),Yh(),!1}if(Ht)return r=ra.current,r!==null?((r.flags&65536)===0&&(r.flags|=256),r.flags|=65536,r.lanes=m,c!==Vf&&(t=Error(o(422),{cause:c}),ql(Jr(t,s)))):(c!==Vf&&(r=Error(o(423),{cause:c}),ql(Jr(r,s))),t=t.current.alternate,t.flags|=65536,m&=-m,t.lanes|=m,c=Jr(c,s),m=xh(t.stateNode,c,m),Zf(t,m),wn!==4&&(wn=2)),!1;var v=Error(o(520),{cause:c});if(v=Jr(v,s),uc===null?uc=[v]:uc.push(v),wn!==4&&(wn=2),r===null)return!0;c=Jr(c,s),s=r;do{switch(s.tag){case 3:return s.flags|=65536,t=m&-m,s.lanes|=t,t=xh(s.stateNode,c,t),Zf(s,t),!1;case 1:if(r=s.type,v=s.stateNode,(s.flags&128)===0&&(typeof r.getDerivedStateFromError=="function"||v!==null&&typeof v.componentDidCatch=="function"&&(Io===null||!Io.has(v))))return s.flags|=65536,m&=-m,s.lanes|=m,m=$y(m),Gy(m,t,s,c),Zf(s,m),!1}s=s.return}while(s!==null);return!1}var Xy=Error(o(461)),$n=!1;function rr(t,r,s,c){r.child=t===null?Py(r,null,s,c):Mi(r,t.child,s,c)}function Qy(t,r,s,c,m){s=s.render;var v=r.ref;if("ref"in c){var E={};for(var R in c)R!=="ref"&&(E[R]=c[R])}else E=c;return js(r),c=rh(t,r,s,E,v,m),R=ah(),t!==null&&!$n?(oh(t,r,m),so(t,r,m)):(Ht&&R&&Hf(r),r.flags|=1,rr(t,r,c,m),r.child)}function Ky(t,r,s,c,m){if(t===null){var v=s.type;return typeof v=="function"&&!Uf(v)&&v.defaultProps===void 0&&s.compare===null?(r.tag=15,r.type=v,Zy(t,r,v,c,m)):(t=vu(s.type,null,c,r,r.mode,m),t.ref=r.ref,t.return=r,r.child=t)}if(v=t.child,!Oh(t,m)){var E=v.memoizedProps;if(s=s.compare,s=s!==null?s:Pl,s(E,c)&&t.ref===r.ref)return so(t,r,m)}return r.flags|=1,t=Ja(v,c),t.ref=r.ref,t.return=r,r.child=t}function Zy(t,r,s,c,m){if(t!==null){var v=t.memoizedProps;if(Pl(v,c)&&t.ref===r.ref)if($n=!1,r.pendingProps=c=v,Oh(t,m))(t.flags&131072)!==0&&($n=!0);else return r.lanes=t.lanes,so(t,r,m)}return wh(t,r,s,c,m)}function Jy(t,r,s){var c=r.pendingProps,m=c.children,v=t!==null?t.memoizedState:null;if(c.mode==="hidden"){if((r.flags&128)!==0){if(c=v!==null?v.baseLanes|s:s,t!==null){for(m=r.child=t.child,v=0;m!==null;)v=v|m.lanes|m.childLanes,m=m.sibling;r.childLanes=v&~c}else r.childLanes=0,r.child=null;return ev(t,r,c,s)}if((s&536870912)!==0)r.memoizedState={baseLanes:0,cachePool:null},t!==null&&Eu(r,v!==null?v.cachePool:null),v!==null?Zg(r,v):eh(),Hy(r);else return r.lanes=r.childLanes=536870912,ev(t,r,v!==null?v.baseLanes|s:s,s)}else v!==null?(Eu(r,v.cachePool),Zg(r,v),Ho(),r.memoizedState=null):(t!==null&&Eu(r,null),eh(),Ho());return rr(t,r,m,s),r.child}function ev(t,r,s,c){var m=Gf();return m=m===null?null:{parent:qn._currentValue,pool:m},r.memoizedState={baseLanes:s,cachePool:m},t!==null&&Eu(r,null),eh(),Hy(r),t!==null&&Yl(t,r,c,!0),null}function Hu(t,r){var s=r.ref;if(s===null)t!==null&&t.ref!==null&&(r.flags|=4194816);else{if(typeof s!="function"&&typeof s!="object")throw Error(o(284));(t===null||t.ref!==s)&&(r.flags|=4194816)}}function wh(t,r,s,c,m){return js(r),s=rh(t,r,s,c,void 0,m),c=ah(),t!==null&&!$n?(oh(t,r,m),so(t,r,m)):(Ht&&c&&Hf(r),r.flags|=1,rr(t,r,s,m),r.child)}function tv(t,r,s,c,m,v){return js(r),r.updateQueue=null,s=ey(r,c,s,m),Jg(t),c=ah(),t!==null&&!$n?(oh(t,r,v),so(t,r,v)):(Ht&&c&&Hf(r),r.flags|=1,rr(t,r,s,v),r.child)}function nv(t,r,s,c,m){if(js(r),r.stateNode===null){var v=xi,E=s.contextType;typeof E=="object"&&E!==null&&(v=dr(E)),v=new s(c,v),r.memoizedState=v.state!==null&&v.state!==void 0?v.state:null,v.updater=bh,r.stateNode=v,v._reactInternals=r,v=r.stateNode,v.props=c,v.state=r.memoizedState,v.refs={},Qf(r),E=s.contextType,v.context=typeof E=="object"&&E!==null?dr(E):xi,v.state=r.memoizedState,E=s.getDerivedStateFromProps,typeof E=="function"&&(vh(r,s,E,c),v.state=r.memoizedState),typeof s.getDerivedStateFromProps=="function"||typeof v.getSnapshotBeforeUpdate=="function"||typeof v.UNSAFE_componentWillMount!="function"&&typeof v.componentWillMount!="function"||(E=v.state,typeof v.componentWillMount=="function"&&v.componentWillMount(),typeof v.UNSAFE_componentWillMount=="function"&&v.UNSAFE_componentWillMount(),E!==v.state&&bh.enqueueReplaceState(v,v.state,null),Kl(r,c,v,m),Ql(),v.state=r.memoizedState),typeof v.componentDidMount=="function"&&(r.flags|=4194308),c=!0}else if(t===null){v=r.stateNode;var R=r.memoizedProps,$=zs(s,R);v.props=$;var he=v.context,Ne=s.contextType;E=xi,typeof Ne=="object"&&Ne!==null&&(E=dr(Ne));var De=s.getDerivedStateFromProps;Ne=typeof De=="function"||typeof v.getSnapshotBeforeUpdate=="function",R=r.pendingProps!==R,Ne||typeof v.UNSAFE_componentWillReceiveProps!="function"&&typeof v.componentWillReceiveProps!="function"||(R||he!==E)&&Vy(r,v,c,E),Lo=!1;var ge=r.memoizedState;v.state=ge,Kl(r,c,v,m),Ql(),he=r.memoizedState,R||ge!==he||Lo?(typeof De=="function"&&(vh(r,s,De,c),he=r.memoizedState),($=Lo||Fy(r,s,$,c,ge,he,E))?(Ne||typeof v.UNSAFE_componentWillMount!="function"&&typeof v.componentWillMount!="function"||(typeof v.componentWillMount=="function"&&v.componentWillMount(),typeof v.UNSAFE_componentWillMount=="function"&&v.UNSAFE_componentWillMount()),typeof v.componentDidMount=="function"&&(r.flags|=4194308)):(typeof v.componentDidMount=="function"&&(r.flags|=4194308),r.memoizedProps=c,r.memoizedState=he),v.props=c,v.state=he,v.context=E,c=$):(typeof v.componentDidMount=="function"&&(r.flags|=4194308),c=!1)}else{v=r.stateNode,Kf(t,r),E=r.memoizedProps,Ne=zs(s,E),v.props=Ne,De=r.pendingProps,ge=v.context,he=s.contextType,$=xi,typeof he=="object"&&he!==null&&($=dr(he)),R=s.getDerivedStateFromProps,(he=typeof R=="function"||typeof v.getSnapshotBeforeUpdate=="function")||typeof v.UNSAFE_componentWillReceiveProps!="function"&&typeof v.componentWillReceiveProps!="function"||(E!==De||ge!==$)&&Vy(r,v,c,$),Lo=!1,ge=r.memoizedState,v.state=ge,Kl(r,c,v,m),Ql();var be=r.memoizedState;E!==De||ge!==be||Lo||t!==null&&t.dependencies!==null&&wu(t.dependencies)?(typeof R=="function"&&(vh(r,s,R,c),be=r.memoizedState),(Ne=Lo||Fy(r,s,Ne,c,ge,be,$)||t!==null&&t.dependencies!==null&&wu(t.dependencies))?(he||typeof v.UNSAFE_componentWillUpdate!="function"&&typeof v.componentWillUpdate!="function"||(typeof v.componentWillUpdate=="function"&&v.componentWillUpdate(c,be,$),typeof v.UNSAFE_componentWillUpdate=="function"&&v.UNSAFE_componentWillUpdate(c,be,$)),typeof v.componentDidUpdate=="function"&&(r.flags|=4),typeof v.getSnapshotBeforeUpdate=="function"&&(r.flags|=1024)):(typeof v.componentDidUpdate!="function"||E===t.memoizedProps&&ge===t.memoizedState||(r.flags|=4),typeof v.getSnapshotBeforeUpdate!="function"||E===t.memoizedProps&&ge===t.memoizedState||(r.flags|=1024),r.memoizedProps=c,r.memoizedState=be),v.props=c,v.state=be,v.context=$,c=Ne):(typeof v.componentDidUpdate!="function"||E===t.memoizedProps&&ge===t.memoizedState||(r.flags|=4),typeof v.getSnapshotBeforeUpdate!="function"||E===t.memoizedProps&&ge===t.memoizedState||(r.flags|=1024),c=!1)}return v=c,Hu(t,r),c=(r.flags&128)!==0,v||c?(v=r.stateNode,s=c&&typeof s.getDerivedStateFromError!="function"?null:v.render(),r.flags|=1,t!==null&&c?(r.child=Mi(r,t.child,null,m),r.child=Mi(r,null,s,m)):rr(t,r,s,m),r.memoizedState=v.state,t=r.child):t=so(t,r,m),t}function rv(t,r,s,c){return Vl(),r.flags|=256,rr(t,r,s,c),r.child}var Sh={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Eh(t){return{baseLanes:t,cachePool:Yg()}}function _h(t,r,s){return t=t!==null?t.childLanes&~s:0,r&&(t|=aa),t}function av(t,r,s){var c=r.pendingProps,m=!1,v=(r.flags&128)!==0,E;if((E=v)||(E=t!==null&&t.memoizedState===null?!1:(Yn.current&2)!==0),E&&(m=!0,r.flags&=-129),E=(r.flags&32)!==0,r.flags&=-33,t===null){if(Ht){if(m?Po(r):Ho(),Ht){var R=xn,$;if($=R){e:{for($=R,R=Aa;$.nodeType!==8;){if(!R){R=null;break e}if($=ga($.nextSibling),$===null){R=null;break e}}R=$}R!==null?(r.memoizedState={dehydrated:R,treeContext:Os!==null?{id:eo,overflow:to}:null,retryLane:536870912,hydrationErrors:null},$=Pr(18,null,null,0),$.stateNode=R,$.return=r,r.child=$,xr=r,xn=null,$=!0):$=!1}$||Rs(r)}if(R=r.memoizedState,R!==null&&(R=R.dehydrated,R!==null))return im(R)?r.lanes=32:r.lanes=536870912,null;oo(r)}return R=c.children,c=c.fallback,m?(Ho(),m=r.mode,R=Fu({mode:"hidden",children:R},m),c=Ns(c,m,s,null),R.return=r,c.return=r,R.sibling=c,r.child=R,m=r.child,m.memoizedState=Eh(s),m.childLanes=_h(t,E,s),r.memoizedState=Sh,c):(Po(r),Ch(r,R))}if($=t.memoizedState,$!==null&&(R=$.dehydrated,R!==null)){if(v)r.flags&256?(Po(r),r.flags&=-257,r=Th(t,r,s)):r.memoizedState!==null?(Ho(),r.child=t.child,r.flags|=128,r=null):(Ho(),m=c.fallback,R=r.mode,c=Fu({mode:"visible",children:c.children},R),m=Ns(m,R,s,null),m.flags|=2,c.return=r,m.return=r,c.sibling=m,r.child=c,Mi(r,t.child,null,s),c=r.child,c.memoizedState=Eh(s),c.childLanes=_h(t,E,s),r.memoizedState=Sh,r=m);else if(Po(r),im(R)){if(E=R.nextSibling&&R.nextSibling.dataset,E)var he=E.dgst;E=he,c=Error(o(419)),c.stack="",c.digest=E,ql({value:c,source:null,stack:null}),r=Th(t,r,s)}else if($n||Yl(t,r,s,!1),E=(s&t.childLanes)!==0,$n||E){if(E=an,E!==null&&(c=s&-s,c=(c&42)!==0?1:Vt(c),c=(c&(E.suspendedLanes|s))!==0?0:c,c!==0&&c!==$.retryLane))throw $.retryLane=c,bi(t,c),Yr(E,t,c),Xy;R.data==="$?"||Yh(),r=Th(t,r,s)}else R.data==="$?"?(r.flags|=192,r.child=t.child,r=null):(t=$.treeContext,xn=ga(R.nextSibling),xr=r,Ht=!0,Ms=null,Aa=!1,t!==null&&(ta[na++]=eo,ta[na++]=to,ta[na++]=Os,eo=t.id,to=t.overflow,Os=r),r=Ch(r,c.children),r.flags|=4096);return r}return m?(Ho(),m=c.fallback,R=r.mode,$=t.child,he=$.sibling,c=Ja($,{mode:"hidden",children:c.children}),c.subtreeFlags=$.subtreeFlags&65011712,he!==null?m=Ja(he,m):(m=Ns(m,R,s,null),m.flags|=2),m.return=r,c.return=r,c.sibling=m,r.child=c,c=m,m=r.child,R=t.child.memoizedState,R===null?R=Eh(s):($=R.cachePool,$!==null?(he=qn._currentValue,$=$.parent!==he?{parent:he,pool:he}:$):$=Yg(),R={baseLanes:R.baseLanes|s,cachePool:$}),m.memoizedState=R,m.childLanes=_h(t,E,s),r.memoizedState=Sh,c):(Po(r),s=t.child,t=s.sibling,s=Ja(s,{mode:"visible",children:c.children}),s.return=r,s.sibling=null,t!==null&&(E=r.deletions,E===null?(r.deletions=[t],r.flags|=16):E.push(t)),r.child=s,r.memoizedState=null,s)}function Ch(t,r){return r=Fu({mode:"visible",children:r},t.mode),r.return=t,t.child=r}function Fu(t,r){return t=Pr(22,t,null,r),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Th(t,r,s){return Mi(r,t.child,null,s),t=Ch(r,r.pendingProps.children),t.flags|=2,r.memoizedState=null,t}function ov(t,r,s){t.lanes|=r;var c=t.alternate;c!==null&&(c.lanes|=r),Yf(t.return,r,s)}function Nh(t,r,s,c,m){var v=t.memoizedState;v===null?t.memoizedState={isBackwards:r,rendering:null,renderingStartTime:0,last:c,tail:s,tailMode:m}:(v.isBackwards=r,v.rendering=null,v.renderingStartTime=0,v.last=c,v.tail=s,v.tailMode=m)}function sv(t,r,s){var c=r.pendingProps,m=c.revealOrder,v=c.tail;if(rr(t,r,c.children,s),c=Yn.current,(c&2)!==0)c=c&1|2,r.flags|=128;else{if(t!==null&&(t.flags&128)!==0)e:for(t=r.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&ov(t,s,r);else if(t.tag===19)ov(t,s,r);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===r)break e;for(;t.sibling===null;){if(t.return===null||t.return===r)break e;t=t.return}t.sibling.return=t.return,t=t.sibling}c&=1}switch(V(Yn,c),m){case"forwards":for(s=r.child,m=null;s!==null;)t=s.alternate,t!==null&&Uu(t)===null&&(m=s),s=s.sibling;s=m,s===null?(m=r.child,r.child=null):(m=s.sibling,s.sibling=null),Nh(r,!1,m,s,v);break;case"backwards":for(s=null,m=r.child,r.child=null;m!==null;){if(t=m.alternate,t!==null&&Uu(t)===null){r.child=m;break}t=m.sibling,m.sibling=s,s=m,m=t}Nh(r,!0,s,null,v);break;case"together":Nh(r,!1,null,null,void 0);break;default:r.memoizedState=null}return r.child}function so(t,r,s){if(t!==null&&(r.dependencies=t.dependencies),Wo|=r.lanes,(s&r.childLanes)===0)if(t!==null){if(Yl(t,r,s,!1),(s&r.childLanes)===0)return null}else return null;if(t!==null&&r.child!==t.child)throw Error(o(153));if(r.child!==null){for(t=r.child,s=Ja(t,t.pendingProps),r.child=s,s.return=r;t.sibling!==null;)t=t.sibling,s=s.sibling=Ja(t,t.pendingProps),s.return=r;s.sibling=null}return r.child}function Oh(t,r){return(t.lanes&r)!==0?!0:(t=t.dependencies,!!(t!==null&&wu(t)))}function GE(t,r,s){switch(r.tag){case 3:Ce(r,r.stateNode.containerInfo),ko(r,qn,t.memoizedState.cache),Vl();break;case 27:case 5:Fe(r);break;case 4:Ce(r,r.stateNode.containerInfo);break;case 10:ko(r,r.type,r.memoizedProps.value);break;case 13:var c=r.memoizedState;if(c!==null)return c.dehydrated!==null?(Po(r),r.flags|=128,null):(s&r.child.childLanes)!==0?av(t,r,s):(Po(r),t=so(t,r,s),t!==null?t.sibling:null);Po(r);break;case 19:var m=(t.flags&128)!==0;if(c=(s&r.childLanes)!==0,c||(Yl(t,r,s,!1),c=(s&r.childLanes)!==0),m){if(c)return sv(t,r,s);r.flags|=128}if(m=r.memoizedState,m!==null&&(m.rendering=null,m.tail=null,m.lastEffect=null),V(Yn,Yn.current),c)break;return null;case 22:case 23:return r.lanes=0,Jy(t,r,s);case 24:ko(r,qn,t.memoizedState.cache)}return so(t,r,s)}function iv(t,r,s){if(t!==null)if(t.memoizedProps!==r.pendingProps)$n=!0;else{if(!Oh(t,s)&&(r.flags&128)===0)return $n=!1,GE(t,r,s);$n=(t.flags&131072)!==0}else $n=!1,Ht&&(r.flags&1048576)!==0&&Ug(r,xu,r.index);switch(r.lanes=0,r.tag){case 16:e:{t=r.pendingProps;var c=r.elementType,m=c._init;if(c=m(c._payload),r.type=c,typeof c=="function")Uf(c)?(t=zs(c,t),r.tag=1,r=nv(null,r,c,t,s)):(r.tag=0,r=wh(null,r,c,t,s));else{if(c!=null){if(m=c.$$typeof,m===q){r.tag=11,r=Qy(null,r,c,t,s);break e}else if(m===k){r.tag=14,r=Ky(null,r,c,t,s);break e}}throw r=ve(c)||c,Error(o(306,r,""))}}return r;case 0:return wh(t,r,r.type,r.pendingProps,s);case 1:return c=r.type,m=zs(c,r.pendingProps),nv(t,r,c,m,s);case 3:e:{if(Ce(r,r.stateNode.containerInfo),t===null)throw Error(o(387));c=r.pendingProps;var v=r.memoizedState;m=v.element,Kf(t,r),Kl(r,c,null,s);var E=r.memoizedState;if(c=E.cache,ko(r,qn,c),c!==v.cache&&Wf(r,[qn],s,!0),Ql(),c=E.element,v.isDehydrated)if(v={element:c,isDehydrated:!1,cache:E.cache},r.updateQueue.baseState=v,r.memoizedState=v,r.flags&256){r=rv(t,r,c,s);break e}else if(c!==m){m=Jr(Error(o(424)),r),ql(m),r=rv(t,r,c,s);break e}else for(t=r.stateNode.containerInfo,t.nodeType===9?t=t.body:t=t.nodeName==="HTML"?t.ownerDocument.body:t,xn=ga(t.firstChild),xr=r,Ht=!0,Ms=null,Aa=!0,s=Py(r,null,c,s),r.child=s;s;)s.flags=s.flags&-3|4096,s=s.sibling;else{if(Vl(),c===m){r=so(t,r,s);break e}rr(t,r,c,s)}r=r.child}return r;case 26:return Hu(t,r),t===null?(s=db(r.type,null,r.pendingProps,null))?r.memoizedState=s:Ht||(s=r.type,t=r.pendingProps,c=td(xe.current).createElement(s),c[fe]=r,c[Te]=t,or(c,s,t),Mt(c),r.stateNode=c):r.memoizedState=db(r.type,t.memoizedProps,r.pendingProps,t.memoizedState),null;case 27:return Fe(r),t===null&&Ht&&(c=r.stateNode=lb(r.type,r.pendingProps,xe.current),xr=r,Aa=!0,m=xn,Xo(r.type)?(lm=m,xn=ga(c.firstChild)):xn=m),rr(t,r,r.pendingProps.children,s),Hu(t,r),t===null&&(r.flags|=4194304),r.child;case 5:return t===null&&Ht&&((m=c=xn)&&(c=S_(c,r.type,r.pendingProps,Aa),c!==null?(r.stateNode=c,xr=r,xn=ga(c.firstChild),Aa=!1,m=!0):m=!1),m||Rs(r)),Fe(r),m=r.type,v=r.pendingProps,E=t!==null?t.memoizedProps:null,c=v.children,am(m,v)?c=null:E!==null&&am(m,E)&&(r.flags|=32),r.memoizedState!==null&&(m=rh(t,r,HE,null,null,s),bc._currentValue=m),Hu(t,r),rr(t,r,c,s),r.child;case 6:return t===null&&Ht&&((t=s=xn)&&(s=E_(s,r.pendingProps,Aa),s!==null?(r.stateNode=s,xr=r,xn=null,t=!0):t=!1),t||Rs(r)),null;case 13:return av(t,r,s);case 4:return Ce(r,r.stateNode.containerInfo),c=r.pendingProps,t===null?r.child=Mi(r,null,c,s):rr(t,r,c,s),r.child;case 11:return Qy(t,r,r.type,r.pendingProps,s);case 7:return rr(t,r,r.pendingProps,s),r.child;case 8:return rr(t,r,r.pendingProps.children,s),r.child;case 12:return rr(t,r,r.pendingProps.children,s),r.child;case 10:return c=r.pendingProps,ko(r,r.type,c.value),rr(t,r,c.children,s),r.child;case 9:return m=r.type._context,c=r.pendingProps.children,js(r),m=dr(m),c=c(m),r.flags|=1,rr(t,r,c,s),r.child;case 14:return Ky(t,r,r.type,r.pendingProps,s);case 15:return Zy(t,r,r.type,r.pendingProps,s);case 19:return sv(t,r,s);case 31:return c=r.pendingProps,s=r.mode,c={mode:c.mode,children:c.children},t===null?(s=Fu(c,s),s.ref=r.ref,r.child=s,s.return=r,r=s):(s=Ja(t.child,c),s.ref=r.ref,r.child=s,s.return=r,r=s),r;case 22:return Jy(t,r,s);case 24:return js(r),c=dr(qn),t===null?(m=Gf(),m===null&&(m=an,v=If(),m.pooledCache=v,v.refCount++,v!==null&&(m.pooledCacheLanes|=s),m=v),r.memoizedState={parent:c,cache:m},Qf(r),ko(r,qn,m)):((t.lanes&s)!==0&&(Kf(t,r),Kl(r,null,null,s),Ql()),m=t.memoizedState,v=r.memoizedState,m.parent!==c?(m={parent:c,cache:c},r.memoizedState=m,r.lanes===0&&(r.memoizedState=r.updateQueue.baseState=m),ko(r,qn,c)):(c=v.cache,ko(r,qn,c),c!==m.cache&&Wf(r,[qn],s,!0))),rr(t,r,r.pendingProps.children,s),r.child;case 29:throw r.pendingProps}throw Error(o(156,r.tag))}function io(t){t.flags|=4}function lv(t,r){if(r.type!=="stylesheet"||(r.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!gb(r)){if(r=ra.current,r!==null&&((Ut&4194048)===Ut?ja!==null:(Ut&62914560)!==Ut&&(Ut&536870912)===0||r!==ja))throw Gl=Xf,Wg;t.flags|=8192}}function Vu(t,r){r!==null&&(t.flags|=4),t.flags&16384&&(r=t.tag!==22?mt():536870912,t.lanes|=r,ki|=r)}function ac(t,r){if(!Ht)switch(t.tailMode){case"hidden":r=t.tail;for(var s=null;r!==null;)r.alternate!==null&&(s=r),r=r.sibling;s===null?t.tail=null:s.sibling=null;break;case"collapsed":s=t.tail;for(var c=null;s!==null;)s.alternate!==null&&(c=s),s=s.sibling;c===null?r||t.tail===null?t.tail=null:t.tail.sibling=null:c.sibling=null}}function gn(t){var r=t.alternate!==null&&t.alternate.child===t.child,s=0,c=0;if(r)for(var m=t.child;m!==null;)s|=m.lanes|m.childLanes,c|=m.subtreeFlags&65011712,c|=m.flags&65011712,m.return=t,m=m.sibling;else for(m=t.child;m!==null;)s|=m.lanes|m.childLanes,c|=m.subtreeFlags,c|=m.flags,m.return=t,m=m.sibling;return t.subtreeFlags|=c,t.childLanes=s,r}function XE(t,r,s){var c=r.pendingProps;switch(Ff(r),r.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return gn(r),null;case 1:return gn(r),null;case 3:return s=r.stateNode,c=null,t!==null&&(c=t.memoizedState.cache),r.memoizedState.cache!==c&&(r.flags|=2048),ro(qn),Le(),s.pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),(t===null||t.child===null)&&(Fl(r)?io(r):t===null||t.memoizedState.isDehydrated&&(r.flags&256)===0||(r.flags|=1024,Hg())),gn(r),null;case 26:return s=r.memoizedState,t===null?(io(r),s!==null?(gn(r),lv(r,s)):(gn(r),r.flags&=-16777217)):s?s!==t.memoizedState?(io(r),gn(r),lv(r,s)):(gn(r),r.flags&=-16777217):(t.memoizedProps!==c&&io(r),gn(r),r.flags&=-16777217),null;case 27:Xe(r),s=xe.current;var m=r.type;if(t!==null&&r.stateNode!=null)t.memoizedProps!==c&&io(r);else{if(!c){if(r.stateNode===null)throw Error(o(166));return gn(r),null}t=ue.current,Fl(r)?Bg(r):(t=lb(m,c,s),r.stateNode=t,io(r))}return gn(r),null;case 5:if(Xe(r),s=r.type,t!==null&&r.stateNode!=null)t.memoizedProps!==c&&io(r);else{if(!c){if(r.stateNode===null)throw Error(o(166));return gn(r),null}if(t=ue.current,Fl(r))Bg(r);else{switch(m=td(xe.current),t){case 1:t=m.createElementNS("http://www.w3.org/2000/svg",s);break;case 2:t=m.createElementNS("http://www.w3.org/1998/Math/MathML",s);break;default:switch(s){case"svg":t=m.createElementNS("http://www.w3.org/2000/svg",s);break;case"math":t=m.createElementNS("http://www.w3.org/1998/Math/MathML",s);break;case"script":t=m.createElement("div"),t.innerHTML=" + diff --git a/havano_restaurant_pos/www/dashboard.html b/havano_restaurant_pos/www/dashboard.html index b77ca5b..2cd821c 100644 --- a/havano_restaurant_pos/www/dashboard.html +++ b/havano_restaurant_pos/www/dashboard.html @@ -5,7 +5,7 @@ dashboard - +