{{ t('supplements') }}
Gestion des suppléments{{ t('enableSupplements') }}
{{ t('enableSupplementsNote') }}
{{ t('addSupplement') }}
{{ t('supplementsList') }} ({{ supplements.length }})
{{ supp.name }}
{{ supp.type === 'note' ? t('note') : t('supplement') }}{{ t('noSupplements') }}
{{ t('lesCharges') }}
Gestion des dépensesCharge Month {{ currentMonthDisplay }}
{{ t('currentMonthCharges') }}
{{ t('newCharge') }}
{{ t('chargesThisMonth') }} ({{ currentMonthCharges.length }})
{{ t('noChargesThisMonth') }}
{{ charge.name }}
{{ formatChargeDate(charge.charge_date) }}
{{ t('chargesArchive') }}
{{ t('noArchive') }}
Charge Month {{ month.label }}
{{ month.charges.length }} charges
{{ t('printersSettings') }}
Configuration des imprimantes{{ t('printerBridgeUrlNote') }}
{{ t('printStationToggleNote') }}
{{ t('printer' + key.charAt(0).toUpperCase() + key.slice(1)) }}
{{ t('generalSettings') }}
Configuration de l'application{{ t('sidebarSettings') }}
{{ t('sidebarNote') }}
{{ t('userPermissionsTitle') }}
{{ t('userPermissionsNote') }}
{{ t('noUsersForPermissions') }}
{{ t('userZonePermissionsTitle') }}
{{ t('userZonePermissionsNote') }}
{{ t('noUsersForPermissions') }}
{{ t('noZonesYet') }}
{{ t('loginBackgroundImage') }}
{{ t('imageUploaded') }}
{{ t('clickToChange') }}
{{ t('clickOrDragBackground') }}
PNG, JPG, WEBP (Max 5MB)
{{ t('loginBackgroundHint') }}
{{ t('appColorSettings') }}
{{ t('currentColor') }}
{{ generalSettings.appColor.toUpperCase() }}
{{ t('colorName') }}
{{ getCurrentColorName() }}
{{ t('presetColors') }}
{{ t('customColor') }}
{{ t('colorHint') }}
{{ t('secondColor') }}
{{ t('gradientDirection') }}
{{ t('themeSettings') }}
{{ t('darkMode') }}
{{ t('darkModeDesc') }}
{{ t('lightMode') }}
{{ t('lightModeDesc') }}
{{ t('tableStatusImages') }}
{{ t('tableStatusImagesNote') }}
{{ t('tableFree') }}
{{ t('tableOccupied') }}
{{ t('tableReserved') }}
{{ t('gestionLivraison') }}
{{ t('gestionGlovo') }}
{{ t('gestionEmporte') }}
{{ t('languageSettings') }}
{{ t('changeDateTime') }}
{{ t('timeToApply') }}
{{ String(customDate.year) }}-{{ String(customDate.month).padStart(2, '0') }}-{{ String(customDate.day).padStart(2, '0') }}
{{ String(customTime.hours).padStart(2, '0') }}:{{ String(customTime.minutes).padStart(2, '0') }}
ℹ️ {{ t('timeNote') }}
{{ t('dayStartSettings') }}
{{ t('dayStartHourLabel') }}
{{ generalSettings.dayStartHour || '00:00' }} → {{ getDayEndPreview() }}
ℹ️ {{ t('dayStartHint') }}
{{ t('annulationTicketSettings') }}
{{ t('enableAnnulationTicket') }}
{{ t('enableAnnulationTicketNote') }}
{{ t('posCategorySize') }}
{{ t('posCategorySizeHint') }}
{{ t('posProductSize') }}
{{ t('posProductSizeHint') }}
{{ t('posCategorySizeMobile') }}
{{ t('posCategorySizeMobileHint') }}
{{ t('posProductSizeMobile') }}
{{ t('posProductSizeMobileHint') }}
{{ t('laCaisse') }}
Table{{ zone.name }}
{{ t('noTables') }} - {{ zone.name }}
{{ t('gestionTable') }}
Zones et tables{{ t('zonesManagement') }}
{{ t('dragZoneHint') }}
{{ t('addTable') }} - {{ getZoneName(activeGestionTab) }}
{{ t('tablesList') }} - {{ getZoneName(activeGestionTab) }} ({{ getZoneTables(activeGestionTab).length }})
| {{ (activeGestionTab === livraisonZoneId || activeGestionTab === glovoZoneId || activeGestionTab === emporteZoneId) ? t('commandeNumber') : t('tableNumber') }} | {{ t('image') }} | {{ t('status') }} | {{ t('orderTotal') }} | {{ t('actions') }} |
|---|---|---|---|---|
| {{ table.number }} | {{ table.status === 'free' ? t('tableFree') : table.status === 'occupied' ? t('tableOccupied') : table.status === 'paid' ? t('tablePaid') : t('tableReserved') }} | {{ table.orderTotal ? t('dh') + ' ' + table.orderTotal.toFixed(2) : '-' }} | ||
| {{ t('noTables') }} | ||||
{{ t('gestionClient') }}
Clients et dettes{{ c.name }}
{{ c.phone || '-' }}
{{ c.address || '-' }}
{{ t('noClients') }}
{{ selectedClient.name }}
{{ t('unpaidInvoices') }} ({{ clientUnpaidDebts(selectedClient.id).length }})
{{ t('dh') }} {{ parseFloat(debt.total).toFixed(2) }} ({{ t('remaining') }}: {{ parseFloat(debt.remaining).toFixed(2) }})
{{ t('avanceGiven') }}: {{ t('dh') }} {{ parseFloat(debt.paid_amount).toFixed(2) }}
{{ debt.timestamp || debt.date }}
{{ t('creditHistory') }}
{{ t('dh') }} {{ parseFloat(debt.total).toFixed(2) }}
{{ t('dateAdded') }}: {{ debt.timestamp || debt.date }} {{ t('by') }} {{ debt.server || '-' }}
{{ t('datePaid') }}: {{ debt.paid_date || '-' }} {{ debt.paid_date ? (t('by') + ' ' + (debt.paid_by || '-')) : '' }}
{{ t('selectPaymentMethod') }}
{{ creditModalStep === 1 ? t('selectClient') : t('step2Avance') }}
{{ c.name }}
{{ c.phone || '-' }}
{{ t('client') }}
{{ selectedCreditClientObj && selectedCreditClientObj.name }}
{{ t('dh') }} {{ (paymentContext === 'caisse' ? cartTotal : selectedTableTotal).toFixed(2) }}
{{ t('total') }}
{{ t('addClient') }}
{{ t('laCaisse') }}
{{ t('pos') }}{{ t('productCategories') }}
{{ cat }}
{{ t('noCategories') }}
{{ t('products') }}: {{ currentCategoryView }}
{{ item.name }}
{{ t('dh') }} {{ item.price }}
{{ t('noProducts') }}
{{ t('currentOrder') }}
{{ t('order') }} #{{ currentOrderId }}
{{ item.name }}
{{ t('cartEmpty') }}
{{ t('clickToAdd') }}
{{ t('dashboardOverview') }}
Vue d'ensemble{{ t('laCaisse') }} ({{ dashboardPeriodLabel }})
{{ t('dh') }} {{ todaySales.totalRevenue }}
{{ t('totalItems') }}
{{ menuItems.length }}
{{ t('totalOrders') }}
{{ todayOrders.length }}
Meilleur Serveur
{{ bestServerInfo.name }}
{{ t('dh') }} {{ bestServerInfo.total }}
{{ bestServerInfo.orders }} commandes
{{ t('totalTPEToday') }}
{{ t('dh') }} {{ todayTPETotal.toFixed(2) }}
{{ todayTPECount }} {{ t('ticketsWord') }}
{{ t('totalLivraisonToday') }}
{{ t('dh') }} {{ todayLivraisonTotal.toFixed(2) }}
{{ todayLivraisonCount }} {{ t('ticketsWord') }}
{{ t('totalGlovoToday') }}
{{ t('dh') }} {{ todayGlovoTotal.toFixed(2) }}
{{ todayGlovoCount }} {{ t('ticketsWord') }}
{{ t('totalEmporteToday') }}
{{ t('dh') }} {{ todayEmporteTotal.toFixed(2) }}
{{ todayEmporteCount }} {{ t('ticketsWord') }}
{{ salesTrendChartTitle }}
{{ t('revenueByProduct') }}
{{ t('clientOverview') }}
{{ t('totalClients') }}
{{ totalClientsCount }}
{{ t('clientsWithDebt') }}
{{ clientsWithDebtCount }}
{{ t('totalOutstandingDebt') }}
{{ t('dh') }} {{ totalOutstandingDebt.toFixed(2) }}
{{ t('debtCollectedToday') }}
{{ t('dh') }} {{ todayCollectedDebts.toFixed(2) }}
{{ t('topDebtorClients') }}
{{ t('noDebtorClients') }}
{{ t('tpeOverview') }}
{{ t('totalTPEToday') }}
{{ t('dh') }} {{ todayTPETotal.toFixed(2) }}
{{ t('nbTicketsTPE') }}
{{ todayTPECount }}
{{ t('avgTPE') }}
{{ t('dh') }} {{ (todayTPECount > 0 ? (todayTPETotal / todayTPECount) : 0).toFixed(2) }}
{{ t('lastTPETickets') }}
| {{ t('ticketNumber') }} | {{ t('dateTime') }} | Serveur | {{ t('total') }} |
|---|---|---|---|
| #{{ tk.orderId }} | {{ formatDateTime(tk.timestamp || tk.report_timestamp) }} | {{ tk.server || 'Inconnu' }} | {{ parseFloat(tk.total).toFixed(2) }} DH |
| {{ t('noTPEPayments') }} | |||
{{ t('livraisonOverview') }}
{{ t('totalLivraisonToday') }}
{{ t('dh') }} {{ todayLivraisonTotal.toFixed(2) }}
{{ t('nbCommandesLivraison') }}
{{ todayLivraisonCount }}
{{ t('avgLivraison') }}
{{ t('dh') }} {{ (todayLivraisonCount > 0 ? (todayLivraisonTotal / todayLivraisonCount) : 0).toFixed(2) }}
{{ t('lastLivraisonTickets') }}
| {{ t('ticketNumber') }} | {{ t('dateTime') }} | Serveur | {{ t('total') }} |
|---|---|---|---|
| #{{ tk.orderId }} | {{ formatDateTime(tk.timestamp || tk.report_timestamp) }} | {{ tk.server || 'Inconnu' }} | {{ parseFloat(tk.total).toFixed(2) }} DH |
| {{ t('noLivraisonOrders') }} | |||
{{ t('glovoOverview') }}
{{ t('totalGlovoToday') }}
{{ t('dh') }} {{ todayGlovoTotal.toFixed(2) }}
{{ t('nbCommandesGlovo') }}
{{ todayGlovoCount }}
{{ t('avgGlovo') }}
{{ t('dh') }} {{ (todayGlovoCount > 0 ? (todayGlovoTotal / todayGlovoCount) : 0).toFixed(2) }}
{{ t('lastGlovoTickets') }}
| {{ t('ticketNumber') }} | {{ t('dateTime') }} | Serveur | {{ t('total') }} |
|---|---|---|---|
| #{{ tk.orderId }} | {{ formatDateTime(tk.timestamp || tk.report_timestamp) }} | {{ tk.server || 'Inconnu' }} | {{ parseFloat(tk.total).toFixed(2) }} DH |
| {{ t('noGlovoOrders') }} | |||
{{ t('emporteOverview') }}
{{ t('totalEmporteToday') }}
{{ t('dh') }} {{ todayEmporteTotal.toFixed(2) }}
{{ t('nbCommandesEmporte') }}
{{ todayEmporteCount }}
{{ t('avgEmporte') }}
{{ t('dh') }} {{ (todayEmporteCount > 0 ? (todayEmporteTotal / todayEmporteCount) : 0).toFixed(2) }}
{{ t('lastEmporteTickets') }}
| {{ t('ticketNumber') }} | {{ t('dateTime') }} | Serveur | {{ t('total') }} |
|---|---|---|---|
| #{{ tk.orderId }} | {{ formatDateTime(tk.timestamp || tk.report_timestamp) }} | {{ tk.server || 'Inconnu' }} | {{ parseFloat(tk.total).toFixed(2) }} DH |
| {{ t('noEmporteOrders') }} | |||
{{ t('bestSelling') }} ({{ t('today') }})
| # | {{ t('product') }} | {{ t('orders') }} | {{ t('quantity') }} | {{ t('revenue') }} |
|---|---|---|---|---|
| {{ index + 1 }} | {{ product.name }} | {{ product.orderCount }} | {{ product.totalQuantity }} | {{ t('dh') }} {{ product.revenue }} |
| {{ t('noDataToday') }} | ||||
{{ t('ticketsManagement') }}
Historique des tickets{{ t('printedTickets') }}
{{ filteredTickets.length }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | Serveur | {{ t('paymentMethodCol') }} | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|---|
| #{{ ticket.orderId }} |
{{ formatTicketDateTime(ticket.timestamp) }}
|
{{ ticket.type }} | {{ ticket.server || 'Inconnu' }} | {{ ticket.paymentMethod === 'TPE' ? t('tpe') : (ticket.paymentMethod === 'Credit Payment' ? t('credit') : t('espece')) }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noTickets') }} | ||||||
Tickets PAR SERVEUR
| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | {{ t('paymentMethodCol') }} | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} |
{{ formatTicketDateTime(ticket.timestamp) }}
|
{{ ticket.type }} | {{ ticket.paymentMethod === 'TPE' ? t('tpe') : (ticket.paymentMethod === 'Credit Payment' ? t('credit') : t('espece')) }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ selectedTicketServer ? `Aucun ticket pour ${selectedTicketServer}` : 'Veuillez sélectionner un serveur' }} | |||||
{{ t('manageOrders') }}
Suivi des commandes| {{ t('orderId') }} | {{ t('customer') }} | {{ t('date') }} | {{ t('total') }} | {{ t('status') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
{{ t('noOrdersFound') }} | |||||
| {{ order.id }} | {{ order.customerName }} {{ order.phone }} |
{{ formatDate(order.timestamp) }} | {{ t('dh') }} {{ order.total }} | ||
{{ t('articles') }}
{{ t('productManagement') }}| {{ t('image') }} | {{ t('name') }} | {{ t('category') }} | {{ t('price') }} | {{ t('stock') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| {{ item.name }} | {{ item.category }} | {{ t('dh') }} {{ item.price }} |
{{ item.stock }}
-
|
||
| {{ t('noArticles') }} | |||||
{{ t('categories') }}
{{ t('sectionManagement') }}{{ cat }}
{{ menuItems.filter(i=>i.category===cat).length }} {{ t('items') }}{{ t('ticketSettings') }}
{{ t('receiptSettings') }} - {{ t('configuration') }}{{ t('storeInfo') }}
{{ t('logoSettings') }}
{{ t('logoUploaded') }}
{{ t('clickToChange') }}
{{ t('clickOrDragLogo') }}
PNG, JPG (Max 2MB)
{{ t('logoSizeHint') }}
{{ t('printKitchen') }}
{{ t('enableKitchen') }}
{{ t('wifiSettings') }}
{{ t('socialMedia') }}
{{ t('footerMessage') }}
{{ t('footerMessageHint') }}
{{ t('livePreview') }}
{{ settings.store_name || 'FOX BURGER' }}
| Articles | Prix | Qte | Total |
|---|---|---|---|
| Item 1 | 10.00 | 1.00 | 10.00 |
| Item 2 | 20.00 | 2.00 | 40.00 |
Adresse: {{ settings.address || '58 Lot Al Massira LaColine' }}
Tel: {{ settings.phone || '06107007184' }}
{{ t('previewNote') }}
{{ t('account') }}
{{ t('userManagement') }}{{ editingUser ? t('editUser') : t('addUser') }}
| {{ t('username') }} | {{ t('role') }} | {{ t('name') }} | {{ t('contact') }} | {{ t('actions') }} |
|---|---|---|---|---|
| {{ user.username }} | {{ user.role === 'admin' ? t('admin') : user.role === 'gerant' ? t('gerant') : t('employe') }} | {{ user.name }} | {{ user.contact }} | |
| {{ t('noUsers') }} | ||||
{{ t('dailyReport') }}
{{ t('advancedReports') }}{{ t('totalSales') }}
{{ t('dh') }} {{ reportStats.totalSales }}
{{ t('totalOrders') }}
{{ reportStats.totalOrders }}
{{ t('avgOrder') }}
{{ t('dh') }} {{ reportStats.avgOrder }}
{{ t('topCategory') }}
{{ reportStats.topCategory || '-' }}
Rapport du Jour
{{ ch.label }}
| {{ t('product') }} | {{ t('quantity') }} | Prix | {{ t('total') }} |
|---|---|---|---|
| {{ prod.name }} | {{ prod.quantity }} | {{ (prod.revenue / prod.quantity).toFixed(2) }} DH | {{ prod.revenue.toFixed(2) }} DH |
| {{ t('noProductsPeriod') }} | |||
{{ t('debtsCollectedSection') }}
| {{ t('client') }} | {{ t('date') }} | {{ t('total') }} |
|---|---|---|
| {{ d.customerName || d.customer_name || d.client_name || d.clientName || '-' }} | {{ formatDateTime(d.timestamp || d.date) }} | {{ parseFloat(d.total).toFixed(2) }} DH |
| {{ t('noDebtsCollectedPeriod') }} | ||
{{ t('reglerParTPE') }}
| {{ t('ticketNumber') }} | {{ t('date') }} | Serveur | {{ t('total') }} |
|---|---|---|---|
| #{{ tk.orderId }} | {{ formatDateTime(tk.timestamp || tk.report_timestamp) }} | {{ tk.server || 'Inconnu' }} | {{ parseFloat(tk.total).toFixed(2) }} DH |
| {{ t('noTPEPayments') }} | |||
Rapport Par Serveur
| {{ t('product') }} | {{ t('quantity') }} | Prix | {{ t('total') }} |
|---|---|---|---|
| {{ prod.name }} | {{ prod.quantity }} | {{ (prod.revenue / prod.quantity).toFixed(2) }} DH | {{ prod.revenue.toFixed(2) }} DH |
| {{ selectedServer ? 'Aucune vente pour ce serveur' : 'Veuillez sélectionner un serveur' }} | |||
{{ t('ordersLog') }}
| {{ t('date') }} | {{ t('orderId') }} | {{ t('type') }} | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|
| {{ formatDateTime(order.timestamp || order.date) }} | #{{ order.orderId }} | {{ t('order') }} | {{ parseFloat(order.total).toFixed(2) }} DH | |
| {{ t('noOrders') }} | ||||
{{ t('monRapportJour') }}
{{ currentUser?.name || currentUser?.username }}{{ currentUser?.name || currentUser?.username }}
| {{ t('product') }} | {{ t('quantity') }} | Prix | {{ t('total') }} |
|---|---|---|---|
| {{ prod.name }} | {{ prod.quantity }} | {{ (prod.revenue / prod.quantity).toFixed(2) }} DH | {{ prod.revenue.toFixed(2) }} DH |
| {{ t('noProductsPeriod') }} | |||
{{ t('myTickets') }}
{{ currentUser?.name || currentUser?.username }}{{ t('myTickets') }}
{{ myFilteredTickets.length }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | {{ t('paymentMethodCol') }} | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} |
{{ formatTicketDateTime(ticket.timestamp) }}
|
{{ ticket.type }} | {{ ticket.paymentMethod === 'TPE' ? t('tpe') : (ticket.paymentMethod === 'Credit Payment' ? t('credit') : t('espece')) }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noTickets') }} | |||||
{{ t('gestionPaymentTPE') }}
Paiements par carte{{ t('totalTPEPeriod') }}
{{ t('dh') }} {{ tpeTotal.toFixed(2) }}
{{ t('nbTicketsTPE') }}
{{ tpeCount }}
{{ t('avgTPE') }}
{{ t('dh') }} {{ tpeAvg.toFixed(2) }}
{{ t('ticketsTPEList') }}
{{ tpeCount }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | Serveur | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} | {{ formatTicketDateTime(ticket.timestamp) }} | {{ ticket.type }} | {{ ticket.server || 'Inconnu' }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noTPEPayments') }} | |||||
{{ t('gestionLivraison') }}
Commandes à livrer{{ t('noLivraisonZoneYet') }}
{{ t('totalLivraisonPeriod') }}
{{ t('dh') }} {{ livraisonTotal.toFixed(2) }}
{{ t('nbCommandesLivraison') }}
{{ livraisonCount }}
{{ t('avgLivraison') }}
{{ t('dh') }} {{ livraisonAvg.toFixed(2) }}
{{ t('ticketsLivraisonList') }}
{{ livraisonCount }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | Serveur | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} | {{ formatTicketDateTime(ticket.timestamp) }} | {{ ticket.paymentMethod }} | {{ ticket.server || 'Inconnu' }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noLivraisonOrders') }} | |||||
{{ t('gestionGlovo') }}
Commandes Glovo{{ t('noGlovoZoneYet') }}
{{ t('totalGlovoPeriod') }}
{{ t('dh') }} {{ glovoTotal.toFixed(2) }}
{{ t('nbCommandesGlovo') }}
{{ glovoCount }}
{{ t('avgGlovo') }}
{{ t('dh') }} {{ glovoAvg.toFixed(2) }}
{{ t('ticketsGlovoList') }}
{{ glovoCount }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | Serveur | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} | {{ formatTicketDateTime(ticket.timestamp) }} | {{ ticket.paymentMethod }} | {{ ticket.server || 'Inconnu' }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noGlovoOrders') }} | |||||
{{ t('gestionEmporte') }}
Commandes Emporte{{ t('noEmporteZoneYet') }}
{{ t('totalEmportePeriod') }}
{{ t('dh') }} {{ emporteTotal.toFixed(2) }}
{{ t('nbCommandesEmporte') }}
{{ emporteCount }}
{{ t('avgEmporte') }}
{{ t('dh') }} {{ emporteAvg.toFixed(2) }}
{{ t('ticketsEmporteList') }}
{{ emporteCount }} ticket(s)| {{ t('ticketNumber') }} | {{ t('dateTime') }} | {{ t('type') }} | Serveur | {{ t('total') }} | {{ t('actions') }} |
|---|---|---|---|---|---|
| #{{ ticket.orderId }} | {{ formatTicketDateTime(ticket.timestamp) }} | {{ ticket.paymentMethod }} | {{ ticket.server || 'Inconnu' }} | {{ parseFloat(ticket.total).toFixed(2) }} DH | |
| {{ t('noEmporteOrders') }} | |||||