2023-12-05 10:37:40 -03:00
|
|
|
<script>
|
2024-01-07 13:16:53 -03:00
|
|
|
import Modal from "$/components/Modal.svelte";
|
2023-12-05 10:37:40 -03:00
|
|
|
import { getAplicaciones } from "$/services/aplicaciones";
|
2024-01-07 13:16:53 -03:00
|
|
|
import { createRol, getRol, updateRol } from "$/services/roles";
|
|
|
|
import { createRolyaplicacion, deleteRolyaplicacion, getRolesyaplicaciones, updateRolyaplicacion } from "$/services/roles_aplicaciones";
|
|
|
|
import { createRolLinea, deleteRolLinea, getRolLineas } from '$/services/roles_lineas';
|
2023-12-05 10:37:40 -03:00
|
|
|
import { createEventDispatcher } from "svelte";
|
2024-01-07 13:16:53 -03:00
|
|
|
import TabForm from "./TabForm.svelte";
|
|
|
|
import TabAplicaciones from "./TabAplicaciones.svelte";
|
|
|
|
import TabLineas from "./TabLineas.svelte";
|
|
|
|
import "./modal.css"
|
|
|
|
import { getLineas } from "$/services/lineas";
|
|
|
|
const dispatch = createEventDispatcher()
|
|
|
|
|
|
|
|
export let rol = {};
|
2024-01-07 21:25:33 -03:00
|
|
|
export let escritura = false;
|
2024-01-07 13:16:53 -03:00
|
|
|
let loading = false
|
2023-12-05 10:37:40 -03:00
|
|
|
let form = {}
|
2024-01-07 13:16:53 -03:00
|
|
|
let permisos_app = []
|
|
|
|
let permisos_lineas = []
|
|
|
|
let tab = 0
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function fetchRol({ id_rol = null }) {
|
2023-12-05 10:37:40 -03:00
|
|
|
try {
|
2024-01-07 13:16:53 -03:00
|
|
|
if (!id_rol) return;
|
|
|
|
form = await getRol(id_rol) || {}
|
|
|
|
await fetchPermisosAplicaciones(id_rol)
|
|
|
|
await fetchPermisosLineas(id_rol)
|
2023-12-05 10:37:40 -03:00
|
|
|
} catch (error) {
|
2024-01-07 13:16:53 -03:00
|
|
|
alert(error)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function fetchPermisosAplicaciones(id_rol) {
|
2023-12-05 10:37:40 -03:00
|
|
|
try {
|
2024-01-07 13:16:53 -03:00
|
|
|
const aplicaciones = await getAplicaciones({ ordering: 'nombre_app' })
|
|
|
|
const rol_aplicaciones = await getRolesyaplicaciones(id_rol)
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
permisos_app = aplicaciones.map(app => {
|
|
|
|
const item = rol_aplicaciones.find(el => el.id_aplicacion === app.id_aplicacion)
|
|
|
|
const acceso = !!item
|
|
|
|
const { id_rol_app = null, solo_visualizar = false} = item || {}
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
return { ...app, id_rol_app, acceso, solo_visualizar, modificado: false }
|
|
|
|
})
|
2023-12-05 10:37:40 -03:00
|
|
|
} catch (error) {
|
2024-01-07 13:16:53 -03:00
|
|
|
alert(error)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function fetchPermisosLineas(id_rol) {
|
|
|
|
try {
|
|
|
|
const lineas = await getLineas()
|
|
|
|
const rol_lineas = await getRolLineas({ id_rol })
|
|
|
|
|
|
|
|
permisos_lineas = lineas.map(linea => {
|
|
|
|
const item = rol_lineas.find(el => el.id_linea === linea.id_linea)
|
|
|
|
const acceso = !!item;
|
|
|
|
return { ...linea, id_rol_linea: item?.id_rol_linea || null, acceso, modificado: false }
|
|
|
|
})
|
|
|
|
} catch (error) {
|
|
|
|
alert(error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function onSaveRol() {
|
2023-12-05 10:37:40 -03:00
|
|
|
try {
|
|
|
|
if (rol.id_rol) {
|
|
|
|
form = await updateRol(form)
|
|
|
|
} else {
|
|
|
|
form = await createRol(form)
|
2024-01-07 13:16:53 -03:00
|
|
|
await fetchPermisosAplicaciones(form.id_rol)
|
|
|
|
await fetchPermisosLineas(form.id_rol)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
dispatch('refresh')
|
2024-01-07 13:16:53 -03:00
|
|
|
alert('Propiedades del Rol guardadas.')
|
2023-12-05 10:37:40 -03:00
|
|
|
} catch (error) {
|
2024-01-07 13:16:53 -03:00
|
|
|
alert(error)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function onDeleteRol() {
|
2023-12-05 10:37:40 -03:00
|
|
|
try {
|
2024-01-07 13:16:53 -03:00
|
|
|
|
2023-12-05 10:37:40 -03:00
|
|
|
} catch (error) {
|
2024-01-07 13:16:53 -03:00
|
|
|
alert(error)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function onSavePermisos() {
|
|
|
|
try {
|
|
|
|
const modificados = permisos_app.filter(el => el.modificado)
|
|
|
|
const { id_rol } = rol;
|
|
|
|
for (let permiso of modificados) {
|
|
|
|
if (!permiso.acceso && permiso.id_rol_app) {
|
|
|
|
await deleteRolyaplicacion(permiso.id_rol_app)
|
|
|
|
}
|
|
|
|
if (permiso.acceso && !permiso.id_rol_app) {
|
|
|
|
const { id_aplicacion, solo_visualizar = false } = permiso;
|
|
|
|
await createRolyaplicacion({ id_rol, id_aplicacion, solo_visualizar })
|
|
|
|
}
|
|
|
|
if (permiso.acceso && permiso.id_rol_app) {
|
|
|
|
const { id_rol_app, solo_visualizar = false } = permiso;
|
|
|
|
await updateRolyaplicacion({ id_rol_app, solo_visualizar })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
alert('Permisos de aplicaciones guardadas')
|
|
|
|
} catch (error) {
|
|
|
|
alert(error)
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
async function onSaveLineas() {
|
|
|
|
try {
|
|
|
|
const modificados = permisos_lineas.filter(el => el.modificado)
|
|
|
|
const { id_rol } = rol;
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
for (let permiso of modificados) {
|
|
|
|
if (!permiso.acceso && permiso.id_rol_linea) {
|
|
|
|
await deleteRolLinea(permiso.id_rol_linea)
|
|
|
|
}
|
|
|
|
if (permiso.acceso && !permiso.id_rol_linea) {
|
|
|
|
const { id_linea } = permiso;
|
|
|
|
await createRolLinea({ id_rol, id_linea })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
alert('Permisos de lineas guardadas')
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
} catch (error) {
|
|
|
|
alert(error)
|
|
|
|
}
|
2023-12-05 10:37:40 -03:00
|
|
|
}
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
$: fetchRol(rol)
|
|
|
|
</script>
|
2023-12-05 10:37:40 -03:00
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
<form action="" on:submit|preventDefault={onSaveRol}>
|
|
|
|
<Modal classBody="mymodal" title={"rol #" + (rol.id_rol || "Nuevo")} size="lg" on:close={() => dispatch("close")}>
|
|
|
|
<ul class="nav nav-tabs">
|
|
|
|
<li class="nav-item">
|
|
|
|
<a class={"nav-link" + (tab === 0 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 0}>Propiedades</a>
|
|
|
|
</li>
|
|
|
|
<li class={"nav-item" + (form.id_rol ? '' : ' disabled')}>
|
|
|
|
<a class={"nav-link" + (tab === 1 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 1}>Aplicaciones</a>
|
|
|
|
</li>
|
|
|
|
<li class={"nav-item" + (form.id_rol ? '' : ' disabled')}>
|
|
|
|
<a class={"nav-link" + (tab === 2 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 2}>Lineas</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<div class="p-3 bg-white">
|
|
|
|
{#if tab === 0}
|
2024-01-07 21:25:33 -03:00
|
|
|
<TabForm bind:form={form} {escritura} />
|
2024-01-07 13:16:53 -03:00
|
|
|
{/if}
|
|
|
|
|
|
|
|
{#if tab === 1}
|
|
|
|
<TabAplicaciones bind:permisos={permisos_app} />
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
{#if tab === 2}
|
|
|
|
<TabLineas bind:permisos={permisos_lineas} />
|
|
|
|
{/if}
|
|
|
|
</div>
|
2023-12-05 10:37:40 -03:00
|
|
|
|
|
|
|
|
2024-01-07 13:16:53 -03:00
|
|
|
<svelte:fragment slot="buttons">
|
2024-01-07 21:25:33 -03:00
|
|
|
{#if escritura}
|
2024-01-07 13:16:53 -03:00
|
|
|
{#if tab === 0}
|
|
|
|
<button class="btn btn-primary" type="submit" disabled={loading}>
|
|
|
|
<i class="bi bi-save"></i> Guardar
|
|
|
|
</button>
|
2023-12-05 10:37:40 -03:00
|
|
|
|
|
|
|
{#if rol.id_rol}
|
2024-01-07 13:16:53 -03:00
|
|
|
<button class="btn btn-danger" on:click|preventDefault={onDeleteRol} disabled={loading}>
|
|
|
|
<i class="bi bi-trash"></i> Eliminar
|
|
|
|
</button>
|
2023-12-05 10:37:40 -03:00
|
|
|
{/if}
|
2024-01-07 13:16:53 -03:00
|
|
|
{/if}
|
|
|
|
|
|
|
|
{#if tab === 1}
|
|
|
|
<button class="btn btn-primary" type="button" disabled={loading} on:click|preventDefault={onSavePermisos}>
|
|
|
|
<i class="bi bi-save"></i> Guardar Permisos Aplicaciones
|
|
|
|
</button>
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
{#if tab === 2}
|
|
|
|
<button class="btn btn-primary" type="button" disabled={loading} on:click|preventDefault={onSaveLineas}>
|
|
|
|
<i class="bi bi-save"></i> Guardar Permisos Lineas
|
|
|
|
</button>
|
|
|
|
{/if}
|
|
|
|
{/if}
|
2023-12-05 10:37:40 -03:00
|
|
|
</svelte:fragment>
|
|
|
|
</Modal>
|
|
|
|
</form>
|