From b8c7a24ae1be955d87333a5ab839ae24045dd88e Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Wed, 12 Jul 2023 18:24:21 -0400 Subject: [PATCH] se agrega mantenedor de usuarios --- docker/docker-compose.yml | 1 + src/layouts/LayoutUser.svelte | 16 ++-- src/layouts/Sidebar.svelte | 1 + src/pages/aplicaciones/Admin.svelte | 3 +- src/pages/personas/Form.svelte | 84 +++++++++++++++++ src/pages/personas/Lista.svelte | 34 +++++++ src/pages/personas/Modificar.svelte | 0 src/pages/personas/Nueva.svelte | 0 src/pages/usuarios/Admin.svelte | 70 +++++++++++++++ src/pages/usuarios/Create.svelte | 89 +++++++++++++++++++ src/pages/usuarios/Form.svelte | 29 ++++++ src/pages/usuarios/Modifica.svelte | 11 +++ src/pages/{usuario => usuarios}/Perfil.svelte | 3 +- src/routes/user.routes.js | 8 +- src/services/personas.js | 39 ++++++++ src/services/tipos_persona.js | 11 +++ src/services/usuarios.js | 48 ++++++++++ src/stores/global.js | 5 ++ src/stores/messages.js | 3 - src/stores/session.js | 3 - 20 files changed, 442 insertions(+), 16 deletions(-) create mode 100644 src/pages/personas/Form.svelte create mode 100644 src/pages/personas/Lista.svelte create mode 100644 src/pages/personas/Modificar.svelte create mode 100644 src/pages/personas/Nueva.svelte create mode 100644 src/pages/usuarios/Admin.svelte create mode 100644 src/pages/usuarios/Create.svelte create mode 100644 src/pages/usuarios/Form.svelte create mode 100644 src/pages/usuarios/Modifica.svelte rename src/pages/{usuario => usuarios}/Perfil.svelte (96%) create mode 100644 src/services/personas.js create mode 100644 src/services/tipos_persona.js create mode 100644 src/services/usuarios.js create mode 100644 src/stores/global.js delete mode 100644 src/stores/messages.js delete mode 100644 src/stores/session.js diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 91dac8b..f1a7d69 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -11,6 +11,7 @@ services: environment: - VITE_PORT=3000 - VITE_BACKEND=http://localhost:4000/api + # - VITE_BACKEND=http://transporte.hz.kursor.cl/api working_dir: /app command: sh -c " [ ! -d node_modules ] && npm install ; diff --git a/src/layouts/LayoutUser.svelte b/src/layouts/LayoutUser.svelte index 0a8160a..891ad73 100644 --- a/src/layouts/LayoutUser.svelte +++ b/src/layouts/LayoutUser.svelte @@ -21,7 +21,7 @@ import { onMount } from 'svelte' import { getInfoToken } from '$/services/login' - import { storeSession } from '$/stores/session' + import { storeSession, storeLayout } from '$/stores/global' onMount(() => { document.dispatchEvent(new Event('DOMContentLoaded')); @@ -45,14 +45,18 @@
-
- -
+ {#if $storeLayout.showSidebar} +
+ +
+ {/if} -
+
{#each routes as r} - + + + {/each}
diff --git a/src/layouts/Sidebar.svelte b/src/layouts/Sidebar.svelte index f040083..fe70d6c 100644 --- a/src/layouts/Sidebar.svelte +++ b/src/layouts/Sidebar.svelte @@ -8,4 +8,5 @@ Aplicaciones + Usuarios diff --git a/src/pages/aplicaciones/Admin.svelte b/src/pages/aplicaciones/Admin.svelte index 136e20c..886e033 100644 --- a/src/pages/aplicaciones/Admin.svelte +++ b/src/pages/aplicaciones/Admin.svelte @@ -82,7 +82,8 @@
-
+
+ onPage(page)}>Refrescar + import { getTiposPersona } from "$/services/tipos_persona"; + + export let form = {} + export let es_nuevo = true + + let tipos_tratamiento = []; + let rut = ''; + + $: begin(es_nuevo) + $: !es_nuevo && (rut = `${form.rut || ''}-${form.dv || ''}`); + + async function begin(es_nuevo) { + try { + tipos_tratamiento = await getTiposPersona() + } catch (error) { + alert(error.detail || error) + } + } + + function onChangeRut({ target: { value } }) { + const [ rut = null, dv = null ] = value.split('-') + form = { ...form, rut, dv } + } + + +
+
+ RUT + +
+
+ Tipo Tratamiento + +
+
+ +
+
+ Nombres + +
+
+ Apellido 1 + +
+
+ Apellido 2 + +
+
+ +
+
+ Teléfono + +
+
+ Email + +
+
+ Fecha de nacimiento + +
+
+ +
+
+ Comuna + +
+
+ Dirección + +
+
\ No newline at end of file diff --git a/src/pages/personas/Lista.svelte b/src/pages/personas/Lista.svelte new file mode 100644 index 0000000..db9ca87 --- /dev/null +++ b/src/pages/personas/Lista.svelte @@ -0,0 +1,34 @@ + + +

Personas

+ +
+
+
+ + + + + + + + + + +
RUTNombresApellido 1Apellido 2Teléfono
+
+ +
\ No newline at end of file diff --git a/src/pages/personas/Modificar.svelte b/src/pages/personas/Modificar.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/personas/Nueva.svelte b/src/pages/personas/Nueva.svelte new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/usuarios/Admin.svelte b/src/pages/usuarios/Admin.svelte new file mode 100644 index 0000000..7b53bc0 --- /dev/null +++ b/src/pages/usuarios/Admin.svelte @@ -0,0 +1,70 @@ + + +Usuarios + +
+ Nuevo +
+ Volver +
+ +
+ + + + + + + + + + + + {#each usuarios.results as row} + + + + + + + + {/each} + +
LoginNombresApellido 1Apellido 2Email
{row.login}{row.persona.nombres}{row.persona.apellido_a}{row.persona.apellido_b}{row.persona.email}
+
+ +
+ onPage(page)}>Refrescar + page = ev.detail} + /> +
+ + \ No newline at end of file diff --git a/src/pages/usuarios/Create.svelte b/src/pages/usuarios/Create.svelte new file mode 100644 index 0000000..7890251 --- /dev/null +++ b/src/pages/usuarios/Create.svelte @@ -0,0 +1,89 @@ + + +
+
+
+ + {#if !es_nuevo} + + {/if} +
+ Volver +
+
+

Datos de la persona

+ +
+

Datos del usuario

+ +
+
+
\ No newline at end of file diff --git a/src/pages/usuarios/Form.svelte b/src/pages/usuarios/Form.svelte new file mode 100644 index 0000000..0228216 --- /dev/null +++ b/src/pages/usuarios/Form.svelte @@ -0,0 +1,29 @@ + + +
+
+ Login + +
+
+
+ + +
+
+
+ +
+
+ Contraseña + +
+
+ Repita Contraseña + +
+
\ No newline at end of file diff --git a/src/pages/usuarios/Modifica.svelte b/src/pages/usuarios/Modifica.svelte new file mode 100644 index 0000000..983fe60 --- /dev/null +++ b/src/pages/usuarios/Modifica.svelte @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/pages/usuario/Perfil.svelte b/src/pages/usuarios/Perfil.svelte similarity index 96% rename from src/pages/usuario/Perfil.svelte rename to src/pages/usuarios/Perfil.svelte index a5e3e52..743bcd8 100644 --- a/src/pages/usuario/Perfil.svelte +++ b/src/pages/usuarios/Perfil.svelte @@ -1,9 +1,8 @@ Perfil de usuario diff --git a/src/routes/user.routes.js b/src/routes/user.routes.js index 4a340ad..2a683e6 100644 --- a/src/routes/user.routes.js +++ b/src/routes/user.routes.js @@ -1,11 +1,17 @@ import PageHome from '$/pages/site/Home.svelte' -import PagePerfil from '$/pages/usuario/Perfil.svelte' +import PagePerfil from '$/pages/usuarios/Perfil.svelte' import PageError from '$/pages/site/Error.svelte' import PageAplicaciones from '$/pages/aplicaciones/Admin.svelte' +import PageUsuarios from '$/pages/usuarios/Admin.svelte' +import PageUsuarioCreate from '$/pages/usuarios/Create.svelte' +import PageUsuarioModifica from '$/pages/usuarios/Create.svelte' export const routes = [ { path: '/', component: PageHome }, { path: '/perfil', component: PagePerfil }, { path: '/aplicaciones', component: PageAplicaciones }, + { path: '/usuarios', component: PageUsuarios }, + { path: '/usuarios/nuevo', component: PageUsuarioCreate }, + { path: '/usuarios/:login', component: PageUsuarioModifica }, { path: '*', component: PageError }, ] \ No newline at end of file diff --git a/src/services/personas.js b/src/services/personas.js new file mode 100644 index 0000000..f716d04 --- /dev/null +++ b/src/services/personas.js @@ -0,0 +1,39 @@ + +import { base, getToken } from './_config' + +export async function getPersonas(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/personas/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function getPersona(rut) { + const res = await fetch(`${base}/personas/${rut}/`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function createPersona(data) { + const res = await fetch(`${base}/personas/`, { + method: 'POST', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} + +export async function updatePersona({ rut: id = null, ...data }) { + const res = await fetch(`${base}/personas/${id}/`, { + method: 'PATCH', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} \ No newline at end of file diff --git a/src/services/tipos_persona.js b/src/services/tipos_persona.js new file mode 100644 index 0000000..b3306e1 --- /dev/null +++ b/src/services/tipos_persona.js @@ -0,0 +1,11 @@ + +import { base, getToken } from './_config' + +export async function getTiposPersona(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/tipos/persona/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.json() + return res.json() +} \ No newline at end of file diff --git a/src/services/usuarios.js b/src/services/usuarios.js new file mode 100644 index 0000000..81b29b6 --- /dev/null +++ b/src/services/usuarios.js @@ -0,0 +1,48 @@ + +import { base, getToken } from './_config' + +export async function getUsuarios(params) { + const query = !params ? '' : '?' + (new URLSearchParams(params).toString()); + const res = await fetch(`${base}/usuarios/${query}`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.json() +} + +export async function getUsuario(id) { + const res = await fetch(`${base}/usuarios/${id}/`, { + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.json() +} + +export async function createUsuario(data) { + const res = await fetch(`${base}/usuarios/`, { + method: 'POST', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.json() +} + +export async function updateUsuario({ login: id, ...data }) { + const res = await fetch(`${base}/usuarios/${id}/`, { + method: 'PATCH', + body: JSON.stringify(data), + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.json() +} + +export async function deleteUsuario(id) { + const res = await fetch(`${base}/usuarios/${id}/`, { + method: 'DELETE', + headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" } + }) + if (!res.ok) throw await res.text() + return res.text() +} \ No newline at end of file diff --git a/src/stores/global.js b/src/stores/global.js new file mode 100644 index 0000000..53aacc2 --- /dev/null +++ b/src/stores/global.js @@ -0,0 +1,5 @@ +import { writable } from 'svelte/store' + +export const storeMessages = writable([]); +export const storeSession = writable({}); +export const storeLayout = writable({ showSidebar: true }); \ No newline at end of file diff --git a/src/stores/messages.js b/src/stores/messages.js deleted file mode 100644 index bfa1cfd..0000000 --- a/src/stores/messages.js +++ /dev/null @@ -1,3 +0,0 @@ -import { writable } from 'svelte/store' - -export const storeMessages = writable([]); \ No newline at end of file diff --git a/src/stores/session.js b/src/stores/session.js deleted file mode 100644 index cf35d46..0000000 --- a/src/stores/session.js +++ /dev/null @@ -1,3 +0,0 @@ -import { writable } from 'svelte/store' - -export const storeSession = writable({}); \ No newline at end of file