'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button } from '@repo/shadcn/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@repo/shadcn/form'; import { Input } from '@repo/shadcn/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@repo/shadcn/select'; import { Textarea } from '@repo/shadcn/textarea'; import { useForm } from 'react-hook-form'; import { useCreateTraining, useUpdateTraining } from '../hooks/use-training'; import { TrainingSchema, trainingSchema } from '../schemas/training'; import { useMunicipalityQuery, useParishQuery, useStateQuery, } from '@/feactures/location/hooks/use-query-location'; import { Card, CardContent, CardHeader, CardTitle, } from '@repo/shadcn/components/ui/card'; import { SelectSearchable } from '@repo/shadcn/select-searchable'; import React from 'react'; // const PRODUCTIVE_ACTIVITIES = [ // 'Agricola', // 'Textil', // 'Bloquera', // 'Carpinteria', // 'Unidad de suministro', // ]; const ECO_SECTORS = ['Primario', 'Secundario', 'Terciario']; // const ECO_SECTORS_PRIMARIO = ['Agropecuario', 'Pesca', 'Minería', 'Forestal']; // const ECO_SECTORS_SECUNDARIO = ['Manufactura', 'Construcción', 'Energía']; const PRODUCTIVE_SECTORS = ['Agricola', 'Manufactura', 'Servicios', 'Comercio', 'Turismo']; const CENTRAL_PRODUCTIVE_ACTIVITY = [ 'Produción Vegetal', 'Produción Animal', 'Produción Animal y Vegetal', 'INDUSTRIAL', 'SERVICIOS', 'TURISMO', 'COMERCIO' ]; // const PRODUCTIVE_SECTORS_PRIMARIO = ['Agricola']; // const PRODUCTIVE_SECTORS_SECUNDARIO = ['Manufactura']; // const PRODUCTIVE_SECTORS_TERCIARIO = ['Servicios', 'Comercio', 'Turismo']; const MAIN_PRODUCTIVE_ACTIVITY = [ 'AGRICULTURA ', 'CRIA ', 'PATIOS PRODUCTIVOS O CONUCOS ', 'TRANSFORMACION DE LA MATERIA PRIMA', 'TALLER DE COFECCION TEXTIL ', 'CONSTRUCION ', 'OFRECER PRODUCTOS DE BIENES Y SERVICIOS', 'VISITAS GUIADAS ', 'ALOJAMIENTO ', 'TURISMO', 'COMERCIO' ]; const PRODUCTIVE_ACTIVITIES = [ 'SIEMBRA DE MAIZ ', 'SIEMBRA DE AJI', 'SIEMBRA DE CAFÉ ', 'SIEMBRA DE PLATANO', 'SIEMBRA DE CAMBUR ', 'SIEMBRA DE AGUACATE', 'SIEMBRA DE FRUTAS', 'SIEMBRA DE HORTALIZAS ', 'SIEMBRA DE TOMATE ', 'SIEMBRA DE CACAO', 'SIEMBRA DE PIMENTON ', 'SIEMBRA DE YUCA ', 'SIEMBRA DE CAÑA DE AZUCAR ', 'SIEMBRA DE GRANOS (CARAOTAS, FRIJOLES)', 'SIEMBRA DE ARROZ', 'SIEMBRA DE CEREALES (CEBADA, LINAZA, SOYA)', 'ELABORACION DE BIO-INSUMO (ABONO ORGANICO) ', 'BOVINO ', 'PORCINO', 'CAPRINO', 'CUNICULTURA', 'AVICOLA', 'PISCICULA', 'SIEMBRA Y CRIA ', 'ELABORACION DE PRODUCTOS QUIMICOS (LIMPIEZA E HIGIENE PERSONAL)', 'PANADERIAS', 'RESPOSTERIA ', 'ELABORACION DE HARINAS PRECOCIDA ', 'PLANTA ABA (ELABORACION DE ALIMENTOS BALANCEADOS PARA ANIMALES)', 'ELABORACION DE PRODUCTOS DERIVADO DE LA LECHE (VACA, CABRA, BUFFALA)', 'EMPAQUETADORAS DE GRANOS Y POLVOS ', 'ELABORACION DE ACEITE COMESTIBLE ', 'FABRICA DE HIELO', 'ELABORACION DE PAPELON', 'ARTESANIAS', 'ELABORACION DE UNIFORME ESCOLARES Y PRENDA DE VESTIR ', 'ELABORACION DE PRENDAS INTIMAS ', 'ELABORACION DE LENCERIA ', 'SUBLIMACION DE TEJIDOS ', 'ELABORACION DE CALZADOS ', 'BLOQUERAS ', 'PLANTA PREMEZCLADORA DE CEMENTO', 'CARPINTERIAS', 'HERRERIAS', 'MERCADOS COMUNALES', 'CENTROS DE ACOPIOS Y DISTRIBUCION', 'UNIDAD DE SUMINISTRO', 'MATADERO (SALA DE MATANZA DE ANIMALES)', 'PELUQUERIA', 'BARBERIA', 'AGENCIAS DE FESTEJOS', 'LAVANDERIAS', 'REPARACION DE CALZADOS', 'TALLER DE MECANICA', 'TRANSPORTES', 'RUTAS TURISTICAS', 'POSADAS', 'HOTELES', 'AGENCIAS DE VIAJES', 'VENTA DE VIVERES', 'VENTAS DE PRENDAS DE VESTIR', 'VENTA DE PRODUCTOS QUIMICOS Y DERIVADOS', 'BODEGAS COMUNALES', 'FRIGORIFICOS Y CARNICOS' ] const OSP_TYPES = ['EPSIC', 'EPSDC', 'UPF', 'OTROS', 'COOPERATIVA']; const STATUS_OPTIONS = ['ACTIVA', 'INACTIVA']; const CIVIL_STATE_OPTIONS = ['Soltero', 'Casado']; interface CreateTrainingFormProps { onSuccess?: () => void; onCancel?: () => void; defaultValues?: Partial; } export function CreateTrainingForm({ onSuccess, onCancel, defaultValues, }: CreateTrainingFormProps) { const { mutate: createTraining, isPending: isCreating } = useCreateTraining(); const { mutate: updateTraining, isPending: isUpdating } = useUpdateTraining(); const isSaving = isCreating || isUpdating; // const [state, setState] = React.useState(0); // const [municipality, setMunicipality] = React.useState(0); // const [disabledMunicipality, setDisabledMunicipality] = React.useState(true); // const [disabledParish, setDisabledParish] = React.useState(true); const [coorState, setcoorState] = React.useState(0); const [coorMunicipality, setcoorMunicipality] = React.useState(0); const [disabledCoorMunicipality, setDisabledCoorMunicipality] = React.useState(true); const [disabledCoorParish, setDisabledCoorParish] = React.useState(true); const [selectedFiles, setSelectedFiles] = React.useState([]); // const { data: dataState } = useStateQuery(); // const { data: dataMunicipality } = useMunicipalityQuery(state); // const { data: dataParish } = useParishQuery(municipality); const { data: dataCoorState } = useStateQuery(); const { data: dataCoorMunicipality } = useMunicipalityQuery(coorState); const { data: dataCoorParish } = useParishQuery(coorMunicipality); const coorStateOptions = dataCoorState?.data || [{ id: 0, name: 'Sin estados' }]; const coorMunicipalityOptions = Array.isArray(dataCoorMunicipality?.data) && dataCoorMunicipality.data.length > 0 ? dataCoorMunicipality.data : [{ id: 0, stateId: 0, name: 'Sin Municipios' }]; const coorParishOptions = Array.isArray(dataCoorParish?.data) && dataCoorParish.data.length > 0 ? dataCoorParish.data : [{ id: 0, stateId: 0, name: 'Sin Parroquias' }]; // const stateOptions = dataState?.data || [{ id: 0, name: 'Sin estados' }]; // const municipalityOptions = // Array.isArray(dataMunicipality?.data) && dataMunicipality.data.length > 0 // ? dataMunicipality.data // : [{ id: 0, stateId: 0, name: 'Sin Municipios' }]; // const parishOptions = // Array.isArray(dataParish?.data) && dataParish.data.length > 0 // ? dataParish.data // : [{ id: 0, stateId: 0, name: 'Sin Parroquias' }]; // No local state needed for existing photos, we use form values React.useEffect(() => { if (defaultValues) { // if (defaultValues.state) { // setState(Number(defaultValues.state)); // setDisabledMunicipality(false); // } // if (defaultValues.municipality) { // setMunicipality(Number(defaultValues.municipality)); // setDisabledParish(false); // } if (defaultValues.coorState) { setcoorState(Number(defaultValues.coorState)); setDisabledCoorMunicipality(false); } if (defaultValues.coorMunicipality) { setcoorMunicipality(Number(defaultValues.coorMunicipality)); setDisabledCoorParish(false); } } }, [defaultValues]); const formatToLocalISO = (dateStr?: string | Date) => { const date = dateStr ? new Date(dateStr) : new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}`; }; const form = useForm({ resolver: zodResolver(trainingSchema), defaultValues: { firstname: defaultValues?.firstname || '', lastname: defaultValues?.lastname || '', coorState: defaultValues?.coorState || undefined, coorMunicipality: defaultValues?.coorMunicipality || undefined, coorParish: defaultValues?.coorParish || undefined, coorPhone: defaultValues?.coorPhone || '', visitDate: formatToLocalISO(defaultValues?.visitDate), productiveActivity: defaultValues?.productiveActivity || '', ecoSector: defaultValues?.ecoSector || undefined, productiveSector: defaultValues?.productiveSector || undefined, centralProductiveActivity: defaultValues?.centralProductiveActivity || '', mainProductiveActivity: defaultValues?.mainProductiveActivity || '', typesOfEquipment: defaultValues?.typesOfEquipment || '', equipmentCount: defaultValues?.equipmentCount || 0, equipmentDescription: defaultValues?.equipmentDescription || '', rawMaterial: defaultValues?.rawMaterial || '', materialType: defaultValues?.materialType || '', rawMaterialCount: defaultValues?.rawMaterialCount || 0, productCountDaily: defaultValues?.productCountDaily || 0, productCountWeekly: defaultValues?.productCountWeekly || 0, productCountMonthly: defaultValues?.productCountMonthly || 0, financialRequirementDescription: defaultValues?.financialRequirementDescription || '', siturCodeCommune: defaultValues?.siturCodeCommune || '', communeName: defaultValues?.communeName || '', communeRif: defaultValues?.communeRif || '', communeSpokespersonName: defaultValues?.communeSpokespersonName || '', communeSpokespersonCedula: defaultValues?.communeSpokespersonCedula || '', communeSpokespersonRif: defaultValues?.communeSpokespersonRif || '', communeSpokespersonPhone: defaultValues?.communeSpokespersonPhone || '', communeEmail: defaultValues?.communeEmail || '', communalCouncil: defaultValues?.communalCouncil || '', siturCodeCommunalCouncil: defaultValues?.siturCodeCommunalCouncil || '', communalCouncilRif: defaultValues?.communalCouncilRif || '', communalCouncilSpokespersonName: defaultValues?.communalCouncilSpokespersonName || '', communalCouncilSpokespersonCedula: defaultValues?.communalCouncilSpokespersonCedula || '', communalCouncilSpokespersonRif: defaultValues?.communalCouncilSpokespersonRif || '', communalCouncilSpokespersonPhone: defaultValues?.communalCouncilSpokespersonPhone || '', communalCouncilEmail: defaultValues?.communalCouncilEmail || '', ospGoogleMapsLink: defaultValues?.ospGoogleMapsLink || '', ospName: defaultValues?.ospName || '', ospAddress: defaultValues?.ospAddress || '', ospRif: defaultValues?.ospRif || '', ospType: defaultValues?.ospType || '', currentStatus: defaultValues?.currentStatus || 'ACTIVA', companyConstitutionYear: defaultValues?.companyConstitutionYear || new Date().getFullYear(), producerCount: defaultValues?.producerCount || 0, productCount: defaultValues?.productCount || 0, productDescription: defaultValues?.productDescription || '', installedCapacity: defaultValues?.installedCapacity || '', operationalCapacity: defaultValues?.operationalCapacity || '', ospResponsibleFullname: defaultValues?.ospResponsibleFullname || '', ospResponsibleCedula: defaultValues?.ospResponsibleCedula || '', ospResponsibleRif: defaultValues?.ospResponsibleRif || '', ospResponsiblePhone: defaultValues?.ospResponsiblePhone || '', civilState: defaultValues?.civilState || '', familyBurden: defaultValues?.familyBurden || 0, numberOfChildren: defaultValues?.numberOfChildren || 0, generalObservations: defaultValues?.generalObservations || '', ospResponsibleEmail: defaultValues?.ospResponsibleEmail || '', photo1: defaultValues?.photo1 || '', photo2: defaultValues?.photo2 || '', photo3: defaultValues?.photo3 || '', paralysisReason: defaultValues?.paralysisReason || '', // state: defaultValues?.state || undefined, // municipality: defaultValues?.municipality || undefined, // parish: defaultValues?.parish || undefined }, mode: 'onChange', }); const onSubmit = async (formData: TrainingSchema) => { const data = new FormData(); Object.entries(formData).forEach(([key, value]) => { if (key !== 'files' && value !== undefined && value !== null) { data.append(key, value.toString()); } }); if (defaultValues?.id) { data.append('id', defaultValues.id.toString()); } selectedFiles.forEach((file) => { data.append('files', file); }); const mutation = defaultValues?.id ? updateTraining : createTraining; mutation(data as any, { onSuccess: () => { form.reset(); setSelectedFiles([]); onSuccess?.(); }, onError: (e) => { console.error(e); form.setError('root', { type: 'manual', message: 'Error al guardar el registro', }); }, }); }; return ( <>

