Add order page with real API calls

This commit is contained in:
Urtzi Alfaro
2025-09-19 11:44:38 +02:00
parent 447e2a5012
commit 105410c9d3
22 changed files with 2556 additions and 463 deletions

View File

@@ -17,6 +17,20 @@ import {
type EnumOption
} from '../api/types/suppliers';
import {
CustomerType,
DeliveryMethod,
PaymentTerms as OrderPaymentTerms,
PaymentMethod,
PaymentStatus,
CustomerSegment,
PriorityLevel,
OrderType,
OrderStatus,
OrderSource,
SalesChannel
} from '../api/types/orders';
/**
* Generic function to convert enum to select options with i18n translations
*/
@@ -163,4 +177,132 @@ export function isValidEnumValue<T>(
value: unknown
): value is T {
return Object.values(enumObject).includes(value as T);
}
/**
* Hook for orders enum utilities
*/
export function useOrderEnums() {
const { t } = useTranslation('orders');
return {
// Customer Type
getCustomerTypeOptions: (): SelectOption[] =>
enumToSelectOptions(CustomerType, 'customer_types', t),
getCustomerTypeLabel: (type: CustomerType): string => {
if (!type) return 'Tipo no definido';
const translated = t(`customer_types.${type}`);
if (translated === `customer_types.${type}`) {
return type.charAt(0).toUpperCase() + type.slice(1);
}
return translated;
},
// Delivery Method
getDeliveryMethodOptions: (): SelectOption[] =>
enumToSelectOptions(DeliveryMethod, 'delivery_methods', t),
getDeliveryMethodLabel: (method: DeliveryMethod): string => {
if (!method) return 'Método no definido';
const translated = t(`delivery_methods.${method}`);
if (translated === `delivery_methods.${method}`) {
return method.charAt(0).toUpperCase() + method.slice(1);
}
return translated;
},
// Payment Terms
getPaymentTermsOptions: (): SelectOption[] =>
enumToSelectOptions(OrderPaymentTerms, 'payment_terms', t),
getPaymentTermsLabel: (terms: OrderPaymentTerms): string => {
if (!terms) return 'Términos no definidos';
return t(`payment_terms.${terms}`);
},
// Payment Method
getPaymentMethodOptions: (): SelectOption[] =>
enumToSelectOptions(PaymentMethod, 'payment_methods', t),
getPaymentMethodLabel: (method: PaymentMethod): string => {
if (!method) return 'Método no definido';
return t(`payment_methods.${method}`);
},
// Payment Status
getPaymentStatusOptions: (): SelectOption[] =>
enumToSelectOptions(PaymentStatus, 'payment_status', t),
getPaymentStatusLabel: (status: PaymentStatus): string => {
if (!status) return 'Estado no definido';
return t(`payment_status.${status}`);
},
// Customer Segment
getCustomerSegmentOptions: (): SelectOption[] =>
enumToSelectOptions(CustomerSegment, 'customer_segments', t),
getCustomerSegmentLabel: (segment: CustomerSegment): string => {
if (!segment) return 'Segmento no definido';
return t(`customer_segments.${segment}`);
},
// Priority Level
getPriorityLevelOptions: (): SelectOption[] =>
enumToSelectOptions(PriorityLevel, 'priority_levels', t),
getPriorityLevelLabel: (level: PriorityLevel): string => {
if (!level) return 'Prioridad no definida';
return t(`priority_levels.${level}`);
},
// Order Type
getOrderTypeOptions: (): SelectOption[] =>
enumToSelectOptions(OrderType, 'order_types', t),
getOrderTypeLabel: (type: OrderType): string => {
if (!type) return 'Tipo no definido';
const translated = t(`order_types.${type}`);
// If translation failed, return a fallback
if (translated === `order_types.${type}`) {
return type.charAt(0).toUpperCase() + type.slice(1);
}
return translated;
},
// Order Status
getOrderStatusOptions: (): SelectOption[] =>
enumToSelectOptions(OrderStatus, 'order_status', t),
getOrderStatusLabel: (status: OrderStatus): string => {
if (!status) return 'Estado no definido';
return t(`order_status.${status}`);
},
// Order Source
getOrderSourceOptions: (): SelectOption[] =>
enumToSelectOptions(OrderSource, 'order_sources', t),
getOrderSourceLabel: (source: OrderSource): string => {
if (!source) return 'Origen no definido';
return t(`order_sources.${source}`);
},
// Sales Channel
getSalesChannelOptions: (): SelectOption[] =>
enumToSelectOptions(SalesChannel, 'sales_channels', t),
getSalesChannelLabel: (channel: SalesChannel): string => {
if (!channel) return 'Canal no definido';
return t(`sales_channels.${channel}`);
},
// Field Labels
getFieldLabel: (field: string): string =>
t(`labels.${field}`),
getFieldDescription: (field: string): string =>
t(`descriptions.${field}`)
};
}