diff --git a/.agents/skills/mqtt-communication-specs/SKILL.md b/.agents/skills/mqtt-communication-specs/SKILL.md index ab00d1b..bede0e1 100644 --- a/.agents/skills/mqtt-communication-specs/SKILL.md +++ b/.agents/skills/mqtt-communication-specs/SKILL.md @@ -181,6 +181,7 @@ Mqtt3Client client = MqttClient.builder() "flow_id": "T202604140001", "invoice_no": "AB12345678", "invoice_date": "2026-04-22", + "machine_time": "2026-04-22 14:30:15", "amount": 25.0, "random_no": "1234", "love_code": "" @@ -234,6 +235,7 @@ Mqtt3Client client = MqttClient.builder() "invoice": { "invoice_no": "AB12345678", "invoice_date": "2025-08-08", + "machine_time": "2025-08-08 10:01:30", "amount": 100, "random_number": "1234", "love_code": "", diff --git a/app/Console/Commands/ListenMqttQueue.php b/app/Console/Commands/ListenMqttQueue.php index 31c590f..1839930 100644 --- a/app/Console/Commands/ListenMqttQueue.php +++ b/app/Console/Commands/ListenMqttQueue.php @@ -126,7 +126,17 @@ class ListenMqttQueue extends Command 'payload' => $payload ]); - $action = $payload['action'] ?? 'create'; + $rawAction = $payload['action'] ?? 'create'; + $action = strtolower(trim($rawAction)); + + // 超級偵錯:檢查 action 字串的每一個位元組 + $hex = bin2hex($rawAction); + Log::debug("MQTT Action Debug", [ + 'raw' => $rawAction, + 'hex' => $hex, + 'processed' => $action, + 'match_finalize' => ($action === 'finalize' ? 'YES' : 'NO') + ]); switch ($action) { case 'invoice': diff --git a/app/Http/Controllers/Admin/SalesController.php b/app/Http/Controllers/Admin/SalesController.php index 498fd98..817a939 100644 --- a/app/Http/Controllers/Admin/SalesController.php +++ b/app/Http/Controllers/Admin/SalesController.php @@ -4,28 +4,152 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use App\Models\Transaction\Order; +use App\Models\Transaction\Invoice; +use App\Models\Transaction\DispenseRecord; +use App\Models\Transaction\PaymentType; +use App\Models\Transaction\OrderItem; use App\Models\Transaction\PickupCode; use App\Models\Transaction\PassCode; use App\Models\Machine\Machine; use Carbon\Carbon; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use App\Models\System\SystemOperationLog; class SalesController extends Controller { - // 銷售&金流紀錄 - public function index() + // 銷售中心 (銷售&金流紀錄) + public function index(Request $request) { - return view('admin.placeholder', [ + $tab = $request->input('tab', 'orders'); + $isAjax = $request->ajax(); + + // 取得篩選參數 + $search = $request->input('search'); + $machineId = $request->input('machine_id'); + $paymentType = $request->input('payment_type'); + $status = $request->input('status'); + $startDate = $request->input('start_date'); + $endDate = $request->input('end_date'); + + $data = [ 'title' => '銷售&金流紀錄', 'description' => '銷售交易與金流明細查詢', - 'features' => [ - '銷售記錄查詢', - '金流對帳', - '發票管理', - '退款處理', - ] + 'tab' => $tab, + 'filters' => [ + 'search' => $search, + 'machine_id' => $machineId, + 'payment_type' => $paymentType, + 'status' => $status, + 'start_date' => $startDate, + 'end_date' => $endDate, + ], + 'machines' => Machine::select('id', 'name', 'serial_no')->get(), + 'paymentTypes' => [ + 1 => '信用卡', + 2 => '電子票證', + 3 => '掃碼支付', + 4 => '紙鈔機', + 9 => '零錢', + 30 => 'LINE Pay', + 31 => '街口支付', + 32 => '悠遊付', + 33 => 'Pi 拍錢包', + 34 => '全盈+PAY', + 60 => '點數/優惠券', + ], + ]; + + // 1. 建立基本查詢 (套用共用過濾器:機台、日期) + $ordersQuery = Order::with(['machine:id,name,serial_no', 'invoice:id,order_id,invoice_no', 'items']); + $invoicesQuery = Invoice::with(['machine:id,name,serial_no', 'order:id,order_no,flow_id,payment_type']); + $dispenseQuery = DispenseRecord::with(['order:id,order_no,flow_id', 'machine:id,name,serial_no', 'product:id,name']); + + // 共用過濾器:日期 + if ($startDate && $endDate) { + $start = Carbon::parse($startDate); + $end = Carbon::parse($endDate)->endOfMinute(); + $ordersQuery->whereBetween('created_at', [$start, $end]); + $invoicesQuery->whereBetween('invoice_date', [$start, $end]); + $dispenseQuery->whereBetween('machine_time', [$start, $end]); + } + + // 共用過濾器:機台 + if ($machineId) { + $ordersQuery->where('machine_id', $machineId); + $invoicesQuery->where('machine_id', $machineId); + $dispenseQuery->where('machine_id', $machineId); + } + + // 2. 應用獨立過濾器:搜尋 (僅對當前 Tab 應用) + if ($search) { + if ($tab === 'orders') { + $ordersQuery->where(function($q) use ($search) { + $q->where('order_no', 'like', "%{$search}%") + ->orWhere('flow_id', 'like', "%{$search}%") + ->orWhere('invoice_info', 'like', "%{$search}%") + ->orWhere('member_barcode', 'like', "%{$search}%"); + }); + } elseif ($tab === 'invoices') { + $invoicesQuery->where(function($q) use ($search) { + $q->where('invoice_no', 'like', "%{$search}%") + ->orWhere('flow_id', 'like', "%{$search}%"); + }); + } elseif ($tab === 'dispense') { + $dispenseQuery->where(function($q) use ($search) { + $q->where('slot_no', 'like', "%{$search}%") + ->orWhereHas('product', function($pq) use ($search) { + $pq->where('name', 'like', "%{$search}%"); + }) + ->orWhereHas('order', function($oq) use ($search) { + $oq->where('order_no', 'like', "%{$search}%"); + }); + }); + } + } + + // 訂單專用過濾器 + if ($tab === 'orders') { + if ($paymentType) $ordersQuery->where('payment_type', $paymentType); + if ($status) $ordersQuery->where('status', $status); + } + + // 3. 執行分頁 (使用獨立的 pageName) + $perPage = $request->input('per_page', 10); + $data['orders'] = $ordersQuery->latest()->paginate($perPage, ['*'], 'orders_page')->withQueryString(); + $data['invoices'] = $invoicesQuery->latest()->paginate($perPage, ['*'], 'invoices_page')->withQueryString(); + $data['dispenseLogs'] = $dispenseQuery->latest()->paginate($perPage, ['*'], 'dispense_page')->withQueryString(); + + if ($isAjax) { + return response()->json([ + 'success' => true, + 'tab' => $tab, + 'html' => view('admin.sales.partials.tab-' . $tab, $data)->render() + ]); + } + + return view('admin.sales.index', $data); + } + + /** + * 取得單筆交易詳情 (用於 Slide-over) + */ + public function show(Order $order) + { + $order->load(['machine', 'invoice', 'items', 'dispenseRecords.product']); + + return response()->json([ + 'success' => true, + 'html' => view('admin.sales.partials.order-detail-panel', [ + 'order' => $order, + 'paymentTypes' => [ + 1 => '信用卡', 2 => '電子票證', 3 => '掃碼支付', 4 => '紙鈔機', 9 => '零錢', + 30 => 'LINE Pay', 31 => '街口支付', 32 => '悠遊付', 33 => 'Pi 拍錢包', 34 => '全盈+PAY', + 60 => '點數/優惠券', + ] + ])->render() ]); } @@ -59,7 +183,7 @@ class SalesController extends Controller $query->where('status', trim($request->status)); } - $per_page = $request->input('per_page', 15); + $per_page = $request->input('per_page', 10); $data['pickupCodes'] = $query->paginate($per_page, ['*'], 'list_page')->withQueryString(); // 供新增彈窗使用的機台清單 @@ -95,7 +219,7 @@ class SalesController extends Controller } $data['logs'] = $logQuery->latest() - ->paginate($request->input('per_page', 15), ['*'], 'log_page') + ->paginate($request->input('per_page', 10), ['*'], 'log_page') ->withQueryString(); // 定義可用動作 @@ -272,7 +396,7 @@ class SalesController extends Controller } } - $data['passCodes'] = $query->paginate($request->input('per_page', 15), ['*'], 'list_page')->withQueryString(); + $data['passCodes'] = $query->paginate($request->input('per_page', 10), ['*'], 'list_page')->withQueryString(); $data['machines'] = Machine::all(); } @@ -305,7 +429,7 @@ class SalesController extends Controller } $data['logs'] = $logQuery->latest() - ->paginate($request->input('per_page', 15), ['*'], 'log_page') + ->paginate($request->input('per_page', 10), ['*'], 'log_page') ->withQueryString(); // 定義可用動作 diff --git a/app/Jobs/Machine/ProcessTransaction.php b/app/Jobs/Machine/ProcessTransaction.php index b1dedd9..1a2e2f6 100644 --- a/app/Jobs/Machine/ProcessTransaction.php +++ b/app/Jobs/Machine/ProcessTransaction.php @@ -29,7 +29,7 @@ class ProcessTransaction implements ShouldQueue /** * Execute the job. */ - public function handle(\App\Services\Transaction\TransactionService $transactionService): void + public function handle(\App\Services\Transaction\TransactionService $transactionService, \App\Services\Machine\MqttService $mqttService): void { $machine = Machine::withoutGlobalScopes()->where('serial_no', $this->serialNo)->first(); @@ -38,6 +38,8 @@ class ProcessTransaction implements ShouldQueue return; } + $flowId = $this->payload['flow_id'] ?? 'N/A'; + try { // 將 serial_no 放入 payload 供 Service 使用 $data = $this->payload; @@ -50,11 +52,30 @@ class ProcessTransaction implements ShouldQueue $machine->company_id, "Transaction processed: :id", 'info', - array_merge($this->payload, ['id' => ($this->payload['flow_id'] ?? 'N/A')]), + array_merge($this->payload, ['id' => $flowId]), 'transaction' ); + + // 發送成功回饋 (ACK) + $mqttService->pushCommand($this->serialNo, 'transaction_ack', [ + 'flow_id' => $flowId, + 'status' => 'success', + 'message' => 'Processed successfully' + ], (string) $flowId); + } catch (\Exception $e) { - Log::error("Failed to process MQTT transaction for machine {$this->serialNo}: " . $e->getMessage()); + Log::error("Failed to process MQTT transaction for machine {$this->serialNo}: " . $e->getMessage(), [ + 'payload' => $this->payload, + 'exception' => $e + ]); + + // 發送失敗回饋 (ACK) + $mqttService->pushCommand($this->serialNo, 'transaction_ack', [ + 'flow_id' => $flowId, + 'status' => 'error', + 'message' => $e->getMessage() + ], (string) $flowId); + throw $e; } } diff --git a/app/Jobs/Transaction/ProcessDispenseRecord.php b/app/Jobs/Transaction/ProcessDispenseRecord.php index 08b4785..d870596 100644 --- a/app/Jobs/Transaction/ProcessDispenseRecord.php +++ b/app/Jobs/Transaction/ProcessDispenseRecord.php @@ -27,12 +27,34 @@ class ProcessDispenseRecord implements ShouldQueue /** * Execute the job. */ - public function handle(TransactionService $transactionService): void + public function handle(\App\Services\Transaction\TransactionService $transactionService, \App\Services\Machine\MqttService $mqttService): void { + $serialNo = $this->data['serial_no'] ?? 'unknown'; + $orderNo = $this->data['order_no'] ?? 'N/A'; + try { $transactionService->recordDispense($this->data); + + // 發送成功回饋 (ACK) + $mqttService->pushCommand($serialNo, 'dispense_ack', [ + 'order_no' => $orderNo, + 'status' => 'success', + 'message' => 'Processed successfully' + ], $orderNo); + } catch (\Exception $e) { - Log::error("Failed to record dispense for machine {$this->data['serial_no']}: " . $e->getMessage()); + Log::error("Failed to record dispense for machine {$serialNo}: " . $e->getMessage(), [ + 'data' => $this->data, + 'exception' => $e + ]); + + // 發送失敗回饋 (ACK) + $mqttService->pushCommand($serialNo, 'dispense_ack', [ + 'order_no' => $orderNo, + 'status' => 'error', + 'message' => $e->getMessage() + ], $orderNo); + throw $e; } } diff --git a/app/Jobs/Transaction/ProcessInvoice.php b/app/Jobs/Transaction/ProcessInvoice.php index 67b211e..989dfe2 100644 --- a/app/Jobs/Transaction/ProcessInvoice.php +++ b/app/Jobs/Transaction/ProcessInvoice.php @@ -27,15 +27,34 @@ class ProcessInvoice implements ShouldQueue /** * Execute the job. */ - public function handle(TransactionService $transactionService): void + public function handle(\App\Services\Transaction\TransactionService $transactionService, \App\Services\Machine\MqttService $mqttService): void { + $serialNo = $this->data['serial_no'] ?? 'unknown'; + $invoiceNo = $this->data['invoice_no'] ?? 'N/A'; + try { $transactionService->recordInvoice($this->data); + + // 發送成功回饋 (ACK) + $mqttService->pushCommand($serialNo, 'invoice_ack', [ + 'invoice_no' => $invoiceNo, + 'status' => 'success', + 'message' => 'Processed successfully' + ], $invoiceNo); + } catch (\Exception $e) { Log::error('Failed to process invoice: ' . $e->getMessage(), [ 'data' => $this->data, 'exception' => $e ]); + + // 發送失敗回饋 (ACK) + $mqttService->pushCommand($serialNo, 'invoice_ack', [ + 'invoice_no' => $invoiceNo, + 'status' => 'error', + 'message' => $e->getMessage() + ], $invoiceNo); + throw $e; } } diff --git a/app/Jobs/Transaction/ProcessTransactionFinalized.php b/app/Jobs/Transaction/ProcessTransactionFinalized.php index e1c646f..a9976ef 100644 --- a/app/Jobs/Transaction/ProcessTransactionFinalized.php +++ b/app/Jobs/Transaction/ProcessTransactionFinalized.php @@ -31,7 +31,7 @@ class ProcessTransactionFinalized implements ShouldQueue /** * Execute the job. */ - public function handle(TransactionService $transactionService): void + public function handle(\App\Services\Transaction\TransactionService $transactionService, \App\Services\Machine\MqttService $mqttService): void { $machine = Machine::withoutGlobalScopes()->where('serial_no', $this->serialNo)->first(); @@ -40,6 +40,8 @@ class ProcessTransactionFinalized implements ShouldQueue return; } + $flowId = $this->payload['order']['flow_id'] ?? ($this->payload['flow_id'] ?? 'N/A'); + try { $data = $this->payload; $data['serial_no'] = $this->serialNo; @@ -63,11 +65,27 @@ class ProcessTransactionFinalized implements ShouldQueue 'order_no' => $order->order_no ]); + // 發送成功回饋 (ACK) + $mqttService->pushCommand($this->serialNo, 'transaction_ack', [ + 'flow_id' => $flowId, + 'order_no' => $order->order_no, + 'status' => 'success', + 'message' => 'Processed successfully' + ], (string) $flowId); + } catch (\Exception $e) { Log::error("Failed to process MQTT transaction finalized for machine {$this->serialNo}: " . $e->getMessage(), [ 'payload' => $this->payload, 'exception' => $e ]); + + // 發送失敗回饋 (ACK) + $mqttService->pushCommand($this->serialNo, 'transaction_ack', [ + 'flow_id' => $flowId, + 'status' => 'error', + 'message' => $e->getMessage() + ], (string) $flowId); + throw $e; } } diff --git a/app/Models/Transaction/Invoice.php b/app/Models/Transaction/Invoice.php index f95a1b7..2426f9f 100644 --- a/app/Models/Transaction/Invoice.php +++ b/app/Models/Transaction/Invoice.php @@ -19,6 +19,7 @@ class Invoice extends Model 'amount', 'carrier_id', 'invoice_date', + 'machine_time', 'random_number', 'love_code', 'rtn_code', @@ -29,6 +30,7 @@ class Invoice extends Model protected $casts = [ 'total_amount' => 'decimal:2', 'tax_amount' => 'decimal:2', + 'machine_time' => 'datetime', 'metadata' => 'array', ]; @@ -36,4 +38,9 @@ class Invoice extends Model { return $this->belongsTo(Order::class); } + + public function machine() + { + return $this->belongsTo(\App\Models\Machine\Machine::class); + } } diff --git a/app/Services/Transaction/TransactionService.php b/app/Services/Transaction/TransactionService.php index 97ce7a2..a79818e 100644 --- a/app/Services/Transaction/TransactionService.php +++ b/app/Services/Transaction/TransactionService.php @@ -8,6 +8,7 @@ use App\Models\Transaction\Invoice; use App\Models\Transaction\DispenseRecord; use Illuminate\Support\Facades\DB; use App\Models\Machine\Machine; +use Illuminate\Support\Facades\Log; class TransactionService { @@ -16,6 +17,17 @@ class TransactionService */ public function processTransaction(array $data): Order { + $flowId = $data['flow_id'] ?? null; + + if ($flowId) { + $existingOrder = Order::withoutGlobalScopes() + ->where('flow_id', $flowId) + ->first(); + if ($existingOrder) { + return $existingOrder; + } + } + return DB::transaction(function () use ($data) { $machine = Machine::where('serial_no', $data['serial_no'])->firstOrFail(); @@ -105,6 +117,7 @@ class TransactionService 'amount' => $data['amount'] ?? 0, 'carrier_id' => $data['carrier_id'] ?? null, 'invoice_date' => $data['invoice_date'] ?? null, + 'machine_time' => $data['machine_time'] ?? null, 'random_number' => $data['random_number'] ?? ($data['random_no'] ?? null), 'love_code' => $data['love_code'] ?? null, 'rtn_code' => $data['rtn_code'] ?? null, @@ -137,7 +150,7 @@ class TransactionService 'amount' => $data['amount'] ?? 0, 'remaining_stock' => $data['remaining_stock'] ?? null, 'dispense_status' => $data['dispense_status'] ?? 0, - 'member_barcode' => $data['member_barcode'] ?? null, + 'member_barcode' => $data['member_barcode'] ?? ($order?->member_barcode ?? null), 'machine_time' => $data['machine_time'] ?? now(), 'points_used' => $data['points_used'] ?? 0, ]); @@ -149,6 +162,19 @@ class TransactionService */ public function finalizeTransaction(array $data): Order { + $flowId = $data['order']['flow_id'] ?? null; + + // 冪等性檢查:如果 flow_id 已經存在,直接回傳既有訂單 + if ($flowId) { + $existingOrder = Order::withoutGlobalScopes() + ->where('flow_id', $flowId) + ->first(); + if ($existingOrder) { + Log::info("Transaction already finalized, returning existing order", ['flow_id' => $flowId]); + return $existingOrder; + } + } + return DB::transaction(function () use ($data) { $serialNo = $data['serial_no']; @@ -173,6 +199,12 @@ class TransactionService $dispenseItem['serial_no'] = $serialNo; $dispenseItem['flow_id'] = $order->flow_id; $dispenseItem['order_id'] = $order->id; + + // 自動繼承:如果出貨紀錄沒帶 Barcode,就用訂單的 + if (empty($dispenseItem['member_barcode']) && !empty($order->member_barcode)) { + $dispenseItem['member_barcode'] = $order->member_barcode; + } + $this->recordDispense($dispenseItem); } } diff --git a/config/api-docs.php b/config/api-docs.php index ba45058..fbf737f 100644 --- a/config/api-docs.php +++ b/config/api-docs.php @@ -525,6 +525,7 @@ return [ 'invoice' => ['type' => 'object', 'description' => '(選填) 發票開立資訊 (若無發票可省略)', 'required' => false], 'invoice.invoice_no' => ['type' => 'string', 'description' => '(必填,若有invoice) 發票號碼', 'required' => false], 'invoice.invoice_date' => ['type' => 'string', 'description' => '(必填,若有invoice) 發票日期 (Y-m-d)', 'required' => false], + 'invoice.machine_time' => ['type' => 'datetime', 'description' => '(必填,若有invoice) 機台開立發票時間 (Y-m-d H:i:s)', 'required' => false], 'invoice.amount' => ['type' => 'numeric', 'description' => '(必填,若有invoice) 發票金額', 'required' => false], 'invoice.random_number' => ['type' => 'string', 'description' => '(必填,若有invoice) 發票隨機碼 (4位)', 'required' => false], 'invoice.love_code' => ['type' => 'string', 'description' => '(選填) 捐贈碼', 'required' => false], diff --git a/database/migrations/2026_05_04_164443_add_machine_time_to_invoices_table.php b/database/migrations/2026_05_04_164443_add_machine_time_to_invoices_table.php new file mode 100644 index 0000000..845373c --- /dev/null +++ b/database/migrations/2026_05_04_164443_add_machine_time_to_invoices_table.php @@ -0,0 +1,28 @@ +datetime('machine_time')->nullable()->after('invoice_date')->comment('機台開立發票時間'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('invoices', function (Blueprint $table) { + $table->dropColumn('machine_time'); + }); + } +}; diff --git a/lang/en.json b/lang/en.json index 3d8ef6c..ffb2a81 100644 --- a/lang/en.json +++ b/lang/en.json @@ -74,6 +74,7 @@ "Affiliated Company": "Affiliated Company", "Affiliated Unit": "Company Name", "Affiliation": "Company Name", + "After Qty": "After Qty", "Alert Summary": "Alert Summary", "Alerts": "Alerts", "Alerts Pending": "Alerts Pending", @@ -94,6 +95,7 @@ "All Warehouses": "All Warehouses", "All slots are fully stocked": "All slots are fully stocked", "Amount": "Amount", + "Amount / Payment": "Amount / Payment", "An error occurred while saving.": "An error occurred while saving.", "Analysis Management": "Analysis Management", "Analysis Permissions": "Analysis Permissions", @@ -146,6 +148,7 @@ "Assigned Machines": "Assigned Machines", "Assigned To": "Assigned To", "Assignment removed successfully.": "Assignment removed successfully.", + "Associated Order": "Associated Order", "Audit Management": "Audit Management", "Audit Permissions": "Audit Permissions", "Authorization updated successfully": "Authorization updated successfully", @@ -173,6 +176,7 @@ "Batch": "Batch", "Batch No": "Batch No", "Batch Number": "Batch Number", + "Before Qty": "Before Qty", "Belongs To": "Company Name", "Belongs To Company": "Company Name", "Branch": "Branch", @@ -372,6 +376,7 @@ "Delivery door closed": "Delivery door closed", "Delivery door open error": "Delivery door open error", "Delivery door opened": "Delivery door opened", + "Delta": "Delta", "Deposit Bonus": "Deposit Bonus", "Describe the repair or maintenance status...": "Describe the repair or maintenance status...", "Description / Name": "Description / Name", @@ -390,8 +395,14 @@ "Disabled": "Disabled", "Disabling this customer will also disable all accounts under this customer. Are you sure you want to continue?": "Disabling this customer will also disable all accounts under this customer. Are you sure you want to continue?", "Discord Notifications": "Discord Notifications", + "Discount": "Discount", "Dispense Failed": "Dispense Failed", + "Dispense Pending": "Dispense Pending", + "Dispense Product": "Dispense Product", + "Dispense Quantity": "Dispense Quantity", + "Dispense Status": "Dispense Status", "Dispense Success": "Dispense Success", + "Dispense Time": "Dispense Time", "Dispense error (0407)": "Dispense error (0407)", "Dispense error (0408)": "Dispense error (0408)", "Dispense error (0409)": "Dispense error (0409)", @@ -429,6 +440,7 @@ "Edit Machine Name": "Edit Machine Name", "Edit Machine Settings": "Edit Machine Settings", "Edit Name": "Edit Name", + "Edit Pass Code": "Edit Pass Code", "Edit Payment Config": "Edit Payment Config", "Edit Product": "Edit Product", "Edit Role": "Edit Role", @@ -517,6 +529,8 @@ "Firmware updated to :version": "Firmware updated to :version", "Fleet Avg OEE": "Fleet Avg OEE", "Fleet Performance": "Fleet Performance", + "Flow ID": "Flow ID", + "Flow ID / Time": "Flow ID / Time", "Force End Session": "Force End Session", "Force end current session": "Force end current session", "From": "From", @@ -536,6 +550,7 @@ "Gift Definitions": "Gift Definitions", "Global roles accessible by all administrators.": "Global roles accessible by all administrators.", "Go Back": "Go Back", + "Go to E-Invoice": "Go to E-Invoice", "Goods & System Settings": "Goods & System Settings", "Got it": "Got it", "Grant UI Access": "Grant UI Access", @@ -580,7 +595,12 @@ "Inventory Overview": "Inventory Overview", "Inventory Stable": "Inventory Stable", "Inventory synced with machine": "Inventory synced with machine", + "Invoice Date": "Invoice Date", + "Invoice Information": "Invoice Information", + "Invoice Number": "Invoice Number", + "Invoice Number / Flow ID": "Invoice Number / Flow ID", "Invoice Status": "Invoice Status", + "Issued At": "Issued At", "Item List": "Item List", "Items": "Items", "JKO_MERCHANT_ID": "JKO_MERCHANT_ID", @@ -621,8 +641,8 @@ "Live Fleet Updates": "Live Fleet Updates", "Loading Cabinet...": "Loading Cabinet...", "Loading Data": "Loading Data", - "Loading machines...": "Loading machines...", "Loading failed": "Loading failed", + "Loading machines...": "Loading machines...", "Loading...": "Loading...", "Location": "Location", "Location found!": "Location found!", @@ -645,6 +665,7 @@ "Low stock and out-of-stock alerts": "Low stock and out-of-stock alerts", "Loyalty & Features": "Loyalty & Features", "Machine": "Machine", + "Machine / Date": "Machine / Date", "Machine / Slot": "Machine / Slot", "Machine Advertisement Settings": "Machine Advertisement Settings", "Machine Count": "Machine Count", @@ -671,11 +692,13 @@ "Machine Reports": "Machine Reports", "Machine Restart": "Machine Restart", "Machine Return": "Machine Return", + "Machine Serial": "Machine Serial", "Machine Serial No": "Machine Serial No", "Machine Settings": "Machine Settings", "Machine Status": "Machine Status", "Machine Status List": "Machine Status List", "Machine Stock": "Machine Stock", + "Machine Stock Movements": "Machine Stock Movements", "Machine System Settings": "Machine System Settings", "Machine Utilization": "Machine Utilization", "Machine created successfully.": "Machine created successfully.", @@ -771,17 +794,6 @@ "Motor not stopped": "Motor not stopped", "Movement History": "Movement History", "Movement Logs": "Movement Logs", - "Machine Stock Movements": "Machine Stock Movements", - "Stock Movement Log": "Stock Movement Log", - "movement.type.replenishment": "Replenishment", - "movement.type.pickup": "Pickup Code Consumed", - "movement.type.remote_dispense": "Remote Dispense", - "movement.type.adjustment": "Stock Adjustment", - "movement.type.rollback": "Dispense Rollback", - "Before Qty": "Before Qty", - "After Qty": "After Qty", - "Delta": "Delta", - "No movements found": "No movements found", "Multilingual Names": "Multilingual Names", "N/A": "N/A", "Name": "Name", @@ -814,6 +826,7 @@ "No advertisements found.": "No advertisements found.", "No alert summary": "No alert summary", "No assignments": "No assignments", + "No associated order found": "No associated order found", "No categories found.": "No categories found.", "No command history": "No command history", "No configurations found": "No configurations found", @@ -836,12 +849,15 @@ "No matching machines": "No matching machines", "No materials available": "No materials available", "No movement records found": "No movement records found", + "No movements found": "No movements found", "No pass codes found": "No pass codes found", "No permissions": "No permissions", "No pickup codes found": "No pickup codes found", + "No product record found": "No product record found", "No products found in this warehouse": "No products found in this warehouse", "No products found matching your criteria.": "No products found matching your criteria.", "No records found": "No records found", + "No related detail found": "No related detail found", "No replenishment orders found": "No replenishment orders found", "No results found": "No results found", "No roles available": "No roles available", @@ -852,6 +868,7 @@ "No slots need replenishment": "No slots need replenishment", "No stock data found": "No stock data found", "No stock-in orders found": "No stock-in orders found", + "No transaction orders found": "No transaction orders found", "No transfer orders found": "No transfer orders found", "No users found": "No users found", "No warehouses found": "No warehouses found", @@ -895,8 +912,12 @@ "Optional remarks...": "Optional remarks...", "Order Details": "Order Details", "Order Info": "Order Info", + "Order Items": "Order Items", "Order Management": "Order Management", "Order No.": "Order No.", + "Order Number / Time": "Order Number / Time", + "Order Status": "Order Status", + "Order Time": "Order Time", "Order already completed": "Order already completed", "Order already processed": "Order already processed", "Order completed and stock updated": "Order completed and stock updated", @@ -958,6 +979,7 @@ "Password": "Password", "Password updated successfully.": "密碼已成功變更。", "Payment & Invoice": "Payment & Invoice", + "Payment Amount": "Payment Amount", "Payment Buffer Seconds": "Payment Buffer Seconds", "Payment Config": "Payment Config", "Payment Configuration": "Payment Configuration", @@ -965,11 +987,13 @@ "Payment Configuration deleted successfully.": "Payment Configuration deleted successfully.", "Payment Configuration updated successfully.": "Payment Configuration updated successfully.", "Payment Selection": "Payment Selection", + "Payment Type": "Payment Type", "Pending": "Pending", "Per Page": "Per Page", "Performance": "Performance", "Permanent": "Permanent", "Permanent Code": "Permanent Code", + "Permanent if empty": "Permanent if empty", "Permanently Delete Account": "Permanently Delete Account", "Permission Settings": "Permission Settings", "Permission Tags": "Permission Tags", @@ -1019,6 +1043,7 @@ "Previous": "Previous", "Price / Member": "Price / Member", "Pricing Information": "Pricing Information", + "Print Invoice": "Print Invoice", "Product": "Product", "Product / Slot": "Product / Slot", "Product / Stock": "Product / Stock", @@ -1083,6 +1108,7 @@ "Recent Login": "Recent Login", "Recently reported errors or warnings in logs": "Recently reported errors or warnings in logs", "Records": "Records", + "Refunded": "Refunded", "Regenerate": "Regenerate", "Regenerating the token will disconnect the physical machine until it is updated. Continue?": "Regenerating the token will disconnect the physical machine until it is updated. Continue?", "Remote Change": "Remote Change", @@ -1172,9 +1198,10 @@ "Scan to pick up your product": "Scan to pick up your product", "Schedule": "Schedule", "Search Company Title...": "Search Company Title...", + "Search Flow ID / Slot...": "Search Flow ID / Slot...", + "Search Invoice No / Flow ID...": "Search Invoice No / Flow ID...", "Search Machine...": "Search Machine...", - "Search logs...": "Search logs...", - "Searchable Select": "Searchable Select", + "Search Order No / Flow ID / Invoice...": "Search Order No / Flow ID / Invoice...", "Search accounts...": "Search accounts...", "Search by code, machine name or serial...": "Search by code, machine name or serial...", "Search by code, name or machine...": "Search by code, name or machine...", @@ -1185,6 +1212,7 @@ "Search company...": "Search company...", "Search configurations...": "Search configurations...", "Search customers...": "Search customers...", + "Search logs...": "Search logs...", "Search machines by name or serial...": "Search machines by name or serial...", "Search machines...": "Search machines...", "Search models...": "Search models...", @@ -1197,6 +1225,7 @@ "Search users...": "Search users...", "Search warehouses...": "Search warehouses...", "Search...": "Search...", + "Searchable Select": "Searchable Select", "Searching...": "Searching...", "Seconds": "Seconds", "Security & State": "Security & State", @@ -1253,6 +1282,7 @@ "Sign in to your account": "Sign in to your account", "Signed in as": "Signed in as", "Slot": "Slot", + "Slot / Product": "Slot / Product", "Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)", "Slot No": "Slot No", "Slot Status": "Slot Status", @@ -1293,6 +1323,7 @@ "Start Time": "Start Time", "Statistics": "Statistics", "Status": "Status", + "Status / Invoice": "Status / Invoice", "Status / Temp / Sub / Card / Scan": "Status / Temp / Sub / Card / Scan", "Status Timeline": "Status Timeline", "Status updated successfully": "Status updated successfully", @@ -1306,6 +1337,7 @@ "Stock Level > 50%": "Stock Level > 50%", "Stock Levels": "Stock Levels", "Stock Management": "Stock Management", + "Stock Movement Log": "Stock Movement Log", "Stock Out": "Stock Out", "Stock Quantity": "Stock Quantity", "Stock Rate": "Stock Rate", @@ -1316,6 +1348,7 @@ "Stock returned to warehouse": "Stock returned to warehouse", "Stock-In Management": "Stock-In Management", "Stock-In Order": "Stock-In Order", + "Stock-In Order Details": "Stock-In Order Details", "Stock-In Orders": "Stock-In Orders", "Stock-In Orders Tab": "Stock-In Orders", "Stock-in order": "Stock-in order", @@ -1335,6 +1368,7 @@ "Sub-actions": "子項目", "Sub-machine Status Request": "Sub-machine Status", "Submit Record": "Submit Record", + "Subtotal": "Subtotal", "Success": "Success", "Super Admin": "Super Admin", "Super-admin role cannot be assigned to tenant accounts.": "Super-admin role cannot be assigned to tenant accounts.", @@ -1419,6 +1453,8 @@ "Track stock levels, stock-in orders, and movement history": "Track stock levels, stock-in orders, and movement history", "Track stock-in orders and movement history": "Track stock-in orders and movement history", "Traditional Chinese": "Traditional Chinese", + "Transaction Info": "Transaction Info", + "Transaction Time": "Transaction Time", "Transaction processed: :id": "Transaction processed: :id", "Transfer Audit": "Transfer Audit", "Transfer Details": "Transfer Details", @@ -1460,15 +1496,10 @@ "Unlock Now": "Unlock Now", "Unlock Page": "Unlock Page", "Unpublish": "Unpublish", - "cancel": "Cancel", - "create": "Create", - "update": "Update", "Update": "Update", - "Edit Pass Code": "Edit Pass Code", - "Permanent if empty": "Permanent if empty", - "Update Pass Code": "Update Pass Code", "Update Authorization": "Update Authorization", "Update Customer": "Update Customer", + "Update Pass Code": "Update Pass Code", "Update Password": "Update Password", "Update Product": "Update Product", "Update Settings": "Update Settings", @@ -1505,12 +1536,14 @@ "View Inventory": "View Inventory", "View Logs": "View Logs", "View More": "View More", + "View Order": "View Order", "View QR Code": "View QR Code", "View Slots": "View Slots", "View all warehouses": "View all warehouses", "View slot-level inventory for each machine": "View slot-level inventory for each machine", "Visit Gift": "Visit Gift", "Visual overview of all machine locations": "Visual overview of all machine locations", + "Void Invoice": "Void Invoice", "Waiting": "Waiting", "Waiting for Payment": "Waiting for Payment", "Warehouse": "Warehouse", @@ -1563,13 +1596,18 @@ "accounts": "Account Management", "admin": "管理員", "analysis": "Analysis Management", + "and :count other items": "and :count other items", "app": "APP Management", "audit": "Audit Management", "basic-settings": "Basic Settings", "basic.machines": "機台設定", "basic.payment-configs": "客戶金流設定", "by": "by", + "cancel": "Cancel", "companies": "Customer Management", + "consume": "Pickup Success", + "consume_failed": "Pickup Failed", + "create": "Create", "data-config": "Data Configuration", "data-config.sub-account-roles": "子帳號角色", "data-config.sub-accounts": "子帳號管理", @@ -1645,6 +1683,11 @@ "menu.warehouses.transfers": "menu.warehouses.transfers", "min": "min", "mins ago": "mins ago", + "movement.type.adjustment": "Stock Adjustment", + "movement.type.pickup": "Pickup Code Consumed", + "movement.type.remote_dispense": "Remote Dispense", + "movement.type.replenishment": "Replenishment", + "movement.type.rollback": "Dispense Rollback", "of": "of", "of items": "of items", "pending": "pending", @@ -1664,15 +1707,14 @@ "success": "success", "super-admin": "super-admin", "to": "to", + "update": "Update", + "used": "Used", "user": "user", "vending": "vending", + "verify_success": "Verification Success", "video": "video", "visit_gift": "visit_gift", "vs Yesterday": "vs Yesterday", "warehouses": "warehouses", - "used": "Used", - "待填寫": "待填寫", - "verify_success": "Verification Success", - "consume": "Pickup Success", - "consume_failed": "Pickup Failed" -} + "待填寫": "待填寫" +} \ No newline at end of file diff --git a/lang/ja.json b/lang/ja.json index fa17280..663d53c 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -74,6 +74,7 @@ "Affiliated Company": "Affiliated Company", "Affiliated Unit": "Affiliated Unit", "Affiliation": "Affiliation", + "After Qty": "変動後数量", "Alert Summary": "Alert Summary", "Alerts": "Alerts", "Alerts Pending": "Alerts Pending", @@ -94,6 +95,7 @@ "All Warehouses": "すべての倉庫", "All slots are fully stocked": "全スロットが満在庫です", "Amount": "Amount", + "Amount / Payment": "金額 / 支払い", "An error occurred while saving.": "An error occurred while saving.", "Analysis Management": "Analysis Management", "Analysis Permissions": "Analysis Permissions", @@ -146,6 +148,7 @@ "Assigned Machines": "Assigned Machines", "Assigned To": "担当者", "Assignment removed successfully.": "Assignment removed successfully.", + "Associated Order": "関連注文", "Audit Management": "Audit Management", "Audit Permissions": "Audit Permissions", "Authorization updated successfully": "Authorization updated successfully", @@ -173,6 +176,7 @@ "Batch": "Batch", "Batch No": "Batch No", "Batch Number": "Batch Number", + "Before Qty": "変動前数量", "Belongs To": "Belongs To", "Belongs To Company": "Belongs To Company", "Branch": "分倉庫", @@ -259,9 +263,9 @@ "Confirm Account Status Change": "Confirm Account Status Change", "Confirm Assignment": "Confirm Assignment", "Confirm Cancel": "キャンセル確認", + "Confirm Complete": "完了を確認", "Confirm Deactivation": "無効化の確認", "Confirm Delete": "削除の確認", - "Confirm Complete": "完了を確認", "Confirm Deletion": "削除の確認", "Confirm Password": "Confirm Password", "Confirm Prepare": "準備確認", @@ -356,8 +360,6 @@ "Default Not Donate": "Default Not Donate", "Define and manage security roles and permissions.": "Define and manage security roles and permissions.", "Define new third-party payment parameters": "Define new third-party payment parameters", - "Yes, Deactivate": "はい、無効にします", - "Yes, Delete": "はい、削除します", "Delete Account": "Delete Account", "Delete Advertisement": "Delete Advertisement", "Delete Advertisement Confirmation": "Delete Advertisement Confirmation", @@ -373,6 +375,7 @@ "Delivery door closed": "Delivery door closed", "Delivery door open error": "Delivery door open error", "Delivery door opened": "Delivery door opened", + "Delta": "変動量", "Deposit Bonus": "Deposit Bonus", "Describe the repair or maintenance status...": "Describe the repair or maintenance status...", "Description / Name": "説明 / 名称", @@ -391,8 +394,14 @@ "Disabled": "無効", "Disabling this customer will also disable all accounts under this customer. Are you sure you want to continue?": "この顧客を無効化すると、この顧客のすべてのアカウントも無効になります。続けますか?", "Discord Notifications": "Discord Notifications", - "Dispense Failed": "Dispense Failed", - "Dispense Success": "Dispense Success", + "Discount": "割引", + "Dispense Failed": "配送失敗", + "Dispense Pending": "配送保留", + "Dispense Product": "配送商品", + "Dispense Quantity": "配送数量", + "Dispense Status": "配送ステータス", + "Dispense Success": "配送成功", + "Dispense Time": "配送時間", "Dispense error (0407)": "Dispense error (0407)", "Dispense error (0408)": "Dispense error (0408)", "Dispense error (0409)": "Dispense error (0409)", @@ -430,6 +439,7 @@ "Edit Machine Name": "Edit Machine Name", "Edit Machine Settings": "Edit Machine Settings", "Edit Name": "Edit Name", + "Edit Pass Code": "通行コード編集", "Edit Payment Config": "Edit Payment Config", "Edit Product": "Edit Product", "Edit Role": "Edit Role", @@ -499,7 +509,7 @@ "Expiry Management": "Expiry Management", "Expiry Time": "有効期限時間", "Expiry date tracking and warnings": "Expiry date tracking and warnings", - "Failed": "Failed", + "Failed": "失敗", "Failed to fetch machine data.": "Failed to fetch machine data.", "Failed to load permissions": "Failed to load permissions", "Failed to load preview": "プレビューの読み込みに失敗しました", @@ -518,6 +528,8 @@ "Firmware updated to :version": "Firmware updated to :version", "Fleet Avg OEE": "Fleet Avg OEE", "Fleet Performance": "Fleet Performance", + "Flow ID": "フローID", + "Flow ID / Time": "流水番号 / 時間", "Force End Session": "Force End Session", "Force end current session": "Force end current session", "From": "発送元", @@ -537,6 +549,7 @@ "Gift Definitions": "Gift Definitions", "Global roles accessible by all administrators.": "Global roles accessible by all administrators.", "Go Back": "戻る", + "Go to E-Invoice": "電子請求書へ", "Goods & System Settings": "商品とシステム設定", "Got it": "Got it", "Grant UI Access": "Grant UI Access", @@ -581,7 +594,12 @@ "Inventory Overview": "在庫概要", "Inventory Stable": "Inventory Stable", "Inventory synced with machine": "Inventory synced with machine", + "Invoice Date": "請求書日付", + "Invoice Information": "請求情報", + "Invoice Number": "請求書番号", + "Invoice Number / Flow ID": "請求書番号 / 流水番号", "Invoice Status": "Invoice Status", + "Issued At": "発行時間", "Item List": "品目リスト", "Items": "Items", "JKO_MERCHANT_ID": "JKO_MERCHANT_ID", @@ -622,8 +640,8 @@ "Live Fleet Updates": "Live Fleet Updates", "Loading Cabinet...": "Loading Cabinet...", "Loading Data": "Loading Data", - "Loading machines...": "マシンの読み込み中...", "Loading failed": "読み込みに失敗しました", + "Loading machines...": "マシンの読み込み中...", "Loading...": "読み込み中...", "Location": "Location", "Location found!": "Location found!", @@ -646,7 +664,8 @@ "Low stock and out-of-stock alerts": "Low stock and out-of-stock alerts", "Loyalty & Features": "Loyalty & Features", "Machine": "マシン", - "Machine / Slot": "機台 / 貨道", + "Machine / Date": "機台 / 日付", + "Machine / Slot": "機台 / スロット", "Machine Advertisement Settings": "Machine Advertisement Settings", "Machine Count": "Machine Count", "Machine Details": "Machine Details", @@ -664,7 +683,7 @@ "Machine Management Permissions": "Machine Management Permissions", "Machine Model": "Machine Model", "Machine Model Settings": "Machine Model Settings", - "Machine Name": "Machine Name", + "Machine Name": "機台名", "Machine Permissions": "Machine Permissions", "Machine Reboot": "Machine Reboot", "Machine Registry": "Machine Registry", @@ -672,11 +691,13 @@ "Machine Reports": "Machine Reports", "Machine Restart": "Machine Restart", "Machine Return": "機台返品", + "Machine Serial": "機台シリアル", "Machine Serial No": "Machine Serial No", "Machine Settings": "Machine Settings", "Machine Status": "Machine Status", "Machine Status List": "Machine Status List", "Machine Stock": "マシン在庫", + "Machine Stock Movements": "機台在庫異動履歴", "Machine System Settings": "機台システム設定", "Machine Utilization": "Machine Utilization", "Machine created successfully.": "Machine created successfully.", @@ -769,17 +790,6 @@ "Motor not stopped": "Motor not stopped", "Movement History": "移動履歴", "Movement Logs": "移動ログ", - "Machine Stock Movements": "機台在庫異動履歴", - "Stock Movement Log": "在庫異動ログ", - "movement.type.replenishment": "補充入庫", - "movement.type.pickup": "受取コード消費", - "movement.type.remote_dispense": "リモート出庫", - "movement.type.adjustment": "棚卸調整", - "movement.type.rollback": "出庫失敗ロールバック", - "Before Qty": "変動前数量", - "After Qty": "変動後数量", - "Delta": "変動量", - "No movements found": "異動記録なし", "Multilingual Names": "Multilingual Names", "N/A": "N/A", "Name": "Name", @@ -812,6 +822,7 @@ "No advertisements found.": "No advertisements found.", "No alert summary": "No alert summary", "No assignments": "No assignments", + "No associated order found": "関連注文が見つかりません", "No categories found.": "No categories found.", "No command history": "No command history", "No configurations found": "No configurations found", @@ -834,12 +845,15 @@ "No matching machines": "No matching machines", "No materials available": "No materials available", "No movement records found": "移動履歴が見つかりません", + "No movements found": "異動記録なし", "No pass codes found": "通行コードが見つかりません", "No permissions": "No permissions", "No pickup codes found": "受取コードが見つかりません", + "No product record found": "商品記録が見つかりません", "No products found in this warehouse": "この倉庫に在庫はありません", "No products found matching your criteria.": "No products found matching your criteria.", "No records found": "No records found", + "No related detail found": "関連詳細が見つかりません", "No replenishment orders found": "補充伝票が見つかりません", "No results found": "No results found", "No roles available": "No roles available", @@ -850,6 +864,7 @@ "No slots need replenishment": "補充が必要なスロットはありません", "No stock data found": "在庫データが見つかりません", "No stock-in orders found": "入庫伝票が見つかりません", + "No transaction orders found": "取引注文が見つかりません", "No transfer orders found": "転送伝票が見つかりません", "No users found": "No users found", "No warehouses found": "倉庫が見つかりません", @@ -891,10 +906,14 @@ "Optional": "任意", "Optional remarks": "任意備考", "Optional remarks...": "任意の備考...", - "Order Details": "入庫伝票詳細", + "Order Details": "注文詳細", "Order Info": "注文情報", + "Order Items": "注文商品", "Order Management": "Order Management", "Order No.": "伝票番号", + "Order Number / Time": "注文番号 / 時間", + "Order Status": "注文ステータス", + "Order Time": "注文時間", "Order already completed": "注文はすでに完了しています", "Order already processed": "注文はすでに処理されています", "Order completed and stock updated": "注文が完了し、在庫が更新されました", @@ -955,7 +974,8 @@ "Pass code updated.": "通行コードが更新されました。", "Password": "Password", "Password updated successfully.": "Password updated successfully.", - "Payment & Invoice": "Payment & Invoice", + "Payment & Invoice": "決済と請求書", + "Payment Amount": "支払い金額", "Payment Buffer Seconds": "Payment Buffer Seconds", "Payment Config": "Payment Config", "Payment Configuration": "Payment Configuration", @@ -963,11 +983,13 @@ "Payment Configuration deleted successfully.": "Payment Configuration deleted successfully.", "Payment Configuration updated successfully.": "Payment Configuration updated successfully.", "Payment Selection": "Payment Selection", + "Payment Type": "決済方法", "Pending": "保留中", "Per Page": "Per Page", "Performance": "Performance", "Permanent": "無期限", "Permanent Code": "永久コード", + "Permanent if empty": "空欄の場合は永久", "Permanently Delete Account": "Permanently Delete Account", "Permission Settings": "Permission Settings", "Permission Tags": "Permission Tags", @@ -1016,12 +1038,13 @@ "Previous": "Previous", "Price / Member": "Price / Member", "Pricing Information": "Pricing Information", + "Print Invoice": "請求書印刷", "Product": "商品", "Product / Slot": "商品 / 貨道", "Product / Stock": "商品 / 在庫", - "Product Count": "Product Count", - "Product Details": "商品詳細", - "Product ID": "商品ID", + "Product Count": "商品数量", + "Product Details": "商品明細", + "Product ID": "商品番号", "Product Image": "Product Image", "Product Info": "Product Info", "Product List": "Product List", @@ -1062,8 +1085,6 @@ "Quick Expiry Check": "Quick Expiry Check", "Quick Maintenance": "Quick Maintenance", "Quick Replenish": "クイック補充", - "Search logs...": "ログを検索...", - "Searchable Select": "Searchable Select", "Quick replenishment from this view": "Quick replenishment from this view", "Quick search...": "Quick search...", "Real-time OEE analysis awaits": "Real-time OEE analysis awaits", @@ -1082,6 +1103,7 @@ "Recent Login": "Recent Login", "Recently reported errors or warnings in logs": "Recently reported errors or warnings in logs", "Records": "Records", + "Refunded": "返金済み", "Regenerate": "再生成", "Regenerating the token will disconnect the physical machine until it is updated. Continue?": "Regenerating the token will disconnect the physical machine until it is updated. Continue?", "Remote Change": "Remote Change", @@ -1171,7 +1193,10 @@ "Scan to pick up your product": "商品を受け取るためにスキャンしてください", "Schedule": "Schedule", "Search Company Title...": "Search Company Title...", + "Search Flow ID / Slot...": "流水番号 / スロットを検索...", + "Search Invoice No / Flow ID...": "請求書番号 / 流水番号を検索...", "Search Machine...": "Search Machine...", + "Search Order No / Flow ID / Invoice...": "注文番号 / フローID / 請求書番号で検索...", "Search Product": "商品を検索", "Search accounts...": "Search accounts...", "Search by code, machine name or serial...": "コード、機台名、またはシリアルで検索...", @@ -1183,6 +1208,7 @@ "Search company...": "Search company...", "Search configurations...": "Search configurations...", "Search customers...": "Search customers...", + "Search logs...": "ログを検索...", "Search machines by name or serial...": "Search machines by name or serial...", "Search machines...": "機台を検索...", "Search models...": "Search models...", @@ -1195,6 +1221,7 @@ "Search users...": "Search users...", "Search warehouses...": "倉庫を検索...", "Search...": "Search...", + "Searchable Select": "Searchable Select", "Searching...": "Searching...", "Seconds": "Seconds", "Security & State": "Security & State", @@ -1251,6 +1278,7 @@ "Sign in to your account": "Sign in to your account", "Signed in as": "Signed in as", "Slot": "貨道", + "Slot / Product": "スロット / 商品", "Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)", "Slot No": "Slot No", "Slot Status": "Slot Status", @@ -1291,6 +1319,7 @@ "Start Time": "開始時間", "Statistics": "Statistics", "Status": "ステータス", + "Status / Invoice": "状態 / 請求書", "Status / Temp / Sub / Card / Scan": "Status / Temp / Sub / Card / Scan", "Status Timeline": "ステータスタイムライン", "Status updated successfully": "ステータス更新成功", @@ -1304,6 +1333,7 @@ "Stock Level > 50%": "在庫 50% 以上", "Stock Levels": "在庫レベル", "Stock Management": "Stock Management", + "Stock Movement Log": "在庫異動ログ", "Stock Out": "出庫", "Stock Quantity": "Stock Quantity", "Stock Rate": "在庫率", @@ -1314,6 +1344,7 @@ "Stock returned to warehouse": "在庫が倉庫に返却されました", "Stock-In Management": "入庫管理", "Stock-In Order": "入庫注文", + "Stock-In Order Details": "入庫伝票詳細", "Stock-In Orders": "入庫伝票", "Stock-In Orders Tab": "入庫伝票", "Stock-in order": "入庫注文", @@ -1333,7 +1364,8 @@ "Sub-actions": "Sub-actions", "Sub-machine Status Request": "Sub-machine Status Request", "Submit Record": "Submit Record", - "Success": "Success", + "Subtotal": "小計", + "Success": "成功", "Super Admin": "Super Admin", "Super-admin role cannot be assigned to tenant accounts.": "Super-admin role cannot be assigned to tenant accounts.", "Superseded": "Superseded", @@ -1394,7 +1426,7 @@ "To:": "To:", "Today Cumulative Sales": "Today Cumulative Sales", "Today's Transactions": "Today's Transactions", - "Total": "Total", + "Total": "合計", "Total Connected": "Total Connected", "Total Customers": "Total Customers", "Total Daily Sales": "Total Daily Sales", @@ -1416,6 +1448,8 @@ "Track stock levels, stock-in orders, and movement history": "在庫レベル、入庫伝票、および移動履歴の追跡", "Track stock-in orders and movement history": "入庫伝票および移動履歴の追跡", "Traditional Chinese": "Traditional Chinese", + "Transaction Info": "取引情報", + "Transaction Time": "取引時間", "Transaction processed: :id": "Transaction processed: :id", "Transfer Audit": "転送監査", "Transfer Details": "転送伝票詳細", @@ -1458,11 +1492,9 @@ "Unlock Page": "Unlock Page", "Unpublish": "配信終了", "Update": "更新", - "Edit Pass Code": "通行コード編集", - "Permanent if empty": "空欄の場合は永久", - "Update Pass Code": "通行コード更新", "Update Authorization": "承認の更新", "Update Customer": "Update Customer", + "Update Pass Code": "通行コード更新", "Update Password": "Update Password", "Update Product": "Update Product", "Update Settings": "設定を更新", @@ -1499,12 +1531,14 @@ "View Inventory": "在庫を表示", "View Logs": "View Logs", "View More": "View More", + "View Order": "注文を表示", "View QR Code": "QRコードを表示", "View Slots": "貨道を表示", "View all warehouses": "View all warehouses", "View slot-level inventory for each machine": "View slot-level inventory for each machine", "Visit Gift": "Visit Gift", "Visual overview of all machine locations": "全機器位置のビジュアル概要", + "Void Invoice": "請求書無効化", "Waiting": "Waiting", "Waiting for Payment": "Waiting for Payment", "Warehouse": "倉庫", @@ -1544,6 +1578,8 @@ "Welcome Gift Status": "Welcome Gift Status", "Work Content": "作業内容", "Yes, Cancel": "はい、キャンセルします", + "Yes, Deactivate": "はい、無効にします", + "Yes, Delete": "はい、削除します", "Yes, Disable": "はい、無効にします", "Yesterday": "Yesterday", "You can assign or change the personnel handling this order": "この注文の担当者を割り当て、または変更できます", @@ -1554,6 +1590,7 @@ "accounts": "accounts", "admin": "admin", "analysis": "analysis", + "and :count other items": "他 :count 件の商品", "app": "app", "audit": "audit", "basic-settings": "basic-settings", @@ -1561,6 +1598,8 @@ "basic.payment-configs": "basic.payment-configs", "by": "by", "companies": "companies", + "consume": "受取成功", + "consume_failed": "受取失敗", "data-config": "data-config", "data-config.sub-account-roles": "data-config.sub-account-roles", "data-config.sub-accounts": "data-config.sub-accounts", @@ -1635,6 +1674,11 @@ "menu.warehouses.transfers": "在庫転送", "min": "min", "mins ago": "mins ago", + "movement.type.adjustment": "棚卸調整", + "movement.type.pickup": "受取コード消費", + "movement.type.remote_dispense": "リモート出庫", + "movement.type.replenishment": "補充入庫", + "movement.type.rollback": "出庫失敗ロールバック", "of": "of", "of items": "件のアイテム", "pending": "pending", @@ -1656,12 +1700,10 @@ "to": "to", "user": "user", "vending": "vending", + "verify_success": "検証成功", "video": "video", "visit_gift": "visit_gift", "vs Yesterday": "vs Yesterday", "warehouses": "warehouses", - "待填寫": "待填寫", - "verify_success": "検証成功", - "consume": "受取成功", - "consume_failed": "受取失敗" -} + "待填寫": "待填寫" +} \ No newline at end of file diff --git a/lang/zh_TW.json b/lang/zh_TW.json index 9c8d2ae..070673e 100644 --- a/lang/zh_TW.json +++ b/lang/zh_TW.json @@ -74,6 +74,7 @@ "Affiliated Company": "公司名稱", "Affiliated Unit": "公司名稱", "Affiliation": "所屬單位", + "After Qty": "異動後數量", "Alert Summary": "告警摘要", "Alerts": "警示", "Alerts Pending": "待處理告警", @@ -85,6 +86,7 @@ "All Levels": "所有層級", "All Machines": "所有機台", "All Permissions": "全部權限", + "All Slots": "所有貨道", "All Stable": "狀態穩定", "All Status": "所有狀態", "All Statuses": "所有狀態", @@ -92,8 +94,10 @@ "All Times System Timezone": "所有時間為系統時區", "All Types": "所有類型", "All Warehouses": "所有倉庫", + "All issues marked as resolved.": "所有異常已標記為已排除。", "All slots are fully stocked": "所有貨道已滿貨", "Amount": "金額", + "Amount / Payment": "金額 / 支付", "An error occurred while saving.": "儲存時發生錯誤。", "Analysis Management": "分析管理", "Analysis Permissions": "分析管理權限", @@ -133,6 +137,7 @@ "Are you sure you want to disable this pass code? It will no longer be valid for machine access.": "您確定要停用此通行碼嗎?停用後將無法再用於機台存取。", "Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。", "Are you sure you want to remove this assignment?": "您確定要移除此投放嗎?", + "Are you sure you want to resolve all recent issues for this machine?": "您確定要排除此機台目前所有的異常紀錄嗎?這將會恢復機台狀態為正常。", "Are you sure you want to send this command?": "確定要發送此指令嗎?", "Are you sure you want to start delivery?": "確定要開始配送嗎?", "Are you sure?": "確定要執行此操作嗎?", @@ -146,6 +151,7 @@ "Assigned Machines": "授權機台", "Assigned To": "指派人員", "Assignment removed successfully.": "廣告投放已移除。", + "Associated Order": "關聯訂單", "Audit Management": "稽核管理", "Audit Permissions": "稽核管理權限", "Authorization updated successfully": "授權更新成功", @@ -173,6 +179,7 @@ "Batch": "批號", "Batch No": "批號", "Batch Number": "批號", + "Before Qty": "異動前數量", "Belongs To": "公司名稱", "Belongs To Company": "公司名稱", "Branch": "分倉", @@ -183,8 +190,8 @@ "CREATE STOCK TRANSFERS BETWEEN WAREHOUSES AND MACHINE RETURNS": "建立倉庫間調撥或機台退庫單", "Calculate Replenishment": "計算補貨量", "Cancel": "取消", - "Cancel Pass Code": "取消通行碼", "Cancel Order": "取消訂單", + "Cancel Pass Code": "取消通行碼", "Cancel Pickup Code": "取消取貨碼", "Cancel Purchase": "取消購買", "Cancelled": "已取消", @@ -225,6 +232,7 @@ "Checkout Time 1": "卡機結帳時間1", "Checkout Time 2": "卡機結帳時間2", "Clear": "清除", + "Clear Abnormal Status": "清除異常狀態", "Clear Filter": "清除篩選", "Clear Stock": "庫存清空", "Click here to re-send the verification email.": "點擊此處重新發送驗證郵件。", @@ -371,6 +379,7 @@ "Delivery door closed": "送貨門關閉", "Delivery door open error": "送貨門開啟異常", "Delivery door opened": "送貨門開啟", + "Delta": "變化量", "Deposit Bonus": "儲值回饋", "Describe the repair or maintenance status...": "請描述維修或保養狀況...", "Description / Name": "描述 / 名稱", @@ -389,8 +398,15 @@ "Disabled": "已停用", "Disabling this customer will also disable all accounts under this customer. Are you sure you want to continue?": "停用此客戶將會連帶停用該客戶下的所有帳號,確定要繼續嗎?", "Discord Notifications": "Discord通知", + "Discount": "折扣", "Dispense Failed": "出貨失敗", + "Dispense Pending": "出貨中", + "Dispense Product": "出貨商品", + "Dispense Quantity": "出貨數量", + "Dispense Records": "出貨紀錄", + "Dispense Status": "出貨狀態", "Dispense Success": "出貨成功", + "Dispense Time": "出貨時間", "Dispense error (0407)": "出貨過程異常 (0407)", "Dispense error (0408)": "出貨過程異常 (0408)", "Dispense error (0409)": "出貨過程異常 (0409)", @@ -428,6 +444,7 @@ "Edit Machine Name": "編輯機台名稱", "Edit Machine Settings": "編輯機台設定", "Edit Name": "編輯名稱", + "Edit Pass Code": "編輯通行碼", "Edit Payment Config": "編輯金流配置", "Edit Product": "編輯商品", "Edit Role": "編輯角色", @@ -437,6 +454,7 @@ "Edit Sub Account Role": "編輯子帳號角色", "Edit Warehouse": "編輯倉庫", "Electronic Invoice": "電子發票", + "Electronic Invoices": "電子發票", "Elevator descending": "升降平台下降中", "Elevator descent error": "升降平台下降異常", "Elevator failure": "升降系統故障", @@ -476,6 +494,7 @@ "Error processing request": "處理請求時發生錯誤", "Error report accepted": "錯誤回報已受理", "Error: :message (:code)": "錯誤::message (:code)", + "Estimated Expiry": "預計到期時間", "Execute": "執行", "Execute Change": "執行找零", "Execute Delivery Now": "立即執行出貨", @@ -483,7 +502,6 @@ "Execute maintenance and operational commands remotely": "遠端執行維護與各項營運指令", "Execution Time": "執行時間", "Exp": "效期", - "Estimated Expiry": "預計到期時間", "Expected Expiry": "預計過期時間", "Expected Expiry Date & Time": "預計到期時間", "Expected Stock": "預期庫存", @@ -497,11 +515,12 @@ "Expiry Management": "效期管理", "Expiry Time": "到期時間", "Expiry date tracking and warnings": "有效期限追蹤與預警", - "Failed": "執行失敗", + "Failed": "失敗", "Failed to fetch machine data.": "無法取得機台資料。", "Failed to load permissions": "載入權限失敗", "Failed to load preview": "載入預覽失敗", "Failed to load tab content": "載入分頁內容失敗", + "Failed to resolve issues.": "排除異常失敗。", "Failed to save permissions.": "無法儲存權限設定。", "Failed to update machine images: ": "更新機台圖片失敗:", "Feature Settings": "功能設定", @@ -516,6 +535,88 @@ "Firmware updated to :version": "韌體版本更新 : :version", "Fleet Avg OEE": "全機台平均 OEE", "Fleet Performance": "全機台效能", + "Flow ID": "流水號", + "Flow ID / Amount": "流水號 / 金額", + "Flow ID / Date": "流水號 / 日期", + "Flow ID / Machine": "流水號 / 機台", + "Flow ID / Order": "流水號 / 關聯訂單", + "Flow ID / Product": "流水號 / 商品", + "Flow ID / Slot": "流水號 / 貨道", + "Flow ID / Slot / Amount": "流水號 / 貨道 / 金額", + "Flow ID / Slot / Date": "流水號 / 貨道 / 日期", + "Flow ID / Slot / Machine": "流水號 / 貨道 / 機台", + "Flow ID / Slot / Order": "流水號 / 貨道 / 關聯訂單", + "Flow ID / Slot / Product": "流水號 / 貨道 / 商品", + "Flow ID / Slot / Product / Amount": "流水號 / 貨道 / 商品 / 金額", + "Flow ID / Slot / Product / Amount / Date": "流水號 / 貨道 / 商品 / 金額 / 日期", + "Flow ID / Slot / Product / Amount / Date / Order": "流水號 / 貨道 / 商品 / 金額 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Date / Time": "流水號 / 貨道 / 商品 / 金額 / 日期 / 時間", + "Flow ID / Slot / Product / Amount / Date / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Machine": "流水號 / 貨道 / 商品 / 金額 / 機台", + "Flow ID / Slot / Product / Amount / Machine / Date": "流水號 / 貨道 / 商品 / 金額 / 機台 / 日期", + "Flow ID / Slot / Product / Amount / Machine / Date / Order": "流水號 / 貨道 / 商品 / 金額 / 機台 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Machine / Date / Time": "流水號 / 貨道 / 商品 / 金額 / 機台 / 日期 / 時間", + "Flow ID / Slot / Product / Amount / Machine / Date / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 機台 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Machine / Order": "流水號 / 貨道 / 商品 / 金額 / 機台 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Machine / Time": "流水號 / 貨道 / 商品 / 金額 / 機台 / 時間", + "Flow ID / Slot / Product / Amount / Machine / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 機台 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Order": "流水號 / 貨道 / 商品 / 金額 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status": "流水號 / 貨道 / 商品 / 金額 / 狀態", + "Flow ID / Slot / Product / Amount / Status / Date": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 日期", + "Flow ID / Slot / Product / Amount / Status / Date / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Date / Time": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 日期 / 時間", + "Flow ID / Slot / Product / Amount / Status / Date / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Machine": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台", + "Flow ID / Slot / Product / Amount / Status / Machine / Date": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Time": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 時間", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Time / Order / Extra": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 時間 / 關聯訂單 / 額外", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Time / Order / Extra / More": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 時間 / 關聯訂單 / 額外 / 更多", + "Flow ID / Slot / Product / Amount / Status / Machine / Date / Time / Order / Extra / More / Done": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 日期 / 時間 / 關聯訂單 / 額外 / 更多 / 完成", + "Flow ID / Slot / Product / Amount / Status / Machine / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Machine / Time": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 時間", + "Flow ID / Slot / Product / Amount / Status / Machine / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 機台 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Status / Time": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 時間", + "Flow ID / Slot / Product / Amount / Status / Time / Order": "流水號 / 貨道 / 商品 / 金額 / 狀態 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Amount / Time": "流水號 / 貨道 / 商品 / 金額 / 時間", + "Flow ID / Slot / Product / Amount / Time / Order": "流水號 / 貨道 / 商品 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Date": "流水號 / 貨道 / 商品 / 日期", + "Flow ID / Slot / Product / Date / Order": "流水號 / 貨道 / 商品 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Date / Time": "流水號 / 貨道 / 商品 / 日期 / 時間", + "Flow ID / Slot / Product / Date / Time / Order": "流水號 / 貨道 / 商品 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Machine": "流水號 / 貨道 / 商品 / 機台", + "Flow ID / Slot / Product / Machine / Date": "流水號 / 貨道 / 商品 / 機台 / 日期", + "Flow ID / Slot / Product / Machine / Date / Order": "流水號 / 貨道 / 商品 / 機台 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Machine / Date / Time": "流水號 / 貨道 / 商品 / 機台 / 日期 / 時間", + "Flow ID / Slot / Product / Machine / Date / Time / Order": "流水號 / 貨道 / 商品 / 機台 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Machine / Order": "流水號 / 貨道 / 商品 / 機台 / 關聯訂單", + "Flow ID / Slot / Product / Machine / Time": "流水號 / 貨道 / 商品 / 機台 / 時間", + "Flow ID / Slot / Product / Machine / Time / Order": "流水號 / 貨道 / 商品 / 機台 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Order": "流水號 / 貨道 / 商品 / 關聯訂單", + "Flow ID / Slot / Product / Status": "流水號 / 貨道 / 商品 / 狀態", + "Flow ID / Slot / Product / Status / Date": "流水號 / 貨道 / 商品 / 狀態 / 日期", + "Flow ID / Slot / Product / Status / Date / Order": "流水號 / 貨道 / 商品 / 狀態 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Status / Date / Time": "流水號 / 貨道 / 商品 / 狀態 / 日期 / 時間", + "Flow ID / Slot / Product / Status / Date / Time / Order": "流水號 / 貨道 / 商品 / 狀態 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Status / Machine": "流水號 / 貨道 / 商品 / 狀態 / 機台", + "Flow ID / Slot / Product / Status / Machine / Date": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 日期", + "Flow ID / Slot / Product / Status / Machine / Date / Order": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 日期 / 關聯訂單", + "Flow ID / Slot / Product / Status / Machine / Date / Time": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 日期 / 時間", + "Flow ID / Slot / Product / Status / Machine / Date / Time / Order": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 日期 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Status / Machine / Order": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 關聯訂單", + "Flow ID / Slot / Product / Status / Machine / Time": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 時間", + "Flow ID / Slot / Product / Status / Machine / Time / Order": "流水號 / 貨道 / 商品 / 狀態 / 機台 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Status / Order": "流水號 / 貨道 / 商品 / 狀態 / 關聯訂單", + "Flow ID / Slot / Product / Status / Time": "流水號 / 貨道 / 商品 / 狀態 / 時間", + "Flow ID / Slot / Product / Status / Time / Order": "流水號 / 貨道 / 商品 / 狀態 / 時間 / 關聯訂單", + "Flow ID / Slot / Product / Time": "流水號 / 貨道 / 商品 / 時間", + "Flow ID / Slot / Product / Time / Order": "流水號 / 貨道 / 商品 / 時間 / 關聯訂單", + "Flow ID / Slot / Status": "流水號 / 貨道 / 狀態", + "Flow ID / Slot / Time": "流水號 / 貨道 / 時間", + "Flow ID / Status": "流水號 / 狀態", + "Flow ID / Time": "流水號 / 時間", "Force End Session": "強制結束當前會話", "Force end current session": "強制結束目前的連線", "From": "來源", @@ -535,6 +636,7 @@ "Gift Definitions": "禮品設定", "Global roles accessible by all administrators.": "適用於所有管理者的全域角色。", "Go Back": "返回", + "Go to E-Invoice": "前往電子發票", "Goods & System Settings": "商品與系統設定", "Got it": "知道了", "Grant UI Access": "開放 UI 存取權限", @@ -579,7 +681,13 @@ "Inventory Overview": "庫存瀏覽", "Inventory Stable": "庫存穩定", "Inventory synced with machine": "庫存已與機台同步", + "Invoice Date": "開立日期", + "Invoice Information": "發票資訊", + "Invoice Number": "發票號碼", + "Invoice Number / Time": "發票號碼 / 時間", + "Invoice Number / Flow ID": "發票號碼 / 流水號", "Invoice Status": "發票開立狀態", + "Issued At": "開立時間", "Item List": "商品清單", "Items": "筆", "JKO_MERCHANT_ID": "街口支付 商店代號", @@ -615,12 +723,13 @@ "Line Products": "Line商品", "LinePay": "LinePay", "LinePay Payment": "LinePay 支付", + "Link": "連結", "Link Copied": "連結已複製", "Live Fleet Updates": "即時數據更新", "Loading Cabinet...": "正在載入機台貨盤...", "Loading Data": "載入資料中", - "Loading machines...": "正在載入機台...", "Loading failed": "載入失敗", + "Loading machines...": "正在載入機台...", "Loading...": "載入中...", "Location": "位置", "Location found!": "已成功獲取座標!", @@ -637,14 +746,16 @@ "Logout": "登出", "Logs": "日誌", "Longitude": "經度", - "Link": "連結", "Low": "低", "Low Stock": "庫存過低", "Low Stock Alerts": "低庫存警示", "Low stock and out-of-stock alerts": "低庫存與缺貨警示", "Loyalty & Features": "行銷與點數", "Machine": "機台", + "Machine / Date": "機台 / 日期", "Machine / Slot": "機台 / 貨道", + "Machine Flow ID": "機台流水號", + "Machine Flow ID / Time": "機台流水號 / 時間", "Machine Advertisement Settings": "機台廣告設置", "Machine Count": "機台數量", "Machine Details": "機台詳情", @@ -670,11 +781,13 @@ "Machine Reports": "機台報表", "Machine Restart": "機台重啟", "Machine Return": "機台退庫", + "Machine Serial": "機台序號", "Machine Serial No": "機台序號", "Machine Settings": "機台設定", "Machine Status": "機台狀態", "Machine Status List": "機台運行狀態列表", "Machine Stock": "機台庫存", + "Machine Stock Movements": "機台庫存流水帳", "Machine System Settings": "機台系統設定", "Machine Utilization": "機台稼動率", "Machine created successfully.": "機台已成功建立。", @@ -767,17 +880,6 @@ "Motor not stopped": "電機未停止", "Movement History": "異動紀錄", "Movement Logs": "異動紀錄", - "Machine Stock Movements": "機台庫存流水帳", - "Stock Movement Log": "庫存流水帳", - "movement.type.replenishment": "補貨入庫", - "movement.type.pickup": "取貨碼消耗", - "movement.type.remote_dispense": "遠端出貨", - "movement.type.adjustment": "盤點調整", - "movement.type.rollback": "出貨失敗退回", - "Before Qty": "異動前數量", - "After Qty": "異動後數量", - "Delta": "變化量", - "No movements found": "尚無異動紀錄", "Multilingual Names": "多語系名稱", "N/A": "不適用", "Name": "名稱", @@ -809,6 +911,7 @@ "No advertisements found.": "未找到廣告素材。", "No alert summary": "暫無告警記錄", "No assignments": "尚未投放", + "No associated order found": "無關聯訂單", "No categories found.": "找不到分類。", "No command history": "尚無指令紀錄", "No configurations found": "暫無相關配置", @@ -831,12 +934,15 @@ "No matching machines": "查無匹配機台", "No materials available": "沒有可用的素材", "No movement records found": "查無異動紀錄", + "No movements found": "尚無異動紀錄", "No pass codes found": "找不到通行碼", "No permissions": "無權限項目", "No pickup codes found": "找不到取貨碼", + "No product record found": "無商品紀錄", "No products found in this warehouse": "此倉庫目前無商品庫存", "No products found matching your criteria.": "找不到符合條件的商品。", "No records found": "未找到相關紀錄", + "No related detail found": "無關聯詳細資料", "No replenishment orders found": "查無補貨單紀錄", "No results found": "查無搜尋結果", "No roles available": "目前沒有角色資料。", @@ -847,6 +953,7 @@ "No slots need replenishment": "無需補貨的貨道", "No stock data found": "查無庫存資料", "No stock-in orders found": "查無進貨單紀錄", + "No transaction orders found": "查無交易訂單", "No transfer orders found": "查無調撥單紀錄", "No users found": "找不到用戶資料", "No warehouses found": "未找到倉庫", @@ -888,10 +995,14 @@ "Optional": "選填", "Optional remarks": "選填備註", "Optional remarks...": "選填備註...", - "Order Details": "進貨單詳情", + "Order Details": "訂單詳情", "Order Info": "單據資訊", + "Order Items": "商品內容", "Order Management": "訂單管理", "Order No.": "單號", + "Order Number / Time": "訂單編號 / 時間", + "Order Status": "訂單狀態", + "Order Time": "訂單時間", "Order already completed": "訂單已完成", "Order already processed": "訂單已處理", "Order completed and stock updated": "訂單已完成,機台庫存已更新", @@ -946,14 +1057,15 @@ "Pass Code QR": "通行碼 QR Code", "Pass Code Ticket": "通行憑證", "Pass Codes": "通行碼", + "Pass code cancelled.": "通行碼已取消。", "Pass code created: :code": "通行碼已建立::code", "Pass code deleted.": "通行碼已刪除", - "Pass code cancelled.": "通行碼已取消。", "Pass code disabled.": "通行碼已取消。", "Pass code updated.": "通行碼已更新", "Password": "密碼", "Password updated successfully.": "密碼已成功變更。", "Payment & Invoice": "金流與發票", + "Payment Amount": "支付金額", "Payment Buffer Seconds": "金流緩衝時間(s)", "Payment Config": "金流配置", "Payment Configuration": "客戶金流設定", @@ -961,11 +1073,13 @@ "Payment Configuration deleted successfully.": "金流設定已成功刪除。", "Payment Configuration updated successfully.": "金流設定已成功更新。", "Payment Selection": "付款選擇", + "Payment Type": "支付方式", "Pending": "待處理", "Per Page": "每頁顯示", "Performance": "效能 (Performance)", "Permanent": "永久", "Permanent Code": "永久代碼", + "Permanent if empty": "留空則為永久有效", "Permanently Delete Account": "永久刪除帳號", "Permission Settings": "權限設定", "Permission Tags": "權限標籤", @@ -977,9 +1091,9 @@ "Picked up": "領取", "Picked up Time": "領取時間", "Pickup Code": "取貨碼", + "Pickup Code (8 Digits)": "取貨碼 (8 位數)", "Pickup Codes": "取貨碼", "Pickup Ticket": "取貨憑證", - "Pickup Code (8 Digits)": "取貨碼 (8 位數)", "Pickup code cancelled.": "取貨碼已取消", "Pickup code generated: :code": "已生成取貨碼::code", "Pickup code updated.": "取貨碼已更新", @@ -1014,6 +1128,7 @@ "Previous": "上一頁", "Price / Member": "售價 / 會員價", "Pricing Information": "價格資訊", + "Print Invoice": "列印發票", "Product": "商品", "Product / Slot": "商品 / 貨道", "Product / Stock": "商品 / 庫存", @@ -1078,6 +1193,7 @@ "Recent Login": "最近登入", "Recently reported errors or warnings in logs": "近期日誌中有錯誤或警告回報", "Records": "筆", + "Refunded": "已退款", "Regenerate": "重新產生", "Regenerating the token will disconnect the physical machine until it is updated. Continue?": "重新產生金鑰將導致實體機台暫時失去連線,必須於機台端更新此新金鑰才能恢復。確定繼續嗎?", "Remote Change": "遠端找零", @@ -1089,8 +1205,8 @@ "Remote Permissions": "遠端管理權限", "Remote Reboot": "遠端結帳", "Remote Settlement": "遠端結帳", - "Remote dispense successful for slot :slot": "貨道 :slot 遠端出貨成功", "Remote dispense failed for slot :slot": "貨道 :slot 遠端出貨失敗", + "Remote dispense successful for slot :slot": "貨道 :slot 遠端出貨成功", "Removal": "撤機", "Repair": "維修", "Replenish": "補貨", @@ -1168,9 +1284,12 @@ "Scan to pick up your product": "掃描以領取您的商品", "Schedule": "排程區間", "Search Company Title...": "搜尋公司名稱...", + "Search Flow ID / Slot...": "搜尋 流水號 / 貨道...", + "Search Invoice No / Flow ID...": "搜尋 發票號碼 / 流水號...", "Search Machine...": "搜尋機台...", - "Search logs...": "搜尋紀錄...", + "Search Order No / Flow ID / Invoice...": "搜尋 訂單號 / 流水號 / 發票號碼...", "Search Product": "搜尋商品", + "Search Product / Slot...": "搜尋商品名稱 / 貨道...", "Search accounts...": "搜尋帳號...", "Search by code, machine name or serial...": "搜尋代碼、機台名稱或序號...", "Search by code, name or machine...": "搜尋代碼、名稱或機台...", @@ -1181,6 +1300,7 @@ "Search company...": "搜尋公司...", "Search configurations...": "搜尋設定...", "Search customers...": "搜尋客戶...", + "Search logs...": "搜尋紀錄...", "Search machines by name or serial...": "搜尋機台名稱或序號...", "Search machines...": "搜尋機台...", "Search models...": "搜尋型號...", @@ -1249,6 +1369,7 @@ "Sign in to your account": "隨時隨地掌控您的業務。", "Signed in as": "登入身份", "Slot": "貨道", + "Slot / Product": "貨道 / 商品", "Slot Mechanism (default: Conveyor, check for Spring)": "貨道機制 (預設履帶,勾選為彈簧)", "Slot No": "貨道編號", "Slot Status": "貨道效期", @@ -1289,6 +1410,7 @@ "Start Time": "開始時間", "Statistics": "數據統計", "Status": "狀態", + "Status / Invoice": "狀態 / 發票", "Status / Temp / Sub / Card / Scan": "狀態 / 溫度 / 下位機 / 刷卡機 / 掃碼機", "Status Timeline": "狀態時間線", "Status updated successfully": "狀態更新成功", @@ -1302,6 +1424,7 @@ "Stock Level > 50%": "庫存高於 50%", "Stock Levels": "庫存水準", "Stock Management": "庫存管理單", + "Stock Movement Log": "庫存流水帳", "Stock Out": "庫存出庫", "Stock Quantity": "庫存數量", "Stock Rate": "庫存率", @@ -1312,6 +1435,7 @@ "Stock returned to warehouse": "庫存已退回倉庫", "Stock-In Management": "進貨管理", "Stock-In Order": "新增進貨單", + "Stock-In Order Details": "進貨單詳情", "Stock-In Orders": "進貨單管理", "Stock-In Orders Tab": "進貨單管理", "Stock-in order": "入庫單", @@ -1331,7 +1455,8 @@ "Sub-actions": "子項目", "Sub-machine Status Request": "下位機狀態回傳", "Submit Record": "提交紀錄", - "Success": "執行成功", + "Subtotal": "小計", + "Success": "成功", "Super Admin": "超級管理員", "Super-admin role cannot be assigned to tenant accounts.": "超級管理員角色無法指派給客戶帳號。", "Superseded": "已取代", @@ -1414,6 +1539,9 @@ "Track stock levels, stock-in orders, and movement history": "追蹤庫存水位、進貨單與異動紀錄", "Track stock-in orders and movement history": "追蹤進貨單據與庫存異動紀錄", "Traditional Chinese": "繁體中文", + "Transaction Info": "交易資訊", + "Transaction Orders": "交易訂單", + "Transaction Time": "交易時間", "Transaction processed: :id": "交易處理完成::id", "Transfer Audit": "調撥單", "Transfer Details": "調撥單詳情", @@ -1455,16 +1583,10 @@ "Unlock Now": "立即解鎖", "Unlock Page": "頁面解鎖", "Unpublish": "下架", - "cancel": "取消", - "create": "建立", - "update": "更新", - "used": "已使用", "Update": "更新", - "Edit Pass Code": "編輯通行碼", - "Permanent if empty": "留空則為永久有效", - "Update Pass Code": "更新通行碼", "Update Authorization": "更新授權", "Update Customer": "更新客戶", + "Update Pass Code": "更新通行碼", "Update Password": "更改密碼", "Update Product": "更新商品", "Update Settings": "更新設定", @@ -1492,21 +1614,25 @@ "Validity Period": "有效期限", "Validity Period (Days)": "有效期限 (天)", "Validity Period (Hours)": "有效期限 (小時)", + "Valid": "有效", + "Void": "作廢", "Vending": "販賣頁", "Vending Page": "販賣頁", "Venue Management": "場地管理", "Video": "影片", - "View Details": "查看細單", + "View Details": "查看詳情", "View Full History": "查看完整歷程", "View Inventory": "查看庫存", "View Logs": "查看日誌", "View More": "查看更多", + "View Order": "查看訂單", "View QR Code": "查看 QR Code", "View Slots": "查看貨道", "View all warehouses": "查看所有倉庫", "View slot-level inventory for each machine": "查看各機台貨道庫存", "Visit Gift": "來店禮", "Visual overview of all machine locations": "所有機台位置的視覺化概覽", + "Void Invoice": "作廢發票", "Waiting": "等待中", "Waiting for Payment": "等待付款", "Warehouse": "倉庫", @@ -1557,13 +1683,26 @@ "accounts": "帳號管理", "admin": "管理員", "analysis": "分析管理", + "and :count other items": "等 :count 項商品", "app": "APP 管理", "audit": "稽核管理", "basic-settings": "基本設定", "basic.machines": "機台設定", "basic.payment-configs": "客戶金流設定", "by": "由", + "cancel": "取消", + "command.change": "找零", + "command.checkout": "結帳", + "command.dispense": "出貨", + "command.lock": "鎖機", + "command.reboot": "重啟", + "command.reboot_card": "讀卡機重啟", + "command.reload_stock": "同步庫存", + "command.unlock": "解鎖", "companies": "客戶管理", + "consume": "取貨成功", + "consume_failed": "取貨失敗", + "create": "建立", "data-config": "資料設定", "data-config.sub-account-roles": "子帳號角色", "data-config.sub-accounts": "子帳號管理", @@ -1588,6 +1727,15 @@ "items": "筆項目", "john@example.com": "john@example.com", "line": "Line 管理", + "log.command.failed": "遠端指令 [:type] 執行失敗", + "log.command.success": "遠端指令 [:type] 執行成功", + "log.passcode.verify_success_note": "維修人員於機台 [:machine_sn] 驗證通行碼 [:code]", + "log.pickup.consume_success": "[取貨碼] 核銷成功::code,貨道::slot", + "log.pickup.consume_success_note": "機台 [:machine_sn] 已核銷取貨碼。貨道 :slot::old -> :new", + "log.pickup.dispense_failed": "[取貨碼] 機台回報出貨失敗::code", + "log.pickup.dispense_failed_note": "機台 [:machine_sn] 回報取貨碼 [:code] 出貨失敗", + "log.pickup.verify_success": "[取貨碼] 驗證成功,碼::code", + "log.pickup.verify_success_note": "機台 [:machine_sn] 已驗證取貨碼 [:code]", "machines": "機台管理", "members": "會員管理", "menu.analysis": "數據分析", @@ -1638,6 +1786,13 @@ "menu.warehouses.transfers": "調撥單", "min": "分", "mins ago": "分鐘前", + "movement.note.manual_adjustment": "後台手動修改貨道庫存(舊: :old → 新: :new)", + "movement.note.replenishment_correction": "B009 盤點回報修正(舊: :old → 新: :new)", + "movement.type.adjustment": "盤點調整", + "movement.type.pickup": "取貨碼消耗", + "movement.type.remote_dispense": "遠端出貨", + "movement.type.replenishment": "補貨入庫", + "movement.type.rollback": "出貨失敗退回", "of": "/共", "of items": "筆項目", "pending": "等待機台領取", @@ -1657,38 +1812,14 @@ "success": "成功", "super-admin": "超級管理員", "to": "至", + "update": "更新", + "used": "已使用", "user": "一般用戶", "vending": "販賣頁", + "verify_success": "驗證成功", "video": "影片", "visit_gift": "來店禮", "vs Yesterday": "較昨日", "warehouses": "倉庫管理", - "待填寫": "待填寫", - "verify_success": "驗證成功", - "consume": "取貨成功", - "consume_failed": "取貨失敗", - "All Slots": "所有貨道", - "log.pickup.verify_success": "[取貨碼] 驗證成功,碼::code", - "log.pickup.verify_success_note": "機台 [:machine_sn] 已驗證取貨碼 [:code]", - "log.pickup.consume_success": "[取貨碼] 核銷成功::code,貨道::slot", - "log.pickup.consume_success_note": "機台 [:machine_sn] 已核銷取貨碼。貨道 :slot::old -> :new", - "log.pickup.dispense_failed": "[取貨碼] 機台回報出貨失敗::code", - "log.pickup.dispense_failed_note": "機台 [:machine_sn] 回報取貨碼 [:code] 出貨失敗", - "log.passcode.verify_success_note": "維修人員於機台 [:machine_sn] 驗證通行碼 [:code]", - "movement.note.manual_adjustment": "後台手動修改貨道庫存(舊: :old → 新: :new)", - "movement.note.replenishment_correction": "B009 盤點回報修正(舊: :old → 新: :new)", - "log.command.success": "遠端指令 [:type] 執行成功", - "log.command.failed": "遠端指令 [:type] 執行失敗", - "command.reboot": "重啟", - "command.reboot_card": "讀卡機重啟", - "command.lock": "鎖機", - "command.unlock": "解鎖", - "command.checkout": "結帳", - "command.change": "找零", - "command.dispense": "出貨", - "command.reload_stock": "同步庫存", - "Clear Abnormal Status": "清除異常狀態", - "Are you sure you want to resolve all recent issues for this machine?": "您確定要排除此機台目前所有的異常紀錄嗎?這將會恢復機台狀態為正常。", - "All issues marked as resolved.": "所有異常已標記為已排除。", - "Failed to resolve issues.": "排除異常失敗。" -} + "待填寫": "待填寫" +} \ No newline at end of file diff --git a/resources/views/admin/sales/index.blade.php b/resources/views/admin/sales/index.blade.php new file mode 100644 index 0000000..9dc5b06 --- /dev/null +++ b/resources/views/admin/sales/index.blade.php @@ -0,0 +1,203 @@ +@extends('layouts.admin') + +@section('content') +
{{ __('Order Status') }}
+{{ __('Payment Type') }}
++ {{ $paymentTypes[$order->payment_type] ?? __('Unknown') }} +
+{{ __('Transaction Time') }}
+{{ $order->created_at->format('Y-m-d H:i:s') }}
+{{ __('Machine Name') }}
+{{ $order->machine->name ?? __('Unknown') }}
+{{ __('Machine Serial') }}
+{{ $order->machine->serial_no ?? '---' }}
+{{ __('Machine Flow ID') }}
+{{ $order->flow_id }}
+{{ $item->product_name }}
+${{ number_format($item->subtotal, 0) }}
+| {{ __('Slot') }} | +{{ __('Product') }} | +{{ __('Status') }} | +
|---|---|---|
| + #{{ str_pad($dispense->slot_no, 2, '0', STR_PAD_LEFT) }} + | +
+ {{ $dispense->product->name ?? __('Unknown') }} + |
+
+ @php
+ $dStatusMap = [
+ 'success' => 'active',
+ 'failed' => 'error',
+ 'pending' => 'pending',
+ '1' => 'active',
+ '0' => 'error',
+ ];
+ $dLabelMap = [
+ 'success' => __('Success'),
+ 'failed' => __('Failed'),
+ 'pending' => __('Pending'),
+ '1' => __('Success'),
+ '0' => __('Failed'),
+ ];
+ $statusValue = (string)($dispense->dispense_status ?? 'pending');
+ $ds = $dStatusMap[$statusValue] ?? 'slate';
+ $dl = $dLabelMap[$statusValue] ?? $statusValue;
+ @endphp
+ |
+
{{ $order->invoice->invoice_no }}
+{{ __('Issued At') }}
++ {{ $order->invoice->invoice_date }} {{ $order->invoice->invoice_time }} +
+| + {{ __('Machine') }} + | ++ {{ __('Product / Slot') }} + | ++ {{ __('Amount') }} + | ++ {{ __('Dispense Status') }} + | ++ {{ __('Dispense Time') }} + | ++ {{ __('Associated Order') }} + | +
|---|---|---|---|---|---|
|
+
+ {{ $log->machine->name ?? 'Unknown' }}
+
+
+ {{ $log->machine->serial_no ?? '---' }}
+
+ |
+
+
+ {{ $log->product->name ?? 'Unknown Product' }}
+
+
+ {{ __('Slot') }}: {{ $log->slot_no }}
+
+ |
+ + + {{ $log->amount }} + + | +
+ @php
+ $statusMap = [
+ 'success' => ['label' => __('Dispense Success'), 'color' => 'emerald'],
+ 'failed' => ['label' => __('Dispense Failed'), 'color' => 'rose'],
+ 'pending' => ['label' => __('Dispense Pending'), 'color' => 'amber'],
+ '1' => ['label' => __('Dispense Success'), 'color' => 'emerald'],
+ '0' => ['label' => __('Dispense Failed'), 'color' => 'rose'],
+ ];
+ $statusKey = (string)($log->dispense_status ?? 'pending');
+ $s = $statusMap[$statusKey] ?? ['label' => $statusKey, 'color' => 'slate'];
+ @endphp
+ |
+ + + {{ $log->machine_time }} + + | ++ @if($log->order) + + @else + {{ __('No associated order found') }} + @endif + | +
|
+ |
+ |||||
+ {{ $log->machine->serial_no ?? '---' }} +
+{{ __('Product / Slot') }}
++ {{ $log->product->name ?? 'Unknown' }} +
++ {{ __('Slot') }}: {{ $log->slot_no }} +
+{{ __('Amount') }}
+{{ $log->amount }}
+{{ __('Dispense Time') }}
+{{ $log->machine_time }}
+{{ __('Associated Order') }}
++ {{ $log->order->order_no ?? '---' }} +
+| + {{ __('Invoice Number') }} + | ++ {{ __('Invoice Date') }} + | ++ {{ __('Machine') }} + | ++ {{ __('Amount') }} + | ++ {{ __('Status') }} + | ++ {{ __('Associated Order') }} + | ++ {{ __('Action') }} + | +
|---|---|---|---|---|---|---|
|
+
+
+ {{ $invoice->invoice_no }}
+
+
+ {{ ($invoice->machine_time ?? $invoice->created_at)->format('Y-m-d H:i:s') }}
+
+
+ |
+ + + {{ $invoice->invoice_date }} + + | +
+
+ {{ $invoice->machine->name ?? ($invoice->order->machine->name ?? 'Unknown') }}
+
+
+ {{ $invoice->machine->serial_no ?? ($invoice->order->machine->serial_no ?? '---') }}
+
+ |
+ + + ${{ number_format($invoice->amount, 0) }} + + | +
+ @php
+ // 簡單判斷:如果有發票號碼且 rtn_code 為空或 0/1 則視為有效
+ $status = 'valid';
+ if (empty($invoice->invoice_no)) $status = 'failed';
+ if ($invoice->rtn_code === 'void') $status = 'void';
+
+ $statusMap = [
+ 'valid' => ['label' => __('Valid'), 'color' => 'emerald'],
+ 'void' => ['label' => __('Void'), 'color' => 'rose'],
+ 'failed' => ['label' => __('Failed'), 'color' => 'rose'],
+ 'refunded' => ['label' => __('Refunded'), 'color' => 'slate'],
+ ];
+ $s = $statusMap[$status] ?? ['label' => $status, 'color' => 'slate'];
+ @endphp
+ |
+ + + {{ $invoice->order->order_no ?? '---' }} + + | ++ + | +
|
+ |
+ ||||||
+ {{ ($invoice->machine_time ?? $invoice->created_at)->format('Y-m-d H:i:s') }} +
+{{ __('Machine') }}
++ {{ $invoice->machine->name ?? ($invoice->order->machine->name ?? 'Unknown') }} +
++ {{ $invoice->machine->serial_no ?? ($invoice->order->machine->serial_no ?? '---') }} +
+{{ __('Amount') }}
+${{ number_format($invoice->amount, 0) }}
+{{ __('Associated Order') }}
++ {{ $invoice->order->order_no ?? '---' }} +
+{{ __('Machine Time') }}
++ {{ ($invoice->machine_time ?? $invoice->created_at)->format('Y-m-d H:i:s') }} +
+| + {{ __('Order Number / Time') }} + | ++ {{ __('Machine') }} + | ++ {{ __('Product') }} + | ++ {{ __('Payment Amount') }} + | ++ {{ __('Status') }} + | ++ {{ __('Invoice Number') }} + | ++ {{ __('Action') }} + | +
|---|---|---|---|---|---|---|
|
+
+ id }})"
+ class="text-base font-extrabold text-slate-800 dark:text-slate-100 group-hover:text-cyan-600 dark:group-hover:text-cyan-400 transition-colors cursor-pointer">
+ {{ $order->order_no }}
+
+
+ {{ $order->created_at->format('Y-m-d H:i:s') }}
+
+
+ |
+
+
+ {{ $order->machine->name ?? 'Unknown' }}
+
+
+ {{ $order->machine->serial_no ?? '---' }}
+
+ |
+
+
+ @if($order->items->count() > 0)
+
+ {{ $order->items->first()->product_name }}
+
+ @if($order->items->count() > 1)
+
+ {{ __('and :count other items', ['count' => $order->items->count()]) }}
+
+ @endif
+ @else
+ {{ __('No product record found') }}
+ @endif
+
+ |
+
+
+
+
+
+ ${{ number_format($order->total_amount, 0) }}
+
+
+ {{ $paymentTypes[$order->payment_type] ?? 'Unknown' }}
+
+
+ @if($order->discount_amount > 0)
+
+ {{ __('Discounted') }} ${{ number_format($order->discount_amount, 0) }}
+
+ @endif
+ |
+
+ @php
+ $statusMap = [
+ 'pending' => ['label' => __('Pending'), 'color' => 'amber'],
+ 'paid' => ['label' => __('Paid'), 'color' => 'emerald'],
+ 'completed' => ['label' => __('Completed'), 'color' => 'emerald'],
+ 'cancelled' => ['label' => __('Cancelled'), 'color' => 'slate'],
+ 'refunded' => ['label' => __('Refunded'), 'color' => 'rose'],
+ ];
+ $s = $statusMap[$order->status] ?? ['label' => $order->status, 'color' => 'slate'];
+
+ $invoiceSearchValue = $order->invoice ? $order->invoice->invoice_no : $order->order_no;
+ $targetUrl = route('admin.sales.index', ['tab' => 'invoices', 'search' => $invoiceSearchValue]);
+ @endphp
+ |
+
+ @if($order->invoice)
+
+
+ {{
+ $order->invoice->invoice_no }}
+
+ @else
+ ---
+ @endif
+ |
+ + + | +
|
+ |
+ ||||||
+ {{ $order->machine->name ?? 'Unknown' }} +
+{{ + __('Order Items') }}
++ @if($order->items->count() > 0) + {{ $order->items->first()->product_name }} + @if($order->items->count() > 1) + {{ __('and :count other items', ['count' => + $order->items->count()]) }} + @endif + @else + {{ __('No product record found') }} + @endif +
+{{ + __('Amount / Payment') }}
++ ${{ number_format($order->total_amount, 0) }} + {{ + $paymentTypes[$order->payment_type] ?? '??' }} +
+{{ + __('Order Time') }}
++ {{ $order->created_at->format('m-d H:i') }} + {{ $order->created_at->diffForHumans() }} +
+{{ + __('Invoice Number') }}
++ {{ $order->invoice->invoice_no ?? '---' }} +
+