añadido nuevo crear grupo
This commit is contained in:
@@ -126,4 +126,52 @@ public class UsuarioController : ControllerBase
|
|||||||
|
|
||||||
return Ok(new { token = cli.Token });
|
return Ok(new { token = cli.Token });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record Crearusuario(long Dni, string Nombre, string Apellido, string Domicilio, string Celular,
|
||||||
|
string Email, string Contraseña, string? EmailRecuperacion, List<int> grupos);
|
||||||
|
[HttpPost("api/crearusuario")]
|
||||||
|
public IActionResult CrearUsuario([FromHeader(Name ="Auth")] string Auth, [FromBody] Crearusuario cu)
|
||||||
|
{
|
||||||
|
var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 19);
|
||||||
|
if (!ret) return BadRequest(new { message = "No tienes permisos para Crear un usuario" });
|
||||||
|
|
||||||
|
Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth);
|
||||||
|
if (cli == null) return BadRequest(new { message = "No hay un usuario por ese token" });
|
||||||
|
|
||||||
|
string rett = "";
|
||||||
|
|
||||||
|
if (cu.Dni <= 0)
|
||||||
|
rett += "No puede haber un documento con numero menor o igual a 0";
|
||||||
|
if (cu.Apellido.Length > 20)
|
||||||
|
rett += "Apellido excede los 20 caracteres. ";
|
||||||
|
if (cu.Nombre.Length > 20)
|
||||||
|
rett += "Nombre excede los 20 caracteres. ";
|
||||||
|
if (cu.Celular.Length > 40)
|
||||||
|
rett += "Celular excede los 40 caracteres. ";
|
||||||
|
if (cu.Domicilio.Length > 40)
|
||||||
|
rett += "Domicilio excede los 40 caracteres. ";
|
||||||
|
if (cu.Email.Length > 50)
|
||||||
|
rett += "Email excede los 50 caracteres. ";
|
||||||
|
if (cu.EmailRecuperacion?.Length > 50)
|
||||||
|
rett += "Email de recuperación excede los 50 caracteres. ";
|
||||||
|
|
||||||
|
if (rett != "") return BadRequest(new { message = rett });
|
||||||
|
|
||||||
|
Cliente clii = new Cliente
|
||||||
|
{
|
||||||
|
Habilitado = 1,
|
||||||
|
Dni = cu.Dni,
|
||||||
|
Nombre = cu.Nombre,
|
||||||
|
Apellido = cu.Apellido,
|
||||||
|
Celular = cu.Celular,
|
||||||
|
Email = cu.Email,
|
||||||
|
EmailRecuperacion = ((cu.EmailRecuperacion ?? "").Length == 0) ? cu.Email : cu.EmailRecuperacion,
|
||||||
|
Domicilio = cu.Domicilio
|
||||||
|
};
|
||||||
|
|
||||||
|
var rettt = RepositorioUsuarios.Singleton.AltaUsuario(cli.Dni, clii, cu.Contraseña, cu.grupos);
|
||||||
|
|
||||||
|
return rettt
|
||||||
|
? Ok(new { message = "Usuario creado exitosamente." })
|
||||||
|
: BadRequest(new { message = "Hubo un error al crear el usuario." }); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
import OtroG from "./paginas/grupos/OtroG.svelte";
|
import OtroG from "./paginas/grupos/OtroG.svelte";
|
||||||
import GestionPemisos from "./paginas/GestionPemisos.svelte";
|
import GestionPemisos from "./paginas/GestionPemisos.svelte";
|
||||||
import UsuarioPanel from "./paginas/UsuarioPanel.svelte";
|
import UsuarioPanel from "./paginas/UsuarioPanel.svelte";
|
||||||
|
import CrearUsuario from "./paginas/CrearUsuario.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Router>
|
<Router>
|
||||||
@@ -141,6 +142,12 @@
|
|||||||
<ProteRoute componente={AdminGrupos} />
|
<ProteRoute componente={AdminGrupos} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
|
<!-- Crear Usuario -->
|
||||||
|
<Route path="/accion/19">
|
||||||
|
<ProteRoute componente={CrearUsuario} />
|
||||||
|
</Route>
|
||||||
|
|
||||||
|
|
||||||
<!-- Pagina Ventas -->
|
<!-- Pagina Ventas -->
|
||||||
<Route path="/Ventas">
|
<Route path="/Ventas">
|
||||||
<ProteRoute componente={Ventas} />
|
<ProteRoute componente={Ventas} />
|
||||||
|
|||||||
173
Front/src/paginas/CrearUsuario.svelte
Normal file
173
Front/src/paginas/CrearUsuario.svelte
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte";
|
||||||
|
import ModalEstatico from "../Componentes/ModalEstatico.svelte";
|
||||||
|
import NavBarAutocompletable from "../Componentes/NavBarAutocompletable.svelte";
|
||||||
|
import { urlG } from "../stores/urlStore";
|
||||||
|
import type { CrearUsuario, Grupo, GrupoDto } from "../types";
|
||||||
|
|
||||||
|
let formData: CrearUsuario = $state({
|
||||||
|
Dni: 0,
|
||||||
|
Nombre: '',
|
||||||
|
Apellido: '',
|
||||||
|
Domicilio: '',
|
||||||
|
Celular: '',
|
||||||
|
Email: '',
|
||||||
|
Contraseña: '',
|
||||||
|
EmailRecuperacion: null,
|
||||||
|
grupos: []
|
||||||
|
});
|
||||||
|
|
||||||
|
let token = sessionStorage.getItem("token");
|
||||||
|
|
||||||
|
let grupos: GrupoDto[] = $state([]);
|
||||||
|
let modaldata: string = $state("");
|
||||||
|
|
||||||
|
onMount(async ()=>{
|
||||||
|
obtenerGrupos();
|
||||||
|
});
|
||||||
|
async function obtenerGrupos(){
|
||||||
|
try {
|
||||||
|
const req = await fetch($urlG+ "/api/admin/grupos", {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Auth": token,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let data = await req.json();
|
||||||
|
|
||||||
|
if (req.ok){
|
||||||
|
grupos= data;
|
||||||
|
} else{
|
||||||
|
modaldata = data.message;
|
||||||
|
}
|
||||||
|
} catch{
|
||||||
|
modaldata = "Fallo al hacer la request";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const resetForm = () => {
|
||||||
|
formData = {
|
||||||
|
Dni: 0,
|
||||||
|
Nombre: '',
|
||||||
|
Apellido: '',
|
||||||
|
Domicilio: '',
|
||||||
|
Celular: '',
|
||||||
|
Email: '',
|
||||||
|
Contraseña: '',
|
||||||
|
EmailRecuperacion: null,
|
||||||
|
grupos: []
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
async function handleSubmit(e:Event){
|
||||||
|
e.preventDefault();
|
||||||
|
try{
|
||||||
|
const req = await fetch($urlG +"/api/crearusuario", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Auth": token,
|
||||||
|
"Content-Type": "Application/json"
|
||||||
|
},
|
||||||
|
body: JSON.stringify(formData)
|
||||||
|
});
|
||||||
|
let data = await req.json();
|
||||||
|
modaldata = data.message;
|
||||||
|
if (req.ok){
|
||||||
|
resetForm();
|
||||||
|
}
|
||||||
|
}catch {
|
||||||
|
modaldata = "Fallo al hacer la request";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const toggleGrupo = (id: number) => {
|
||||||
|
const index = formData.grupos.indexOf(id);
|
||||||
|
if (index === -1) {
|
||||||
|
formData.grupos = [...formData.grupos, id];
|
||||||
|
} else {
|
||||||
|
formData.grupos = formData.grupos.filter(g => g !== id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if modaldata}
|
||||||
|
<ModalEstatico payload={modaldata} close={()=>!!(modaldata="")}/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<NavBarAutocompletable/>
|
||||||
|
|
||||||
|
<div class="container mt-4">
|
||||||
|
<BarraHorizontalConTexto text="Crear Usuario" />
|
||||||
|
<form onsubmit={(e)=>handleSubmit(e)} class="row g-3 mt-2" id="formcrearusu">
|
||||||
|
<!-- DNI -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="dni" class="form-label">DNI</label>
|
||||||
|
<input type="number" min="0" max="99999999" id="dni" bind:value={formData.Dni} class="form-control" required />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Nombre -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="nombre" class="form-label">Nombre</label>
|
||||||
|
<input type="text" id="nombre" bind:value={formData.Nombre} class="form-control" maxlength="20" required/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Apellido -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="apellido" class="form-label">Apellido</label>
|
||||||
|
<input type="text" id="apellido" bind:value={formData.Apellido} class="form-control" maxlength="20" required/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Domicilio -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="domicilio" class="form-label">Domicilio</label>
|
||||||
|
<input type="text" id="domicilio" bind:value={formData.Domicilio} class="form-control" maxlength="40" required/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Celular -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="celular" class="form-label">Celular</label>
|
||||||
|
<input type="tel" id="celular" bind:value={formData.Celular} class="form-control" maxlength="40" required/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Email -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="email" class="form-label">Email</label>
|
||||||
|
<input type="email" id="email" bind:value={formData.Email} class="form-control" maxlength="50" required/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Email Recuperación -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="recuperacion" class="form-label">Email de Recuperación</label>
|
||||||
|
<input type="email" id="recuperacion" bind:value={formData.EmailRecuperacion} class="form-control" maxlength="50" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contraseña -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="contrasena" class="form-label">Contraseña</label>
|
||||||
|
<input type="password" id="contrasena" bind:value={formData.Contraseña} class="form-control" required minlength="8"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Grupos -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label class="form-label">Selecciona Grupos</label>
|
||||||
|
<div class="d-flex flex-wrap gap-2">
|
||||||
|
{#each grupos as grupo}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn {formData.grupos.includes(grupo.idgrupo) ? 'btn-primary' : 'btn-outline-secondary'}"
|
||||||
|
onclick={() => toggleGrupo(grupo.idgrupo)}
|
||||||
|
>
|
||||||
|
{grupo.nombre}
|
||||||
|
</button>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Botón -->
|
||||||
|
<div class="col-12 mt-3">
|
||||||
|
<button type="submit" class="btn btn-success">Crear Usuario</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
12
Front/src/types.d.ts
vendored
12
Front/src/types.d.ts
vendored
@@ -249,3 +249,15 @@ export type IngresosDto = {
|
|||||||
atrasados:number,
|
atrasados:number,
|
||||||
sin_realizar:number
|
sin_realizar:number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CrearUsuario = {
|
||||||
|
Dni: number;
|
||||||
|
Nombre: string;
|
||||||
|
Apellido: string;
|
||||||
|
Domicilio: string;
|
||||||
|
Celular: string;
|
||||||
|
Email: string;
|
||||||
|
Contraseña: string;
|
||||||
|
EmailRecuperacion?: string | null;
|
||||||
|
grupos: number[];
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,24 @@ namespace Modelo;
|
|||||||
|
|
||||||
public class RepositorioUsuarios : RepositorioBase<RepositorioUsuarios>
|
public class RepositorioUsuarios : RepositorioBase<RepositorioUsuarios>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public bool AltaUsuario(long Dni, Cliente clii, string Contraseña, List<int> grupos)
|
||||||
|
{
|
||||||
|
var con = Context;
|
||||||
|
|
||||||
|
foreach (int i in grupos)
|
||||||
|
{
|
||||||
|
var g = con.Grupos.FirstOrDefault(x => x.Id == i);
|
||||||
|
clii.Idgrupos.Add(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
clii.Contraseña = Encoding.UTF8.GetBytes(HacerHash(Contraseña));
|
||||||
|
|
||||||
|
con.Clientes.Add(clii);
|
||||||
|
base.GenerarLog(con, Dni, "Creacion de usuario");
|
||||||
|
return Guardar(con);
|
||||||
|
}
|
||||||
|
|
||||||
public (bool, long) Check2fa(string Email, string Pin)
|
public (bool, long) Check2fa(string Email, string Pin)
|
||||||
{
|
{
|
||||||
var con = Context;
|
var con = Context;
|
||||||
|
|||||||
Reference in New Issue
Block a user