{"version":3,"file":"__federation_expose_BilledRecoveryAndExpensesFormScreen.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/otherReports/src/screens/BilledRecoveryAndExpensesForm.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/otherReports/src/screens/BilledRecoveryAndExpensesFormScreen.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { useAuth } from \"@data-oil-front/core-host\";\nimport { submitReportWithOfflineFallback } from \"@data-oil-front/core-reports\";\nimport { TABLE_NAMES, API_VERBS, ApiPostBody } from \"@data-oil-front/core-utils\";\nimport {\n  View,\n  Text,\n  StyleSheet,\n  ScrollView,\n  TextInput,\n} from 'react-native';\nimport dayjs from 'dayjs';\nimport { StatusButton, DatePicker, FormBox } from '@data-oil-front/ui-mobile';\nimport Toast from 'react-native-toast-message';\nimport { useClientConfig } from '../hooks/useClientConfig';\n\n\nexport default function BilledRecoveryAndExpensesFormComponent() {\n  const [date, setDate] = useState<Date>(new Date());\n  const [billedValue, setBilledValue] = useState<string>('');\n  const [recoveryValue, setRecoveryValue] = useState<string>('');\n  const [expensesValue, setExpensesValue] = useState<string>('');\n\n  const [touched, setTouched] = useState<boolean>(false);\n  const [isLoading, setIsLoading] = useState<boolean>(false);\n\n          const { primaryColor: accentColor } = useClientConfig();\n  const { user } = useAuth();\n\n  const isDateValid = useMemo(() => !!date, [date]);\n  const isBilledValueValid = useMemo(\n    () => billedValue.trim() !== '' && /^\\d+(?:[.,]\\d+)?$/.test(billedValue.trim()),\n    [billedValue],\n  );\n  const isRecoveryValueValid = useMemo(\n    () => recoveryValue.trim() !== '' && /^\\d+(?:[.,]\\d+)?$/.test(recoveryValue.trim()),\n    [recoveryValue],\n  );\n  const isExpensesValueValid = useMemo(\n    () => expensesValue.trim() !== '' && /^\\d+(?:[.,]\\d+)?$/.test(expensesValue.trim()),\n    [expensesValue],\n  );\n\n  const openToast = useCallback((typeParam: string, titleParam: string, messageParam: string) => {\n    Toast.show({\n      type: typeParam === 'notification' ? 'info' : typeParam,\n      text1: titleParam,\n      text2: messageParam,\n    });\n  }, []);\n\n  const handleSubmit = useCallback(async () => {\n    setTouched(true);\n    if (!isDateValid || !isBilledValueValid || !isRecoveryValueValid || !isExpensesValueValid) return;\n\n    setIsLoading(true);\n    try {\n      const formattedDate = dayjs(date).format('YYYY-MM-DD');\n      const billed = parseFloat(billedValue.replace(',', '.'));\n      const recovery = parseFloat(recoveryValue.replace(',', '.'));\n      const expenses = parseFloat(expensesValue.replace(',', '.'));\n\n      const payload = new ApiPostBody({\n        verb: API_VERBS.INSERT,\n        table: TABLE_NAMES.BILLED_RECOVERY_AND_EXPENSES,\n        fields: ['date_created', 'billed_value', 'recovery_value', 'expenses_value', 'user_id'],\n        values: [\n          formattedDate,\n          isFinite(billed) ? billed : null,\n          isFinite(recovery) ? recovery : null,\n          isFinite(expenses) ? expenses : null,\n          user?.id ? String(user.id) : null,\n        ],\n        filter: [],\n      });\n\n      const result = await submitReportWithOfflineFallback(TABLE_NAMES.BILLED_RECOVERY_AND_EXPENSES, payload);\n\n      if (!result.success) {\n        openToast('error', 'Error al enviar', result.message || 'Ocurrió un error al enviar el formulario');\n        return;\n      }\n\n      openToast('success', 'Formulario enviado', result.offline ? 'Guardado para enviar cuando haya conexión' : 'El formulario ha sido enviado correctamente');\n\n      setTimeout(() => {\n        setDate(new Date());\n        setBilledValue('');\n        setRecoveryValue('');\n        setExpensesValue('');\n        setTouched(false);\n      }, 300);\n    } catch (_e) {\n      openToast('error', 'Error inesperado', 'Ocurrió un error inesperado. Intente nuevamente.');\n    } finally {\n      setIsLoading(false);\n    }\n  }, [\n    billedValue,\n    date,\n    expensesValue,\n    isBilledValueValid,\n    isDateValid,\n    isExpensesValueValid,\n    isRecoveryValueValid,\n    openToast,\n    recoveryValue,\n    user?.id,\n  ]);\n\n  return (\n    <>\n      <View style={styles.container}>\n        <ScrollView contentContainerStyle={styles.content} showsVerticalScrollIndicator={false}>\n          {/* Título */}\n          <Text style={styles.headerTitle}>Facturado, Recobro y Gastos de PDVSA</Text>\n\n          {/* IMPORTANTE */}\n          <FormBox title=\"IMPORTANTE\">\n            <Text style={styles.paragraph}>\n              Por favor, verifica que los datos ingresados sean correctos antes de enviar este formulario. La calidad y\n              exactitud de esta información son esenciales para:\n            </Text>\n            <View style={styles.bulletList}>\n              <Text style={styles.paragraph}>• Generar reportes confiables y oportunos.</Text>\n              <Text style={styles.paragraph}>• Evitar retrasos o errores en la toma de decisiones.</Text>\n              <Text style={styles.paragraph}>• Garantizar el cumplimiento de las políticas internas de la empresa.</Text>\n            </View>\n            <Text style={styles.paragraph}>\n              <Text style={styles.bold}>Nota:</Text> Los campos marcados con (*) son obligatorios.\n            </Text>\n          </FormBox>\n\n          {/* Formulario */}\n          <View style={styles.box}>\n            {/* Fecha */}\n            <View style={styles.fieldGroup}>\n              <Text style={styles.label}>Escoge la fecha de este dato <Text style={styles.required}>*</Text></Text>\n              <DatePicker\n                value={date}\n                onChange={(d: Date | null) => setDate(d || new Date())}\n                onClear={() => setDate(new Date())}\n                disabled={isLoading}\n              />\n              {touched && !isDateValid && <Text style={styles.errorText}>Este campo es obligatorio</Text>}\n            </View>\n\n            {/* Valor facturado */}\n            <View style={styles.fieldGroup}>\n              <Text style={styles.label}>\n                Valor de Facturado (solo números, ej: 4000.50) <Text style={styles.required}>*</Text>\n              </Text>\n              <TextInput\n                value={billedValue}\n                onChangeText={setBilledValue}\n                placeholder=\"Escriba su respuesta\"\n                keyboardType=\"decimal-pad\"\n                style={styles.input}\n                editable={!isLoading}\n              />\n              {touched && !isBilledValueValid && (\n                <Text style={styles.errorText}>Este campo es obligatorio</Text>\n              )}\n            </View>\n\n            {/* Valor recobro */}\n            <View style={styles.fieldGroup}>\n              <Text style={styles.label}>\n                Valor de Recobro (solo números, ej: 4000.50) <Text style={styles.required}>*</Text>\n              </Text>\n              <TextInput\n                value={recoveryValue}\n                onChangeText={setRecoveryValue}\n                placeholder=\"Escriba su respuesta\"\n                keyboardType=\"decimal-pad\"\n                style={styles.input}\n                editable={!isLoading}\n              />\n              {touched && !isRecoveryValueValid && (\n                <Text style={styles.errorText}>Este campo es obligatorio</Text>\n              )}\n            </View>\n\n            {/* Valor gastos */}\n            <View style={styles.fieldGroup}>\n              <Text style={styles.label}>\n                Valor de Gastos (solo números, ej: 4000.50) <Text style={styles.required}>*</Text>\n              </Text>\n              <TextInput\n                value={expensesValue}\n                onChangeText={setExpensesValue}\n                placeholder=\"Escriba su respuesta\"\n                keyboardType=\"decimal-pad\"\n                style={styles.input}\n                editable={!isLoading}\n              />\n              {touched && !isExpensesValueValid && (\n                <Text style={styles.errorText}>Este campo es obligatorio</Text>\n              )}\n            </View>\n          </View>\n\n          {/* Botón enviar */}\n          <StatusButton\n            title=\"Finalizar\"\n            loadingTitle=\"Enviando...\"\n            onPress={handleSubmit}\n            loading={isLoading}\n            disabled={isLoading}\n            backgroundColor={accentColor || undefined}\n            style={[styles.submitBtn, isLoading && styles.submitBtnDisabled] as any}\n            size=\"medium\"\n          />\n        </ScrollView>\n      </View>\n    </>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: '#fff',\n  },\n  content: {\n    padding: 16,\n    gap: 16,\n  },\n  headerTitle: {\n    fontSize: 18,\n    fontWeight: 'bold',\n    color: '#111827',\n    textAlign: 'center',\n  },\n  box: {\n    backgroundColor: '#F9FAFB',\n    borderColor: '#E5E7EB',\n    borderWidth: 1,\n    borderRadius: 12,\n    padding: 12,\n  },\n  boxTitle: {\n    fontSize: 14,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 8,\n  },\n  paragraph: {\n    fontSize: 14,\n    color: '#374151',\n    marginBottom: 4,\n  },\n  bulletList: {\n    gap: 2,\n    marginBottom: 4,\n  },\n  bold: {\n    fontWeight: '700',\n  },\n  fieldGroup: {\n    marginBottom: 12,\n  },\n  label: {\n    fontSize: 14,\n    color: '#111827',\n    marginBottom: 8,\n    fontWeight: '600',\n  },\n  required: {\n    color: '#FF1D4B',\n  },\n  input: {\n    backgroundColor: '#fff',\n    borderColor: '#E5E7EB',\n    borderWidth: 1,\n    borderRadius: 10,\n    paddingHorizontal: 12,\n    paddingVertical: 12,\n  },\n  inputText: {\n    fontSize: 14,\n    color: '#111827',\n  },\n  errorText: {\n    color: '#FF1D4B',\n    fontSize: 14,\n    marginTop: 4,\n  },\n  submitBtn: {\n    width: '100%',\n    paddingVertical: 14,\n    borderRadius: 10,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  submitBtnDisabled: {\n    opacity: 0.6,\n  },\n  submitBtnText: {\n    color: '#fff',\n    fontSize: 16,\n    fontWeight: '600',\n  },\n  toastContainer: {\n    position: 'absolute',\n    top: 16,\n    left: 12,\n    right: 12,\n    zIndex: 50,\n  },\n});\n\n\n","import BilledRecoveryAndExpensesFormComponent from './BilledRecoveryAndExpensesForm';\n\nfunction BilledRecoveryAndExpensesFormScreen() {\n  return <BilledRecoveryAndExpensesFormComponent />;\n}\n\nexport default BilledRecoveryAndExpensesFormScreen;\n\n\n"],"names":["BilledRecoveryAndExpensesFormComponent","Date","date","setDate","useState","billedValue","setBilledValue","recoveryValue","setRecoveryValue","expensesValue","setExpensesValue","touched","setTouched","isLoading","setIsLoading","accentColor","useClientConfig","primaryColor","useAuth","user","isDateValid","useMemo","isBilledValueValid","trim","test","isRecoveryValueValid","isExpensesValueValid","openToast","useCallback","typeParam","messageParam","Toast","show","type","text1","titleParam","text2","handleSubmit","formattedDate","dayjs","format","billed","parseFloat","replace","recovery","expenses","payload","ApiPostBody","verb","API_VERBS","INSERT","table","TABLE_NAMES","BILLED_RECOVERY_AND_EXPENSES","fields","values","isFinite","id","String","filter","result","submitReportWithOfflineFallback","success","message","offline","setTimeout","_e","View","style","styles","container","ScrollView","contentContainerStyle","content","showsVerticalScrollIndicator","Text","headerTitle","FormBox","title","paragraph","bulletList","bold","box","fieldGroup","label","required","DatePicker","value","onChange","d","onClear","disabled","errorText","TextInput","onChangeText","placeholder","keyboardType","input","editable","StatusButton","loadingTitle","onPress","loading","backgroundColor","undefined","submitBtn","submitBtnDisabled","size","StyleSheet","create","flex","padding","gap","fontSize","fontWeight","color","textAlign","borderColor","borderWidth","borderRadius","boxTitle","marginBottom","paddingHorizontal","paddingVertical","inputText","marginTop","width","alignItems","justifyContent","opacity","submitBtnText","toastContainer","position","top","left","right","zIndex"],"mappings":"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"}