Commit 0001b35c authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Merge branch 'iss35-Adicionar-postulaciones-desde-cargo' into desarrollo

Conflicts:
	client/app/postulaciones/postulaciones.service.js
	client/index.html
parents 3f9f0d7a 65aae75d
......@@ -2,12 +2,14 @@
(()=> {
class CargoController {
constructor($state, cargoService, postulacionService) {
constructor($state, cargoService, postulacionService, postulanteService, $uibModal) {
this.$state = $state;
this.cargos = [];
this.cargo = {};
this.service = cargoService;
this.postulanteService = postulanteService;
this.postulacionService = postulacionService;
this.modal = $uibModal;
this.paginaActual = 1;
this.cambiarPagina();
}
......@@ -31,10 +33,23 @@
});
}
editar(id){
editar(id) {
this.cargo = this.cargos.find(x=>x._id == id);
this.$state.go('cargos.editar', {cargoId: this.cargo._id});
}
crearCargos() {
this.modal.open({
templateUrl: 'app/cargos/modals/cargos.crear.modal.html',
controller: 'CargosCreaModalCtrl',
controllerAs: 'vm',
resolve: {
//parametro: {cargo: this.cargo}
}
})
}
}
angular.module('moduloPersonalApp')
.controller('CargosCtrl', CargoController);
......
......@@ -22,8 +22,11 @@ angular.module('moduloPersonalApp')
url: '/postulantes',
templateUrl: 'app/postulaciones/postulaciones.cargo.html'
})
.state('cargos.editar', {
url: '/editar/:cargoId',
templateUrl: 'app/cargos/cargos.editar.html'
.state('cargos.editar',{
url:'/:cargoId/editar',
templateUrl:'app/cargos/editar/cargos.editar.html',
controller:'CargosEditarCtrl',
controllerAs:'vm'
})
});
<div class="row">
<h2 class="sub-header">Cargos</h2>
<button class="btn btn-default" ng-click="vm.crear()">Crear Cargo</button>
<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="3">Opciones</th>
<th colspan="2">Opciones</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="cargo in vm.cargos">
<td>{{cargo.nombre}}</td>
<td><a ng-click="vm.detalle(cargo._id)">Detalles</a></td>
<td><a ng-click="vm.editar(cargo._id)">Editar</a></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>
<!--<td><a ng-click="vm.eliminar(cargo._id)">Eliminar</a></td>-->
</tr>
</tbody>
</table>
......
......@@ -14,9 +14,16 @@
}
getCargo(id) {
return this.resource.get({id: id});
return this.resource.get({id: id, incluye: ['Postulantes']}).$promise;
}
editarCargo(id, cargo) {
return this.resource.update({id: id}, cargo).$promise;
}
crearCargo(cargo) {
return this.resource.save(cargo).$promise;
}
}
angular.module('moduloPersonalApp')
......
'use strict';
(()=> {
class CargoEditarController {
constructor($stateParams, postulanteService, postulacionService, $uibModal, Modal, cargoService) {
this.errores = {};
this.id = $stateParams.cargoId;
this.postulacionService = postulacionService;
this.modal = $uibModal;
this.Modal = Modal;
this.cargoService = cargoService;
this.cargoService.getCargo(this.id)
.then(cargo=> {
this.cargo = cargo;
});
this.postulanteService = postulanteService;
}
guardarCargo(form, campo) {
this.enviado = true;
if (form.$valid) {
this.cargoService.editarCargo(this.id, {[campo]: form[campo].$modelValue})
.then(cargo=> {
form[campo].$dirty = false;
this.enviado = false;
this.cargo[campo] = cargo[campo];
})
.catch(error => {
this.errores.other = error.message;
});
}
}
eliminarPostulacion(cargo) {
this.Modal.confirm.eliminar(cargo => {
this.postulacionService.eliminaPostulacion(cargo.Postulacion._id)
.then(()=> {
this.cargo.Postulantes.splice(this.cargo.Postulantes.indexOf(cargo), 1)
})
})(cargo.nombres, cargo);
}
crearPostulanteACargo() {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.cargo.modal.html',
controller: 'PostulacionCargoModalCtrl',
controllerAs: 'vm',
resolve: {
cargo: this.cargo
}
})
}
}
angular.module('moduloPersonalApp')
.controller('CargosEditarCtrl', CargoEditarController);
})();
<div ng-controller="CargosEditarCtrl">
<div class="page-header">
<h4 class="header">Editar Cargo</h4>
</div>
<div>
<uib-accordion close-others="oneAtATime">
<uib-accordion-group heading="Cargo" class="panel-primary" is-open="true">
<div class="col-sm-12">
<form class="form" name="form" novalidate>
<div class="row">
<div class="col-md-10">
<p class="input-group">
<input type="text" name="nombre" class="form-control" ng-model="vm.cargo.nombre"
placeholder="Nombre de cargo" required>
<span class="input-group-btn">
<button type="button" class="btn btn-primary" ng-click="vm.guardarCargo(form,'nombre')"
ng-disabled="!form.nombre.$dirty"><i class="fa fa-save"></i></button>
</span>
</p>
</div>
</div>
<div class="form-group has-error">
<p class="help-block"
ng-show="(form.nombre.$error.required) && vm.enviado">
Debe llenar el nombre.
</p>
<p class="help-block">{{ vm.erroresCargo.other }}</p>
</div>
</form>
</div>
</uib-accordion-group>
<uib-accordion-group heading="Postulantes al Cargo" class="panel-primary" is-open="true">
<div class="col-md-12">
<div class="row">
<div class="col-md-10">
<table class="table table-condensed">
<thead>
<tr>
<th>Nombres</th>
<th>Apellidos</th>
<th>Cedula de Identidad</th>
<th>Acción</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="postulante in vm.cargo.Postulantes">
<td>{{postulante.nombres}}</td>
<td>{{postulante.apellidos}}</td>
<td>{{postulante.ci}}</td>
<td>
<button type="button" class="btn btn-danger" ng-click="vm.eliminarPostulacion(postulante)"><i
class="fa fa-trash" title="Eliminar postulación"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br>
<div class="row">
<div class="col-md-10">
<div class="pull-right">
<button class="btn btn-success" ng-click="vm.crearPostulanteACargo()" type="button"><i
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>
</div>
</div>
</div>
'use strict';
(()=> {
class CargosCreaModalController {
constructor($uibModalInstance, cargoService) {
this.enviado = false;
this.modal = $uibModalInstance;
this.cargo = {};
this.errores = {};
this.service = cargoService;
}
guardarCargo(form) {
this.enviado = true;
if (form.$valid) {
this.cargo.nombre = form['nombre'].$modelValue;
this.service.crearCargo(this.cargo)
.then(cargo=> {
this.modal.close(cargo)
})
.catch(err => {
this.errores.otros = err.data.message;
});
}
}
}
angular.module('moduloPersonalApp')
.controller('CargosCreaModalCtrl', CargosCreaModalController);
})();
<form class="form" name="form" ng-submit="vm.guardarCargo(form)" novalidate>
<div class="modal-header">
<button type="button" ng-click="vm.modal.dismiss()" class="close">&times;</button>
<h4 class="modal-title">Cargo</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<label>Nombre</label>
<textarea type="text" name="nombre" class="form-control" ng-minlength="5" ng-model="vm.cargo.nombre" required></textarea>
<p class="help-block" ng-show="form.cargo.$error.required && vm.enviado">
Ingrese nombre del cargo
</p>
</div>
</div>
<div class="form-group has-error">
<p class="help-block">{{ vm.errores.otros}}</p>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="submit" ng-disabled="!(form.nombre.$dirty) || form.$invalid">
Guardar
</button>
<button class="btn btn-default" type="button" ng-click="vm.modal.dismiss()">Cancelar</button>
</div>
</form>
'use strict';
(()=> {
class PostulacionCargoCrearModalController {
constructor($uibModalInstance, cargo, postulanteService, postulacionService) {
this.enviado = false;
this.errores = {};
this.modal = $uibModalInstance;
this.cargo = cargo;
this.service = postulanteService;
this.postulacion = {fk_cargo: this.cargo._id};
this.service = postulacionService;
postulanteService.getPostulantes(1, 2000, 'nombres')
.then(postulantes=> {
this.postulantes = postulantes;
this.postulanteSeleccionado = {};
});
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.postulacion.fk_postulante = this.postulanteSeleccionado._id;
this.service.crearPostulacion(this.postulacion)
.then(postulacion=> {
this.postulanteSeleccionado.Postulacion = postulacion;
this.cargo.Postulantes.push(this.postulanteSeleccionado);
this.modal.close(postulacion)
})
.catch(err=> {
this.errores.otros = err.data.message;
});
}
}
}
angular.module('moduloPersonalApp')
.controller('PostulacionCargoModalCtrl', PostulacionCargoCrearModalController);
})();
<form class="form" name="form" ng-submit="vm.guardar(form)" novalidate>
<div class="modal-header">
<button type="button" ng-click="vm.modal.dismiss()" class="close">&times;</button>
<h4 class="modal-title">Postulación</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-2">
<label>Cargo</label>
</div>
<div class="col-md-10">
<p class="alert alert-info" role="alert">
{{vm.cargo.nombre}}.
</p>
</div>
</div>
<div class="row">
<div class="col-md-2">
<label>Postulantes</label>
</div>
<div class="col-md-10">
<select class="form-control" name="postulante" ng-model="vm.postulanteSeleccionado"
ng-options="crg as (crg.nombres + ' ' + crg.apellidos) for crg in vm.postulantes.rows" required>
</select>
</div>
</div>
<div class="col-xs-12"><br></div>
<div class="row">
<div class="col-md-2">
<label>Presentación</label>
</div>
<div class="col-md-10">
<textarea type="text" name="presentacion" class="form-control" rows="5" ng-minlength="5" ng-model="vm.postulacion.presentacion"
required></textarea>
</div>
</div>
<div class="row">
<div class="col-md-10">
<div class="form-group has-error">
<p class="help-block" ng-show="form.presentacion.$error.required && vm.enviado">
Todos los campos son requeridos.
</p>
<p class="help-block">{{ vm.errores.otros }}</p>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="submit" ng-disabled="!(form.postulante.$dirty || form.presentacion.$dirty) || form.$invalid">
Guardar
</button>
<button class="btn btn-default" type="button" ng-click="vm.modal.dismiss()">Cancelar</button>
</div>
</form>
......@@ -46,8 +46,8 @@
return this.resource.update({id: id}, postulacion).$promise;
}
eliminarPostulacion(id){
return this.resource.remove({id:id}).$promise;
eliminarPostulacion(id) {
return this.resource.remove({id: id}).$promise;
}
}
angular.module('moduloPersonalApp')
......
......@@ -77,7 +77,7 @@
//region postulaciones
editarPostulacion(cargo) {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
templateUrl: 'app/postulaciones/modals/postulaciones.modal.html',
controller: 'PostulacionesEditarModalCtrl',
controllerAs: 'vm',
resolve: {
......@@ -88,7 +88,7 @@
crearPostulacion() {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
templateUrl: 'app/postulaciones/modals/postulaciones.modal.html',
controller: 'PostulacionesCrearModalCtrl',
controllerAs: 'vm',
resolve: {
......
......@@ -128,7 +128,7 @@
<div class="pull-right">
<button class="btn btn-success" type="button" ng-click="vm.crearPostulacion()">
<i class="fa fa-plus"></i>
Nueva Postulacion
Añadir Postulación
</button>
</div>
</div>
......
......@@ -63,7 +63,7 @@
});
}
cambiarPagina() {
this.service.getPostulantes(this.paginaActual).$promise.then(respuesta=> {
this.service.getPostulantes(this.paginaActual).then(respuesta=> {
this.postulantes = respuesta.rows;
this.totalElementos = respuesta.count;
})
......
......@@ -10,7 +10,7 @@
}
getPostulantes(pagina = 1, elementos = 10, ordenarPor = '', orden = '') {
return this.resource.query({pagina: pagina, elementos: elementos, ordenarPor: ordenarPor, orden: orden});
return this.resource.query({pagina: pagina, elementos: elementos, ordenarPor: ordenarPor, orden: orden}).$promise;
}
getPostulante(id) {
......
......@@ -68,7 +68,9 @@
<script src="components/autenticacion/autenticacion.module.js"></script>
<script src="components/modal/modal.module.js"></script>
<script src="components/util/util.module.js"></script>
<script src="app/postulantes/editar/postulantes.editar.controller.js"></script>
<script src="app/postulaciones/postulaciones.service.js"></script>
<script src="app/cargos/editar/cargos.editar.controller.js"></script>
<script src="app/cargos/modals/cargos.crear.modal.controller.js"></script>
<script src="app/comentarios/comentarios.controller.js"></script>
<script src="app/comentarios/comentarios.js"></script>
<script src="app/comentarios/comentarios.service.js"></script>
......@@ -83,13 +85,14 @@
<script src="app/datosPostulantes/modals/datosPostulantes.editar.modal.controller.js"></script>
<script src="app/main/main.controller.js"></script>
<script src="app/main/main.js"></script>
<script src="app/postulaciones/modals/postulaciones.cargo.modal.controller.js"></script>
<script src="app/postulaciones/modals/postulaciones.crear.modal.controller.js"></script>
<script src="app/postulaciones/modals/postulaciones.editar.modal.controller.js"></script>
<script src="app/postulaciones/postulaciones.controller.js"></script>
<script src="app/postulaciones/postulaciones.js"></script>
<script src="app/postulaciones/postulaciones.service.js"></script>
<script src="app/postulantes/detalle/postulantes.detalle.controller.js"></script>
<script src="app/cargos/cargos.controller.js"></script>
<script src="app/postulantes/detalle/postulantes.detalle.controller.js"></script>
<script src="app/postulantes/editar/postulantes.editar.controller.js"></script>
<script src="app/postulantes/postulantes.controller.js"></script>
<script src="app/postulantes/postulantes.js"></script>
<script src="app/postulantes/postulantes.service.js"></script>
......
......@@ -22,14 +22,13 @@ export function index(req, res) {
// Gets a single Cargo from the DB
export function show(req, res) {
Cargo.find({
where: {
_id: req.params.id
}
})
.then(errorMan.handleEntityNotFound(res))
.then(errorMan.respondWithResult(res))
.catch(errorMan.handleError(res));
req.parametros.where = {
_id: req.params.id
};
Cargo.find(req.parametros)
.then(errorMan.handleEntityNotFound(res))
.then(errorMan.respondWithResult(res))
.catch(errorMan.handleError(res));
}
// Creates a new Cargo in the DB
......
......@@ -17,6 +17,7 @@ export default function(sequelize, DataTypes) {
nombre: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: {
msg:'Ingrese un nombre para el cargo'
......@@ -27,6 +28,7 @@ export default function(sequelize, DataTypes) {
schema:'public',
tableName: 'cargo',
updatedAt: 'fecha_modificacion',
createdAt: 'fecha_creacion'
createdAt: 'fecha_creacion',
});
}
......@@ -10,7 +10,7 @@ import config from '../../config/environment';
var rolAdministrador = config.userRoles[2];
router.get('/',autenticacion.estaAutenticado(),formatearRuta, controller.index);
router.get('/:id',autenticacion.estaAutenticado(), controller.show);
router.get('/:id',autenticacion.estaAutenticado(),formatearRuta, controller.show);
router.post('/',autenticacion.tieneRol(rolAdministrador), controller.create);
router.put('/:id',autenticacion.tieneRol(rolAdministrador), controller.update);
router.patch('/:id',autenticacion.tieneRol(rolAdministrador), controller.update);
......
......@@ -46,6 +46,8 @@ function obtenerDependencia(nombreDependencia) {
return {model: db.Cargo, as: nombreDependencia}
case 'Postulante':
return {model: db.Postulante, as: nombreDependencia}
case 'Postulantes':
return {model: db.Postulante, as: nombreDependencia}
case 'Tag':
return {model: db.Tag, as: nombreDependencia}
case 'Tags':
......
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