Add order page with real API calls
This commit is contained in:
@@ -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}`)
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user