se cambia rol_linea por rol_operador

francisco/photos
Francisco Sandoval 2024-02-07 14:57:13 -03:00
parent e0a12ee7e4
commit 8c44d03f48
6 changed files with 147 additions and 147 deletions

View File

@ -3,13 +3,13 @@
import { getAplicaciones } from "$/services/aplicaciones"; import { getAplicaciones } from "$/services/aplicaciones";
import { createRol, getRol, updateRol } from "$/services/roles"; import { createRol, getRol, updateRol } from "$/services/roles";
import { createRolyaplicacion, deleteRolyaplicacion, getRolesyaplicaciones, updateRolyaplicacion } from "$/services/roles_aplicaciones"; import { createRolyaplicacion, deleteRolyaplicacion, getRolesyaplicaciones, updateRolyaplicacion } from "$/services/roles_aplicaciones";
import { createRolLinea, deleteRolLinea, getRolLineas } from '$/services/roles_lineas'; import { createRolOperador, deleteRolOperador, getRolOperadores } from '$/services/roles_operadores';
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import TabForm from "./TabForm.svelte"; import TabForm from "./TabForm.svelte";
import TabAplicaciones from "./TabAplicaciones.svelte"; import TabAplicaciones from "./TabAplicaciones.svelte";
import TabLineas from "./TabLineas.svelte"; import TabOperadores from "./TabOperadores.svelte";
import "./modal.css" import "./modal.css"
import { getLineas } from "$/services/lineas"; import { getOperadores } from "$/services/operadores";
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
export let rol = {}; export let rol = {};
@ -17,7 +17,7 @@
let loading = false let loading = false
let form = {} let form = {}
let permisos_app = [] let permisos_app = []
let permisos_lineas = [] let permisos_operadores = []
let tab = 0 let tab = 0
async function fetchRol({ id_rol = null }) { async function fetchRol({ id_rol = null }) {
@ -25,7 +25,7 @@
if (!id_rol) return; if (!id_rol) return;
form = await getRol(id_rol) || {} form = await getRol(id_rol) || {}
await fetchPermisosAplicaciones(id_rol) await fetchPermisosAplicaciones(id_rol)
await fetchPermisosLineas(id_rol) await fetchPermisosOperadores(id_rol)
} catch (error) { } catch (error) {
globalThis.toast.error(error) globalThis.toast.error(error)
} }
@ -48,15 +48,15 @@
} }
} }
async function fetchPermisosLineas(id_rol) { async function fetchPermisosOperadores(id_rol) {
try { try {
const lineas = await getLineas() const operadores = await getOperadores({ ordering: 'nombre_operador' })
const rol_lineas = await getRolLineas({ id_rol }) const rol_operadores = await getRolOperadores({ id_rol })
permisos_lineas = lineas.map(linea => { permisos_operadores = operadores.map(operador => {
const item = rol_lineas.find(el => el.id_linea === linea.id_linea) const item = rol_operadores.find(el => el.id_operador === operador.id_operador)
const acceso = !!item; const acceso = !!item;
return { ...linea, id_rol_linea: item?.id_rol_linea || null, acceso, modificado: false } return { ...operador, id_rol_operador: item?.id_rol_operador || null, acceso, modificado: false }
}) })
} catch (error) { } catch (error) {
globalThis.toast.error(error) globalThis.toast.error(error)
@ -70,7 +70,7 @@
} else { } else {
form = await createRol(form) form = await createRol(form)
await fetchPermisosAplicaciones(form.id_rol) await fetchPermisosAplicaciones(form.id_rol)
await fetchPermisosLineas(form.id_rol) await fetchPermisosOperadores(form.id_rol)
} }
dispatch('refresh') dispatch('refresh')
globalThis.toast.success('Propiedades del Rol guardadas.') globalThis.toast.success('Propiedades del Rol guardadas.')
@ -110,21 +110,21 @@
} }
} }
async function onSaveLineas() { async function onSaveOperadores() {
try { try {
const modificados = permisos_lineas.filter(el => el.modificado) const modificados = permisos_operadores.filter(el => el.modificado)
const { id_rol } = rol; const { id_rol } = rol;
for (let permiso of modificados) { for (let permiso of modificados) {
if (!permiso.acceso && permiso.id_rol_linea) { if (!permiso.acceso && permiso.id_rol_operador) {
await deleteRolLinea(permiso.id_rol_linea) await deleteRolOperador(permiso.id_rol_operador)
} }
if (permiso.acceso && !permiso.id_rol_linea) { if (permiso.acceso && !permiso.id_rol_operador) {
const { id_linea } = permiso; const { id_operador } = permiso;
await createRolLinea({ id_rol, id_linea }) await createRolOperador({ id_rol, id_operador })
} }
} }
globalThis.toast.success('Permisos de lineas guardadas') globalThis.toast.success('Permisos de operadores guardadas')
} catch (error) { } catch (error) {
globalThis.toast.error(error) globalThis.toast.error(error)
@ -144,7 +144,7 @@
<a class={"nav-link" + (tab === 1 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 1}>Aplicaciones</a> <a class={"nav-link" + (tab === 1 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 1}>Aplicaciones</a>
</li> </li>
<li class={"nav-item" + (form.id_rol ? '' : ' disabled')}> <li class={"nav-item" + (form.id_rol ? '' : ' disabled')}>
<a class={"nav-link" + (tab === 2 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 2}>Lineas</a> <a class={"nav-link" + (tab === 2 ? ' active' : '')} href={"#"} on:click|preventDefault={() => tab = 2}>Operadores</a>
</li> </li>
</ul> </ul>
@ -154,11 +154,11 @@
{/if} {/if}
{#if tab === 1} {#if tab === 1}
<TabAplicaciones bind:permisos={permisos_app} /> <TabAplicaciones bind:permisos={permisos_app} {escritura} />
{/if} {/if}
{#if tab === 2} {#if tab === 2}
<TabLineas bind:permisos={permisos_lineas} /> <TabOperadores bind:permisos={permisos_operadores} {escritura} />
{/if} {/if}
</div> </div>
@ -184,8 +184,8 @@
{/if} {/if}
{#if tab === 2} {#if tab === 2}
<button class="btn btn-primary" type="button" disabled={loading} on:click|preventDefault={onSaveLineas}> <button class="btn btn-primary" type="button" disabled={loading} on:click|preventDefault={onSaveOperadores}>
<i class="bi bi-save"></i> Guardar Permisos Lineas <i class="bi bi-save"></i> Guardar Permisos Operadores
</button> </button>
{/if} {/if}
{/if} {/if}

View File

@ -1,7 +1,9 @@
<script> <script>
export let permisos = [] export let permisos = []
export let escritura = false
</script> </script>
<div class={escritura ? '' : 'disabled'}>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@ -38,3 +40,4 @@
{/each} {/each}
</tbody> </tbody>
</table> </table>
</div>

View File

@ -1,51 +0,0 @@
<script>
import TableResponsive from "$/components/TableResponsive.svelte";
export let permisos = []
let resultado = []
let search = '';
function normalize_string(str) {
if (!str) return str;
return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
function filtrar_lineas(search) {
return permisos.filter(el => !search || normalize_string(el.route_long_name).includes(normalize_string(search)))
}
$: resultado = filtrar_lineas(search)
</script>
<div class="input-group my-3">
<input type="text" class="form-control" bind:value={search} placeholder="Nombre de línea...">
<div class="input-group-text"><i class="bi bi-search"></i></div>
</div>
<TableResponsive>
<thead>
<tr>
<th>Linea</th>
<th>Vigente</th>
<th>Visualiza</th>
</tr>
</thead>
<tbody>
{#each resultado as linea}
<tr>
<td>{linea.route_long_name}</td>
<td>{linea.vigente ? '✅' : '⛔'}</td>
<td>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch"
bind:checked={linea.acceso}
on:change={() => linea.modificado = true}
disabled={!linea.vigente}
id={`check-linea-${linea.id_linea}`}>
<label class="form-check-label" for={`check-linea-${linea.id_linea}`}>&nbsp;</label>
</div>
</td>
</tr>
{/each}
</tbody>
</TableResponsive>

View File

@ -0,0 +1,55 @@
<script>
import TableResponsive from "$/components/TableResponsive.svelte";
export let permisos = []
export let escritura = false
let resultado = []
let search = '';
function normalize_string(str) {
if (!str) return str;
return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
function filtrar_operadores(search) {
return permisos.filter(el => !search || normalize_string(el.nombre_operador).includes(normalize_string(search)))
}
$: resultado = filtrar_operadores(search)
</script>
<div class="input-group my-3">
<input type="text" class="form-control" bind:value={search} placeholder="Nombre de línea...">
<div class="input-group-text"><i class="bi bi-search"></i></div>
</div>
<div class={escritura ? '' : 'disabled'}>
<TableResponsive>
<thead>
<tr>
<th>Operador</th>
<th>Vigente</th>
<th>Visualiza</th>
</tr>
</thead>
<tbody>
{#each resultado as operador}
<tr>
<td>{operador.nombre_operador}</td>
<td>{operador.vigente ? '✅' : '⛔'}</td>
<td>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch"
bind:checked={operador.acceso}
on:change={() => operador.modificado = true}
disabled={!operador.vigente}
id={`check-operador-${operador.id_operador}`}>
<label class="form-check-label" for={`check-operador-${operador.id_operador}`}>&nbsp;</label>
</div>
</td>
</tr>
{/each}
</tbody>
</TableResponsive>
</div>

View File

@ -5,20 +5,14 @@
import CantidadParaderosComuna from "./CantidadParaderosComuna.svelte"; import CantidadParaderosComuna from "./CantidadParaderosComuna.svelte";
import CantidadBusesRecorrido from "./CantidadBusesRecorrido.svelte"; import CantidadBusesRecorrido from "./CantidadBusesRecorrido.svelte";
import CantidadBusesLinea from "./CantidadBusesLinea.svelte"; import CantidadBusesLinea from "./CantidadBusesLinea.svelte";
import ActualizandoGtfs from "$/components/ActualizandoGtfs.svelte";
let loading1 = false let loading1 = false
let loading2 = false let loading2 = false
let loading3 = false let loading3 = false
let loading4 = false let loading4 = false
let loading5 = false let loading5 = false
let actualizando = true
</script> </script>
{#if actualizando}
<ActualizandoGtfs on:close={() => actualizando = false} />
{:else}
<PageTitle <PageTitle
loading={loading1 || loading2 || loading3 || loading4 || loading5 } loading={loading1 || loading2 || loading3 || loading4 || loading5 }
><strong>Análisis</strong> de datos</PageTitle> ><strong>Análisis</strong> de datos</PageTitle>
@ -48,4 +42,3 @@
<CantidadBusesLinea on:loading={ev => loading5 = ev.detail} /> <CantidadBusesLinea on:loading={ev => loading5 = ev.detail} />
</div> </div>
</div> </div>
{/if}

View File

@ -1,8 +1,8 @@
import { base, getToken } from './_config' import { base, getToken } from './_config'
export async function getRolLineas(params) { export async function getRolOperadores(params) {
const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); const query = !params ? '' : '?' + (new URLSearchParams(params).toString());
const res = await fetch(`${base}/roles-lineas/${query}`, { const res = await fetch(`${base}/roles-operadores/${query}`, {
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
}) })
if (!res.ok) throw await res.json() if (!res.ok) throw await res.json()
@ -10,8 +10,8 @@ export async function getRolLineas(params) {
} }
export async function createRolLinea(data) { export async function createRolOperador(data) {
const res = await fetch(`${base}/roles-lineas/`, { const res = await fetch(`${base}/roles-operadores/`, {
method: 'POST', method: 'POST',
body: JSON.stringify(data), body: JSON.stringify(data),
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
@ -20,8 +20,8 @@ export async function createRolLinea(data) {
return res.json() return res.json()
} }
export async function deleteRolLinea(id) { export async function deleteRolOperador(id) {
const res = await fetch(`${base}/roles-lineas/${id}/`, { const res = await fetch(`${base}/roles-operadores/${id}/`, {
method: 'DELETE', method: 'DELETE',
headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
}) })