añadido nuevo crear grupo
This commit is contained in:
@@ -126,4 +126,52 @@ public class UsuarioController : ControllerBase
|
||||
|
||||
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 GestionPemisos from "./paginas/GestionPemisos.svelte";
|
||||
import UsuarioPanel from "./paginas/UsuarioPanel.svelte";
|
||||
import CrearUsuario from "./paginas/CrearUsuario.svelte";
|
||||
</script>
|
||||
|
||||
<Router>
|
||||
@@ -141,6 +142,12 @@
|
||||
<ProteRoute componente={AdminGrupos} />
|
||||
</Route>
|
||||
|
||||
<!-- Crear Usuario -->
|
||||
<Route path="/accion/19">
|
||||
<ProteRoute componente={CrearUsuario} />
|
||||
</Route>
|
||||
|
||||
|
||||
<!-- Pagina Ventas -->
|
||||
<Route path="/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,
|
||||
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 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)
|
||||
{
|
||||
var con = Context;
|
||||
|
||||
Reference in New Issue
Block a user