iht
1 year ago
12 changed files with 697 additions and 39 deletions
@ -0,0 +1,161 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Controllers\Administracion; |
||||
|
||||
use App\Http\Controllers\Controller; |
||||
use App\Models\ArchivosNominas; |
||||
use App\Models\Empleados; |
||||
use App\Models\ExpirarContrasena; |
||||
use App\Models\User; |
||||
use Carbon\Carbon; |
||||
use Illuminate\Http\Request; |
||||
use Illuminate\Support\Facades\Auth; |
||||
use Illuminate\Support\Facades\Storage; |
||||
|
||||
|
||||
class PerfilesController extends Controller |
||||
{ |
||||
/** |
||||
* Create a new controller instance. |
||||
* |
||||
* @return void |
||||
*/ |
||||
public function __construct() |
||||
{ |
||||
$this->middleware('auth'); |
||||
} |
||||
|
||||
|
||||
public function index() |
||||
{ |
||||
|
||||
|
||||
return view('administracion/perfiles'); |
||||
|
||||
} |
||||
|
||||
public function nuevoUsuario( Request $request ){ |
||||
|
||||
$datosUsuario = $request->usuario; |
||||
$datosEmpleado = $request->empleado; |
||||
|
||||
$datosUsuario['password'] = bcrypt('123456'); |
||||
|
||||
$nuevoUsuario = User::create( $datosUsuario ); |
||||
|
||||
$datosEmpleado['fk_id_users'] = $nuevoUsuario->id; |
||||
|
||||
Empleados::create( $datosEmpleado ); |
||||
|
||||
ExpirarContrasena::create([ |
||||
|
||||
'fk_id_users' => $nuevoUsuario->id, |
||||
'dias_expiracion' => 0, |
||||
'ultima_actualizacion' => Carbon::now() |
||||
|
||||
]); |
||||
|
||||
return 'Exito papuus'; |
||||
|
||||
} |
||||
|
||||
public function editarUsuario( Request $request ){ |
||||
|
||||
$datosEmpleado = $request->empleado; |
||||
|
||||
User::where('id',$request->usuario['id'])->update($request->usuario ); |
||||
|
||||
$datosEmpleado['fk_id_users'] = $request->usuario['id']; |
||||
Empleados::updateOrCreate( $datosEmpleado ) ; |
||||
|
||||
|
||||
return 'Exito papuus'; |
||||
|
||||
} |
||||
|
||||
public function eliminarUsuario( Request $request ){ |
||||
|
||||
|
||||
User::where('id',$request->id)->update([ |
||||
'activo' => 0, |
||||
'eliminado' => 1 |
||||
]); |
||||
|
||||
return 'Exito'; |
||||
|
||||
} |
||||
|
||||
public function cargarListasUsuarios(Request $request){ |
||||
|
||||
|
||||
$fileContpaq = $this->convertirExcelArray($request->file('files')); |
||||
$this->generarUsuarios( $fileContpaq, $request) ; |
||||
|
||||
return 'exito!!!'; |
||||
|
||||
} |
||||
|
||||
public function convertirExcelArray($file){ |
||||
|
||||
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); |
||||
$reader->setReadDataOnly(true); |
||||
$excel = $reader->load($file); |
||||
$sheet = $excel->getSheet(0); |
||||
$sheetData = $sheet->toArray(null, false, true, true); |
||||
|
||||
return $sheetData; |
||||
|
||||
} |
||||
|
||||
public function generarUsuarios($file, $request ) |
||||
{ |
||||
|
||||
|
||||
|
||||
foreach ($file as $row => $val){ |
||||
|
||||
if( $row > 1 ){ |
||||
|
||||
if( !is_null($val['A']) && !is_null($val['B']) ){ |
||||
|
||||
$nuevoUsuario = User::create([ |
||||
'name' => $val['B'], |
||||
'fk_id_roles' => 3, |
||||
'fk_id_grupos' => 0, |
||||
'email' => $val['B'], |
||||
'password' => bcrypt('123456'), |
||||
]); |
||||
|
||||
Empleados::create([ |
||||
'clave_contpaq' => $val['A'], |
||||
'nombre_completo' => $val['B'], |
||||
'fk_id_users' => $nuevoUsuario->id |
||||
]); |
||||
|
||||
ExpirarContrasena::create([ |
||||
|
||||
'fk_id_users' => $nuevoUsuario->id, |
||||
'dias_expiracion' => 0, |
||||
'ultima_actualizacion' => Carbon::now() |
||||
|
||||
]); |
||||
|
||||
} |
||||
|
||||
|
||||
} |
||||
} |
||||
|
||||
return 'Exito'; |
||||
|
||||
} |
||||
|
||||
public function expirarContrasena( Request $request ){ |
||||
|
||||
ExpirarContrasena::where('fk_id_users',$request->id)->update(['dias_expiracion' => 0]); |
||||
|
||||
User::where('id',$request->id)->update(['password' => bcrypt('123456')]); |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,24 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
|
||||
class Perfiles extends Model |
||||
{ |
||||
|
||||
protected $connection = 'mysql'; |
||||
|
||||
protected $table = 'perfiles'; |
||||
protected $primaryKey = 'id'; |
||||
|
||||
public $timestamps = false; |
||||
|
||||
protected $fillable = [ |
||||
'perfil', |
||||
'activo' |
||||
]; |
||||
|
||||
|
||||
} |
@ -0,0 +1,28 @@
|
||||
<?php |
||||
|
||||
use Illuminate\Database\Migrations\Migration; |
||||
use Illuminate\Database\Schema\Blueprint; |
||||
use Illuminate\Support\Facades\Schema; |
||||
|
||||
return new class extends Migration |
||||
{ |
||||
/** |
||||
* Run the migrations. |
||||
*/ |
||||
public function up(): void |
||||
{ |
||||
Schema::create('perfiles', function (Blueprint $table) { |
||||
$table->id(); |
||||
$table->string('perfil'); |
||||
$table->boolean('activo')->default(1); |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* Reverse the migrations. |
||||
*/ |
||||
public function down(): void |
||||
{ |
||||
Schema::dropIfExists('perfiles'); |
||||
} |
||||
}; |
@ -0,0 +1,21 @@
|
||||
<?php |
||||
|
||||
namespace Database\Seeders; |
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents; |
||||
use Illuminate\Database\Seeder; |
||||
use DB; |
||||
|
||||
class PerfilesSeeder extends Seeder |
||||
{ |
||||
/** |
||||
* Run the database seeds. |
||||
*/ |
||||
public function run(): void |
||||
{ |
||||
DB::table('perfiles')->insert(['perfil'=>'Administrador']); |
||||
DB::table('perfiles')->insert(['perfil'=>'Gerencia']); |
||||
DB::table('perfiles')->insert(['perfil'=>'Supervisor']); |
||||
DB::table('perfiles')->insert(['perfil'=>'Empleado']); |
||||
} |
||||
} |
@ -0,0 +1,365 @@
|
||||
|
||||
$(function () { |
||||
|
||||
$(document).ajaxStart(function(){ |
||||
$.blockUI({ |
||||
message: '<i class="fas fa-spin fa-sync text-white"></i>', |
||||
overlayCSS: { |
||||
backgroundColor: "#000", |
||||
opacity: 0.5, |
||||
cursor: "wait", |
||||
}, |
||||
css: { |
||||
border: 0, |
||||
padding: 0, |
||||
color: "#333", |
||||
backgroundColor: "transparent", |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
$(document).ajaxStop($.unblockUI); |
||||
|
||||
|
||||
$("#formNuevoUsuario").on("submit", function(e){ |
||||
|
||||
e.preventDefault(); |
||||
|
||||
|
||||
var check = document.getElementsByClassName('formNuevoUsuario')[0].reportValidity(); |
||||
|
||||
|
||||
if (check) { |
||||
|
||||
var formData = new FormData(this); |
||||
|
||||
Swal.fire({ |
||||
title: "¿Esta seguro que desea agregar un nuevo usuario?", |
||||
type: "warning", |
||||
showCancelButton: true, |
||||
confirmButtonColor: "#3085d6", |
||||
cancelButtonColor: "#d33", |
||||
cancelButtonText: "Cancelar", |
||||
confirmButtonText: "Aceptar", |
||||
}).then((result) => { |
||||
if (result.value) { |
||||
|
||||
$('#cerrarModalNuevoUsuario').trigger("click"); |
||||
|
||||
$.ajax({ |
||||
type:'POST', |
||||
url:'nuevo_usuario', |
||||
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||
data: formData, |
||||
processData:false, |
||||
contentType: false, |
||||
success:function(data){ |
||||
|
||||
cargarlistaEmpresas(); |
||||
$(".formNuevoUsuario")[0].reset(); |
||||
$('#formNuevoUsuario').removeClass('was-validated'); |
||||
Swal.fire("¡Éxito!", "Se agrego un nuevo usuario.", "success"); |
||||
|
||||
}, |
||||
error: function (e) { |
||||
mensajeError(); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
}else{ |
||||
errorFaltanCampos(); |
||||
} |
||||
}); |
||||
|
||||
$("#formEditarUsuario").on("submit", function(e){ |
||||
|
||||
e.preventDefault(); |
||||
|
||||
var check = document.getElementsByClassName('formEditarUsuario')[0].reportValidity(); |
||||
|
||||
if (check) { |
||||
|
||||
|
||||
var formData = new FormData(this); |
||||
|
||||
Swal.fire({ |
||||
title: "¿Esta seguro que desea editar los datos del usuario?", |
||||
type: "warning", |
||||
showCancelButton: true, |
||||
confirmButtonColor: "#3085d6", |
||||
cancelButtonColor: "#d33", |
||||
cancelButtonText: "Cancelar", |
||||
confirmButtonText: "Aceptar", |
||||
}).then((result) => { |
||||
if (result.value) { |
||||
|
||||
$('#cerrarModalEditarUsuario').trigger("click"); |
||||
|
||||
$.ajax({ |
||||
type:'POST', |
||||
url:'editar_usuario', |
||||
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||
data: formData, |
||||
processData:false, |
||||
contentType: false, |
||||
success:function(data){ |
||||
|
||||
cargarlistaEmpresas(); |
||||
$("#formEditarUsuario")[0].reset(); |
||||
$('#formEditarUsuario').removeClass('was-validated'); |
||||
Swal.fire("¡Éxito!", "Se editaron los datos del usuario.", "success"); |
||||
|
||||
}, |
||||
error: function (e) { |
||||
mensajeError(); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
}else{ |
||||
errorFaltanCampos(); |
||||
} |
||||
}); |
||||
|
||||
|
||||
$("#formCargarUsuarios").on("submit", function(e){ |
||||
|
||||
e.preventDefault(); |
||||
|
||||
var formData = new FormData(this); |
||||
|
||||
Swal.fire({ |
||||
title: "¿Esta seguro que deseas cargar la lista de nuevos usuarios?", |
||||
type: "warning", |
||||
showCancelButton: true, |
||||
confirmButtonColor: "#3085d6", |
||||
cancelButtonColor: "#d33", |
||||
cancelButtonText: "Cancelar", |
||||
confirmButtonText: "Aceptar", |
||||
}).then((result) => { |
||||
if (result.value) { |
||||
|
||||
$('#cerrarModalNuevo').trigger("click"); |
||||
|
||||
$.ajax({ |
||||
type:'POST', |
||||
url:'cargar_lista_usuarios', |
||||
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, |
||||
data: formData, |
||||
processData:false, |
||||
contentType: false, |
||||
success:function(data){ |
||||
|
||||
cargarlistaEmpresas(); |
||||
Swal.fire("¡Éxito!", "Se agrego la lista de nuevos usuarios.", "success"); |
||||
|
||||
}, |
||||
error: function (e) { |
||||
mensajeError(); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
|
||||
}); |
||||
|
||||
}); |
||||
|
||||
cargarListaPerfiles(); |
||||
|
||||
function cargarListaPerfiles(){ |
||||
|
||||
$('#listaPerfiles').empty().DataTable({ |
||||
searchDelay: 400, |
||||
ajax: { |
||||
url: 'api/obtener_perfiles', |
||||
dataSrc: function(json){ |
||||
return json; |
||||
|
||||
} |
||||
}, |
||||
// order: [[0, 'asc']],
|
||||
// ordering:true,
|
||||
columns:[ |
||||
// { data: "id", defaultContent: "---", title: "#2" },
|
||||
{data:function(row, type){ |
||||
const id = row.id; |
||||
let botonAcciones = '<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton" style="">'+ |
||||
'<li>'+ |
||||
'<a class="dropdown-item" data-bs-toggle="modal" data-bs-target="#modal_editar_form" onclick="cargarEditarForm('+id+')">Editar</a>'+ |
||||
'</li>'+ |
||||
'<li>'+ |
||||
'<a class="dropdown-item" onclick="eliminarUsuario('+ id +')">Eliminar</a>'+ |
||||
'</li>'+ |
||||
'</ul>'; |
||||
return '<div class="dropdown dropstart">'+ |
||||
'<a href="table-basic.html#" class="link" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">'+ |
||||
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal feather-sm">'+ |
||||
'<circle cx="12" cy="12" r="1"></circle>'+ |
||||
'<circle cx="19" cy="12" r="1"></circle>'+ |
||||
'<circle cx="5" cy="12" r="1"></circle>'+ |
||||
'</svg>'+ |
||||
'</a>'+ |
||||
botonAcciones+ |
||||
'</div>'; |
||||
}, |
||||
title: "Acciones"}, |
||||
{ data: "id", defaultContent: "---", title: "#" }, |
||||
{ data: "perfil", defaultContent: "---", title: "Perfiles" }, |
||||
{data:function(row, type){ |
||||
const activo = row.activo; |
||||
console.log(activo); |
||||
return (row.activo == 1) ? 'Activo' : 'Inactivo' ; |
||||
|
||||
}, |
||||
title: "Estado"} |
||||
|
||||
|
||||
], |
||||
aLengthMenu: [ |
||||
[25, 50, 100, 200, -1], |
||||
[25, 50, 100, 200, 'All'] |
||||
], |
||||
destroy: true, |
||||
paging:true, |
||||
info:true, |
||||
// responsive: true,
|
||||
// dom: "Bfrtip",
|
||||
// buttons: ["copy", "csv", "excel", "pdf", "print"],
|
||||
"language": { |
||||
"url": "//cdn.datatables.net/plug-ins/1.10.19/i18n/Spanish.json" |
||||
} |
||||
}); |
||||
} |
||||
|
||||
cargarListaRoles(); |
||||
|
||||
function cargarListaRoles(){ |
||||
|
||||
$.get('api/lista_roles',function(data){ |
||||
|
||||
let opciones = ''; |
||||
$('.roles').empty(); |
||||
|
||||
$.each(data,function(i,ele){ |
||||
|
||||
opciones += '<option value="'+ ele.id +'" >'+ ele.rol +'</option>'; |
||||
|
||||
}); |
||||
|
||||
$('.roles').append(opciones); |
||||
|
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
function cargarEditarForm(id){ |
||||
$.get('api/detalle_usuario',{id:id},function(data){ |
||||
|
||||
$.each(data,function(i,ele){ |
||||
|
||||
$('#editar_'+i).val(ele).change; |
||||
if( i == 'datos_empleado' ){ |
||||
|
||||
$.each(ele,function(j,datos_empleado){ |
||||
|
||||
// if( j == 'id' ){
|
||||
// $('#editar_empleado_'+j).val(datos_empleado);
|
||||
// }
|
||||
|
||||
$('#editar_empleado_'+j).val(datos_empleado); |
||||
|
||||
}); |
||||
|
||||
} |
||||
|
||||
}); |
||||
}); |
||||
} |
||||
|
||||
function eliminarUsuario(id){ |
||||
|
||||
|
||||
Swal.fire({ |
||||
title: "¿Esta seguro que desea eliminar el usuario?", |
||||
type: "warning", |
||||
showCancelButton: true, |
||||
confirmButtonColor: "#3085d6", |
||||
cancelButtonColor: "#d33", |
||||
cancelButtonText: "Cancelar", |
||||
confirmButtonText: "Aceptar", |
||||
}).then((result) => { |
||||
if (result.value) { |
||||
|
||||
$.get('eliminar_usuario',{id:id},function(data){ |
||||
|
||||
cargarlistaEmpresas(); |
||||
Swal.fire("¡Éxito!", "Se editaron los datos del usuario.", "success"); |
||||
|
||||
}); |
||||
|
||||
} |
||||
}); |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
function errorFaltanCampos(){ |
||||
|
||||
Swal.fire({ |
||||
title: "Alerta!", |
||||
text: "Faltan campos por llenar.", |
||||
type: "warning", |
||||
timer: 3000, |
||||
showConfirmButton: false, |
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
function mensajeError(){ |
||||
|
||||
Swal.fire({ |
||||
type: "error", |
||||
title: "Oops...", |
||||
text: "¡Lo siento, ocurrió un error!", |
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
(function () { |
||||
"use strict"; |
||||
window.addEventListener( |
||||
"load", |
||||
function () { |
||||
// Fetch all the forms we want to apply custom Bootstrap validation styles to
|
||||
var forms = document.getElementsByClassName("needs-validation"); |
||||
// Loop over them and prevent submission
|
||||
var validation = Array.prototype.filter.call( |
||||
forms, |
||||
function (form) { |
||||
form.addEventListener( |
||||
"submit", |
||||
function (event) { |
||||
if (form.checkValidity() === false) { |
||||
event.preventDefault(); |
||||
event.stopPropagation(); |
||||
} |
||||
form.classList.add("was-validated"); |
||||
}, |
||||
false |
||||
); |
||||
} |
||||
); |
||||
}, |
||||
false |
||||
); |
||||
})(); |
||||
|
@ -0,0 +1,62 @@
|
||||
@extends('layouts.app') |
||||
@extends('layouts.head') |
||||
@extends('layouts.preloader') |
||||
@extends('layouts.scripts') |
||||
@extends('layouts.topbar') |
||||
@extends('layouts.lefsidebar') |
||||
|
||||
@section('content') |
||||
|
||||
@include('administracion.forms.nuevo_usuarios') |
||||
@include('administracion.forms.editar_usuarios') |
||||
|
||||
|
||||
|
||||
<div id="main-wrapper"> |
||||
<div class="page-wrapper"> |
||||
<div class="page-breadcrumb border-bottom"> |
||||
<div class="row"> |
||||
|
||||
<div class="col-lg-3 col-md-4 col-xs-12 justify-content-start d-flex align-items-center"> |
||||
<h5 class="font-weight-medium text-uppercase mb-0">Perfiles</h5> |
||||
</div> |
||||
<div class="col-lg-9 col-md-8 col-xs-12 d-flex justify-content-start justify-content-md-end align-self-center" > |
||||
<nav aria-label="breadcrumb" class="mt-2"> |
||||
<ol class="breadcrumb mb-0 p-0"> |
||||
<li class="breadcrumb-item"><a >Adminstracion</a></li> |
||||
<li class="breadcrumb-item active" aria-current="page">Perfiles</li> |
||||
</ol> |
||||
</nav> |
||||
<div class="d-flex justify-content-end"> |
||||
<button class="btn btn-success text-white ms-3 d-none d-md-block" data-bs-toggle="modal" data-bs-target="#info-header-modal" onclic="limpiarFormulario()"><i class="mdi mdi-plus"></i> Nuevo perfil </button> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
<div class="page-content container-fluid"> |
||||
<div class="card"> |
||||
<div class="row no-gutters"> |
||||
<div class="col-lg-12 col-md-12"> |
||||
<div class="card-body"> |
||||
<div class="row mb-4"> |
||||
<div class="col-md-8"> |
||||
<h3 class="font-weight-medium">Perfiles</h3> |
||||
</div> |
||||
<div class="d-flex justify-content-end"></div> |
||||
</div> |
||||
<div class="table-responsive"> |
||||
<table id="listaPerfiles" class="table table-bordered no-wrap fs-3 w-100 display" ></table> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
@endsection |
||||
|
||||
@section('script') |
||||
<script src="js/administracion/perfiles.js"></script> |
||||
@endsection |
Loading…
Reference in new issue