back to desktop pc

This commit is contained in:
2026-01-30 11:35:10 +01:00
parent 3f4571af5e
commit 665ac85701
4 changed files with 222 additions and 216 deletions

View File

@@ -25,7 +25,7 @@ import { useState } from 'react';
import IngresoCard from '../components/Ingresos/IngresoCard';
import SolicitudCard from '../components/Solicitudes/SolicitudCard';
import CustomModal from '../components/CustomModal';
import PreUserForm from '../components/Solicitudes/PreUserForm';
import NewUserForm from '../components/Solicitudes/NewUserForm';
import NotificationModal from '../components/NotificationModal';
import { Button, Col, Row } from 'react-bootstrap';
import AnimatedDropdown from '../components/AnimatedDropdown';
@@ -69,9 +69,6 @@ const Perfil = () => {
baseUrl: `${config.apiConfig.baseUrl}${config.apiConfig.endpoints.users.me}`,
myIncomesUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.incomes.mine),
requestUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.requests.all),
preUsersUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.preUsers.all),
requestWithPreUserUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.requests.withPreUser),
preUserValidationUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.preUsers.validate),
myRequestsUrl: buildUrl(config.apiConfig.baseUrl, config.apiConfig.endpoints.requests.mine),
changePasswordUrl: buildUrl(config.apiConfig.coreUrl, config.apiConfig.endpoints.auth.changePassword),
loginValidateUrl: buildUrl(config.apiConfig.coreUrl, config.apiConfig.endpoints.auth.loginValidate),
@@ -89,8 +86,10 @@ const PerfilContent = ({ config }) => {
const { logout } = useAuth();
const identity = JSON.parse(localStorage.getItem("identity"));
const myRequests = data?.requests ?? [];
const incomes = data?.payments ?? [];
const hasCollaborator = data?.hasCollaborator ?? false;
const hasCollaboratorRequest = data?.hasCollaboratorRequest ?? false;
const hasGreenHouse = data?.hasGreenhouse ?? false;
@@ -101,6 +100,44 @@ const PerfilContent = ({ config }) => {
const [feedbackModal, setFeedbackModal] = useState(null);
const closeFeedback = () => setFeedbackModal(null);
const baseMetadata = {
displayName: identity.user.displayName,
dni: identity.metadata.dni,
phone: identity.metadata.phone,
email: identity.account.email,
memberNumber: identity.metadata.memberNumber,
plotNumber: identity.metadata.plotNumber,
type: identity.metadata.type,
role: identity.metadata.role
};
const sendSimpleRequest = async (type) => {
const requestOf = type == 1 ? "baja" : type == 2 ? "adición de colaborador" :
type == 3 ? "eliminación de colaborador" : type == 4 ? "adición de invernadero" :
type == 5 ? "eliminación de invernadero" : "desconocido";
try {
await postData(config.requestUrl, {
type,
status: CONSTANTS.REQUEST_PENDING,
userId: identity.user.userId,
metadata: baseMetadata
});
setFeedbackModal({
title: 'Solicitud enviada',
message: `Se ha enviado la solicitud de ${requestOf} correctamente.`,
variant: 'success',
onClick: closeFeedback
});
} catch (err) {
setFeedbackModal({
title: 'Error',
message: err.message,
variant: 'danger',
onClick: closeFeedback
});
}
};
const [validationErrors, setValidationErrors] = useState({});
const [newPasswordData, setNewPasswordData] = useState({
@@ -113,75 +150,6 @@ const PerfilContent = ({ config }) => {
const [showNew, setShowNew] = useState(false);
const [showConfirm, setShowConfirm] = useState(false);
const handleRequestUnregister = async () => {
try {
await postData(config.requestUrl, {
type: CONSTANTS.REQUEST_TYPE_UNREGISTER,
status: CONSTANTS.REQUEST_PENDING,
requestedBy: identity.user.userId
});
setFeedbackModal({
title: 'Solicitud enviada',
message: 'Se ha enviado la solicitud de baja correctamente.',
variant: 'success',
onClick: closeFeedback
});
} catch (err) {
setFeedbackModal({
title: 'Error',
message: err.message,
variant: 'danger',
onClick: closeFeedback
});
}
};
const handleRequestGreenHouse = async () => {
try {
await postData(config.requestUrl, {
type: CONSTANTS.REQUEST_TYPE_ADD_GREENHOUSE,
status: CONSTANTS.REQUEST_PENDING,
requestedBy: identity.user.userId
});
setFeedbackModal({
title: 'Solicitud enviada',
message: 'Se ha enviado la solicitud de invernadero correctamente.',
variant: 'success',
onClick: closeFeedback
});
} catch (err) {
setFeedbackModal({
title: 'Error',
message: err.message,
variant: 'danger',
onClick: closeFeedback
});
}
};
const handleRemoveGreenHouse = async () => {
try {
await postData(config.requestUrl, {
type: CONSTANTS.REQUEST_TYPE_REMOVE_GREENHOUSE,
status: CONSTANTS.REQUEST_PENDING,
requestedBy: identity.user.userId
});
setFeedbackModal({
title: 'Solicitud enviada',
message: 'Se ha enviado la solicitud de baja de invernadero correctamente.',
variant: 'success',
onClick: closeFeedback
});
} catch (err) {
setFeedbackModal({
title: 'Error',
message: err.message,
variant: 'danger',
onClick: closeFeedback
});
}
};
const handleChange = (e) => {
setNewPasswordData({
...newPasswordData,
@@ -263,27 +231,42 @@ const PerfilContent = ({ config }) => {
{({ closeDropdown }) => (
<>
{!hasGreenHouse && !hasGreenHouseRequest && (
<div className="dropdown-item d-flex align-items-center" onClick={() => { handleRequestGreenHouse(); closeDropdown(); }}>
<div className="dropdown-item d-flex align-items-center" onClick={() => {
sendSimpleRequest(CONSTANTS.REQUEST_TYPE_ADD_GREENHOUSE);
closeDropdown();
}}>
<FontAwesomeIcon icon={faSeedling} className="me-2" />Solicitar invernadero
</div>
)}
{!hasCollaborator && !hasCollaboratorRequest && (
<div className="dropdown-item d-flex align-items-center" onClick={() => { setShowAddCollaboratorModal(true); closeDropdown(); }}>
<div className="dropdown-item d-flex align-items-center" onClick={() => {
setShowAddCollaboratorModal(true);
closeDropdown();
}}>
<FontAwesomeIcon icon={faUserPlus} className="me-2" />Añadir un colaborador
</div>
)}
<hr className="dropdown-divider" />
{hasGreenHouse && !hasGreenHouseRequest && (
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => { handleRemoveGreenHouse(); closeDropdown(); }}>
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => {
sendSimpleRequest(CONSTANTS.REQUEST_TYPE_REMOVE_GREENHOUSE);
closeDropdown();
}}>
<FontAwesomeIcon icon={faArrowRightFromBracket} className="me-2" />Dejar invernadero
</div>
)}
{hasCollaborator && !hasCollaboratorRequest && (
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => { setShowRemoveCollaboratorModal(true); closeDropdown(); }}>
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => {
setShowRemoveCollaboratorModal(true);
closeDropdown();
}}>
<FontAwesomeIcon icon={faUserSlash} className="me-2" />Quitar colaborador
</div>
)}
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => { handleRequestUnregister(); closeDropdown(); }}>
<div className="dropdown-item d-flex align-items-center text-danger" onClick={() => {
sendSimpleRequest(CONSTANTS.REQUEST_TYPE_UNREGISTER);
closeDropdown();
}}>
<FontAwesomeIcon icon={faUserSlash} className="me-2" />Darse de baja
</div>
</>
@@ -431,48 +414,34 @@ const PerfilContent = ({ config }) => {
setValidationErrors({});
}}
>
<PreUserForm
<NewUserForm
userType={3}
plotNumber={identity.metadata.plotNumber}
errors={validationErrors}
onSubmit={async (formData) => {
setValidationErrors({});
await postData(config.requestUrl, {
type: CONSTANTS.REQUEST_TYPE_ADD_COLLABORATOR,
status: CONSTANTS.REQUEST_PENDING,
userId: identity.user.userId,
metadata: {
displayName: formData.displayName,
dni: formData.dni,
phone: formData.phone,
email: formData.email,
memberNumber: formData.memberNumber,
plotNumber: formData.plotNumber,
type: formData.type,
role: formData.role
}
});
const { _, errors } = await postDataValidated(config.preUserValidationUrl, formData);
if (errors) {
setValidationErrors(errors);
return;
}
try {
await postData(config.requestWithPreUserUrl, {
request: {
type: CONSTANTS.REQUEST_TYPE_ADD_COLLABORATOR,
status: CONSTANTS.REQUEST_PENDING,
requestedBy: identity.user.userId
},
preUser: {
...formData
}
});
setValidationErrors({});
setShowAddCollaboratorModal(false);
setFeedbackModal({
title: "Colaborador añadido",
message: "Tu solicitud de colaborador ha sido enviada correctamente.",
variant: "success",
onClick: closeFeedback
});
} catch (err) {
setValidationErrors({});
setFeedbackModal({
title: "Error",
message: err.message,
variant: "danger",
onClick: closeFeedback
});
}
setShowAddCollaboratorModal(false);
setFeedbackModal({
title: 'Solicitud enviada',
message: 'El colaborador ha sido solicitado correctamente.',
variant: 'success',
onClick: closeFeedback
});
}}
/>
</CustomModal>