diff --git a/locales/en.json b/locales/en.json index fff9db2..c7a733a 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1463,7 +1463,9 @@ "last_tr069": "Last TR-069:", "test_conn": "Test Connection", "threshold_hint": "Warning threshold for RX Power (-40 to -15 dBm)", - "timeout_hint": "Timeout for requests to GenieACS (5000-120000 ms)" + "timeout_hint": "Timeout for requests to GenieACS (5000-120000 ms)", + "genieacs_title": "GenieACS Settings", + "conn_live": "Connected Clients (Live)" }, "cust": { "ph_note": "Optional internal note...", @@ -1986,6 +1988,70 @@ "night_profile": "Night Profile Name (MikroTik)", "ph_night_profile": "-- Select Profile --", "night_down": "Night Download (Mbps)" + }, + "col": { + "title": "Collector Management", + "add_new": "Add New Collector", + "add": "Add Collector", + "list": "Collector List", + "all_paymode": "All Payment Modes", + "direct": "Direct Paid", + "approval": "Needs Approval", + "all_status": "All Account Statuses", + "phone": "Phone No.", + "area": "Assignment Area", + "paymode": "Payment Mode", + "del": "Delete Collector", + "full_name": "Full Name", + "area_region": "Area / Assignment Region", + "opt_all_area": "-- All Areas / Unrestricted --" + }, + "mon": { + "title": "System Monitoring", + "updated": "Last update:", + "issues": "Issues", + "warnings": "Warnings", + "metrics": "System Metrics", + "perf": "Performance Summary (Last 10 Samples)", + "avg": "Average" + }, + "vou": { + "no_profile": "No profile with price/duration (Mikhmon)", + "pick_profile": "-- Select Profile --" + }, + "cr": { + "title": "Cashier Report", + "all_cashier": "All Cashiers", + "tx": "transactions", + "invoice": "Invoices:", + "topup": "Agent Deposit:", + "history": "Transaction History", + "th_type": "Type", + "th_detail": "Detail", + "th_note": "Note", + "badge_invoice": "INVOICE" + }, + "ca": { + "today_status": "Today Status", + "checked_in": "Checked In", + "checked_out": "Checked Out", + "work_duration": "Work Duration", + "note_in": "Check-in Note", + "note_out": "Check-out Note", + "photo": "Attendance Photo", + "ph_note_out": "Check-out note (optional)", + "no_photo_out": "No photo taken yet. A photo is required for check-out.", + "not_checked_in": "Not Checked In", + "ph_note_in": "Check-in note (optional)", + "no_photo_in": "No photo taken yet. A photo is required for check-in.", + "total_days": "Total Days", + "this_month": "This Month", + "full_days": "Full Days", + "in_out": "Check-in & out", + "total_hours": "Total Hours", + "work_hours": "Work hours", + "avg": "Average", + "hours_per_day": "Hours/day" } }, "tech": { diff --git a/locales/id.json b/locales/id.json index 372d231..57cdc47 100644 --- a/locales/id.json +++ b/locales/id.json @@ -1464,7 +1464,9 @@ "last_tr069": "TR-069 terakhir:", "test_conn": "Test Koneksi", "threshold_hint": "Threshold untuk warning RX Power (-40 sampai -15 dBm)", - "timeout_hint": "Timeout untuk request ke GenieACS (5000-120000 ms)" + "timeout_hint": "Timeout untuk request ke GenieACS (5000-120000 ms)", + "genieacs_title": "Pengaturan GenieACS", + "conn_live": "Klien Terhubung (Live)" }, "cust": { "ph_note": "Catatan internal opsional...", @@ -1987,6 +1989,70 @@ "night_profile": "Nama Profile Malam (MikroTik)", "ph_night_profile": "-- Pilih Profile --", "night_down": "Download Malam (Mbps)" + }, + "col": { + "title": "Manajemen Kolektor", + "add_new": "Tambah Kolektor Baru", + "add": "Tambah Kolektor", + "list": "Daftar Kolektor", + "all_paymode": "Semua Mode Pembayaran", + "direct": "Langsung Lunas", + "approval": "Perlu Approval", + "all_status": "Semua Status Akun", + "phone": "No. HP", + "area": "Area Tugas", + "paymode": "Mode Pembayaran", + "del": "Hapus Kolektor", + "full_name": "Nama Lengkap", + "area_region": "Area / Wilayah Tugas", + "opt_all_area": "-- Semua Area / Bebas --" + }, + "mon": { + "title": "Monitoring Sistem", + "updated": "Update terakhir:", + "issues": "Masalah", + "warnings": "Peringatan", + "metrics": "Metrik Sistem", + "perf": "Ringkasan Performa (10 Sample Terakhir)", + "avg": "Rata-rata" + }, + "vou": { + "no_profile": "Tidak ada profile dengan harga/durasi (Mikhmon)", + "pick_profile": "-- Pilih Profile --" + }, + "cr": { + "title": "Laporan Kasir", + "all_cashier": "Semua Kasir", + "tx": "transaksi", + "invoice": "Tagihan:", + "topup": "Deposit Agent:", + "history": "Riwayat Transaksi", + "th_type": "Jenis", + "th_detail": "Detail", + "th_note": "Catatan", + "badge_invoice": "TAGIHAN" + }, + "ca": { + "today_status": "Status Hari Ini", + "checked_in": "Sudah Check-in", + "checked_out": "Sudah Check-out", + "work_duration": "Durasi Kerja", + "note_in": "Catatan Check-in", + "note_out": "Catatan Check-out", + "photo": "Foto Absensi", + "ph_note_out": "Catatan check-out (opsional)", + "no_photo_out": "Belum ada foto diambil. Foto wajib untuk check-out.", + "not_checked_in": "Belum Check-in", + "ph_note_in": "Catatan check-in (opsional)", + "no_photo_in": "Belum ada foto diambil. Foto wajib untuk check-in.", + "total_days": "Total Hari", + "this_month": "Bulan ini", + "full_days": "Hari Lengkap", + "in_out": "Check-in & out", + "total_hours": "Total Jam", + "work_hours": "Jam kerja", + "avg": "Rata-rata", + "hours_per_day": "Jam/hari" } }, "tech": { diff --git a/views/admin/cashier_attendance.ejs b/views/admin/cashier_attendance.ejs index 805894d..9d144ae 100644 --- a/views/admin/cashier_attendance.ejs +++ b/views/admin/cashier_attendance.ejs @@ -103,14 +103,14 @@
-
Status Hari Ini
+
<%= t('admin.ca.today_status','Status Hari Ini') %>
<% if (todayAttendance) { %> <% if (todayAttendance.status === 'checked_in') { %> - Sudah Check-in + <%= t('admin.ca.checked_in','Sudah Check-in') %> <% } else { %> - Sudah Check-out + <%= t('admin.ca.checked_out','Sudah Check-out') %> <% } %>
@@ -124,7 +124,7 @@ <%= formatDateLocal(todayAttendance.check_out_time) %>
- Durasi Kerja + <%= t('admin.ca.work_duration','Durasi Kerja') %> <%= Math.floor(todayAttendance.work_duration_minutes / 60) %> jam <%= todayAttendance.work_duration_minutes % 60 %> menit @@ -134,21 +134,21 @@ <% if (todayAttendance.check_in_note) { %>
- Catatan Check-in + <%= t('admin.ca.note_in','Catatan Check-in') %> <%= todayAttendance.check_in_note %>
<% } %> <% if (todayAttendance.check_out_note) { %>
- Catatan Check-out + <%= t('admin.ca.note_out','Catatan Check-out') %> <%= todayAttendance.check_out_note %>
<% } %> <% if (todayAttendance.check_in_photo || todayAttendance.check_out_photo) { %>
- Foto Absensi + <%= t('admin.ca.photo','Foto Absensi') %> <% if (todayAttendance.check_in_photo) { %> @@ -167,7 +167,7 @@ <% } %> <% if (todayAttendance.status === 'checked_in') { %> - +
@@ -177,7 +177,7 @@
<%= t('collector.tap_camera','Ketuk tombol kamera untuk mengambil foto selfie') %>
-
Belum ada foto diambil. Foto wajib untuk check-out.
+
<%= t('admin.ca.no_photo_out','Belum ada foto diambil. Foto wajib untuk check-out.') %>
<%= t('collector.selfie_required','Foto wajib') %>
@@ -195,10 +195,10 @@ <% } %> <% } else { %> - Belum Check-in + <%= t('admin.ca.not_checked_in','Belum Check-in') %>

Silakan lakukan check-in untuk memulai hari kerja Anda.

- +
@@ -208,7 +208,7 @@
<%= t('collector.tap_camera','Ketuk tombol kamera untuk mengambil foto selfie') %>
-
Belum ada foto diambil. Foto wajib untuk check-in.
+
<%= t('admin.ca.no_photo_in','Belum ada foto diambil. Foto wajib untuk check-in.') %>
<%= t('collector.selfie_required','Foto wajib') %>
@@ -235,31 +235,31 @@
-
Total Hari
+
<%= t('admin.ca.total_days','Total Hari') %>
<%= summary.total_days || 0 %>
-
Bulan ini
+
<%= t('admin.ca.this_month','Bulan ini') %>
-
Hari Lengkap
+
<%= t('admin.ca.full_days','Hari Lengkap') %>
<%= summary.completed_days || 0 %>
-
Check-in & out
+
<%= t('admin.ca.in_out','Check-in & out') %>
-
Total Jam
+
<%= t('admin.ca.total_hours','Total Jam') %>
<%= summary.total_minutes ? Math.floor(summary.total_minutes / 60) : 0 %>
-
Jam kerja
+
<%= t('admin.ca.work_hours','Jam kerja') %>
-
Rata-rata
+
<%= t('admin.ca.avg','Rata-rata') %>
<%= summary.avg_minutes ? Math.floor(summary.avg_minutes / 60) : 0 %>
-
Jam/hari
+
<%= t('admin.ca.hours_per_day','Jam/hari') %>
diff --git a/views/admin/cashier_reports.ejs b/views/admin/cashier_reports.ejs index 521adf6..ba284be 100644 --- a/views/admin/cashier_reports.ejs +++ b/views/admin/cashier_reports.ejs @@ -2,7 +2,7 @@ - Laporan Kasir | <%= company %> + <%= t('admin.cr.title','Laporan Kasir') %> | <%= company %> @@ -14,7 +14,7 @@
- Laporan Kasir + <%= t('admin.cr.title','Laporan Kasir') %>
<%= company %> @@ -35,7 +35,7 @@
<% if (cashiers && cashiers.length > 1) { %> - - - + + + @@ -53,10 +53,10 @@ <%= t('pwa.field.name','Nama') %> Username Password - No. HP - Area Tugas + <%= t('admin.col.phone','No. HP') %> + <%= t('admin.col.area','Area Tugas') %> <%= t('common.status','Status') %> - Mode Pembayaran + <%= t('admin.col.paymode','Mode Pembayaran') %> <%= t('common.actions','Aksi') %> @@ -86,7 +86,7 @@
- +
@@ -103,16 +103,16 @@
-
Tambah Kolektor Baru
+
<%= t('admin.col.add_new','Tambah Kolektor Baru') %>
-
+
-
+
- + - - + +
Mode saat ini: Menunggu approval admin/kasir sebelum invoice menjadi lunas. @@ -149,14 +149,14 @@
Edit Data Kolektor
-
+
-
+
- + - - + +
Mode saat ini: Menunggu approval admin/kasir sebelum invoice menjadi lunas. diff --git a/views/admin/dashboard.ejs b/views/admin/dashboard.ejs index 5919349..ed960ab 100644 --- a/views/admin/dashboard.ejs +++ b/views/admin/dashboard.ejs @@ -248,7 +248,7 @@ - - Monitoring Sistem + <%= t('admin.mon.title','Monitoring Sistem') %>
-

Update terakhir: <%= new Date(healthStatus.timestamp).toLocaleString('id-ID') %>

+

<%= t('admin.mon.updated','Update terakhir:') %> <%= new Date(healthStatus.timestamp).toLocaleString('id-ID') %>

- + <% if (healthStatus.issues.length > 0 || healthStatus.warnings.length > 0) { %>
<% if (healthStatus.issues.length > 0) { %>
-
Issues (<%= healthStatus.issues.length %>)
+
<%= t('admin.mon.issues','Masalah') %> (<%= healthStatus.issues.length %>)
<% healthStatus.issues.forEach(issue => { @@ -336,7 +336,7 @@ <% if (healthStatus.warnings.length > 0) { %>
-
Warnings (<%= healthStatus.warnings.length %>)
+
<%= t('admin.mon.warnings','Peringatan') %> (<%= healthStatus.warnings.length %>)
<% healthStatus.warnings.forEach(warning => { @@ -354,7 +354,7 @@
-
Metrik Sistem
+
<%= t('admin.mon.metrics','Metrik Sistem') %>
@@ -491,12 +491,12 @@
-
Ringkasan Performa (10 Sample Terakhir)
+
<%= t('admin.mon.perf','Ringkasan Performa (10 Sample Terakhir)') %>
-

Rata-rata

+

<%= t('admin.mon.avg','Rata-rata') %>

diff --git a/views/admin/vouchers.ejs b/views/admin/vouchers.ejs index 9ba77e0..24821c6 100644 --- a/views/admin/vouchers.ejs +++ b/views/admin/vouchers.ejs @@ -377,11 +377,11 @@ const sel = document.getElementById('profileName'); sel.innerHTML = ''; if (filtered.length === 0) { - sel.innerHTML = ''; + sel.innerHTML = ''; document.getElementById('profileHint').innerText = ''; return; } - sel.insertAdjacentHTML('beforeend', ''); + sel.insertAdjacentHTML('beforeend', ''); for (const x of filtered) { const label = `${x.raw.name} (Rp ${Number(x.meta.price || 0).toLocaleString('id-ID')} • ${x.meta.validity})`; sel.insertAdjacentHTML('beforeend', ``);
CPU