PROFORMAS UDPATE
This commit is contained in:
parent
89ab94bb95
commit
2eab047e90
@ -176,9 +176,15 @@
|
|||||||
"description": "Create a new customer proforma",
|
"description": "Create a new customer proforma",
|
||||||
"back_to_list": "Back to the list"
|
"back_to_list": "Back to the list"
|
||||||
},
|
},
|
||||||
"edit": {
|
"update": {
|
||||||
"title": "Edit customer proforma",
|
"title": "Edit customer proforma",
|
||||||
"description": "Edit the selected customer proforma"
|
"description": "Edit the selected customer proforma",
|
||||||
|
"load_error.message": "Please try again later",
|
||||||
|
"load_error.title": "Unable to load the proforma",
|
||||||
|
"not_found_msg": "Check the identifier or go back to the list",
|
||||||
|
"not_found_title": "Proforma not found",
|
||||||
|
"error_msg": "Check the data and try again.",
|
||||||
|
"error_title": "Unable to save the changes"
|
||||||
},
|
},
|
||||||
"delete": {
|
"delete": {
|
||||||
"title": "Delete customer proforma",
|
"title": "Delete customer proforma",
|
||||||
@ -222,137 +228,141 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"form_groups": {
|
"form_groups": {
|
||||||
"customer": {
|
"proformas": {
|
||||||
"title": "Customer",
|
"customer": {
|
||||||
"description": "Select the customer for this proforma."
|
"title": "Customer",
|
||||||
},
|
"description": "Select the customer for this proforma."
|
||||||
"items": {
|
},
|
||||||
"title": "Proforma details",
|
"items": {
|
||||||
"description": ""
|
"title": "Proforma details",
|
||||||
},
|
"description": ""
|
||||||
"basic_info": {
|
},
|
||||||
"title": "Proforma information",
|
"basic_info": {
|
||||||
"description": "Basic proforma information"
|
"title": "Proforma information",
|
||||||
},
|
"description": "Basic proforma information"
|
||||||
"totals": {
|
},
|
||||||
"title": "Proforma totals",
|
"totals": {
|
||||||
"description": "Breakdown of proforma amounts with discounts and taxes."
|
"title": "Proforma totals",
|
||||||
},
|
"description": "Breakdown of proforma amounts with discounts and taxes."
|
||||||
"tax_resume": {
|
},
|
||||||
"title": "Resumen de impuestos",
|
"tax_resume": {
|
||||||
"description": ""
|
"title": "Resumen de impuestos",
|
||||||
},
|
"description": ""
|
||||||
"preferences": {
|
},
|
||||||
"title": "Preferences",
|
"preferences": {
|
||||||
"description": "Additional proforma settings"
|
"title": "Preferences",
|
||||||
|
"description": "Additional proforma settings"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"form_fields": {
|
"form_fields": {
|
||||||
"status": {
|
"proformas": {
|
||||||
"label": "Estado",
|
"status": {
|
||||||
"placeholder": "",
|
"label": "Estado",
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"invoice_number": {
|
|
||||||
"label": "Proforma number",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"invoice_date": {
|
|
||||||
"label": "Proforma date",
|
|
||||||
"placeholder": "Select a date",
|
|
||||||
"description": "Proforma date"
|
|
||||||
},
|
|
||||||
"series": {
|
|
||||||
"label": "Serie",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": "Proforma serie"
|
|
||||||
},
|
|
||||||
"operation_date": {
|
|
||||||
"label": "Operation date",
|
|
||||||
"placeholder": "Select a date",
|
|
||||||
"description": "Proforma operation date"
|
|
||||||
},
|
|
||||||
"reference": {
|
|
||||||
"label": "Reference",
|
|
||||||
"placeholder": "Reference of the proforma",
|
|
||||||
"description": "Reference of the proforma"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"label": "Description",
|
|
||||||
"placeholder": "Description of the proforma",
|
|
||||||
"description": "General description of the proforma"
|
|
||||||
},
|
|
||||||
"subtotal_amount": {
|
|
||||||
"label": "Subtotal",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Proforma subtotal"
|
|
||||||
},
|
|
||||||
"discount": {
|
|
||||||
"label": "Discount (%)",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Percentage discount"
|
|
||||||
},
|
|
||||||
"discount_amount": {
|
|
||||||
"label": "Discount price",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Percentage discount price"
|
|
||||||
},
|
|
||||||
"total_amount": {
|
|
||||||
"label": "Total price",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Proforma total price"
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"label": "Notes",
|
|
||||||
"placeholder": "Additional notes about the proforma",
|
|
||||||
"description": "Additional notes that can be included in the proforma"
|
|
||||||
},
|
|
||||||
"item": {
|
|
||||||
"quantity": {
|
|
||||||
"label": "Quantity",
|
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"invoice_number": {
|
||||||
|
"label": "Proforma number",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"invoice_date": {
|
||||||
|
"label": "Proforma date",
|
||||||
|
"placeholder": "Select a date",
|
||||||
|
"description": "Proforma date"
|
||||||
|
},
|
||||||
|
"series": {
|
||||||
|
"label": "Serie",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Proforma serie"
|
||||||
|
},
|
||||||
|
"operation_date": {
|
||||||
|
"label": "Operation date",
|
||||||
|
"placeholder": "Select a date",
|
||||||
|
"description": "Proforma operation date"
|
||||||
|
},
|
||||||
|
"reference": {
|
||||||
|
"label": "Reference",
|
||||||
|
"placeholder": "Reference of the proforma",
|
||||||
|
"description": "Reference of the proforma"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"label": "Description",
|
"label": "Description",
|
||||||
"placeholder": "",
|
"placeholder": "Description of the proforma",
|
||||||
"description": ""
|
"description": "General description of the proforma"
|
||||||
},
|
},
|
||||||
"unit_amount": {
|
"subtotal_amount": {
|
||||||
"label": "Unit price",
|
"label": "Subtotal",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Item unit price"
|
"desc": "Proforma subtotal"
|
||||||
},
|
},
|
||||||
"discount_percentage": {
|
"discount": {
|
||||||
"label": "Dto (%)",
|
"label": "Discount (%)",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Percentage discount"
|
"desc": "Percentage discount"
|
||||||
},
|
},
|
||||||
"discount_amount": {
|
"discount_amount": {
|
||||||
"label": "Discount amount",
|
"label": "Discount price",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Percentage discount amount"
|
"desc": "Percentage discount price"
|
||||||
},
|
|
||||||
"taxable_amount": {
|
|
||||||
"label": "Taxable amount",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"tax_codes": {
|
|
||||||
"label": "Taxes",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": "Taxes"
|
|
||||||
},
|
|
||||||
"taxes_amount": {
|
|
||||||
"label": "Taxes amount",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": "Percentage taxes amount"
|
|
||||||
},
|
},
|
||||||
"total_amount": {
|
"total_amount": {
|
||||||
"label": "Total amount",
|
"label": "Total price",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Proforma line total"
|
"desc": "Proforma total price"
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"label": "Notes",
|
||||||
|
"placeholder": "Additional notes about the proforma",
|
||||||
|
"description": "Additional notes that can be included in the proforma"
|
||||||
|
},
|
||||||
|
"item": {
|
||||||
|
"quantity": {
|
||||||
|
"label": "Quantity",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "Description",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"unit_amount": {
|
||||||
|
"label": "Unit price",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Item unit price"
|
||||||
|
},
|
||||||
|
"discount_percentage": {
|
||||||
|
"label": "Dto (%)",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Percentage discount"
|
||||||
|
},
|
||||||
|
"discount_amount": {
|
||||||
|
"label": "Discount amount",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Percentage discount amount"
|
||||||
|
},
|
||||||
|
"taxable_amount": {
|
||||||
|
"label": "Taxable amount",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"tax_codes": {
|
||||||
|
"label": "Taxes",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Taxes"
|
||||||
|
},
|
||||||
|
"taxes_amount": {
|
||||||
|
"label": "Taxes amount",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Percentage taxes amount"
|
||||||
|
},
|
||||||
|
"total_amount": {
|
||||||
|
"label": "Total amount",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Proforma line total"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -177,9 +177,15 @@
|
|||||||
"description": "Crear una nueva proforma",
|
"description": "Crear una nueva proforma",
|
||||||
"back_to_list": "Volver al listado"
|
"back_to_list": "Volver al listado"
|
||||||
},
|
},
|
||||||
"edit": {
|
"update": {
|
||||||
"title": "Editar proforma",
|
"title": "Editar proforma",
|
||||||
"description": "Editar la proforma seleccionada"
|
"description": "Editar la proforma seleccionada",
|
||||||
|
"load_error.message": "Inténtalo de nuevo más tarde",
|
||||||
|
"load_error.title": "No se pudo cargar la proforma",
|
||||||
|
"not_found_msg": "Revisa el identificador o vuelve al listado",
|
||||||
|
"not_found_title": "Proforma no encontrada",
|
||||||
|
"error_msg": "Revisa los datos e inténtalo de nuevo.",
|
||||||
|
"error_title": "No se pudo guardar los cambios"
|
||||||
},
|
},
|
||||||
"delete": {
|
"delete": {
|
||||||
"title": "Eliminar proforma",
|
"title": "Eliminar proforma",
|
||||||
@ -223,128 +229,132 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"form_groups": {
|
"form_groups": {
|
||||||
"customer": {
|
"proformas": {
|
||||||
"title": "Cliente",
|
"customer": {
|
||||||
"description": "Selecciona el cliente para esta proforma"
|
"title": "Cliente",
|
||||||
},
|
"description": "Selecciona el cliente para esta proforma"
|
||||||
"items": {
|
},
|
||||||
"title": "Detalles de la proforma",
|
"items": {
|
||||||
"description": ""
|
"title": "Detalles de la proforma",
|
||||||
},
|
"description": ""
|
||||||
"basic_info": {
|
},
|
||||||
"title": "Información de la proforma",
|
"basic_info": {
|
||||||
"description": "Información básica de la proforma"
|
"title": "Información de la proforma",
|
||||||
},
|
"description": "Información básica de la proforma"
|
||||||
"totals": {
|
},
|
||||||
"title": "Totales de la proforma",
|
"totals": {
|
||||||
"description": "Desglose de los importes de la proforma con descuentos e impuestos."
|
"title": "Totales de la proforma",
|
||||||
},
|
"description": "Desglose de los importes de la proforma con descuentos e impuestos."
|
||||||
"preferences": {
|
},
|
||||||
"title": "Preferencias",
|
"preferences": {
|
||||||
"description": "Configuraciones adicionales de la proforma"
|
"title": "Preferencias",
|
||||||
|
"description": "Configuraciones adicionales de la proforma"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"form_fields": {
|
"form_fields": {
|
||||||
"invoice_number": {
|
"proformas": {
|
||||||
"label": "Número de proforma",
|
"invoice_number": {
|
||||||
"placeholder": "",
|
"label": "Número de proforma",
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"invoice_date": {
|
|
||||||
"label": "Fecha",
|
|
||||||
"placeholder": "Selecciona una fecha",
|
|
||||||
"description": "Fecha de emisión de la proforma"
|
|
||||||
},
|
|
||||||
"series": {
|
|
||||||
"label": "Serie",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"operation_date": {
|
|
||||||
"label": "Fecha de operación",
|
|
||||||
"placeholder": "Selecciona una fecha",
|
|
||||||
"description": "Fecha de la operación de la proforma"
|
|
||||||
},
|
|
||||||
"reference": {
|
|
||||||
"label": "Referencia",
|
|
||||||
"placeholder": "Referencia de la proforma",
|
|
||||||
"description": "Referencia de la proforma"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"label": "Descripción",
|
|
||||||
"placeholder": "Descripción de la proforma",
|
|
||||||
"description": "Descripción general de la proforma"
|
|
||||||
},
|
|
||||||
"subtotal_amount": {
|
|
||||||
"label": "Subtotal",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Subtotal de la proforma"
|
|
||||||
},
|
|
||||||
"discount": {
|
|
||||||
"label": "Descuento (%)",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Porcentaje de descuento"
|
|
||||||
},
|
|
||||||
"discount_amount": {
|
|
||||||
"label": "Importe del descuento",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Importe del descuento porcentual"
|
|
||||||
},
|
|
||||||
"total_amount": {
|
|
||||||
"label": "Precio total",
|
|
||||||
"placeholder": "",
|
|
||||||
"desc": "Precio total de la proforma"
|
|
||||||
},
|
|
||||||
"notes": {
|
|
||||||
"label": "Notas",
|
|
||||||
"placeholder": "Notas adicionales sobre la proforma",
|
|
||||||
"description": "Notas adicionales que se pueden incluir en la proforma"
|
|
||||||
},
|
|
||||||
"item": {
|
|
||||||
"quantity": {
|
|
||||||
"label": "Cantidad",
|
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"invoice_date": {
|
||||||
|
"label": "Fecha",
|
||||||
|
"placeholder": "Selecciona una fecha",
|
||||||
|
"description": "Fecha de emisión de la proforma"
|
||||||
|
},
|
||||||
|
"series": {
|
||||||
|
"label": "Serie",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"operation_date": {
|
||||||
|
"label": "Fecha de operación",
|
||||||
|
"placeholder": "Selecciona una fecha",
|
||||||
|
"description": "Fecha de la operación de la proforma"
|
||||||
|
},
|
||||||
|
"reference": {
|
||||||
|
"label": "Referencia",
|
||||||
|
"placeholder": "Referencia de la proforma",
|
||||||
|
"description": "Referencia de la proforma"
|
||||||
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"label": "Descripción",
|
"label": "Descripción",
|
||||||
"placeholder": "",
|
"placeholder": "Descripción de la proforma",
|
||||||
"description": ""
|
"description": "Descripción general de la proforma"
|
||||||
},
|
},
|
||||||
"unit_amount": {
|
"subtotal_amount": {
|
||||||
"label": "Precio unitario",
|
"label": "Subtotal",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Precio unitario del producto"
|
"desc": "Subtotal de la proforma"
|
||||||
},
|
},
|
||||||
"discount_percentage": {
|
"discount": {
|
||||||
"label": "Dto (%)",
|
"label": "Descuento (%)",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Porcentaje de descuento"
|
"desc": "Porcentaje de descuento"
|
||||||
},
|
},
|
||||||
"discount_amount": {
|
"discount_amount": {
|
||||||
"label": "Importe del descuento",
|
"label": "Importe del descuento",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Importe del descuento porcentual"
|
"desc": "Importe del descuento porcentual"
|
||||||
},
|
|
||||||
"taxable_amount": {
|
|
||||||
"label": "Subtotal",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"tax_codes": {
|
|
||||||
"label": "Impuestos",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": "Impuestos"
|
|
||||||
},
|
|
||||||
"taxes_amount": {
|
|
||||||
"label": "Importe impuestos",
|
|
||||||
"placeholder": "",
|
|
||||||
"description": "Importe porcentual de los impuestos"
|
|
||||||
},
|
},
|
||||||
"total_amount": {
|
"total_amount": {
|
||||||
"label": "Precio total",
|
"label": "Precio total",
|
||||||
"placeholder": "",
|
"placeholder": "",
|
||||||
"description": "Precio total con descuento porcentual"
|
"desc": "Precio total de la proforma"
|
||||||
|
},
|
||||||
|
"notes": {
|
||||||
|
"label": "Notas",
|
||||||
|
"placeholder": "Notas adicionales sobre la proforma",
|
||||||
|
"description": "Notas adicionales que se pueden incluir en la proforma"
|
||||||
|
},
|
||||||
|
"item": {
|
||||||
|
"quantity": {
|
||||||
|
"label": "Cantidad",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"label": "Descripción",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"unit_amount": {
|
||||||
|
"label": "Precio unitario",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Precio unitario del producto"
|
||||||
|
},
|
||||||
|
"discount_percentage": {
|
||||||
|
"label": "Dto (%)",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Porcentaje de descuento"
|
||||||
|
},
|
||||||
|
"discount_amount": {
|
||||||
|
"label": "Importe del descuento",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Importe del descuento porcentual"
|
||||||
|
},
|
||||||
|
"taxable_amount": {
|
||||||
|
"label": "Subtotal",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"tax_codes": {
|
||||||
|
"label": "Impuestos",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Impuestos"
|
||||||
|
},
|
||||||
|
"taxes_amount": {
|
||||||
|
"label": "Importe impuestos",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Importe porcentual de los impuestos"
|
||||||
|
},
|
||||||
|
"total_amount": {
|
||||||
|
"label": "Precio total",
|
||||||
|
"placeholder": "",
|
||||||
|
"description": "Precio total con descuento porcentual"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -2,4 +2,3 @@ export * from "./proforma-form-field-shell";
|
|||||||
export * from "./proforma-header-fields-card";
|
export * from "./proforma-header-fields-card";
|
||||||
export * from "./proforma-header-form-grid";
|
export * from "./proforma-header-form-grid";
|
||||||
export * from "./proforma-section-card";
|
export * from "./proforma-section-card";
|
||||||
export * from "./proforma-update-editor-form";
|
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
|
export * from "./proforma-update-editor-form";
|
||||||
export * from "./proforma-update-header-editor";
|
export * from "./proforma-update-header-editor";
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
import { Button } from "@repo/shadcn-ui/components";
|
import { Button } from "@repo/shadcn-ui/components";
|
||||||
import { cn } from "@repo/shadcn-ui/lib/utils";
|
import { cn } from "@repo/shadcn-ui/lib/utils";
|
||||||
|
|
||||||
|
import { ProformaUpdateHeaderEditor } from ".";
|
||||||
|
|
||||||
import { useTranslation } from "../../../../i18n";
|
import { useTranslation } from "../../../../i18n";
|
||||||
import type { Proforma } from "../../../shared/entities";
|
import type { Proforma } from "../../../shared/entities";
|
||||||
import { ProformaUpdateHeaderEditor } from "../editors";
|
import { ProformaHeaderFieldsCard } from "../blocks/proforma-header-fields-card";
|
||||||
|
|
||||||
import { ProformaHeaderFieldsCard } from "./proforma-header-fields-card";
|
|
||||||
|
|
||||||
type ProformaUpdateEditorProps = {
|
type ProformaUpdateEditorProps = {
|
||||||
formId: string;
|
formId: string;
|
||||||
@ -37,6 +37,7 @@ export const ProformaUpdateEditorForm = ({
|
|||||||
paymentMethodOptions={[]}
|
paymentMethodOptions={[]}
|
||||||
priceListOptions={[]}
|
priceListOptions={[]}
|
||||||
salesPersonOptions={[]}
|
salesPersonOptions={[]}
|
||||||
|
serieOptions={[]}
|
||||||
statusOptions={[]}
|
statusOptions={[]}
|
||||||
warehouseOptions={[]}
|
warehouseOptions={[]}
|
||||||
/>
|
/>
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import { DatePickerField, TextField } from "@repo/rdx-ui/components";
|
import { DatePickerField, SelectField, TextField } from "@repo/rdx-ui/components";
|
||||||
import {
|
import {
|
||||||
Input,
|
Input,
|
||||||
Select,
|
Select,
|
||||||
@ -21,6 +21,7 @@ interface SelectOption {
|
|||||||
|
|
||||||
interface ProformaUpdateHeaderEditorProps {
|
interface ProformaUpdateHeaderEditorProps {
|
||||||
statusOptions: SelectOption[];
|
statusOptions: SelectOption[];
|
||||||
|
serieOptions: SelectOption[];
|
||||||
customerOptions: SelectOption[];
|
customerOptions: SelectOption[];
|
||||||
currencyOptions: SelectOption[];
|
currencyOptions: SelectOption[];
|
||||||
paymentMethodOptions: SelectOption[];
|
paymentMethodOptions: SelectOption[];
|
||||||
@ -33,6 +34,7 @@ interface ProformaUpdateHeaderEditorProps {
|
|||||||
|
|
||||||
export const ProformaUpdateHeaderEditor = ({
|
export const ProformaUpdateHeaderEditor = ({
|
||||||
statusOptions,
|
statusOptions,
|
||||||
|
serieOptions,
|
||||||
customerOptions,
|
customerOptions,
|
||||||
currencyOptions,
|
currencyOptions,
|
||||||
paymentMethodOptions,
|
paymentMethodOptions,
|
||||||
@ -55,46 +57,46 @@ export const ProformaUpdateHeaderEditor = ({
|
|||||||
return (
|
return (
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
<ProformaSectionCard
|
<ProformaSectionCard
|
||||||
description={t("proformas.update.sections.document_description")}
|
description={t("form_groups.proformas.basic_info.description")}
|
||||||
title={t("proformas.update.sections.document")}
|
title={t("form_groups.proformas.basic_info.title")}
|
||||||
>
|
>
|
||||||
<ProformaHeaderFormGrid>
|
<ProformaHeaderFormGrid>
|
||||||
<TextField
|
<SelectField
|
||||||
className="md:col-span-2"
|
className="md:col-span-2"
|
||||||
label={t("form_fields.series.label")}
|
label={t("form_fields.proformas.series.label")}
|
||||||
name="series"
|
name="series"
|
||||||
placeholder={t("form_fields.series.placeholder")}
|
placeholder={t("form_fields.proformas.series.placeholder")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<DatePickerField
|
<DatePickerField
|
||||||
className="md:col-span-3"
|
className="md:col-span-3"
|
||||||
label={t("form_fields.invoice_date.label")}
|
label={t("form_fields.proformas.invoice_date.label")}
|
||||||
name="invoice_date"
|
name="invoice_date"
|
||||||
placeholder={t("form_fields.invoice_date.placeholder")}
|
placeholder={t("form_fields.proformas.invoice_date.placeholder")}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<DatePickerField
|
<DatePickerField
|
||||||
className="md:col-span-3"
|
className="md:col-span-3"
|
||||||
label={t("form_fields.operation_date.label")}
|
label={t("form_fields.proformas.operation_date.label")}
|
||||||
name="operation_date"
|
name="operation_date"
|
||||||
placeholder={t("form_fields.operation_date.placeholder")}
|
placeholder={t("form_fields.proformas.operation_date.placeholder")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextField
|
<TextField
|
||||||
className="md:col-span-4"
|
className="md:col-span-4"
|
||||||
label={t("form_fields.reference.label")}
|
label={t("form_fields.proformas.reference.label")}
|
||||||
maxLength={256}
|
maxLength={256}
|
||||||
name="reference"
|
name="reference"
|
||||||
placeholder={t("form_fields.reference.placeholder")}
|
placeholder={t("form_fields.proformas.reference.placeholder")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextField
|
<TextField
|
||||||
className="md:col-span-12"
|
className="md:col-span-12"
|
||||||
label={t("form_fields.description.label")}
|
label={t("form_fields.proformas.description.label")}
|
||||||
maxLength={256}
|
maxLength={256}
|
||||||
name="description"
|
name="description"
|
||||||
placeholder={t("form_fields.description.placeholder")}
|
placeholder={t("form_fields.proformas.description.placeholder")}
|
||||||
/>
|
/>
|
||||||
</ProformaHeaderFormGrid>
|
</ProformaHeaderFormGrid>
|
||||||
</ProformaSectionCard>
|
</ProformaSectionCard>
|
||||||
|
|||||||
@ -8,8 +8,8 @@ import { FormProvider } from "react-hook-form";
|
|||||||
|
|
||||||
import { useTranslation } from "../../../../i18n";
|
import { useTranslation } from "../../../../i18n";
|
||||||
import { useUpdateProformaPageController } from "../../controllers/use-update-proforma-page-controller";
|
import { useUpdateProformaPageController } from "../../controllers/use-update-proforma-page-controller";
|
||||||
import { ProformaUpdateEditorForm } from "../blocks";
|
|
||||||
import { ProformaUpdateSkeleton } from "../components";
|
import { ProformaUpdateSkeleton } from "../components";
|
||||||
|
import { ProformaUpdateEditorForm } from "../editors";
|
||||||
|
|
||||||
export const ProformaUpdatePage = () => {
|
export const ProformaUpdatePage = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -28,9 +28,9 @@ export const ProformaUpdatePage = () => {
|
|||||||
message={
|
message={
|
||||||
updateCtrl.loadError instanceof Error
|
updateCtrl.loadError instanceof Error
|
||||||
? updateCtrl.loadError.message
|
? updateCtrl.loadError.message
|
||||||
: t("proformas.update.load_error.message", "Inténtalo de nuevo más tarde")
|
: t("pages.proformas.update.load_error.message", "Inténtalo de nuevo más tarde")
|
||||||
}
|
}
|
||||||
title={t("proformas.update.load_error.title", "No se pudo cargar la proforma")}
|
title={t("pages.proformas.update.load_error.title", "No se pudo cargar la proforma")}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="flex items-center justify-end">
|
<div className="flex items-center justify-end">
|
||||||
@ -45,8 +45,11 @@ export const ProformaUpdatePage = () => {
|
|||||||
<>
|
<>
|
||||||
<AppContent>
|
<AppContent>
|
||||||
<NotFoundCard
|
<NotFoundCard
|
||||||
message={t("pages.update.notFoundMsg", "Revisa el identificador o vuelve al listado.")}
|
message={t(
|
||||||
title={t("pages.update.notFoundTitle", "Proforma no encontrada")}
|
"pages.proformas.update.not_found_msg",
|
||||||
|
"Revisa el identificador o vuelve al listado."
|
||||||
|
)}
|
||||||
|
title={t("pages.proformas.update.not_found_title", "Proforma no encontrada")}
|
||||||
/>
|
/>
|
||||||
</AppContent>
|
</AppContent>
|
||||||
</>
|
</>
|
||||||
@ -57,7 +60,7 @@ export const ProformaUpdatePage = () => {
|
|||||||
<AppHeader className="space-y-4 max-w-5xl mx-auto">
|
<AppHeader className="space-y-4 max-w-5xl mx-auto">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
backIcon
|
backIcon
|
||||||
description={t("pages.update.description")}
|
description={t("pages.proformas.update.description")}
|
||||||
rightSlot={
|
rightSlot={
|
||||||
<UpdateCommitButtonGroup
|
<UpdateCommitButtonGroup
|
||||||
cancel={{
|
cancel={{
|
||||||
@ -74,7 +77,7 @@ export const ProformaUpdatePage = () => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
title={t("pages.update.title")}
|
title={t("pages.proformas.update.title")}
|
||||||
/>
|
/>
|
||||||
</AppHeader>
|
</AppHeader>
|
||||||
<AppContent className="space-y-4 max-w-5xl mx-auto">
|
<AppContent className="space-y-4 max-w-5xl mx-auto">
|
||||||
@ -83,9 +86,9 @@ export const ProformaUpdatePage = () => {
|
|||||||
<ErrorAlert
|
<ErrorAlert
|
||||||
message={
|
message={
|
||||||
(updateCtrl.updateError as Error)?.message ??
|
(updateCtrl.updateError as Error)?.message ??
|
||||||
t("pages.update.errorMsg", "Revisa los datos e inténtalo de nuevo.")
|
t("pages.proformas.update.error_msg", "Revisa los datos e inténtalo de nuevo.")
|
||||||
}
|
}
|
||||||
title={t("pages.update.errorTitle", "No se pudo guardar los cambios")}
|
title={t("pages.proformas.update.error_title", "No se pudo guardar los cambios")}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ type SelectFieldProps<TFormValues extends FieldValues> = {
|
|||||||
readOnly?: boolean;
|
readOnly?: boolean;
|
||||||
|
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
items: SelectFieldItem[];
|
items?: SelectFieldItem[];
|
||||||
|
|
||||||
orientation?: "vertical" | "horizontal" | "responsive";
|
orientation?: "vertical" | "horizontal" | "responsive";
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ export function SelectField<TFormValues extends FieldValues>({
|
|||||||
readOnly = false,
|
readOnly = false,
|
||||||
|
|
||||||
placeholder,
|
placeholder,
|
||||||
items,
|
items = [],
|
||||||
|
|
||||||
orientation = "vertical",
|
orientation = "vertical",
|
||||||
|
|
||||||
@ -66,6 +66,13 @@ export function SelectField<TFormValues extends FieldValues>({
|
|||||||
control={control}
|
control={control}
|
||||||
name={name}
|
name={name}
|
||||||
render={({ field, fieldState }) => {
|
render={({ field, fieldState }) => {
|
||||||
|
const fieldValue = typeof field.value === "string" ? field.value.trim() : "";
|
||||||
|
|
||||||
|
const normalizedItems =
|
||||||
|
fieldValue && !items.some((item) => item.value === fieldValue)
|
||||||
|
? [{ value: fieldValue, label: fieldValue }, ...items]
|
||||||
|
: items;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Field
|
<Field
|
||||||
className={cn("gap-1", className)}
|
className={cn("gap-1", className)}
|
||||||
@ -103,7 +110,7 @@ export function SelectField<TFormValues extends FieldValues>({
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{items.map((item) => (
|
{normalizedItems.map((item) => (
|
||||||
<SelectItem key={`key-${item.value}`} value={item.value}>
|
<SelectItem key={`key-${item.value}`} value={item.value}>
|
||||||
{item.label}
|
{item.label}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|||||||
@ -15,9 +15,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -39,9 +39,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -57,6 +57,7 @@ export function SiteHeader() {
|
|||||||
data-size="icon"
|
data-size="icon"
|
||||||
data-slot="button"
|
data-slot="button"
|
||||||
data-variant="ghost"
|
data-variant="ghost"
|
||||||
|
type="button"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
@ -64,9 +65,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -139,9 +140,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -156,6 +157,7 @@ export function SiteHeader() {
|
|||||||
data-size="icon-sm"
|
data-size="icon-sm"
|
||||||
data-slot="button"
|
data-slot="button"
|
||||||
data-variant="ghost"
|
data-variant="ghost"
|
||||||
|
type="button"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
@ -163,9 +165,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -191,9 +193,9 @@ export function SiteHeader() {
|
|||||||
fill="none"
|
fill="none"
|
||||||
height="24"
|
height="24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
stroke-linecap="round"
|
strokeLinecap="round"
|
||||||
stroke-linejoin="round"
|
strokeLinejoin="round"
|
||||||
stroke-width="2"
|
strokeWidth="2"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -211,7 +213,7 @@ export function SiteHeader() {
|
|||||||
data-slot="separator"
|
data-slot="separator"
|
||||||
role="none"
|
role="none"
|
||||||
/>
|
/>
|
||||||
<span
|
<button
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
aria-haspopup="menu"
|
aria-haspopup="menu"
|
||||||
className="group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6"
|
className="group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6"
|
||||||
@ -227,7 +229,7 @@ export function SiteHeader() {
|
|||||||
data-slot="avatar-image"
|
data-slot="avatar-image"
|
||||||
src="/images/avatars/01.png"
|
src="/images/avatars/01.png"
|
||||||
/>
|
/>
|
||||||
</span>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user