feat(back-end and front-end): back-office pazzo
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 44s
Build, Test and Deploy / build-and-push (push) Successful in 46s
Build, Test and Deploy / deploy (push) Successful in 9s

This commit is contained in:
2026-02-27 15:46:41 +01:00
parent 47553ebb82
commit ed76b13e4c
30 changed files with 2616 additions and 272 deletions

View File

@@ -19,6 +19,8 @@ export class AdminDashboardComponent implements OnInit {
selectedStatus = '';
selectedPaymentMethod = 'OTHER';
orderSearchTerm = '';
paymentStatusFilter = 'ALL';
orderStatusFilter = 'ALL';
showPrintDetails = false;
loading = false;
detailLoading = false;
@@ -34,6 +36,16 @@ export class AdminDashboardComponent implements OnInit {
'CANCELLED'
];
readonly paymentMethodOptions = ['TWINT', 'BANK_TRANSFER', 'CARD', 'CASH', 'OTHER'];
readonly paymentStatusFilterOptions = ['ALL', 'PENDING', 'REPORTED', 'COMPLETED'];
readonly orderStatusFilterOptions = [
'ALL',
'PENDING_PAYMENT',
'PAID',
'IN_PRODUCTION',
'SHIPPED',
'COMPLETED',
'CANCELLED'
];
ngOnInit(): void {
this.loadOrders();
@@ -72,17 +84,17 @@ export class AdminDashboardComponent implements OnInit {
onSearchChange(value: string): void {
this.orderSearchTerm = value;
this.refreshFilteredOrders();
this.applyListFiltersAndSelection();
}
if (this.filteredOrders.length === 0) {
this.selectedOrder = null;
this.selectedStatus = '';
return;
}
onPaymentStatusFilterChange(value: string): void {
this.paymentStatusFilter = value || 'ALL';
this.applyListFiltersAndSelection();
}
if (!this.selectedOrder || !this.filteredOrders.some(order => order.id === this.selectedOrder?.id)) {
this.openDetails(this.filteredOrders[0].id);
}
onOrderStatusFilterChange(value: string): void {
this.orderStatusFilter = value || 'ALL';
this.applyListFiltersAndSelection();
}
openDetails(orderId: string): void {
@@ -225,23 +237,39 @@ export class AdminDashboardComponent implements OnInit {
private applyOrderUpdate(updatedOrder: AdminOrder): void {
this.orders = this.orders.map((order) => order.id === updatedOrder.id ? updatedOrder : order);
this.refreshFilteredOrders();
this.applyListFiltersAndSelection();
this.selectedOrder = updatedOrder;
this.selectedStatus = updatedOrder.status;
this.selectedPaymentMethod = updatedOrder.paymentMethod || this.selectedPaymentMethod;
}
private refreshFilteredOrders(): void {
const term = this.orderSearchTerm.trim().toLowerCase();
if (!term) {
this.filteredOrders = [...this.orders];
private applyListFiltersAndSelection(): void {
this.refreshFilteredOrders();
if (this.filteredOrders.length === 0) {
this.selectedOrder = null;
this.selectedStatus = '';
return;
}
if (!this.selectedOrder || !this.filteredOrders.some(order => order.id === this.selectedOrder?.id)) {
this.openDetails(this.filteredOrders[0].id);
}
}
private refreshFilteredOrders(): void {
const term = this.orderSearchTerm.trim().toLowerCase();
this.filteredOrders = this.orders.filter((order) => {
const fullUuid = order.id.toLowerCase();
const shortUuid = (order.orderNumber || '').toLowerCase();
return fullUuid.includes(term) || shortUuid.includes(term);
const paymentStatus = (order.paymentStatus || 'PENDING').toUpperCase();
const orderStatus = (order.status || '').toUpperCase();
const matchesSearch = !term || fullUuid.includes(term) || shortUuid.includes(term);
const matchesPayment = this.paymentStatusFilter === 'ALL' || paymentStatus === this.paymentStatusFilter;
const matchesOrderStatus = this.orderStatusFilter === 'ALL' || orderStatus === this.orderStatusFilter;
return matchesSearch && matchesPayment && matchesOrderStatus;
});
}