Fix client detail customer identity
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m17s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m17s
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import type { DateRange, OrderData } from '../types';
|
||||
import { parseOrderDate } from '../dataService';
|
||||
import { filterOrdersByDateRange, getClientDisplayName, getOrderItemRevenue } from './orders';
|
||||
import type { DateRange, OrderData } from '../types.ts';
|
||||
import { filterOrdersByDateRange, getClientDisplayName, getOrderItemRevenue, getOrderCustomerKey, parseOrderDate } from './orders.ts';
|
||||
|
||||
export type ClientSortOption =
|
||||
| 'recent'
|
||||
@@ -40,6 +39,7 @@ export interface ClientDetailsMetrics {
|
||||
}>;
|
||||
groupedOrders: GroupedClientOrder[];
|
||||
allTimeOrderCount: number;
|
||||
clientName: string;
|
||||
clientPhone: string;
|
||||
hasClient: boolean;
|
||||
periodAverageTicket: number;
|
||||
@@ -124,7 +124,7 @@ export const buildClientsSummary = (
|
||||
|
||||
orders.forEach(order => {
|
||||
const clientName = getClientDisplayName(order);
|
||||
const customerKey = order.Fone_Cliente || `name:${clientName}`;
|
||||
const customerKey = getOrderCustomerKey(order);
|
||||
|
||||
if (!clientMap[customerKey]) {
|
||||
clientMap[customerKey] = { name: clientName, totalSpent: 0, totalItems: 0, uniqueOrders: new Set(), lastPurchase: 0, phone: '' };
|
||||
@@ -174,17 +174,29 @@ export const buildClientsSummary = (
|
||||
});
|
||||
};
|
||||
|
||||
export const buildClientDetailsMetrics = (ordersData: OrderData[], clientName: string, dateRange: DateRange): ClientDetailsMetrics => {
|
||||
const clientOrders = ordersData.filter(order => getClientDisplayName(order) === clientName);
|
||||
export const buildClientDetailsMetrics = (ordersData: OrderData[], customerKey: string, dateRange: DateRange): ClientDetailsMetrics => {
|
||||
const keyedOrders = ordersData.filter(order => getOrderCustomerKey(order) === customerKey);
|
||||
const legacyNameOrders = keyedOrders.length
|
||||
? []
|
||||
: ordersData.filter(order => getClientDisplayName(order) === customerKey);
|
||||
const legacyCustomerKeys = new Set(legacyNameOrders.map(getOrderCustomerKey));
|
||||
const resolvedLegacyKey = legacyCustomerKeys.size === 1 ? [...legacyCustomerKeys][0] : '';
|
||||
const clientOrders = keyedOrders.length
|
||||
? keyedOrders
|
||||
: resolvedLegacyKey
|
||||
? ordersData.filter(order => getOrderCustomerKey(order) === resolvedLegacyKey)
|
||||
: [];
|
||||
const periodOrders = filterOrdersByDateRange(clientOrders, dateRange);
|
||||
const groupedOrdersMap: Record<string, GroupedClientOrder> = {};
|
||||
const spentByDate: Record<string, number> = {};
|
||||
let clientPhone = '';
|
||||
let clientName = '';
|
||||
let periodSpent = 0;
|
||||
let periodItems = 0;
|
||||
|
||||
clientOrders.forEach(order => {
|
||||
if (order.Fone_Cliente && !clientPhone) clientPhone = order.Fone_Cliente;
|
||||
if (!clientName) clientName = getClientDisplayName(order);
|
||||
});
|
||||
|
||||
periodOrders.forEach(order => {
|
||||
@@ -197,11 +209,12 @@ export const buildClientDetailsMetrics = (ordersData: OrderData[], clientName: s
|
||||
groupedOrdersMap[key] = {
|
||||
date: order.Data_Pedido,
|
||||
orderId: order.ID_Pedido || key,
|
||||
orderTotal: order.Valor_Pedido,
|
||||
orderTotal: 0,
|
||||
items: []
|
||||
};
|
||||
}
|
||||
groupedOrdersMap[key].items.push(order);
|
||||
groupedOrdersMap[key].orderTotal += getOrderItemRevenue(order);
|
||||
});
|
||||
|
||||
const groupedOrders = Object.values(groupedOrdersMap).sort((a, b) => {
|
||||
@@ -219,6 +232,7 @@ export const buildClientDetailsMetrics = (ordersData: OrderData[], clientName: s
|
||||
chartData,
|
||||
groupedOrders,
|
||||
allTimeOrderCount: allTimeOrderIds.size,
|
||||
clientName,
|
||||
clientPhone,
|
||||
hasClient: clientOrders.length > 0,
|
||||
periodAverageTicket: periodOrderCount ? periodSpent / periodOrderCount : 0,
|
||||
|
||||
Reference in New Issue
Block a user