Formulario de Registro de Organizaciones Socioproductivas

Complete el Formulario para guardar la organización

{form.formState.errors.root && (
{form.formState.errors.root.message}
)} {/* 1. Datos de la visita */} 1. Datos de la visita ( Nombre del Coordinador Estadal )} /> ( Apellido del coordinador Estadal )} /> ( Telefono del coordinador Estadal )} /> ( Estado ({ value: item.id.toString(), label: item.name, }))} onValueChange={(value) => { field.onChange(Number(value)); setcoorState(Number(value)); setDisabledCoorMunicipality(false); setDisabledCoorParish(true); }} placeholder="Selecciona un estado" defaultValue={field.value?.toString()} /> )} /> ( Municipio ({ value: item.id.toString(), label: item.name, }))} onValueChange={(value) => { field.onChange(Number(value)); setcoorMunicipality(Number(value)); setDisabledCoorParish(false); }} placeholder="Selecciona un municipio" disabled={disabledCoorMunicipality} defaultValue={field.value?.toString()} /> )} /> ( Parroquia ({ value: item.id.toString(), label: item.name, }))} onValueChange={(value) => field.onChange(Number(value))} placeholder="Selecciona una parroquia" disabled={disabledCoorParish} defaultValue={field.value?.toString()} /> )} /> ( Fecha y hora de la visita )} /> {/* 2. Datos de la OSP */} 2. Datos de la Organización Socioproductiva (OSP) ( Tipos de Organización )} /> ( Sector Económico )} /> ( Sector Productivo )} /> ( Actividad Central Productivo )} /> ( Actividad Productiva )} /> ( RIF de la Organización )} /> ( Nombre de la Organización )} /> {/* ( Actividad Productiva )} /> */} {/* Tipo de equipamiento */}

Tipo de equipamiento:

( Maquinarias )} /> ( Cantidad )} /> ( Descripción