Commit 2824c456 authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Se crearon modals para la creacion y edicion de postulaciones

Se añadio la condicion de que la combinacion de llaves foraneas sea unica
	modified:   server/api/datoPostulante/datoPostulante.model.js
	modified:   server/api/postulacion/postulacion.model.js
parent f7ebe278
......@@ -25,7 +25,9 @@ $masculino-color: #57b6ff;
.male{
color:$masculino-color;
}
.input-group {
margin-bottom: 10px;
}
// Component styles are injected through grunt
// injector
......
<div class="modal-header">
<button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">&times;</button>
<h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-4">
<select class="form-control" ng-model="modal.modelo.propiedad" name="combo">
<option value="{{tiposDato.propiedad}}"
ng-repeat="tiposDato in modal.modelo.tiposDato.rows">{{tiposDato.nombre}}
</option>
</select>
</div>
<div class="col-md-8">
<input type="text" name="valor" class="form-control" ng-model="modal.modelo.valor" required
placeholder="{{modal.modelo.placeholder}}">
</div>
</div>
</div>
<div class="modal-footer">
<button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)"
ng-bind="button.text" class="btn"></button>
</div>
......@@ -4,15 +4,15 @@
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-10">
<div class="col-md-4">
<select class="form-control" ng-model="modal.modelo.propiedad">
<option ng-selected="tiposDato.propiedad == modal.modelo.propiedad" value="{{tiposDato.propiedad}}" ng-repeat="tiposDato in modal.modelo.tiposDato.rows">{{tiposDato.nombre}}
<option ng-selected="tiposDato.propiedad == modal.modelo.propiedad" value="{{tiposDato.propiedad}}"
ng-repeat="tiposDato in modal.modelo.tiposDato.rows">{{tiposDato.nombre}}
</option>
</select>
<p class="input-group">
<input type="text" name="valor" class="form-control" ng-model="modal.modelo.DatoPostulante.valor" required>
</p>
</div>
<div class="col-md-8">
<input type="text" name="valor" class="form-control" ng-model="modal.modelo.valor" required >
</div>
</div>
......
(()=>{
(()=> {
'use strict';
class DatoPostulanteService {
......@@ -23,13 +23,20 @@
return this.resource.get({id: id});
}
eliminarDato(id){
return this.resource.remove({id:id}).$promise;
eliminarDato(id) {
return this.resource.remove({id: id}).$promise;
}
nuevoDatoPostulante(datoPostulante){
return this.resource.save(datoPostulante).$promise;
}
editarDatoPostulante(id, datoPostulante) {
return this.resource.update({id: id}, datoPostulante).$promise;
}
}
angular.module('moduloPersonalApp')
.service('datoPostulanteService',DatoPostulanteService);
.service('datoPostulanteService', DatoPostulanteService);
})();
'use strict';
(()=> {
class PostulanteCrearModalController {
constructor($uibModalInstance, postulante, cargoService, postulacionService) {
this.enviado = false;
this.modal = $uibModalInstance;
this.postulante = postulante;
this.postulacion = {fk_postulante: this.postulante._id};
this.service = postulacionService;
cargoService.getCargos().then(cargos => {
this.cargos = cargos;
this.cargoSeleccionado = {};
})
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.postulacion.fk_cargo = this.cargoSeleccionado._id;
this.service.crearPostulacion(this.postulacion)
.then(postulacion=> {
this.modal.close(postulacion)
})
.catch(err => {
this.errores.otros = err.message;
});
}
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesCrearModalCtrl', PostulanteCrearModalController);
})();
'use strict';
(()=> {
class PostulanteEditarModalController {
constructor($uibModalInstance, parametro, cargoService, postulacionService) {
this.errores = {};
this.modal = $uibModalInstance;
this.postulacion = Object.assign({}, parametro.cargo.Postulacion);
this.service = postulacionService;
cargoService.getCargos().then(cargos => {
this.cargos = cargos;
this.cargoSeleccionado = cargos.rows.find(x=>x._id === this.postulacion.fk_cargo);
})
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.service.editarPostulacion(this.postulacion._id, {
fk_cargo: this.cargoSeleccionado._id,
presentacion: this.postulacion.presentacion
})
.then(postulacion=> {
console.log(postulacion);
this.modal.close(postulacion)
})
.catch(err => {
this.errores.otros = err.data.message; // TODO mejorar el manejo de errores en el server
});
}
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesEditarModalCtrl', PostulanteEditarModalController);
})();
<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">Postulacion</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-10">
<label>Cargos</label>
<div class="input-group">
<select class="form-control" name="cargos" ng-model="vm.cargoSeleccionado"
ng-options="crg as crg.nombre for crg in vm.cargos.rows" required>
</select>
<p class="help-block" ng-show="form.cargos.$error.required && vm.enviado">
Seleccione un cargo al cual postular
</p>
</div>
</div>
<div class="col-md-12">
<label>Presentación</label>
<div class="input-group">
<textarea type="text" name="presentacion" class="form-control " ng-model="vm.postulacion.presentacion"
required></textarea>
<p class="help-block" ng-show="form.presentacion.$error.required && vm.enviado">
Ingrese una presentacion para postular al cargo
</p>
</div>
</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.cargos.$dirty ||form.presentacion.$dirty)">
Guardar
</button>
<button class="btn btn-default" type="button" ng-click="vm.modal.dismiss()">Cancelar</button>
</div>
</form>
......@@ -2,16 +2,16 @@
'use strict';
class PostulacionService {
constructor($resource) {
this.resource = $resource('/api/postulaciones/:id', {id: '@_id',postulanteId:'@_id',cargoId:'@_id'}, {
this.resource = $resource('/api/postulaciones/:id', {id: '@_id', postulanteId: '@_id', cargoId: '@_id'}, {
update: {method: 'PUT'},
query: {isArray: false},
postulacionesPostulante:{
method:'GET',
url:'/api/postulaciones/postulante/:postulanteId'
postulacionesPostulante: {
method: 'GET',
url: '/api/postulaciones/postulante/:postulanteId'
},
postulacionesCargo:{
method:'GET',
url:'/api/postulaciones/cargo/:cargoId'
postulacionesCargo: {
method: 'GET',
url: '/api/postulaciones/cargo/:cargoId'
}
})
}
......@@ -22,7 +22,7 @@
elementos: elementos,
ordenarPor: ordenarPor,
orden: orden,
incluye: ['Postulante','Cargo']
incluye: ['Postulante', 'Cargo']
}).$promise;
}
......@@ -31,11 +31,19 @@
}
getPostulacionesPostulante(idPostulante) {
return this.resource.postulacionesPostulante({postulanteId:idPostulante}).$promise;
return this.resource.postulacionesPostulante({postulanteId: idPostulante}).$promise;
}
getPostulacionesCargo(idCargo) {
return this.resource.postulacionesCargo({cargoId:idCargo}).$promise;
return this.resource.postulacionesCargo({cargoId: idCargo}).$promise;
}
crearPostulacion(postulacion) {
return this.resource.save(postulacion).$promise;
}
editarPostulacion(id, postulacion) {
return this.resource.update({id: id}, postulacion).$promise;
}
}
angular.module('moduloPersonalApp')
......
'use strict';
(()=> {
class PostulanteController {
constructor($stateParams, postulanteService, datoPostulanteService,tipoDatoService, Modal) {
class PostulanteEditarController {
constructor($stateParams, postulanteService, datoPostulanteService, tipoDatoService, $uibModal, Modal) {
this.errores = {}; // lista de errores
this.postulanteEnviado = false; // se refiere a si se intento enviar el formulario del postulante
this.tagsEnviado = false;
this.datosEnviado = false;
this.postulacionesEnviado = false;
this.Modal = Modal;
this.modal = $uibModal;
this.service = postulanteService;
this.datoPostulanteService = datoPostulanteService;
this.tipoDatoService = tipoDatoService;
......@@ -20,29 +19,65 @@
this.tags.push({text: tag.nombre})
})
});
this.eliminarDatoModal = Modal.confirm.eliminar(dato => {
}
eliminarDato(dato) {
this.Modal.confirm.eliminar(dato => {
this.datoPostulanteService.eliminarDato(dato.DatoPostulante._id)
.then(()=> {
this.postulante.Datos.splice(this.postulante.Datos.indexOf(dato), 1);
})
});
this.editarDatoModal = Modal.confirm.editar(dato=> {
console.log(dato);
})
}
eliminarDato(dato){
this.eliminarDatoModal(dato.nombre, dato);
})(dato.nombre, dato);
}
editarDato(dato){
this.tipoDatoService.getTiposDato().then(tiposDato=>{
editarDato(dato) {
this.tipoDatoService.getTiposDato().then(tiposDato=> {
dato.tiposDato = tiposDato;
console.log(tiposDato);
this.editarDatoModal('app/tiposDato/tiposDato.modal.editar.html',dato);
dato.valor = dato.DatoPostulante.valor;
this.Modal.confirm.editar(dato=> {
this.datoPostulanteService.editarDatoPostulante(dato.DatoPostulante._id, {
propiedad: dato.propiedad,
valor: dato.valor
})
.then(datoPostulante=> {
var tipoDato = dato.tiposDato.rows.find(x=>x.propiedad === datoPostulante.propiedad);
tipoDato.DatoPostulante = datoPostulante;
var index = this.postulante.Datos.findIndex(x=>x.DatoPostulante._id === tipoDato.DatoPostulante._id);
this.postulante.Datos[index] = tipoDato;
})
.catch(err=> {
console.log(err);
this.errores.other = err.data.message; // TODO mejorar manejo de errores en la api
})
})('app/datosPostulantes/datosPostulantes.modal.editar.html', dato);
});
}
crearDato() {
this.tipoDatoService.getTiposDato().then(tiposDato=> {
var dato = {};
dato.tiposDato = tiposDato;
console.log(tiposDato);
this.Modal.confirm.crear(dato=> {
this.datoPostulanteService.nuevoDatoPostulante({
fk_postulante: this.postulante._id,
propiedad: dato.propiedad,
valor: dato.valor
})
.then(datoPostulante=> {
var tipoDato = dato.tiposDato.rows.find(x=>x.propiedad === datoPostulante.propiedad);
tipoDato.DatoPostulante = datoPostulante;
this.postulante.Datos.push(tipoDato);
})
.catch(err=> {
console.log(err);
this.errores.other = err.data.message; // TODO mejorar manejo de errores en la api
})
})('app/datosPostulantes/datosPostulantes.modal.crear.html', dato);
});
}
guardarPostulante(form, campo) {
this.enviado = true;
if (form.$valid) {
......@@ -57,7 +92,29 @@
});
}
}
editarPostulacion(cargo) {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
controller: 'PostulantesEditarModalCtrl',
controllerAs: 'vm',
resolve: {
parametro: {postulante: this.postulante, cargo:cargo}
}
})
}
crearPostulacion() {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
controller: 'PostulantesCrearModalCtrl',
controllerAs: 'vm',
resolve: {
postulante: this.postulante
}
})
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesEditarCtrl', PostulanteController);
.controller('PostulantesEditarCtrl', PostulanteEditarController);
})();
......@@ -34,13 +34,13 @@
<div class="row">
<div class="col-md-10">
<label>Cedula de Identidad</label>
<p class="input-group">
<div class="input-group">
<input type="text" name="ci" class="form-control" ng-model="vm.postulante.ci" required>
<span class="input-group-btn">
<button type="button" class="btn btn-primary" ng-click="vm.guardarPostulante(form,'ci')"
ng-disabled="!form.ci.$dirty"><i class="fa fa-save"></i></button>
</span>
</p>
</div>
</div>
</div>
......@@ -59,7 +59,7 @@
<div class="row" ng-repeat="dato in vm.postulante.Datos">
<div class="col-md-10">
<label>{{dato.nombre}}</label>
<p class="input-group">
<div class="input-group">
<input ng-readonly="true" type="text" name="nombres" class="form-control"
ng-model="dato.DatoPostulante.valor" required>
<span class="input-group-btn">
......@@ -70,17 +70,10 @@
<button type="button" class="btn btn-danger" ng-click="vm.eliminarDato(dato)"><i
class="fa fa-trash"></i></button>
</span>
</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-10">
<div class="pull-right">
<button class="btn btn-success" type="button"><i class="fa fa-plus"></i> Añadir dato</button>
</div>
</div>
</div>
<br>
<div class="form-group has-error">
<p class="help-block"
ng-show="(form.ci.$error.required || form.sexo.$error.required ||form.nombres.$error.required || form.apellidos.$error.required) && vm.enviado">
......@@ -88,6 +81,16 @@
</p>
<p class="help-block">{{ vm.errores.other }}</p>
</div>
<div class="row">
<div class="col-md-10">
<div class="pull-right">
<button class="btn btn-success" ng-click="vm.crearDato()" type="button"><i class="fa fa-plus"></i>
Añadir dato
</button>
</div>
</div>
</div>
</div>
</uib-accordion-group>
<uib-accordion-group heading="Tags" class="panel-primary" is-open="true">
......@@ -106,10 +109,40 @@
</div>
</uib-accordion-group>
<uib-accordion-group heading="Postulaciones" class="panel-primary" is-open="true">
<!--<uib-accordion-heading>
Postulaciones <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.open, 'glyphicon-chevron-right': !status.open}"></i>
</uib-accordion-heading>-->
<div class="col-md-12">
<div class="row" ng-repeat="cargo in vm.postulante.Postulaciones">
<div class="col-md-10">
<label>{{cargo.nombre}}</label>
<div class="input-group margin-bottom">
<input type="text" name="nombres" class="form-control"
ng-model="cargo.Postulacion.presentacion" ng-disabled="true">
<div class="input-group-btn">
<button type="button" class="btn btn-info" ng-click="vm.editarPostulacion(cargo)"><i
class="fa fa-edit"></i></button>
<button type="button" class="btn btn-danger" ng-click="vm.eliminarPostulacion(cargo)"><i
class="fa fa-trash"></i></button>
</div>
</div>
</div>
</div>
<div class="form-group has-error">
<p class="help-block"
ng-show="(form.ci.$error.required || form.sexo.$error.required ||form.nombres.$error.required || form.apellidos.$error.required) && vm.enviado">
Debe llenar todos los campos
</p>
<p class="help-block">{{ vm.errores.other }}</p>
</div>
<div class="row">
<div class="col-md-10">
<div class="pull-right">
<button class="btn btn-success" type="button" ng-click="vm.crearPostulacion()">
<i class="fa fa-plus"></i>
Nueva Postulacion
</button>
</div>
</div>
</div>
</div>
</uib-accordion-group>
</uib-accordion>
</div>
......
......@@ -69,7 +69,6 @@ angular.module('moduloPersonalApp')
var args = Array.prototype.slice.call(arguments),
name = args.shift(),
editarModal;
console.log("modelooo "+JSON.stringify(args[0]));
editarModal = openModal({
modal: {
templateUrl : name,
......@@ -78,7 +77,39 @@ angular.module('moduloPersonalApp')
modelo: args[0],
buttons: [{
classes: 'btn-success',
text: 'Guardarrrr',
text: 'Guardar',
click: function(e) {
editarModal.close(e);
}
}, {
classes: 'btn-default',
text: 'Cancelar',
click: function(e) {
editarModal.dismiss(e);
}
}]
}
}, 'modal-primary');
editarModal.result.then(function(event) {
del.apply(event, args);
});
};
},
crear(del = angular.noop) {
return function() {
var args = Array.prototype.slice.call(arguments),
name = args.shift(),
editarModal;
editarModal = openModal({
modal: {
templateUrl : name,
dismissable: true,
title: 'Nuevo',
modelo: args[0],
buttons: [{
classes: 'btn-success',
text: 'Guardar',
click: function(e) {
editarModal.close(e);
}
......
......@@ -79,7 +79,7 @@
<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/postulantes.service.js"></script>
<script src="app/postulantes/postulantes.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>
......@@ -90,14 +90,16 @@
<script src="app/datosPostulantes/datosPostulantes.service.js"></script>
<script src="app/main/main.controller.js"></script>
<script src="app/main/main.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/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/cargos/cargos.controller.js"></script>
<script src="app/postulantes/postulantes.service.js"></script>
<script src="app/tags/tags.controller.js"></script>
<script src="app/tags/tags.js"></script>
<script src="app/tags/tags.service.js"></script>
......
......@@ -17,10 +17,16 @@ export default function(sequelize, DataTypes) {
}
}
}
},{
}, {
schema: 'public',
tableName: 'dato_postulante',
updatedAt: 'fecha_modificacion',
createdAt: 'fecha_creacion'
createdAt: 'fecha_creacion',
indexes: [
{
unique: true,
fields: ['fk_postulante', 'propiedad']
}
]
});
}
......@@ -113,7 +113,7 @@ export function migrarDatosMoodle(req, res) {
respuesta.cv += 1;
respuesta.totalDatosPostulante +=1;
}
if(registro.curriculum) {
if(registro.correoElectronico) {
DatoPostulante.create({
fk_postulante: nuevoPostulantes._id,
valor: registro.correoElectronico,
......
'use strict';
export default function(sequelize, DataTypes) {
export default function (sequelize, DataTypes) {
return sequelize.define('Postulacion', {
_id: {
type: DataTypes.INTEGER,
......@@ -10,10 +10,10 @@ export default function(sequelize, DataTypes) {
},
presentacion: {
type: DataTypes.TEXT,
allowNull:false,
validate:{
notEmpty:{
msg:'Por favor ingrese un mensaje de presentacion'
allowNull: false,
validate: {
notEmpty: {
msg: 'Por favor ingrese un mensaje de presentacion'
}
}
}
......@@ -21,6 +21,12 @@ export default function(sequelize, DataTypes) {
schema: 'public',
tableName: 'postulacion',
updatedAt: 'fecha_modificacion',
createdAt: 'fecha_creacion'
createdAt: 'fecha_creacion',
indexes: [
{
unique: true,
fields: ['fk_postulante', 'fk_cargo']
}
]
});
}
\ No newline at end of file
}
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