All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m17s
48 lines
1.8 KiB
TypeScript
48 lines
1.8 KiB
TypeScript
import type { DateRange, OrderData } from '../types.ts';
|
|
|
|
const SIZE_SUFFIX_PATTERN = /\s+-\s+(?:(?:PP|P|M|G|GG|XG|XGG|EG|EGG|EXG|U|UNICO|ÚNICO|\d{2})(?:\/(?:PP|P|M|G|GG|XG|XGG|EG|EGG|EXG|U|UNICO|ÚNICO|\d{2}))*)$/i;
|
|
|
|
export const parseOrderDate = (dateStr: string): Date => {
|
|
if (!dateStr) return new Date(0);
|
|
if (dateStr.includes('T')) return new Date(dateStr);
|
|
const parts = dateStr.split(/[-/]/);
|
|
if (parts.length === 3) {
|
|
if (parts[0].length === 4) {
|
|
return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]));
|
|
}
|
|
return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));
|
|
}
|
|
const fallback = new Date(dateStr);
|
|
return Number.isNaN(fallback.getTime()) ? new Date(0) : fallback;
|
|
};
|
|
|
|
export const getBaseProductName = (description: string): string => {
|
|
const productName = description.trim();
|
|
if (productName.toLocaleUpperCase('pt-BR').startsWith('ETIQUETA')) {
|
|
return productName;
|
|
}
|
|
|
|
return productName.split(' TAMANHO')[0].replace(SIZE_SUFFIX_PATTERN, '').trim();
|
|
};
|
|
|
|
export const getClientDisplayName = (order: OrderData): string => {
|
|
return order.Nome_Cliente || 'Cliente Desconhecido';
|
|
};
|
|
|
|
export const getOrderCustomerKey = (order: OrderData): string => {
|
|
return order.Fone_Cliente || `name:${getClientDisplayName(order)}`;
|
|
};
|
|
|
|
export const isOrderInDateRange = (order: OrderData, dateRange: DateRange): boolean => {
|
|
const orderDate = parseOrderDate(order.Data_Pedido);
|
|
return orderDate >= dateRange.start && orderDate <= dateRange.end;
|
|
};
|
|
|
|
export const filterOrdersByDateRange = (orders: OrderData[], dateRange: DateRange): OrderData[] => {
|
|
return orders.filter(order => isOrderInDateRange(order, dateRange));
|
|
};
|
|
|
|
export const getOrderItemRevenue = (order: OrderData): number => {
|
|
return order.Quantidade * order.Valor_Unitario;
|
|
};
|