diff --git a/src/components/ClientDebit.js b/src/components/ClientDebit.js index c6fa2e5..577488c 100644 --- a/src/components/ClientDebit.js +++ b/src/components/ClientDebit.js @@ -20,7 +20,6 @@ const ClientDebit = ({ clientInfo }) => { 0 ).toFixed(2) ); - console.log("ClientDebit.js: vBalance: ", vBalance, "clientInfo: ", clientInfo); const navigation = useNavigation(); return ( diff --git a/src/components/ClientItem.js b/src/components/ClientItem.js index 362f251..95a17aa 100644 --- a/src/components/ClientItem.js +++ b/src/components/ClientItem.js @@ -1,10 +1,11 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { View, Text, TouchableOpacity, StyleSheet, Dimensions } from "react-native"; import { MaterialCommunityIcons } from "@expo/vector-icons"; import { FontAwesome5 } from "@expo/vector-icons"; import { theme } from '../assets/Theme'; import StyledText from "../utils/StyledText"; import BorderBox from "../utils/BorderBox"; +import useStore from "../stores/store"; const windowWidth = Dimensions.get('window').width; @@ -13,7 +14,14 @@ const ClientItem = ({ client, onSelect }) => { const vCuenta =client.Cuenta; const vBalance = parseFloat(client.NotasPendientes.reduce((total, nota) => total + nota.Saldo_pendiente, 0).toFixed(2)); const vNotasPendientes = client.NotasPendientes.length; - const vUltimoPago = ''; + const pagosRealizados = useStore(state => state.pagosRealizados); + const [vUltimoPago, setUltimoPago] = useState("2020-06-10"); + + useEffect( () => { + if(pagosRealizados.length > 0){ + setUltimoPago(pagosRealizados.reduce((mayor, pago)=> pago.fecha > mayor && pago.cuenta === client.Cuenta? pago.fecha : mayor, "2020-06-10")); + } + }, [pagosRealizados]); return ( onSelect(client.id)} style={{marginVertical: 10}}> @@ -46,7 +54,7 @@ const ClientItem = ({ client, onSelect }) => { ultimo pago : - 2020-06-12 + {vUltimoPago} diff --git a/src/screens/AutomaticPayScreen.js b/src/screens/AutomaticPayScreen.js index 997715f..e1ce9cb 100644 --- a/src/screens/AutomaticPayScreen.js +++ b/src/screens/AutomaticPayScreen.js @@ -39,9 +39,9 @@ const AutomaticPayScreen = ({ route }) => { ); useEffect(()=> { if(criteria == "PEPS"){ - setDataAll(clientInfo.NotasPendientes.sort((a, b) => a.Fecha - b.Fecha)); + setDataAll(clientInfo.NotasPendientes.sort((a, b) => b.Fecha - a.Fecha)); }else if(criteria == "UEPS"){ - setDataAll(clientInfo.NotasPendientes.sort((a, b) => b.Fecha - a.Fecha)); + setDataAll(clientInfo.NotasPendientes.sort((a, b) => a.Fecha - b.Fecha)); }else if(criteria == "MayorMenor"){ setDataAll(clientInfo.NotasPendientes.sort((a, b) => b.Saldo_pendiente - a.Saldo_pendiente)); }else{ @@ -82,62 +82,38 @@ const AutomaticPayScreen = ({ route }) => { const onSubmit = (data) => { console.log(data); let index = 0; - let auxiAmount = data.amount; while(index < dataAll.length && data.amount > 0){ - auxiAmount = data.amount; - if(data.amount > dataAll[index].Saldo_pendiente){ - data.amount -= dataAll[index].Saldo_pendiente; - dataAll[index].Saldo_pendiente = 0; - dataAll[index].Monto_pagado = dataAll[index].importe_nota; - }else{ - dataAll[index].Saldo_pendiente -= data.amount; - dataAll[index].Monto_pagado += data.amount; - data.amount = 0; + if(dataAll[index].Saldo_pendiente === 0){}else{ + if(data.amount > dataAll[index].Saldo_pendiente){ + data.amount -= dataAll[index].Saldo_pendiente; + dataAll[index].Saldo_pendiente = 0; + dataAll[index].Monto_pagado = parseFloat(dataAll[index].importe_nota); + }else{ + dataAll[index].Saldo_pendiente -= parseFloat(data.amount); + dataAll[index].Monto_pagado += parseFloat(data.amount); + data.amount = 0; + } + updateNota(dataAll[index].id, {Saldo_pendiente: dataAll[index].Saldo_pendiente, Monto_pagado: parseFloat(dataAll[index].Monto_pagado)}); + agregarPago({ + cta_deposito: selectedBank, + cuenta: dataAll[index].Cuenta|| "", + empresa_id: user.empresa_id, + fecha: selectedDate, + fecha_registro: dataAll[index].Fecha_venta|| "", + modo_pago: method, + moneda: selectedCurrency, + monto: dataAll[index].Monto_pagado, + nro_factura: dataAll[index].nro_nota|| "", + observaciones: data.observations|| "", + pago_a_nota: dataAll[index].id|| "", + referencia: data.reference|| "", + sucursal_id: dataAll[index].sucursal_id|| "", + }) } - updateNota(dataAll[index].id, {Saldo_pendiente: dataAll[index].Saldo_pendiente, Monto_pagado: dataAll[index].Monto_pagado}); - agregarPago({ - cta_deposito: selectedBank, - cuenta: dataAll[index].Cuenta|| "", - empresa_id: user.empresa_id, - fecha: selectedDate, - fecha_registro: dataAll[index].Fecha_venta|| "", - modo_pago: method, - moneda: selectedCurrency, - monto: dataAll[index].Monto_pagado, - nro_factura: dataAll[index].nro_nota|| "", - observaciones: data.observations|| "", - pago_a_nota: dataAll[index].id|| "", - referencia: data.reference|| "", - sucursal_id: dataAll[index].sucursal_id|| "", - }) index++; } console.log("Pagos realizados"); navigation.goBack(); - // PaymentStore.getState().agregarPago({ - // numeroNota: note.nro_nota, - // fechaNota: note.Fecha, - // total: note.importe_nota, - // pagado: data.amount, - // }); - // updateNota(note.id, {Saldo_pendiente: note.Saldo_pendiente - parseFloat(data.amount), Monto_pagado: note.Monto_pagado + parseFloat(data.amount) }); - // agregarPago({ - // cta_deposito: selectedBank, - // cuenta: note.Cuenta|| "", - // empresa_id: user.empresa_id, - // fecha: selectedDate, - // fecha_registro: note.Fecha_venta|| "", - // modo_pago: method, - // moneda: selectedCurrency, - // monto: data.amount|| "", - // nro_factura: note.nro_nota|| "", - // observaciones: data.observations|| "", - // pago_a_nota: note.id|| "", - // referencia: data.reference|| "", - // sucursal_id: note.sucursal_id|| "", - // }) - // console.log("Pagos realizados:", PaymentStore.getState().pagosRealizados); - // navigation.goBack(); }; return ( @@ -171,7 +147,7 @@ const AutomaticPayScreen = ({ route }) => { rules={{ required: "Este campo es requerido", pattern: { - value: /^[0-9]+[.][0-9]{0,2}$/, + value: /^[0-9]+([.][0-9]{0,2})?$/, message: "Ingrese solo nĂºmeros", }, }} diff --git a/src/screens/PayScreen.js b/src/screens/PayScreen.js index 3c32ec1..e420043 100644 --- a/src/screens/PayScreen.js +++ b/src/screens/PayScreen.js @@ -114,7 +114,7 @@ const PayScreen = ({ route }) => { rules={{ required: "Este campo es requerido", pattern: { - value: /^[0-9]+[.][0-9]{0,2}$/, + value: /^[0-9]+([.][0-9]{0,2})?$/, message: "Ingrese solo nĂºmeros", }, }} diff --git a/src/stores/store.js b/src/stores/store.js index 0ea48b5..0aef432 100644 --- a/src/stores/store.js +++ b/src/stores/store.js @@ -6,6 +6,7 @@ const useStore = create((set, get) => ({ clientes: [], notasPendientes: [], clientesConNotas: [], + pagosRealizados: [], subscribeToData: () => { const unsubscribeClientes = onSnapshot(collection(db, 'clientes'), (snapshot) => { @@ -22,14 +23,20 @@ const useStore = create((set, get) => ({ // console.log("Notas pendientes actualizadas en tiempo real"); }); + const unsubscribePagos = onSnapshot(collection(db, 'notas_cobradas'), (snapshot) => { + const pagosRealizados = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); + set({ pagosRealizados }); + // console.log("Pagos realizados actualizados en tiempo real"); + }); return () => { unsubscribeClientes(); unsubscribeNotas(); + unsubscribePagos(); }; }, combinarClientesConNotas: () => { - const { clientes, notasPendientes } = get(); + const { clientes, notasPendientes, pagosRealizados } = get(); const mapaNotasPorCuenta = notasPendientes.reduce((acc, nota) => { const cuenta = nota.Cuenta?.trim(); acc[cuenta] = acc[cuenta] || []; @@ -37,11 +44,18 @@ const useStore = create((set, get) => ({ return acc; }, {}); + const mapaPagados = pagosRealizados.reduce((acc, pago) => { + const cuenta = pago.cuenta?.trim(); + acc[cuenta] = acc[cuenta] || []; + acc[cuenta].push(pago); + return acc; + }, {}); const clientesConNotas = clientes.map(cliente => { const cuentaCliente = cliente.Cuenta?.trim(); return { ...cliente, - NotasPendientes: mapaNotasPorCuenta[cuentaCliente] || [] + NotasPendientes: mapaNotasPorCuenta[cuentaCliente] || [], + PagosRealizados: mapaPagados[cuentaCliente] || [], }; });