diff --git a/reports-app/frontend/src/assets/css/components/stats.css b/reports-app/frontend/src/assets/css/components/stats.css index 8a95755..b89d145 100644 --- a/reports-app/frontend/src/assets/css/components/stats.css +++ b/reports-app/frontend/src/assets/css/components/stats.css @@ -433,6 +433,55 @@ } } +/* ===== Summary Stats Inline ===== */ +/* Compact horizontal stats display for page summaries */ +.summary-stats-inline { + display: flex; + gap: var(--space-xl); + justify-content: flex-end; + margin-bottom: var(--space-md); + padding: var(--space-sm) var(--space-md); + background-color: var(--color-bg-secondary); + border-radius: var(--radius-md); + border: 1px solid var(--color-border); +} + +.summary-stats-inline .stat-item { + display: flex; + align-items: center; + gap: var(--space-sm); +} + +.summary-stats-inline .stat-label { + font-size: var(--text-sm); + color: var(--color-text-secondary); +} + +.summary-stats-inline .stat-value { + font-size: var(--text-sm); + font-weight: var(--font-semibold); + font-variant-numeric: tabular-nums; +} + +.summary-stats-inline .stat-value.positive, +.summary-stats-inline .stat-value.incasari { + color: var(--color-success); +} + +.summary-stats-inline .stat-value.negative, +.summary-stats-inline .stat-value.plati { + color: var(--color-error); +} + +/* Responsive: Stack on mobile */ +@media (max-width: 768px) { + .summary-stats-inline { + flex-direction: column; + gap: var(--space-sm); + align-items: flex-end; + } +} + /* Print Styles */ @media print { .stats-card { @@ -445,4 +494,9 @@ grid-template-columns: repeat(2, 1fr); gap: 1rem; } + + .summary-stats-inline { + border: 1px solid #ccc; + background: #f5f5f5; + } } diff --git a/reports-app/frontend/src/assets/css/vendor/primevue-overrides.css b/reports-app/frontend/src/assets/css/vendor/primevue-overrides.css index 2214944..239252f 100644 --- a/reports-app/frontend/src/assets/css/vendor/primevue-overrides.css +++ b/reports-app/frontend/src/assets/css/vendor/primevue-overrides.css @@ -80,8 +80,34 @@ transition: background-color var(--transition-fast) !important; } +/* DataTable Striped Rows - Global Pattern */ +.p-datatable .p-datatable-tbody > tr:nth-child(odd) { + background-color: #ffffff !important; +} + +.p-datatable .p-datatable-tbody > tr:nth-child(even) { + background-color: #f8f9fa !important; +} + .p-datatable .p-datatable-tbody > tr:hover { - background: var(--color-bg-secondary, #f8fafc) !important; + background-color: #e3f2fd !important; + cursor: pointer; +} + +/* Compact DataTable variant (p-datatable-sm) */ +.p-datatable-sm .p-datatable-thead > tr > th { + padding: 0.5rem 0.75rem !important; + font-weight: 600 !important; + white-space: nowrap !important; +} + +.p-datatable-sm .p-datatable-tbody > tr > td { + padding: 0.4rem 0.75rem !important; +} + +/* DataTable font size for compact tables */ +.p-datatable-sm { + font-size: 0.875rem !important; } /* ===== Card ===== */ diff --git a/reports-app/frontend/src/views/BankCashRegisterView.vue b/reports-app/frontend/src/views/BankCashRegisterView.vue index 3317d01..571efb6 100644 --- a/reports-app/frontend/src/views/BankCashRegisterView.vue +++ b/reports-app/frontend/src/views/BankCashRegisterView.vue @@ -17,7 +17,8 @@ @@ -286,17 +332,26 @@ const formatDate = (dateString) => { // Computed total sold (incasari - plati) const totalSold = computed(() => { - return (treasuryStore.totals.total_incasari || 0) - (treasuryStore.totals.total_plati || 0); + return ( + (treasuryStore.totals.total_incasari || 0) - + (treasuryStore.totals.total_plati || 0) + ); }); // Check if current filter is a VALUTA type (to show Valuta column) const isValutaType = computed(() => { - return filters.value.registerType === "CASA_VALUTA" || filters.value.registerType === "BANCA_VALUTA"; + return ( + filters.value.registerType === "CASA_VALUTA" || + filters.value.registerType === "BANCA_VALUTA" + ); }); // Check if current filter is BANCA type (for dynamic column header) const isBancaType = computed(() => { - return filters.value.registerType === "BANCA_LEI" || filters.value.registerType === "BANCA_VALUTA"; + return ( + filters.value.registerType === "BANCA_LEI" || + filters.value.registerType === "BANCA_VALUTA" + ); }); // Dynamic column header for Casa/Banca @@ -345,10 +400,10 @@ const removeDiacritics = (text) => { // Get register type label for PDF (no diacritics) const getRegisterTypeLabel = (type) => { const labels = { - "CASA_LEI": "Casa LEI", - "CASA_VALUTA": "Casa Valuta", - "BANCA_LEI": "Banca LEI", - "BANCA_VALUTA": "Banca Valuta", + CASA_LEI: "Casa LEI", + CASA_VALUTA: "Casa Valuta", + BANCA_LEI: "Banca LEI", + BANCA_VALUTA: "Banca Valuta", }; return labels[type] || type; }; @@ -356,10 +411,10 @@ const getRegisterTypeLabel = (type) => { // Get PDF title based on register type const getPdfTitle = (type) => { const titles = { - "CASA_LEI": "Registrul de Casa LEI", - "CASA_VALUTA": "Registrul de Casa Valuta", - "BANCA_LEI": "Registrul de Banca LEI", - "BANCA_VALUTA": "Registrul de Banca Valuta", + CASA_LEI: "Registrul de Casa LEI", + CASA_VALUTA: "Registrul de Casa Valuta", + BANCA_LEI: "Registrul de Banca LEI", + BANCA_VALUTA: "Registrul de Banca Valuta", }; return titles[type] || "Registrul de Casa si Banca"; }; @@ -393,7 +448,7 @@ watch( // Reset bank account selection when register type changes filters.value.bankAccount = null; await loadBankAccounts(); - } + }, ); const getRowClass = (data) => { @@ -481,13 +536,19 @@ const fetchAllData = async () => { // Add optional filters (use LOCAL date, not UTC) if (filters.value.dateFrom) { const year = filters.value.dateFrom.getFullYear(); - const month = String(filters.value.dateFrom.getMonth() + 1).padStart(2, "0"); + const month = String(filters.value.dateFrom.getMonth() + 1).padStart( + 2, + "0", + ); const day = String(filters.value.dateFrom.getDate()).padStart(2, "0"); params.date_from = `${year}-${month}-${day}`; } if (filters.value.dateTo) { const year = filters.value.dateTo.getFullYear(); - const month = String(filters.value.dateTo.getMonth() + 1).padStart(2, "0"); + const month = String(filters.value.dateTo.getMonth() + 1).padStart( + 2, + "0", + ); const day = String(filters.value.dateTo.getDate()).padStart(2, "0"); params.date_to = `${year}-${month}-${day}`; } @@ -499,7 +560,9 @@ const fetchAllData = async () => { } const apiService = (await import("../services/api")).apiService; - const response = await apiService.get("/treasury/bank-cash-register", { params }); + const response = await apiService.get("/treasury/bank-cash-register", { + params, + }); return response.data.registers || []; } catch (error) { @@ -543,7 +606,7 @@ const exportExcel = async () => { // Column order: Data, Nr., Casă/Bancă, Partener, [Valuta], Încasări, Plăți, Sold Cumulat, Explicație const exportData = allData.map((row) => { const baseData = { - "Data": row.dataact ? formatDate(row.dataact) : "", + Data: row.dataact ? formatDate(row.dataact) : "", "Nr.": row.nract || "", }; @@ -667,7 +730,10 @@ const loadData = async () => { // Format dates properly using local time if (filters.value.dateFrom) { const year = filters.value.dateFrom.getFullYear(); - const month = String(filters.value.dateFrom.getMonth() + 1).padStart(2, "0"); + const month = String(filters.value.dateFrom.getMonth() + 1).padStart( + 2, + "0", + ); const day = String(filters.value.dateFrom.getDate()).padStart(2, "0"); filterParams.date_from = `${year}-${month}-${day}`; } @@ -710,215 +776,47 @@ watch( diff --git a/reports-app/frontend/src/views/TrialBalanceView.vue b/reports-app/frontend/src/views/TrialBalanceView.vue index 40a1f14..c763392 100644 --- a/reports-app/frontend/src/views/TrialBalanceView.vue +++ b/reports-app/frontend/src/views/TrialBalanceView.vue @@ -65,7 +65,7 @@ -
+