#8 Se agrega edicion de usuarios backend

parent 778c4531
......@@ -24,6 +24,7 @@ class AppKernel extends Kernel
new BackendBundle\BackendBundle(),
new CampaniaBundle\CampaniaBundle(),
new CampaniaFrontBundle\CampaniaFrontBundle(),
new BackendUsuarioBundle\BackendUsuarioBundle(),
new WsBundle\WsBundle(),
);
......
......@@ -35,6 +35,27 @@
</ul>
</div>
</li>
<li class="menu-item menu-item-submenu" aria-haspopup="true" data-menu-toggle="hover">
<a href="javascript:;" class="menu-link menu-toggle"><i class="menu-icon flaticon-user"></i>
<span class="menu-text">Usuarios</span><i class="menu-arrow"></i>
</a>
<div class="menu-submenu "><i class="menu-arrow"></i>
<ul class="menu-subnav">
<li class="menu-item menu-item-parent" aria-haspopup="true" >
<span class="menu-link">
<span class="menu-text">Funciones Usuarios</span>
</span>
</li>
{%if is_granted('ROLE_ADMIN')%}
<li class="menu-item " aria-haspopup="true" >
<a href="{{path('backend_backendusuario_index')}}" class="menu-link {% if route == 'backend_backendusuario_index' %}active{% endif %}"><i class="menu-bullet menu-bullet-line"><span></span></i>
<span class="menu-text">Listado Usuarios</span></a>
</li>
{% endif %}
</ul>
</div>
</li>
</ul>
<!--end::Menu Nav-->
</div>
......
{% extends 'baseBackend.html.twig' %}
{% block content %}
<!--begin::Subheader-->
<div class="subheader py-2 py-lg-6 subheader-solid " id="kt_subheader">
<div class=" container-fluid d-flex align-items-center justify-content-between flex-wrap flex-sm-nowrap">
<!--begin::Info-->
<div class="d-flex align-items-center flex-wrap mr-1">
<!--begin::Page Heading-->
<div class="d-flex align-items-baseline flex-wrap mr-5">
<!--begin::Page Title-->
<h5 class="text-dark font-weight-bold my-1 mr-5">
Crear Campaña
</h5>
<!--end::Page Title-->
</div>
<!--end::Page Heading-->
</div>
<!--end::Info-->
</div>
</div>
<!--end::Subheader-->
<!--begin::Entry-->
<div class="d-flex flex-column-fluid">
<!--begin::Container-->
<div class="container">
{{ include('backend_usuario/includes/alert.messages.html.twig') }}
<form class="form-horizontal" action="{{path('backend_backendusuario_actualizar')}}" method="post">
<div class="card-body">
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
<input type="hidden" id="empId" name="empId" value="{{backendUsuario.getEmpresa().getEmpId()}}"/>
<input type="hidden" id="bus_id" name="bus_id" value="{{backendUsuario.busId}}" />
<div class="form-group row">
<div class="col-lg-12">
<label>Email</label>
<input class="form-control" id="backendUsuarioEmail" name="backendUsuarioEmail" type="email" value="{{backendUsuario.busEmail}}" disabled>
<span class="form-text text-muted">Correo relacionado al usuario en edición.</span>
</div>
</div>
<div class="form-group row">
<div class="col-lg-12">
<label>Nombres</label>
<input class="form-control focused" id="backendUsuarioNombres" name="backendUsuarioNombres" type="text" value="{{backendUsuario.busNombres}}">
<span class="form-text text-muted">Nombres relacionados al usuario</span>
</div>
</div>
<div class="form-group row">
<div class="col-lg-12">
<label>Rol</label>
{% for backendRole in backendRoles %}
<div class="radio">
<label>
<input type="radio" name="backendUsuarioRol" value="{{backendRole.broId}}" {% if rol.broId == backendRole.broId %} checked {% endif %}/>{{backendRole.broNombre}}
{% if backendRole.broId == 1 %}<span><strong>(Puede crear usuarios nuevos y accede a todo el sistema de la empresa seleccionada.)</strong></span>{% endif %}
</label>
</div>
{% endfor %}
<span class="form-text text-muted">Rol del usuario.</span>
</div>
</div>
<div class="form-group row">
<div class="col-lg-12">
<label>Estado</label>
<label class="radio-inline">
<input type="radio" name="backendUsuarioEstado" value="1" {% if backendUsuario.busEstado == 1 %} checked {% endif %} />
Activo
</label>
<label class="radio-inline">
<input type="radio" name="backendUsuarioEstado" value="0" {% if backendUsuario.busEstado == 0 %} checked {% endif %}/>
Inactivo
</label>
</div>
</div>
<div class="form-group row">
<div class="col-lg-12">
<label></label>
<button type="submit" class="btn btn-sm btn-primary">Modificar</button>
<a href="{{path('backend_backendusuario_index')}}"><button type="button" class="btn btn-sm btn-default">Cancelar</button></a>
</div>
</div>
</div>
</form>
</div>
<!--end::Container-->
</div>
<!--end::Entry-->
{%endblock%}
{% block javascripts %}
<script>
$(document).on('change', '#empresa', function () {
$("#empId").val($(this).val());
});
</script>
{%endblock%}
{% extends 'administrador/base.html.twig' %}
{% block body %}
<!-- begin breadcrumb -->
<ol class="breadcrumb pull-right">
<li><a href="{{path('backend_backendusuario_index')}}">Panel Usuarios</a></li>
<li class="active">Nuevo</li>
</ol>
<!-- end breadcrumb -->
<!-- begin page-header -->
<h1 class="page-header">Nuevo Usuario</h1>
<!-- end page-header -->
<!-- begin row -->
<div class="row">
<div class="panel-body">
<div class="row">
<!-- begin col-6 -->
<div class="col-md-6">
<!-- begin panel -->
<div class="panel panel-inverse" data-sortable-id="form-stuff-1">
<div class="panel-body">
{{ include('backend_usuario/includes/alert.messages.html.twig') }}
<form class="form-horizontal" action="{{path('backend_backendusuario_crear')}}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
<div class="form-group">
<label class="col-md-3 control-label">Email</label>
<div class="col-md-9">
<input class="form-control" id="backendUsuarioEmail" name="backendUsuarioEmail" type="email" placeholder="Email">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Nombre</label>
<div class="col-md-9">
<input class="form-control focused" id="backendUsuarioNombres" name="backendUsuarioNombres" type="text" placeholder="Nombre y/o Apellido">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Rol</label>
<div class="col-md-9" id="backendUsuarioRoles" name="backendUsuarioRoles[]" class="form-control">
{% for backendRole in backendRoles %}
<div class="radio">
<label>
<input type="radio" name="backendUsuarioRol" value="{{backendRole.broId}}" />{{backendRole.broNombre}}
</label>
</div>
{% endfor %}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">Empresa</label>
<div class="col-md-9">
<select id="empresa" name="empresa">
<option value="none" selected>--Seleccione una empresa--</option>
{%for empresa in empresas%}
<option value="{{empresa.getEmpId()}}">{{empresa.getEmpNombre()}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"></label>
<div class="col-md-9">
<button type="submit" class="btn btn-sm btn-primary">Crear</button>
<a href="{{path('backend_backendusuario_index')}}"><button type="button" class="btn btn-sm btn-default">Volver</button></a>
</div>
</div>
</form>
</div>
</div>
<!-- end panel -->
</div>
<!-- end col-6 -->
</div>
</div>
</div>
<!-- end row -->
{% endblock %}
{#debug <span>Hello {{dump(app.session.flashbag.all)}}</span>#}
{% if app.session.flashbag.has('success') %}
<div class="alert alert-success">
<span class="close" data-dismiss="alert">×</span>
{% for flashMessage in app.session.flashbag.get('success') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('error') %}
<div class="alert alert-danger">
<span class="close" data-dismiss="alert">×</span>
{% for flashMessage in app.session.flashbag.get('error') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('info') %}
<div class="alert alert-info">
<span class="close" data-dismiss="alert">×</span>
{% for flashMessage in app.session.flashbag.get('info') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('warning') %}
<div class="alert alert-warning">
<span class="close" data-dismiss="alert">×</span>
{% for flashMessage in app.session.flashbag.get('warning') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
\ No newline at end of file
{%if usuario is defined%}
<b>Usuario : </b> {{usuario.getBusEmail()}}
<br>
<hr>
<b>Clave : </b>{{usuario.getBusSK()}}
{%endif%}
\ No newline at end of file
<div class="m-t-0 m-b-10">
<a href="{{path('backend_backendusuario_nuevo')}}"><button type="button" class="btn btn-danger"><i class="fa fa-plus fa fa-plus mg-rg5"></i> Nuevo Usuario</button></a>
</div>
<br>
<table id="data-table-usuario" class="table table-separate table-head-custom table-checkable" width="100%">
<thead>
<tr>
<th>Email</th>
<th>Nombre</th>
<th>Rol</th>
<th>Empresa</th>
<th>Estado</th>
<th>Última Edición</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
{% for backendUsuario in backendUsuarios %}
<tr class="odd gradeX">
<td><b>{{ backendUsuario.busEmail }}</b></td>
<td>{{ backendUsuario.busNombres }}</td>
<td>
{% for rol in backendUsuario.getObjetoRoles %}
<span id= "{{rol.broRol}}" >{{rol.broNombre}}</span>
{% endfor %}
</td>
<td>
<b>{{backendUsuario.getEmpresa().getEmpNombre()}}</b>
</td>
<td>
{{backendUsuario.getBusEstado()}}
</td>
<td class="center">{{ backendUsuario.updatedAt is empty ? "" : backendUsuario.updatedAt|date("d-m-Y H:i:s") }}</td>
<td>
{% if backendUsuario.estaValidado() == true %}
<a id="mostrarAccesos" class="btn btn-light btn-sm" title="Mostar Datos de Acceso" onclick="mostrarAccesos({{ backendUsuario.busId }})">
<i class="fa fa-eye fa-lg"></i>
</a>
<a class="btn btn-light btn-sm" title="Editar usuario" href="{{path('backend_backendusuario_editar',{ 'bus_id': backendUsuario.busId })}}">
<i class="fa fa-edit fa-lg"></i>
</a>
{% endif %}
<a class="btn btn-light btn-sm" title="Eliminar usuario" href="{{path('backend_backendusuario_eliminar',{ 'bus_id': backendUsuario.busId })}}" onclick="return confirm('¿Esta seguro de eliminar a este usuario?')" >
<i class="fa fa-trash fa-lg"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% extends 'baseBackend.html.twig' %}
{% block content %}
<!--begin::Subheader-->
<div class="subheader py-2 py-lg-6 subheader-solid " id="kt_subheader">
<div class=" container-fluid d-flex align-items-center justify-content-between flex-wrap flex-sm-nowrap">
<!--begin::Info-->
<div class="d-flex align-items-center flex-wrap mr-1">
<!--begin::Page Heading-->
<div class="d-flex align-items-baseline flex-wrap mr-5">
<!--begin::Page Title-->
<h5 class="text-dark font-weight-bold my-1 mr-5">
Listado Usuarios
</h5>
<!--end::Page Title-->
</div>
<!--end::Page Heading-->
</div>
<!--end::Info-->
</div>
</div>
<!--end::Subheader-->
<!--begin::Entry-->
<div class="d-flex flex-column-fluid">
<!--begin::Container-->
<div class="container">
{{ include('backend_usuario/includes/alert.messages.html.twig') }}
<div id="mensaje-tabla-usuarios" style="display:none" class="alert alert-info" role="alert"></div>
<!--begin::Card-->
<div class="card card-custom">
<div class="card-header flex-wrap py-5">
<div class="card-title">
<h3 class="card-label">
Usuarios
<span class="d-block text-muted pt-2 font-size-sm"></span>
</h3>
</div>
</div>
<div class="card-body">
<!--begin: Datatable-->
{% include 'backend_usuario/includes/tablaUsuarios.html.twig' %}
<!--end: Datatable-->
</div>
</div>
<!--end::Card-->
</div>
<!--end::Container-->
</div>
<!--end::Entry-->
<!-- #modal-dialog -->
<div class="modal fade" id="modal-acceso">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Datos de acceso</h4>
</div>
<div id="modal-acceso-contenido" class="modal-body" >
</div>
<div class="modal-footer">
<a href="javascript:;" class="btn btn-sm btn-white" data-dismiss="modal">Cerrar</a>
</div>
</div>
</div>
</div>
{% endblock %}
{% block javascripts %}
<script src="{{asset('assets/moment/moment.js')}}"></script>
<script src="{{asset('assets/backend_assets/assets/plugins/custom/datatables/datatables.bundle.js')}}"></script>
<script src="{{asset('assets/backend_assets/gearlabs_assets/js/utils.js')}}" ></script>
<script>
$(document).ready(function () {
generateTable();
});
function generateTable() {
// begin first table
tablaContenidos = $('#data-table-usuario').DataTable({
responsive: true,
bDestroy: true,
pagingType: 'full_numbers',
columnDefs: [
{
targets: 4,
width: '75px',
render: function (data, type, full, meta) {
var status = {
1: {'title': 'ACTIVO', 'class': 'label-light-success'},
0: {'title': 'INACTIVO', 'class': ' label-light-warning'},
};
if (typeof status[data] === 'undefined') {
return data;
}
return '<span class="label label-lg font-weight-bold' + status[data].class + ' label-inline">' + status[data].title + '</span>';
},
},
],
"language": {
"lengthMenu": "Mostrando _MENU_ contenido por página.",
"zeroRecords": "No se encontró ningúna contenido.",
"info": 'Mostrando página _PAGE_ de _PAGES_.',
"infoEmpty": "No hay contenidos disponibles.",
"infoFiltered": "(filtrado desde _MAX_ contenidos totales.)",
"search": "Búsqueda Rápida",
}
});
}
function mostrarAccesos(busId) {
$.ajax({
type: "POST",
url: '{{path('backend_usuario_mostrar_acceso')}}',
data: {busId: busId},
success: function (respuesta) {
$('#modal-acceso-contenido').html(respuesta);
$('#modal-acceso').modal('show');
}
});
}
var handleDataTableResponsive = function () {
"use strict";
if ($('#data-table-usuario').length !== 0) {
$('#data-table-usuario').DataTable({
responsive: true,
pageLength: 8,
paging:{{ (backendUsuarios|length > 8)? 'true':'false' }} ,
bPaginate: true,
order: [[0, 'asc']],
"language": {
"lengthMenu": "Mostrando _MENU_ usuarios por página.",
"zeroRecords": "No se encontró ningúna usuario.",
"info": '{{ (backendUsuarios|length > 8)? 'Mostrando página _PAGE_ de _PAGES_.':'' }}',
"infoEmpty": "No hay usuarios disponibles.",
"infoFiltered": "(filtrado desde _MAX_ usuarios totales.)",
"search": "Búsqueda Rápida",
"paginate": {
"first": "Primera Página",
"last": "Última Página",
"next": "Siguiente",
"previous": "Anterior",
}
}
});
}
};
</script>
{% endblock %}
......@@ -6,6 +6,11 @@ backend:
resource: "@BackendBundle/Resources/config/routing.yml"
prefix: /backend
backend_usuario:
resource: "@BackendUsuarioBundle/Resources/config/routing.yml"
prefix: /backend
ws:
resource: "@WsBundle/Resources/config/routing.yml"
prefix: /api
......
......@@ -6,4 +6,72 @@ use AppBundle\Model\om\BaseBackendUsuarioQuery;
class BackendUsuarioQuery extends BaseBackendUsuarioQuery
{
/**
* Verifica si exite backendUsuario en base a email
* @param String $email
* @param type $empId Id Empresa
* @return boolean
*/
public static function existeBackendUsuarioByEmail($email, $empId=null){
//$email = strtolower($email);
$query = BackendUsuarioQuery::create()
->filterByBusEmail($email)
->filterByBusEliminado(BackendUsuario::ELIMINADO_FALSE)
->setIgnoreCase(true);
if($empId)
$query->filterByEmpId($empId);
$count = $query->count();
if ($count >0 ) {
return true;
} else
return false;
}
/**
* Obtiene BackendUsuario en base a email
* @param String $email
* @param type $empId Id Empresa
* @return \AppBundle\Model\BackendUsuario
*/
public static function obtenerBackendUsuarioByEmail($email, $empId=null){
$query = BackendUsuarioQuery::create()
->filterByBusEmail($email)
->filterByBusEliminado(BackendUsuario::ELIMINADO_FALSE);
if($empId)
$query->filterByEmpId($empId);
return $query->findOne();
}
/**
*
* @param type $busId
* @param type $empId Id Empresa
* @return \AppBundle\Model\BackendUsuario
*/
public static function obtenerBackendUsuarioByBackendUsuarioId($busId, $empId=null){
$query = BackendUsuarioQuery::create()
->filterByBusEliminado(BackendUsuario::ELIMINADO_FALSE);
if($empId)
$query->filterByEmpId($empId);
return $query->findPk($busId);
}
public static function obtenerCantidadUsuarioByEmail($email){
return BackendUsuarioQuery::create()->filterByBusEliminado(BackendUsuario::ELIMINADO_FALSE)->filterByBusEmail($email)->count();
}
public static function obtenerCantidadUsuarioByEmailyBusId($email,$busId){
return BackendUsuarioQuery::create()->filterByBusEliminado(BackendUsuario::ELIMINADO_FALSE)->filterByBusEmail($email)->filterByBusId(array($bus_id), \Criteria::NOT_IN)->count();
}
}
<?php
namespace BackendUsuarioBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class BackendUsuarioBundle extends Bundle
{
}
<?php
namespace BackendUsuarioBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction()
{
return $this->render('BackendUsuarioBundle:Default:index.html.twig');
}
}
#USUARIOS BACKEND
backend_backendusuario_index:
path: /backendusuario/listado
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:index }
backend_backendusuario_nuevo:
path: /backendusuario/nuevo
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:nuevo }
backend_backendusuario_crear:
path: /backendusuario/crear
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:crear, _format: json }
methods: [POST]
backend_backendusuario_editar:
path: /backendusuario/editar/{bus_id}
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:editar }
requirements:
bus_id: \d+
backend_backendusuario_actualizar:
path: /backendusuario/actualizar
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:actualizar }
methods: [POST]
backend_backendusuario_eliminar:
path: /backendUsuario/eliminar/{bus_id}
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:eliminar }
requirements:
bus_id: \d+
backend_usuario_mostrar_acceso:
path: /backendUsuario/mostrar/datos/acceso
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:mostrarAcceso }
methods: [POST]
backend_backendusuario_reset:
path: /backendusuario/reset/{bus_id}
defaults: { _controller: BackendUsuarioBundle:BackendUsuario:reset }
requirements:
bus_id: \d+
services:
# backend_usuario.example:
# class: BackendUsuarioBundle\Example
# arguments: ["@service_id", "plain_value", "%parameter%"]
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment