Commit 2b48a699 authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Merge branch 'iss44-refactorizar-servicios-cliente' into 'desarrollo'

#44  refactorizar servicios cliente

Se modificaron los servicios del frontend para permitir una mayor versatilidad en cuanto a su parametrización.
Se realizaron cambios a la estructura visual para permitir una mejor navegación.
Se cambio el backend en la seccion de usuarios:
- Ahora se compara los datos del token con la base de datos
- Se guarda un nuevo usuario cuando se inicia sesion

See merge request !46
parents 0001b35c 401003fb
......@@ -6,6 +6,7 @@
this.$state = $state;
this.cargos = [];
this.cargo = {};
this.alertas = [];
this.service = cargoService;
this.postulanteService = postulanteService;
this.postulacionService = postulacionService;
......@@ -14,43 +15,33 @@
this.cambiarPagina();
}
detalle(id) {
this.cargo = this.cargos.find(x=>x._id == id);
this.$state.go('cargos.detalle', {cargoId: this.cargo._id})
}
postulantes(idCargo) {
this.postulacionService.getPostulacionesCargo(idCargo).then(postulantes=> {
this.cargo.postulantes = postulantes;
});
this.$state.go('cargos.detalle.postulantes');
}
cambiarPagina() {
this.service.getCargos(this.paginaActual).then(respuesta=> {
this.cargos = respuesta.rows;
this.totalElementos = respuesta.count;
});
this.service.getCargos({pagina: this.paginaActual, elementos: 15, ordenarPor: 'nombre'})
.then(respuesta=> {
this.cargos = respuesta.rows;
this.totalElementos = respuesta.count;
});
}
editar(id) {
this.cargo = this.cargos.find(x=>x._id == id);
this.$state.go('cargos.editar', {cargoId: this.cargo._id});
this.$state.go('cargos.editar', {cargoId: id});
}
crearCargos() {
this.modal.open({
templateUrl: 'app/cargos/modals/cargos.crear.modal.html',
controller: 'CargosCreaModalCtrl',
controllerAs: 'vm',
resolve: {
//parametro: {cargo: this.cargo}
}
controllerAs: 'vm'
}).result.then(cargo=> {
this.cargos.push(cargo);
this.alertas.push({
tipo: 'success',
mensaje: 'Se creo corectamente el cargo: ' + cargo.nombre
})
})
}
}
angular.module('moduloPersonalApp')
.controller('CargosCtrl', CargoController);
})();
<h4>{{vm.cargo.nombre}}
<!--<i class="fa fa-{{vm.postulante.genero}} {{vm.postulante.genero}}"></i>-->
</h4>
<div>
<button class="btn btn-primary">Editar</button>
<button class="btn btn-danger">Eliminar</button>
</div>
<hr>
<div class="input-group">
<button class="btn btn-link" ng-click="vm.postulantes(vm.cargo._id)">Ver postulantes</button>
<button class="btn btn-link" ui-sref="cargos.lista">Regresar</button>
</div>
</div>
<div ui-view=""></div>
<div class="row">
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-edit"></span> Editar Cargo</div>
<div class="panel-body">
<form method="post">
<div class="form-group ">
<label class="control-label requiredField" for="nombre">
Nombre
<span class="asteriskField">
*
</span>
</label>
<input type="text" value="{{vm.cargo.nombre}}" class="form-control" id="nombre" name="nombre" placeholder="Nombre de cargo" size="15">
</div>
<div class="form-group">
<div>
<button class="btn btn-primary icon-user"><span class="glyphicon glyphicon-floppy-disk"></span> Guardar</button>
<button class="btn btn-danger"><span class="glyphicon glyphicon-arrow-left"></span> Cancelar</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div ui-view=""></div>
<div class="row">
<div class="row container">
<div ui-view class="container"></div>
</div>
......
<div class="row">
<h2 class="sub-header">Cargos</h2>
<button class="btn btn-default" ng-click="vm.crearCargos()">Crear Cargo</button>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Nombre del cargo</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="cargo in vm.cargos">
<td>{{cargo.nombre}}</td>
<!--<td width="150"><a ng-click="vm.detalle(cargo._id)">Detalles</a></td> -->
<td width="150"><a ng-click="vm.editar(cargo._id)">Editar</a></td>
<!--Mostrar un dialogo de eliminar-->
<!--<td><a ng-click="vm.eliminar(cargo._id)">Eliminar</a></td>-->
</tr>
</tbody>
</table>
<div class="container">
<div class="row">
<h2 class="sub-header">Cargos</h2>
<uib-alert ng-repeat="alerta in vm.alertas" type="{{alerta.tipo}}" close="vm.alertas.splice($index,1)"
dismiss-on-timeout="3000">{{alerta.mensaje}}
</uib-alert>
<div class="pull-right">
<button class="btn btn-success" ng-click="vm.crearCargos()">
<i class="fa fa-plus"></i> Crear Cargo
</button>
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Nombre del cargo</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="cargo in vm.cargos">
<td>{{cargo.nombre}}</td>
<td width="150"><a ng-click="vm.editar(cargo._id)">Editar</a></td>
<!--Mostrar un dialogo de eliminar-->
<!--<td><a ng-click="vm.eliminar(cargo._id)">Eliminar</a></td>-->
</tr>
</tbody>
</table>
</div>
<uib-pagination
ng-hide="vm.totalElementos<10"
total-items="vm.totalElementos"
items-per-page="15"
max-size="8"
force-ellipses="true"
ng-model="vm.paginaActual"
ng-change="vm.cambiarPagina()"
next-text="Siguiente"
previous-Text="Anterior"></uib-pagination>
</div>
<uib-pagination
total-items="vm.totalElementos"
items-per-page="15"
max-size="8"
force-ellipses="true"
ng-model="vm.paginaActual"
ng-change="vm.cambiarPagina()"
next-text="Siguiente"
previous-Text="Anterior"></uib-pagination>
</div>
......@@ -9,12 +9,13 @@
})
}
getCargos(pagina = 1, elementos = 15, ordenarPor = '', orden = '') {
return this.resource.query({pagina: pagina, elementos: elementos, ordenarPor: ordenarPor, orden: orden}).$promise;
getCargos(parametros) {
return this.resource.query(parametros).$promise;
}
getCargo(id) {
return this.resource.get({id: id, incluye: ['Postulantes']}).$promise;
getCargo(id, parametros = {}) {
parametros.id = id;
return this.resource.get(parametros).$promise;
}
editarCargo(id, cargo) {
......
......@@ -9,7 +9,7 @@
this.modal = $uibModal;
this.Modal = Modal;
this.cargoService = cargoService;
this.cargoService.getCargo(this.id)
this.cargoService.getCargo(this.id, {incluye: ['Postulantes']})
.then(cargo=> {
this.cargo = cargo;
});
......@@ -33,7 +33,7 @@
eliminarPostulacion(cargo) {
this.Modal.confirm.eliminar(cargo => {
this.postulacionService.eliminaPostulacion(cargo.Postulacion._id)
this.postulacionService.eliminarPostulacion(cargo.Postulacion._id)
.then(()=> {
this.cargo.Postulantes.splice(this.cargo.Postulantes.indexOf(cargo), 1)
})
......
<div ng-controller="CargosEditarCtrl">
<div class="page-header">
<h4 class="header">Editar Cargo</h4>
</div>
<h2 class="sub-header">Editar Cargo
<small class="pull-right">
<a class="btn btn-default btn-sm" ui-sref="cargos.lista">
<i class="fa fa-arrow-left"></i>
Regresar
</a>
</small>
</h2>
<div>
<uib-accordion close-others="oneAtATime">
<uib-accordion-group heading="Cargo" class="panel-primary" is-open="true">
......@@ -64,9 +69,6 @@
class="fa fa-plus"></i>
Nueva Postulación
</button>
<button class="btn btn-danger" ui-sref="cargos.lista"><i class="glyphicon glyphicon-arrow-left"></i>
Cancelar
</button>
</div>
</div>
</div>
......
'use strict';
(()=> {
class ComentarioController {
constructor($state, comentarioService, postulanteService) {
this.state = $state;
this.comentarios = [];
this.comentario = {};
this.servicio = comentarioService;
this.postulanteService = postulanteService;
this.paginaActual = 1;
this.cambiarPagina();
}
detalle(id) {
this.comentario = this.comentarios.find(x=>x._id == id);
this.state.go('comentarios.detalle', {comentarioId: this.comentario._id})
}
//postulante(id) {
// this.state.go('comentarios.detalle.postulante', {potulanteId: this.comentario.fk_postulante});
//}
cambiarPagina() {
this.servicio.getComentarios(this.paginaActual).then(respuesta=> {
this.comentarios = respuesta.rows;
this.totalElementos = respuesta.count;
})
}
}
angular.module('moduloPersonalApp')
.controller('ComentariosCtrl', ComentarioController);
})();
'use strict';
describe('Controller: ComentariosCtrl', function () {
// load the controller's module
beforeEach(module('moduloPersonalApp'));
var ComentariosCtrl, scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
ComentariosCtrl = $controller('ComentariosCtrl', {
$scope: scope
});
}));
it('should ...', function () {
expect(1).to.equal(1);
});
});
<div class="row">
<h4>
{{vm.comentario.contenido}}
</h4>
<div>
<button class="btn btn-primary">Editar</button>
<button class="btn btn-danger">Eliminar</button>
</div>
<hr>
<div class="input-group">
<button class="btn btn-link" ng-click="vm.postulante(vm.comentario.fk_postulante)">Ver postulante{{comentario.fk_postulante}}</button>
<button class="btn btn-link" ui-sref="comentarios.lista">Regresar</button>
</div>
</div>
<div ui-view></div>
<div class="row">
<div ui-view class="container"></div>
</div>
'use strict';
angular.module('moduloPersonalApp')
.config(function ($stateProvider) {
$stateProvider
.state('comentarios', {
abstract: true,
url: '/comentarios',
templateUrl: 'app/comentarios/comentarios.html',
controller: 'ComentariosCtrl',
controllerAs: 'vm'
})
.state('comentarios.lista',{
url: '',
templateUrl: 'app/comentarios/comentarios.lista.html'
})
.state('comentarios.detalle', {
url: '/:comentarioId',
templateUrl: 'app/comentarios/comentarios.detalle.html'
})
.state('comentario.detalle.postulante', {
url: '/postulantes',
templateUrl: 'app/postulantes/postulantes.comentario.html'
})
});
<div class="row">
<h2 class="sub-header">Comentarios</h2>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Contenido del Comentario</th>
<th colspan="3" style="text-align: center;">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="comentario in vm.comentarios">
<td>{{comentario.contenido}}</td>
<td><a ng-click="vm.detalle(comentario._id)">Detalles</a></td>
<td><a ng-click="vm.editar(comentario._id)">Editar</a></td>
<!--Mostrar un dialogo de eliminar-->
<td><a ng-click="vm.eliminar(comentario._id)">Eliminar</a></td>
</tr>
</tbody>
</table>
</div>
<uib-pagination
total-items="vm.totalElementos"
items-per-page="15"
max-size="8"
force-ellipses="true"
ng-model="vm.paginaActual"
ng-change="vm.cambiarPagina()"
next-text="Siguiente"
previous-Text="Anterior"></uib-pagination>
</div>
......@@ -9,12 +9,12 @@
})
}
getComentarios(pagina = 1, elementos = 15, ordenarPor = '', orden = '') {
return this.resource.query({pagina: pagina, elementos: elementos, ordenarPor: ordenarPor, orden: orden}).$promise;
getComentarios(parametros) {
return this.resource.query(parametros).$promise;
}
getComentario(id) {
return this.resource.get({id: id}).$promise;
getComentario(id, parametros) {
return this.resource.get({id: id, parametros}).$promise;
}
crearComentario(comentario) {
......@@ -24,8 +24,9 @@
editarComentario(id, comentario) {
return this.resource.update({id: id}, comentario).$promise;
}
eliminarComentario(id){
return this.resource.remove({id:id}).$promise;
eliminarComentario(id) {
return this.resource.remove({id: id}).$promise;
}
}
......
(()=>{
'use strict';
class DatoPostulanteController {
constructor($state, datoPostulanteService) {
this.state = $state;
this.servicio = datoPostulanteService;
this.datosPostulantes = [];
this.datoPostulante = {};
this.paginaActual = 1;
this.cambiarPagina();
}
detalle(id){
this.datoPostulante = this.datosPostulantes.find(x=>x._id ==id);
this.state.go('datosPostulantes.detalle',{datoPostulanteId:id});
}
cambiarPagina(){
this.servicio.getDatosPostulantes(this.paginaActual).then(respuesta=> {
this.datosPostulantes = respuesta.rows;
this.totalElementos = respuesta.count;
});
}
}
angular.module('moduloPersonalApp')
.controller('DatosPostulantesCtrl', DatoPostulanteController);
})();
'use strict';
describe('Controller: DatosPostulantesCtrl', function () {
// load the controller's module
beforeEach(module('moduloPersonalApp'));
var DatosPostulantesCtrl, scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
DatosPostulantesCtrl = $controller('DatosPostulantesCtrl', {
$scope: scope
});
}));
it('should ...', function () {
expect(1).to.equal(1);
});
});
<div class="row">
<div ui-view class="container"></div>
</div>
'use strict';
angular.module('moduloPersonalApp')
.config(function ($stateProvider) {
$stateProvider
.state('datosPostulantes', {
url: '/datosPostulantes',
abstract:true,
templateUrl: 'app/datosPostulantes/datosPostulantes.html',
controller: 'DatosPostulantesCtrl',
controllerAs:'vm'
})
.state('datosPostulantes.lista',{
url:'',
templateUrl:'app/datosPostulantes/datosPostulantes.lista.html'
});
});
<div class="row">
<h2 class="sub-header">Datos de los Postulantes</h2>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Postulante</th>
<th>Propiedad</th>
<th>Valor</th>
<th>Id Postulante</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="datoPostulante in vm.datosPostulantes">
<td>{{datoPostulante.Postulante.nombres}} {{datoPostulante.Postulante.apellidos}}</td>
<td>{{datoPostulante.propiedad}}</td>
<td>{{datoPostulante.valor}}</td>
<td>{{datoPostulante.fk_postulante}}</td>
<td><a ng-click="vm.detalle(datoPostulante._id)">Detalles</a></td>
<td><a ng-click="vm.editar(datoPostulante._id)">Editar</a></td>
<!--Mostrar un dialogo de eliminar-->
<td><a ng-click="vm.eliminar(datoPostulante._id)">Eliminar</a></td>
</tr>
</tbody>
</table>
</div>
<uib-pagination
total-items="vm.totalElementos"
items-per-page="15"
max-size="8"
force-ellipses="true"
ng-model="vm.paginaActual"
ng-change="vm.cambiarPagina()"
next-text="Siguiente"
previous-Text="Anterior"></uib-pagination>
</div>
......@@ -9,36 +9,27 @@
})
}
getDatosPostulantes(pagina = 1, elementos = 15, ordenarPor = '', orden = '') {
return this.resource.query({
pagina: pagina,
elementos: elementos,
ordenarPor: ordenarPor,
orden: orden,
incluye: ['Postulante']
}).$promise;
getDatosPostulantes(parametros) {
return this.resource.query(parametros).$promise;
}
getDatoPostulante(id) {
return this.resource.get({id: id});
getDatoPostulante(id, parametros) {
return this.resource.get({id: id, parametros}).$promise;
}
eliminarDato(id) {
return this.resource.remove({id: id}).$promise;
}
crearDatoPostulante(datoPostulante){
crearDatoPostulante(datoPostulante) {
return this.resource.save(datoPostulante).$promise;
}
editarDatoPostulante(id, datoPostulante) {
console.log(id)
console.log(datoPostulante)
return this.resource.update({id: id}, datoPostulante).$promise;
}
}
angular.module('moduloPersonalApp')
.service('datoPostulanteService', DatoPostulanteService);
})();
......@@ -10,7 +10,7 @@
this.service = postulanteService;
this.postulacion = {fk_cargo: this.cargo._id};
this.service = postulacionService;
postulanteService.getPostulantes(1, 2000, 'nombres')
postulanteService.getPostulantes({ordenarPor: 'nombres'})
.then(postulantes=> {
this.postulantes = postulantes;
this.postulanteSeleccionado = {};
......
......@@ -4,7 +4,7 @@
class PostulacionesCrearModalController {
constructor($uibModalInstance, postulante, cargoService, postulacionService) {
this.enviado = false;
this.errores={};
this.errores = {};
this.modal = $uibModalInstance;
this.postulante = postulante;
this.postulacion = {fk_postulante: this.postulante._id};
......
<div class="row">
<h4 class="sub-header">Postulantes</h4>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Nombre y apellidos</th>
<th>Fecha de Postulacion</th>
<th>Presentacion</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="postulante in vm.cargo.postulantes">
<td>{{postulante.nombres}} {{postulante.apellidos}}</td>
<td>{{postulante.Postulacion.fecha_creacion | date:'dd/MM/yyyy'}}</td>
<td>{{postulante.Postulacion.presentacion}}</td>
<td><a ng-click="vm.editar(postulante._id)">Editar</a></td>
<!--Mostrar un dialogo de eliminar-->
<td><a ng-click="vm.eliminar(postulante._id)">Eliminar</a></td>
</tr>
</tbody>
</table>
</div>
</div>
(()=> {
'use strict';
class PostulacionController {
constructor($state, postulacionService) {
this.state = $state;
this.servicio = postulacionService;
this.postulaciones = [];
this.postulacion = {};
this.paginaActual = 1;
this.cambiarPagina();
}
detalle(id) {
this.postulacion = this.postulaciones.find(x=>x._id == id);
this.state.go('postulaciones.detalle', {postulacionId: id});
}
cambiarPagina() {
this.servicio.getPostulaciones(this.paginaActual).then(respuesta=> {
this.postulaciones = respuesta.rows;
this.totalElementos = respuesta.count;
})
}
}
angular.module('moduloPersonalApp')
.controller('PostulacionesCtrl', PostulacionController);
})();
'use strict';
describe('Controller: PostulacionesCtrl', function () {
// load the controller's module
beforeEach(module('moduloPersonalApp'));
var PostulacionesCtrl, scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
PostulacionesCtrl = $controller('PostulacionesCtrl', {
$scope: scope
});
}));
it('should ...', function () {
expect(1).to.equal(1);
});
});
<div class="row">
<div ui-view class="container"></div>