delete user company

This commit is contained in:
Alexandro Uc Santos
2024-01-04 21:02:50 -06:00
parent 923b55b12c
commit 6ebeb0f4a2
5 changed files with 199 additions and 43 deletions

View File

@@ -1,8 +1,9 @@
<script setup> <script setup>
import Swal from 'sweetalert2'; import Swal from 'sweetalert2';
import { getDateMonthDay } from '../helpers/date_formats'; import { getDateMonthDay } from '../helpers/date_formats';
import { useCompanyStore } from '../stores/company';
defineProps({ const props = defineProps({
user: { user: {
type: Object, type: Object,
required: true required: true
@@ -17,7 +18,9 @@ import { getDateMonthDay } from '../helpers/date_formats';
defineEmits(['set-user']) defineEmits(['set-user'])
const handleDelete = () => { const companyStore = useCompanyStore();
const handleDelete = async() => {
Swal.fire({ Swal.fire({
title: 'Eliminación de usuario!', title: 'Eliminación de usuario!',
text: '¿Estás seguro de eliminar este usuario?', text: '¿Estás seguro de eliminar este usuario?',
@@ -36,25 +39,23 @@ import { getDateMonthDay } from '../helpers/date_formats';
Swal.showLoading() Swal.showLoading()
}, },
}); });
let resp = 'success'; const resp = await companyStore.deleteUserCompany(props.user._id)
setTimeout(() => { Swal.close()
Swal.close()
if(resp !== null) { if(resp === 'success') {
Swal.fire({ Swal.fire({
title: "Usuario eliminado!", title: "Usuario eliminado!",
text: "El usuario ha sido eliminado exitosamente.", text: "El usuario ha sido eliminado exitosamente.",
icon: "success" icon: "success"
}); });
} else { } else {
Swal.fire({ Swal.fire({
title: "No eliminado!", title: "No eliminado!",
text: "El usuario no se pudo eliminar, intente más tarde.", text: "El usuario no se pudo eliminar, intente más tarde.",
icon: "error" icon: "error"
}); });
} }
}, 5000)
// const resp = await companyStore.deleteBudgetCompany(props.budget._id);
} }
}); });
@@ -71,14 +72,24 @@ import { getDateMonthDay } from '../helpers/date_formats';
<p><span>Teléfono 2: </span>{{user.phone2}}</p> <p><span>Teléfono 2: </span>{{user.phone2}}</p>
<p><span>Email: </span>{{user.email}}</p> <p><span>Email: </span>{{user.email}}</p>
</div> </div>
<div class="col-lg-6 col-sm-12"> <div class="col-lg-6 col-sm-12" v-if="readonly">
<p><span>Segmento: </span>{{user._categories}}</p> <p><span>Segmento: </span>{{user.categories?.map((e) => e.name).join(', ')}}</p>
<p><span>Locaciones de carga por municipio: </span>{{user._user_city}}</p> <p><span>Locaciones de carga por municipio: </span>{{user._user_city}}</p>
<p><span>Locaciones de carga por estado: </span>{{user._user_state}}</p> <p><span>Locaciones de carga por estado: </span>{{user._user_state}}</p>
<p v-if="user.company.truck_type"><span>Tipos de transporte que utiliza: </span> {{user._truck_types}}</p> <p v-if="user.company.truck_type"><span>Tipos de transporte que utiliza: </span> {{user._truck_type}}</p>
<p ><span>Información adicional del usuario: </span> {{user.user_description}}</p> <p ><span>Información adicional del usuario: </span> {{user.user_description}}</p>
<p><span>Miembro desde: </span>{{getDateMonthDay(user.createdAt)}}</p> <p ><span>Miembro desde: </span>{{getDateMonthDay(user.createdAt)}}</p>
<p ><span>Tipo de afiliación: </span> {{user.company.membership}}</p> <p v-if="readonly" ><span>Tipo de afiliación: </span> {{user.company.membership}}</p>
<p><span>Rol del usuario: </span>{{user.job_role}}</p>
</div>
<div class="col-lg-6 col-sm-12" v-else>
<p><span>Segmento: </span>{{user.categories?.map((e) => e.name).join(', ')}}</p>
<p><span>Locaciones de carga por municipio: </span>{{user.user_city?.join(', ')}}</p>
<p><span>Locaciones de carga por estado: </span>{{user.user_state?.join(', ')}}</p>
<p v-if="user.truck_type"><span>Tipos de transporte que utiliza: </span> {{user.truck_type?.join(', ')}}</p>
<p ><span>Información adicional del usuario: </span> {{user.user_description}}</p>
<p ><span>Miembro desde: </span>{{getDateMonthDay(user.createdAt)}}</p>
<p v-if="readonly" ><span>Tipo de afiliación: </span> {{user.company.membership}}</p>
<p><span>Rol del usuario: </span>{{user.job_role}}</p> <p><span>Rol del usuario: </span>{{user.job_role}}</p>
</div> </div>
</div> </div>

