feat: safely implement database idempotency, fallback IDs, and WhatsApp marketing export
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m30s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m30s
This commit is contained in:
@@ -31,13 +31,17 @@ const Clients = () => {
|
||||
return orderDate >= dateRange.start && orderDate <= dateRange.end;
|
||||
});
|
||||
|
||||
const clientMap: Record<string, { totalSpent: number, totalItems: number, uniqueOrders: Set<string>, lastPurchase: number }> = {};
|
||||
const clientMap: Record<string, { totalSpent: number, totalItems: number, uniqueOrders: Set<string>, lastPurchase: number, phone: string }> = {};
|
||||
|
||||
orders.forEach(order => {
|
||||
const clientName = order.Nome_Cliente || `Cliente Desconhecido (Pedido ${order.Valor_Pedido})`;
|
||||
|
||||
if (!clientMap[clientName]) {
|
||||
clientMap[clientName] = { totalSpent: 0, totalItems: 0, uniqueOrders: new Set(), lastPurchase: 0 };
|
||||
clientMap[clientName] = { totalSpent: 0, totalItems: 0, uniqueOrders: new Set(), lastPurchase: 0, phone: '' };
|
||||
}
|
||||
|
||||
if (order.Fone_Cliente) {
|
||||
clientMap[clientName].phone = order.Fone_Cliente;
|
||||
}
|
||||
|
||||
// Calculate total spent based on quantity * unit price
|
||||
@@ -54,6 +58,7 @@ const Clients = () => {
|
||||
|
||||
let result = Object.keys(clientMap).map(name => ({
|
||||
name,
|
||||
phone: clientMap[name].phone,
|
||||
totalSpent: clientMap[name].totalSpent,
|
||||
totalItems: clientMap[name].totalItems,
|
||||
orderCount: clientMap[name].uniqueOrders.size, // Grouped by unique date+value combinations
|
||||
@@ -129,6 +134,7 @@ const Clients = () => {
|
||||
onClick={() => {
|
||||
const exportData = clientsData.map(client => ({
|
||||
'Nome do Cliente': client.name,
|
||||
'Telefone/WhatsApp': client.phone || 'N/A',
|
||||
'Total Gasto (R$)': client.totalSpent.toFixed(2).replace('.', ','),
|
||||
'Produtos Comprados': client.totalItems,
|
||||
'Total de Pedidos': client.orderCount,
|
||||
|
||||
@@ -8,6 +8,7 @@ export interface OrderData {
|
||||
Valor_Unitario: number;
|
||||
Recebido_Em?: string;
|
||||
ID_Pedido?: string;
|
||||
Fone_Cliente?: string;
|
||||
}
|
||||
|
||||
export interface DateRange {
|
||||
|
||||
Reference in New Issue
Block a user