diff --git a/public/config/settings.dev.json b/public/config/settings.dev.json
index ece01fd..2d72db1 100644
--- a/public/config/settings.dev.json
+++ b/public/config/settings.dev.json
@@ -28,7 +28,7 @@
},
"incomes": {
"all": "/incomes",
- "withNames": "/incomes/with-names",
+ "withInfo": "/incomes/with-info",
"mine": "/incomes/mine",
"byId": "/incomes/:incomeId"
},
@@ -37,7 +37,8 @@
"byId": "/expenses/:expenseId"
},
"balance": {
- "all": "/balance"
+ "all": "/balance",
+ "withTotals": "/balance/with-totals"
},
"announcements": {
"all": "/announcements",
diff --git a/public/config/settings.prod.json b/public/config/settings.prod.json
index ae335ee..30c5038 100644
--- a/public/config/settings.prod.json
+++ b/public/config/settings.prod.json
@@ -6,7 +6,8 @@
"auth": {
"login": "/auth/login",
"refreshToken": "/auth/refresh",
- "changePassword": "/auth/change-password"
+ "changePassword": "/auth/change-password",
+ "validateToken": "/auth/validate"
},
"users": {
"all": "/users",
@@ -27,7 +28,7 @@
},
"incomes": {
"all": "/incomes",
- "withNames": "/incomes/with-names",
+ "withInfo": "/incomes/with-info",
"mine": "/incomes/mine",
"byId": "/incomes/:incomeId"
},
@@ -36,7 +37,8 @@
"byId": "/expenses/:expenseId"
},
"balance": {
- "all": "/balance"
+ "all": "/balance",
+ "withTotals": "/balance/with-totals"
},
"announcements": {
"all": "/announcements",
diff --git a/src/components/Ingresos/IngresoCard.jsx b/src/components/Ingresos/IngresoCard.jsx
index c34a8d9..4e9a2ca 100644
--- a/src/components/Ingresos/IngresoCard.jsx
+++ b/src/components/Ingresos/IngresoCard.jsx
@@ -64,6 +64,8 @@ const IngresoCard = ({
type: income.type ?? CONSTANTS.PAYMENT_TYPE_CASH,
frequency: income.frequency ?? CONSTANTS.PAYMENT_FREQUENCY_YEARLY,
memberNumber: income.memberNumber,
+ userId: income.userId,
+ displayName: income.displayName || '',
createdAt: income.createdAt?.slice(0, 16) || (isNew ? getNowAsLocalDatetime() : ''),
});
@@ -74,14 +76,29 @@ const IngresoCard = ({
amount: income.amount || 0,
type: income.type ?? CONSTANTS.PAYMENT_TYPE_CASH,
frequency: income.frequency ?? CONSTANTS.PAYMENT_FREQUENCY_YEARLY,
- displayName: income.displayName,
+ userId: income.userId,
memberNumber: income.memberNumber,
+ displayName: income.displayName || '',
createdAt: income.createdAt?.slice(0, 16) || (isNew ? getNowAsLocalDatetime() : ''),
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [income, editMode]);
+ useEffect(() => {
+ if (formData.memberNumber && !formData.userId) {
+ const member = members.find(m => m.memberNumber === formData.memberNumber);
+ if (member) {
+ setFormData(prev => ({
+ ...prev,
+ userId: member.userId,
+ displayName: member.displayName
+ }));
+ }
+ }
+ }, [formData.memberNumber, formData.userId, members]);
+
+
const handleChange = (field, value) =>
setFormData(prev => ({ ...prev, [field]: value }));
@@ -167,13 +184,20 @@ const IngresoCard = ({
handleChange('memberNumber', parseInt(e.target.value))}
- style={{ maxWidth: '300px', display: 'inline-block' }}
+ value={formData.memberNumber ?? ""}
+ onChange={(e) => {
+ const memberNumber = parseInt(e.target.value);
+ const member = members.find(m => m.memberNumber === memberNumber);
+
+ handleChange('memberNumber', memberNumber);
+ handleChange('userId', member?.userId ?? null);
+ handleChange('displayName', member?.displayName ?? "");
+ }}
>
- {uniqueMembers.map((m) => (
-
+ {uniqueMembers.map((i) => (
+
))}
diff --git a/src/components/Socios/SocioCard.jsx b/src/components/Socios/SocioCard.jsx
index 063e84d..302f170 100644
--- a/src/components/Socios/SocioCard.jsx
+++ b/src/components/Socios/SocioCard.jsx
@@ -128,7 +128,7 @@ const SocioCard = ({ identity, isNew = false, onCreate, onUpdate, onDelete, onCa
plotNumber: identity.metadata.plotNumber,
notes: identity.metadata.notes || '',
status: identity.account.status,
- type: identity.metadat.type,
+ type: identity.metadata.type,
createdAt: identity.metadata.createdAt?.slice(0, 16) || (isNew ? getNowAsLocalDatetime() : ''),
assignedAt: identity.metadata.assignedAt?.slice(0, 16) || undefined,
deactivatedAt: identity.metadata.deactivatedAt?.slice(0, 16) || undefined,
diff --git a/src/components/Socios/SociosPDF.jsx b/src/components/Socios/SociosPDF.jsx
index 9873968..b2c6371 100644
--- a/src/components/Socios/SociosPDF.jsx
+++ b/src/components/Socios/SociosPDF.jsx
@@ -97,7 +97,7 @@ export const SociosPDF = ({ socios }) => (
Tipo
- {socios.map((socio, idx) => (
+ {socios.map((identity, idx) => (
(
{ borderBottomRightRadius: idx === socios.length - 1 ? 10 : 0 },
]}
>
- {socio?.memberNumber}
- {socio?.plotNumber}
- {socio?.displayName}
- {socio?.dni}
- {socio?.phone}
- {socio?.email || ''}
- {parseDate(socio?.createdAt?.split('T')[0] || '')}
+ {identity?.metadata?.memberNumber}
+ {identity?.metadata?.plotNumber}
+ {identity?.user?.displayName}
+ {identity?.metadata?.dni}
+ {identity?.metadata?.phone}
+ {identity?.account?.email || ''}
+ {parseDate(identity?.metadata?.createdAt?.split('T')[0] || '')}
{(() => {
- switch (socio?.type) {
+ switch (identity?.metadata?.type) {
case 0: return 'L. Espera';
case 1: return 'Hortelano';
case 2: return 'Invernadero';
diff --git a/src/components/Solicitudes/SolicitudCard.jsx b/src/components/Solicitudes/SolicitudCard.jsx
index f960d26..cb6b19b 100644
--- a/src/components/Solicitudes/SolicitudCard.jsx
+++ b/src/components/Solicitudes/SolicitudCard.jsx
@@ -35,15 +35,15 @@ const getPFP = (tipo) => {
};
const renderDescripcionSolicitud = (data, onProfile) => {
- const { type, status, requestedByName, preDisplayName } = data;
+ console.log(data);
- switch (type) {
+ switch (data.requestType) {
case 0:
- if (requestedByName) {
- return `${requestedByName} quiere darse de alta.`;
- } else if (status !== 1 && preDisplayName) {
- return `${preDisplayName} quiere darse de alta.`;
- } else if (status !== 1) {
+ if (data.requestedByName) {
+ return `${data.requestedByName} quiere darse de alta.`;
+ } else if (data.requestStatus !== 1 && data.preDisplayName) {
+ return `${data.preDisplayName} quiere darse de alta.`;
+ } else if (data.requestStatus !== 1) {
return `Alguien quiere darse de alta.`;
} else {
return `Se ha aceptado esta solicitud de alta.`;
@@ -52,30 +52,30 @@ const renderDescripcionSolicitud = (data, onProfile) => {
case 1:
return onProfile
? "Has solicitado darte de baja."
- : requestedByName
- ? `${requestedByName} quiere darse de baja.`
- : status !== 1
+ : data.requestedByName
+ ? `${data.requestedByName} quiere darse de baja.`
+ : data.requestStatus !== 1
? `Alguien quiere darse de baja.`
: `Se ha aceptado esta solicitud de baja.`;
case 2:
if (onProfile) {
- switch (status) {
+ switch (data.requestStatus) {
case 0: return "Has solicitado añadir un colaborador.";
case 1: return "Tu solicitud de colaborador ha sido aceptada.";
case 2: return "Tu solicitud de colaborador ha sido rechazada.";
default: return "Solicitud de colaborador desconocida.";
}
} else {
- switch (status) {
+ switch (data.requestStatus) {
case 0:
- return requestedByName
- ? `${requestedByName} quiere añadir a ${preDisplayName || "un colaborador"} como colaborador.`
- : `Alguien quiere añadir a ${preDisplayName || "un colaborador"} como colaborador.`;
+ return data.requestedByName
+ ? `${data.requestedByName} quiere añadir a ${data.preDisplayName || "un colaborador"} como colaborador.`
+ : `Alguien quiere añadir a ${data.preDisplayName || "un colaborador"} como colaborador.`;
case 1:
- return `La solicitud de colaborador de ${requestedByName || "alguien"} ha sido aceptada.`;
+ return `La solicitud de colaborador de ${data.requestedByName || "alguien"} ha sido aceptada.`;
case 2:
- return `La solicitud de colaborador de ${requestedByName || "alguien"} ha sido rechazada.`;
+ return `La solicitud de colaborador de ${data.requestedByName || "alguien"} ha sido rechazada.`;
default:
return "Solicitud de colaborador desconocida.";
}
@@ -84,27 +84,27 @@ const renderDescripcionSolicitud = (data, onProfile) => {
case 3:
return onProfile
? "Has solicitado quitar tu colaborador."
- : requestedByName
- ? `${requestedByName} quiere quitar su colaborador.`
- : status !== 1
+ : data.requestedByName
+ ? `${data.requestedByName} quiere quitar su colaborador.`
+ : data.requestStatus !== 1
? `Alguien quiere quitar su colaborador.`
: `Se ha aceptado esta solicitud de baja de colaborador.`;
case 4:
return onProfile
? "Has solicitado una parcela en el invernadero."
- : requestedByName
- ? `${requestedByName} quiere una parcela en el invernadero.`
- : status !== 1
+ : data.requestedByName
+ ? `${data.requestedByName} quiere una parcela en el invernadero.`
+ : data.requestStatus !== 1
? `Alguien quiere una parcela en el invernadero.`
: `Se ha aceptado esta solicitud de parcela en el invernadero.`;
case 5:
return onProfile
? "Has solicitado dejar tu parcela del invernadero."
- : requestedByName
- ? `${requestedByName} quiere dejar su parcela del invernadero.`
- : status !== 1
+ : data.requestedByName
+ ? `${data.requestedByName} quiere dejar su parcela del invernadero.`
+ : data.requestStatus !== 1
? `Alguien quiere dejar su parcela del invernadero.`
: `Se ha aceptado esta solicitud de salida del invernadero.`;
@@ -123,9 +123,9 @@ const SolicitudCard = ({ data, onAccept, onReject, onDelete, editable = true, on
- Solicitud #{data.requestId} - {getTipoSolicitud(data.type)}
+ Solicitud #{data.idx} - {getTipoSolicitud(data.requestType)}
- Estado: {getEstadoSolicitud(data.status)}
+ Estado: {getEstadoSolicitud(data.requestStatus)}
@@ -147,7 +147,7 @@ const SolicitudCard = ({ data, onAccept, onReject, onDelete, editable = true, on
- Fecha de solicitud: {parseDate(data.request_createdAt)}
+ Fecha de solicitud: {parseDate(data.createdAt)}
@@ -174,7 +174,7 @@ const SolicitudCard = ({ data, onAccept, onReject, onDelete, editable = true, on
>
)}
- {editable && data.status === 0 && (
+ {editable && data.requestStatus === 0 && (
diff --git a/src/pages/Balance.jsx b/src/pages/Balance.jsx
index 8f48c2e..d07efcc 100644
--- a/src/pages/Balance.jsx
+++ b/src/pages/Balance.jsx
@@ -13,7 +13,7 @@ const Balance = () => {
if (configLoading || !config) return
;
const reqConfig = {
- baseUrl: config.apiConfig.baseUrl + "/v1/balance/with-totals"
+ baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.balance.withTotals
};
return (
diff --git a/src/pages/Ingresos.jsx b/src/pages/Ingresos.jsx
index 8895912..5f10996 100644
--- a/src/pages/Ingresos.jsx
+++ b/src/pages/Ingresos.jsx
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import { useState } from 'react';
import { useConfig } from '../hooks/useConfig';
import { DataProvider } from '../context/DataContext';
import { useDataContext } from '../hooks/useDataContext';
@@ -29,9 +29,9 @@ const Ingresos = () => {
if (configLoading) return
;
const reqConfig = {
- baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.allWithNames,
+ baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.withInfo,
rawUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.incomes.all,
- membersUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.members.all,
+ usersUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.users.all,
params: {
_sort: 'createdAt',
_order: 'desc'
@@ -46,26 +46,24 @@ const Ingresos = () => {
};
const IngresosContent = ({ reqConfig }) => {
- const { data, dataLoading, dataError, getData, postData, putData, deleteData } = useDataContext();
+ const { data, dataLoading, dataError, postData, putData, deleteData } = useDataContext();
const [showPDFModal, setShowPDFModal] = useState(false);
const [creatingIngreso, setCreatingIngreso] = useState(false);
const [tempIngreso, setTempIngreso] = useState(null);
const [error, setError] = useState(null);
const [deleteTargetId, setDeleteTargetId] = useState(null);
- const [members, setMembers] = useState([]);
- useEffect(() => {
- const fetchMembers = async () => {
- try {
- const membersData = await getData(reqConfig.membersUrl, { params: { _sort: 'name', _order: 'asc' } });
- setMembers(membersData.data);
- } catch (err) {
- setError(errorParser(err));
- }
- };
-
- fetchMembers();
- }, [reqConfig.membersUrl, getData]);
+ const members = data
+ ? Array.from(
+ new Map(
+ data.map(i => [i.memberNumber, {
+ memberNumber: i.memberNumber,
+ displayName: i.displayName,
+ userId: i.userId
+ }])
+ ).values()
+ ).sort((a, b) => a.memberNumber - b.memberNumber)
+ : [];
const {
filtered,
@@ -104,16 +102,18 @@ const IngresosContent = ({ reqConfig }) => {
});
const handleCreate = () => {
+ const firstMember = members[0];
+
setCreatingIngreso(true);
setTempIngreso({
incomeId: null,
- memberNumber: 0,
+ memberNumber: firstMember?.memberNumber ?? null,
+ userId: firstMember?.userId ?? null,
concept: '',
amount: 0.0,
frequency: CONSTANTS.PAYMENT_FREQUENCY_YEARLY,
type: CONSTANTS.PAYMENT_TYPE_BANK
});
- document.querySelector('.cards-grid')?.scrollTo({ top: 0, behavior: 'smooth' });
};
const handleCancelCreate = () => {
@@ -150,7 +150,7 @@ const IngresosContent = ({ reqConfig }) => {
if (dataLoading) return
;
if (dataError) return
{dataError}
;
-
+
return (
diff --git a/src/pages/Socios.jsx b/src/pages/Socios.jsx
index a545e62..a25148d 100644
--- a/src/pages/Socios.jsx
+++ b/src/pages/Socios.jsx
@@ -29,7 +29,7 @@ const Socios = () => {
const reqConfig = {
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.all}`,
- incomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.payments}`,
+ incomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.incomesPreview}`,
rawIncomesUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.incomes.all}`,
params: {
_sort: "memberNumber",
@@ -164,7 +164,7 @@ const SociosContent = ({ reqConfig }) => {
try {
const url = reqConfig.incomesUrl.replace(":memberNumber", memberNumber);
const res = await getData(url);
- setIncomes(res.data);
+ setIncomes(res);
} catch (err) {
setIncomesError(err.message);
} finally {
@@ -217,19 +217,19 @@ const SociosContent = ({ reqConfig }) => {
onClearError={() => setError(null)}
/>
)}
- renderCard={(socio) => {
- const position = socio.type === 0
- ? listaEsperaOrdenada.findIndex(s => s.userId === socio.userId) + 1
+ renderCard={(identity) => {
+ const position = identity.metadata.type === 0
+ ? listaEsperaOrdenada.findIndex(i => i.user.userId === identity.user.userId) + 1
: null;
return (
handleViewIncomes(socio.memberNumber)}
+ onViewIncomes={() => handleViewIncomes(identity.metadata.memberNumber)}
error={error}
onClearError={() => setError(null)}
positionIfWaitlist={position}
diff --git a/src/pages/Solicitudes.jsx b/src/pages/Solicitudes.jsx
index 04de347..e6dd4a5 100644
--- a/src/pages/Solicitudes.jsx
+++ b/src/pages/Solicitudes.jsx
@@ -21,7 +21,7 @@ const Solicitudes = () => {
if (configLoading || !config) return
;
const reqConfig = {
- baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.allWithPreUsers,
+ baseUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.full,
rawUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.all,
acceptUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.accept,
rejectUrl: config.apiConfig.baseUrl + config.apiConfig.endpoints.requests.reject,
@@ -103,10 +103,10 @@ const SolicitudesContent = ({ reqConfig }) => {
(
+ renderCard={(entry, idx) => (
handleAccept(entry)}
onReject={() => handleReject(entry)}
onDelete={handleDelete}