View File

@@ -6,7 +6,10 @@
import States from './ui/States.vue'; import States from './ui/States.vue';
import Cities from './ui/Cities.vue'; import Cities from './ui/Cities.vue';
import Spiner from './ui/Spiner.vue'; import Spiner from './ui/Spiner.vue';
import { validateEmail } from '../helpers/validations'; import { validateEmail } from '../helpers/validations';
import { useAuthStore } from '../stores/auth';
import { useCompanyStore } from '../stores/company';
import Swal from 'sweetalert2';
const props = defineProps({ const props = defineProps({
user: { user: {
@@ -40,6 +43,9 @@ import { validateEmail } from '../helpers/validations';
} }
}) })
const authStore = useAuthStore();
const companyStore = useCompanyStore();
const initState = { const initState = {
name: '', name: '',
last_name: '', last_name: '',
@@ -74,23 +80,64 @@ import { validateEmail } from '../helpers/validations';
defineEmits(['reset-user']); defineEmits(['reset-user']);
const saveUser = () => { const saveUser = async() => {
validations() validations()
console.log(errors);
if(errors.value.name || errors.value.last_name || errors.value.email || errors.value.phone){ if(errors.value.name || errors.value.last_name || errors.value.email || errors.value.phone){
console.log('Hay errores');
return; return;
} else { } else {
console.log(userForm); let userData ={
first_name: userForm.name,
last_name: userForm.last_name,
email: userForm.email,
phone: userForm.phone,
phone2: userForm.phone2,
job_role: userForm.job_role,
permissions: authStore.user.permissions,
company: authStore.user.company,
categories: userForm.categories.length <= 0 ? null : userForm.categories?.map((e) => e._id),
user_city: userForm.user_city.length <= 0 ? null : userForm.user_city?.map((e) => e.city_name),
user_state: userForm.user_state.length <= 0 ? null : userForm.user_state?.map((e) => e.state_name),
truck_type: userForm.truck_type.length <= 0 ? null : userForm.truck_type?.map((e) => e.meta_value),
user_description: userForm.user_description
}
const dataUpdate = {
categories: userForm.categories,
name: userForm.name + ' ' + userForm.last_name
}
let result = 'error';
let action = 'Creado';
loading.value = true;
if(props.user !== null) {
// Se actualiza
result = await companyStore.updateUserCompany(props.user._id, userData, dataUpdate);
action = 'actualizado';
} else {
// Se crea
result = await companyStore.createUserCompany(userData, dataUpdate);
action = 'creado';
}
loading.value = false;
if(result === 'success') {
document.getElementById('btnCloseuserModal').click();
Swal.fire({
title: `<strong>Usuario ${action} con éxito!</strong>`,
icon: 'success'
})
} else {
Swal.fire({
title: result,
icon: 'error'
})
}
} }
} }
const validations = () => { const validations = () => {
errors.value = { errors.value = {
name: userForm.name.length <= 4 ? 'Ingrese nombre' : null, name: userForm.name.length < 4 ? 'Ingrese nombre' : null,
last_name: userForm.name.length <= 1 ? 'Ingrese apellido' : null, last_name: userForm.last_name.length <= 1 ? 'Ingrese apellido' : null,
email: !validateEmail(userForm.email) ? 'Ingrese email valido' : null, email: !validateEmail(userForm.email) ? 'Ingrese email valido' : null,
phone: userForm.phone.length < 10 ? 'Ingrese numero teléfonico valido' : null, phone: userForm.phone.length < 10 ? 'Ingrese numero teléfonico valido' : null,
}; };
@@ -123,37 +170,52 @@ import { validateEmail } from '../helpers/validations';
<CustomInput <CustomInput
label="Apellido(s)*" label="Apellido(s)*"
name="lastname" name="lastname"
:field="userForm.last_name" v-model:field="userForm.last_name"
:filled="false" :filled="false"
:error="errors.last_name" :error="errors.last_name"
/> />
<CustomInput <CustomInput
label="Teléfono 1*" label="Teléfono 1*"
name="phone1" name="phone1"
:field="userForm.phone"
:filled="false"
type="number" type="number"
v-model:field="userForm.phone"
:filled="false"
:error="errors.phone" :error="errors.phone"
/> />
<CustomInput <CustomInput
label="Teléfono 2" label="Teléfono 2"
name="phone2" name="phone2"
type="number" type="number"
:field="userForm.phone2" v-model:field="userForm.phone2"
:filled="false" :filled="false"
/> />
<CustomInput <CustomInput
label="Correo electronico*" label="Correo electronico*"
name="email" name="email"
type="email" type="email"
:field="userForm.email" v-model:field="userForm.email"
:filled="false" :filled="false"
:error="errors.email" :error="errors.email"
/> />
<div class="d-flex flex-column">
<label class="custom-label" for="role">Rol de usuario:</label>
<select
class="custom-input-light"
name="role"
id="role"
v-model="userForm.job_role"
>
<option disabled value="">-- Seleccionar rol --</option>
<option value="Owner">Dueño</option>
<option value="Manager">Gerente</option>
<option value="Driver">Conductor</option>
</select>
</div>
<div class="mb-4 mt-3"> <div class="mb-4 mt-3">
<label class="custom-label">Segmento</label> <label class="custom-label">Segmento</label>
<Segments <Segments
v-model="userForm.categories" v-model="userForm.categories"
:multiple="true"
/> />
<!-- <span class="error-msg" v-if="submited && errors.segment">{{ errors.segment }}</span> --> <!-- <span class="error-msg" v-if="submited && errors.segment">{{ errors.segment }}</span> -->
</div> </div>
@@ -161,6 +223,7 @@ import { validateEmail } from '../helpers/validations';
<label class="custom-label">Tipo de transporte que utiliza</label> <label class="custom-label">Tipo de transporte que utiliza</label>
<TruckTypes <TruckTypes
v-model="userForm.truck_type" v-model="userForm.truck_type"
:multiple="true"
/> />
<!-- <span class="error-msg" v-if="submited && errors.truckType">{{ errors.truckType }}</span> --> <!-- <span class="error-msg" v-if="submited && errors.truckType">{{ errors.truckType }}</span> -->
</div> </div>
@@ -168,6 +231,7 @@ import { validateEmail } from '../helpers/validations';
<label class="custom-label">Locaciones de carga por estado</label> <label class="custom-label">Locaciones de carga por estado</label>
<States <States
v-model="userForm.user_state" v-model="userForm.user_state"
:multiple="true"
/> />
<!-- <span class="error-msg" v-if="submited && errors.stateDestination">{{ errors.stateDestination }}</span> --> <!-- <span class="error-msg" v-if="submited && errors.stateDestination">{{ errors.stateDestination }}</span> -->
</div> </div>
@@ -175,6 +239,7 @@ import { validateEmail } from '../helpers/validations';
<label class="custom-label">Locaciones de carga por municipio</label> <label class="custom-label">Locaciones de carga por municipio</label>
<Cities <Cities
v-model="userForm.user_city" v-model="userForm.user_city"
:multiple="true"
/> />
<!-- <span class="error-msg" v-if="submited && errors.cityDestination">{{ errors.cityDestination }}</span> --> <!-- <span class="error-msg" v-if="submited && errors.cityDestination">{{ errors.cityDestination }}</span> -->
</div> </div>

View File

@@ -27,7 +27,39 @@ export const getUsers = async(companyId) => {
try { try {
const endpoint = `/users?company=${companyId}`; const endpoint = `/users?company=${companyId}`;
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
console.log(data); return data;
} catch (error) {
console.log(error);
return null;
}
}
export const createUser = async(formData) => {
try {
const endpoint = `/users`;
const {data} = await api.post(endpoint, formData);
return data;
} catch (error) {
console.log(error);
return null;
}
}
export const updateUser = async(user_id, formData) => {
try {
const endpoint = `/users/${user_id}`;
const {data} = await api.patch(endpoint, formData);
return data;
} catch (error) {
console.log(error);
return null;
}
}
export const deleteUser = async(user_id) => {
try {
const endpoint = `/users/${user_id}`;
const {data} = await api.delete(endpoint);
return data; return data;
} catch (error) { } catch (error) {
console.log(error); console.log(error);

View File

@@ -78,6 +78,7 @@ export const getPublicUsersCompany = async(filter) => {
const endpoint = `/v1/public-companies/users/${filter}`; const endpoint = `/v1/public-companies/users/${filter}`;
// console.log({endpoint}); // console.log({endpoint});
const {data} = await api.get(endpoint); const {data} = await api.get(endpoint);
console.log(data.data)
// console.log(data); // console.log(data);
return data.data; return data.data;
} catch (error) { } catch (error) {

View File

@@ -1,6 +1,6 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { ref } from "vue"; import { ref } from "vue";
import { getBudgets, getCompany, updateBudget, updateCompany, deleteBudget, createBudget, getUsers } from "../services/company"; import { getBudgets, getCompany, updateBudget, updateCompany, deleteBudget, createBudget, getUsers, updateUser, createUser, deleteUser } from "../services/company";
import api from "../lib/axios"; import api from "../lib/axios";
export const useCompanyStore = defineStore('company', () => { export const useCompanyStore = defineStore('company', () => {
@@ -20,6 +20,7 @@ export const useCompanyStore = defineStore('company', () => {
console.log(resp); console.log(resp);
company.value = resp; company.value = resp;
} }
console.log(company.value);
loading.value = false; loading.value = false;
} }
@@ -36,6 +37,46 @@ export const useCompanyStore = defineStore('company', () => {
} }
} }
const createUserCompany = async(formData, localData) => {
const data = await createUser(formData);
if(data) {
users.value.push({
...data,
...localData
});
return 'success';
} else {
return 'Algo salio mal, intente más tarde';
}
}
const updateUserCompany = async(id, formData, localData) => {
const data = await updateUser(id, formData);
if(data) {
const index = users.value.findIndex((user) => user._id === id);
users.value[index] = {
...users.value[index],
...data,
...localData
};
return 'success';
} else {
return 'Algo salio mal, intente más tarde';
}
}
const deleteUserCompany = async(id) => {
const data = await deleteUser(id);
if(data) {
users.value = users.value.filter(user => user._id !== id);
return 'success';
} else {
return 'Algo salio mal, intente más tarde';
}
}
const editCompany = async(formData) => { const editCompany = async(formData) => {
const data = await updateCompany(company.value._id, formData); const data = await updateCompany(company.value._id, formData);
if(data === null) { if(data === null) {
@@ -52,6 +93,9 @@ export const useCompanyStore = defineStore('company', () => {
const clear = () => { const clear = () => {
company.value = null; company.value = null;
users.value = [];
budgets.value = [];
proposals.value = [];
// companyid = null; // companyid = null;
loading.value = false; loading.value = false;
} }
@@ -158,6 +202,9 @@ export const useCompanyStore = defineStore('company', () => {
getProposalsCompany, getProposalsCompany,
getBudgetsCompany, getBudgetsCompany,
getUsersCompany, getUsersCompany,
createUserCompany,
updateUserCompany,
deleteUserCompany,
editCompany, editCompany,
updateBudgetCompany, updateBudgetCompany,
createBudgetCompany, createBudgetCompany,