Aggiunte stored procedure più utili le altre pfff

This commit is contained in:
2026-07-05 18:48:29 +02:00
parent 457c3eacf6
commit 4f41b50d37
10 changed files with 1578 additions and 156 deletions
+367 -23
View File
@@ -91,7 +91,9 @@
}
/* ---- Reset & Base ---- */
*, *::before, *::after {
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
@@ -113,10 +115,23 @@ body {
}
/* Scrollbar */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--text-muted); border-radius: var(--radius-full); }
::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); }
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--text-muted);
border-radius: var(--radius-full);
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-tertiary);
}
/* ---- Sidebar ---- */
.sidebar {
@@ -274,8 +289,15 @@ body {
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 8px rgba(34, 197, 94, 0.3); }
50% { box-shadow: 0 0 14px rgba(34, 197, 94, 0.6); }
0%,
100% {
box-shadow: 0 0 8px rgba(34, 197, 94, 0.3);
}
50% {
box-shadow: 0 0 14px rgba(34, 197, 94, 0.6);
}
}
/* ---- Main Content ---- */
@@ -369,8 +391,15 @@ body {
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* ---- Loading ---- */
@@ -394,7 +423,9 @@ body {
}
@keyframes spin {
to { transform: rotate(360deg); }
to {
transform: rotate(360deg);
}
}
/* ---- Buttons ---- */
@@ -712,7 +743,7 @@ body {
}
.ticket-table tbody tr.selected {
background: rgba(99, 102, 241, 0.08);
background: rgba(160, 65, 71, 0.15);
box-shadow: inset 3px 0 0 var(--accent-primary);
}
@@ -901,24 +932,27 @@ body {
/* ---- Batch Actions Bar ---- */
.batch-bar {
display: none;
display: flex;
align-items: center;
gap: var(--space-md);
padding: var(--space-sm) var(--space-md);
margin-bottom: var(--space-md);
background: linear-gradient(135deg, rgba(99, 102, 241, 0.12), rgba(139, 92, 246, 0.08));
background: linear-gradient(135deg, rgba(160, 65, 71, 0.15), rgba(160, 65, 71, 0.15));
border: 1px solid var(--border-accent);
border-radius: var(--radius-lg);
animation: slideDown 0.2s ease-out;
}
.batch-bar.visible {
display: flex;
}
@keyframes slideDown {
from { opacity: 0; transform: translateY(-8px); }
to { opacity: 1; transform: translateY(0); }
from {
opacity: 0;
transform: translateY(-8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.batch-count {
@@ -1409,13 +1443,27 @@ body {
}
@keyframes toastIn {
from { opacity: 0; transform: translateX(40px) scale(0.95); }
to { opacity: 1; transform: translateX(0) scale(1); }
from {
opacity: 0;
transform: translateX(40px) scale(0.95);
}
to {
opacity: 1;
transform: translateX(0) scale(1);
}
}
@keyframes toastOut {
from { opacity: 1; transform: translateX(0) scale(1); }
to { opacity: 0; transform: translateX(40px) scale(0.95); }
from {
opacity: 1;
transform: translateX(0) scale(1);
}
to {
opacity: 0;
transform: translateX(40px) scale(0.95);
}
}
/* ---- Recent Tickets Table (Dashboard) ---- */
@@ -1525,6 +1573,7 @@ body {
.ticket-detail {
grid-template-columns: 1fr;
}
.ticket-sidebar {
order: -1;
}
@@ -1534,16 +1583,20 @@ body {
:root {
--sidebar-width: 0px;
}
.sidebar {
transform: translateX(-100%);
width: 260px;
}
.sidebar.open {
transform: translateX(0);
}
.search-bar {
width: 200px;
}
.form-grid {
grid-template-columns: 1fr;
}
@@ -1586,3 +1639,294 @@ body {
border-bottom: none;
}
/* ---- Bulk Tickets Grid Styles ---- */
.bulk-grid-wrapper {
width: 100%;
overflow-x: auto;
margin-bottom: var(--space-lg);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
background: var(--bg-card);
min-height: 520px;
/* Previene il ritaglio dei menu a tendina se ci sono poche righe */
}
.bulk-grid-table {
width: 100%;
border-collapse: collapse;
text-align: left;
min-width: 1200px;
}
.bulk-grid-table tr:focus-within {
position: relative;
z-index: 100;
/* Solleva la riga attiva sopra le altre */
}
.bulk-grid-table td:focus-within {
position: relative;
z-index: 110;
/* Solleva la cella attiva sopra le altre */
}
.bulk-grid-table th {
padding: var(--space-md);
font-size: 0.75rem;
font-weight: 600;
color: var(--text-tertiary);
text-transform: uppercase;
letter-spacing: 0.05em;
border-bottom: 1px solid var(--border-light);
background: rgba(255, 255, 255, 0.01);
}
.bulk-grid-table td {
padding: var(--space-sm) var(--space-md);
border-bottom: 1px solid var(--border-subtle);
position: relative;
vertical-align: middle;
}
.bulk-grid-table tr:hover {
background: rgba(255, 255, 255, 0.01);
}
.bulk-input,
.bulk-select {
width: 100%;
padding: 6px 10px;
background: rgba(0, 0, 0, 0.2);
border: 1px solid var(--border-light);
border-radius: var(--radius-md);
color: var(--text-primary);
font-family: inherit;
font-size: 0.85rem;
height: 36px;
transition: all var(--transition-fast);
}
.bulk-input:focus,
.bulk-select:focus {
border-color: var(--border-accent);
box-shadow: 0 0 0 2px var(--accent-primary-glow);
background: rgba(0, 0, 0, 0.3);
outline: none;
}
.bulk-textarea-container {
position: relative;
width: 180px;
height: 36px;
}
.bulk-textarea {
position: absolute;
top: 0;
right: 0;
/* Si ancora sul bordo destro */
width: 180px;
height: 36px;
padding: 6px 10px;
background: var(--bg-secondary);
/* Rimosso trasparenza */
border: 1px solid var(--border-light);
border-radius: var(--radius-md);
color: var(--text-primary);
font-family: inherit;
font-size: 0.85rem;
line-height: 1.4;
resize: none;
overflow: hidden;
transition: all var(--transition-base) cubic-bezier(0.4, 0, 0.2, 1);
z-index: 5;
}
.bulk-textarea:focus {
width: 320px;
height: 120px;
right: 0;
/* Mantiene l'ancoraggio a destra per espandersi verso sinistra */
overflow-y: auto;
z-index: 99;
background: var(--bg-secondary);
/* Rimosso trasparenza */
box-shadow: var(--shadow-lg), 0 10px 25px rgba(0, 0, 0, 1);
border-color: var(--border-accent);
outline: none;
resize: vertical;
}
.bulk-select option {
background-color: #111827;
/* Sfondo scuro per gli stati e i tipi */
color: var(--text-primary);
}
.bulk-suggestions {
position: absolute;
top: 100%;
left: 0;
width: max-content;
min-width: 100%;
max-width: 400px;
background: #1f2937;
border: 1px solid var(--border-light);
border-radius: var(--radius-md);
max-height: 380px;
/* Incrementata l'altezza per contenere più elementi */
overflow-y: auto;
z-index: 999;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.6);
}
.bulk-suggestions-item {
padding: 6px 10px;
/* Compatto */
cursor: pointer;
border-bottom: 1px solid rgba(156, 163, 175, 0.1);
font-size: 0.8rem;
color: #e5e7eb;
}
.bulk-suggestions-item:hover {
background: var(--accent-primary);
color: white;
}
.bulk-suggestions-item:last-child {
border-bottom: none;
}
.bulk-actions-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: var(--space-md);
flex-wrap: wrap;
gap: var(--space-md);
}
.row-status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
margin-right: var(--space-xs);
background: var(--text-muted);
}
.row-status-dot.pending {
background: var(--warning);
box-shadow: 0 0 8px var(--warning);
}
.row-status-dot.success {
background: var(--success);
box-shadow: 0 0 8px var(--success);
}
.row-status-dot.error {
background: var(--error);
box-shadow: 0 0 8px var(--error);
}
.row-actions {
display: flex;
align-items: center;
gap: var(--space-xs);
}
.bulk-row-expanded {
background: rgba(255, 255, 255, 0.015);
}
.bulk-row-expanded-content {
padding: var(--space-md);
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--space-md);
border-bottom: 1px solid var(--border-subtle);
}
/* Ticket List Links */
.ticket-tn-link,
.ticket-title-link {
color: inherit;
text-decoration: none;
font-weight: inherit;
transition: color var(--transition-fast);
}
.ticket-tn-link:hover,
.ticket-title-link:hover {
color: var(--accent-primary-hover);
text-decoration: underline;
}
/* Inline Retrodate Editors */
.retrodate-container {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
}
.retrodate-btn-edit {
background: none;
border: none;
color: var(--text-muted);
cursor: pointer;
padding: 2px 4px;
font-size: 0.85rem;
transition: color var(--transition-fast);
display: inline-flex;
align-items: center;
}
.retrodate-btn-edit:hover {
color: var(--accent-primary);
}
.retrodate-editor {
display: flex;
align-items: center;
gap: var(--space-xs);
}
.retrodate-input {
background: var(--bg-secondary);
border: 1px solid var(--border-light);
border-radius: var(--radius-sm);
color: var(--text-primary);
padding: 2px 6px;
font-size: 0.8rem;
font-family: inherit;
}
.retrodate-input:focus {
outline: none;
border-color: var(--accent-primary);
}
.retrodate-actions {
display: flex;
gap: 2px;
}
.retrodate-btn-action {
background: none;
border: none;
cursor: pointer;
padding: 2px;
display: flex;
align-items: center;
font-size: 1rem;
}
.retrodate-btn-action.save {
color: var(--success);
}
.retrodate-btn-action.cancel {
color: var(--error);
}