Commit 3f9f0d7a authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Merge branch 'iss36-comentarios-postulante' into 'desarrollo'

#36  comentarios postulante

Se añadio la funcionalidad de añadir/editar/eliminar comentarios/tags/postulaciones a los postulantes

See merge request !44
parents 434e30d9 3045b71e
......@@ -14,7 +14,18 @@
}
getComentario(id) {
return this.resource.get({id: id});
return this.resource.get({id: id}).$promise;
}
crearComentario(comentario) {
return this.resource.save(comentario).$promise;
}
editarComentario(id, comentario) {
return this.resource.update({id: id}, comentario).$promise;
}
eliminarComentario(id){
return this.resource.remove({id:id}).$promise;
}
}
......
'use strict';
(()=> {
class ComentariosCrearModalController {
constructor($uibModalInstance, postulante, comentarioService, Autenticacion) {
this.enviado = false;
this.modal = $uibModalInstance;
this.postulante = postulante;
this.usuario = Autenticacion.obtenerUsuarioActual();
this.comentarioSeleccionado = {fk_postulante: this.postulante._id,fk_usuario: this.usuario._id};
this.service = comentarioService;
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.service.crearComentario(this.comentarioSeleccionado)
.then(comentario=> {
this.usuario.Comentario = comentario;
this.postulante.Comentarios.push(this.usuario);
this.modal.close(comentario)
})
.catch(err => {
this.errores.otros = err.data.message; // TODO
});
}
}
}
angular.module('moduloPersonalApp')
.controller('ComentariosCrearModalCtrl', ComentariosCrearModalController);
})();
'use strict';
(()=> {
class ComentariosEditarModalController {
constructor($uibModalInstance, comentarista, comentarioService, Autenticacion) {
this.enviado = false;
this.errores = {};
this.modal = $uibModalInstance;
this.comentarista = comentarista;
this.usuario = Autenticacion.obtenerUsuarioActual();
this.service = comentarioService;
this.comentarioSeleccionado = Object.assign({}, this.comentarista.Comentario);
console.log(this.comentarista);
console.log(this.comentarioSeleccionado);
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.service.editarComentario(this.comentarioSeleccionado._id, {contenido: this.comentarioSeleccionado.contenido})
.then(comentario=> {
this.comentarista.Comentario = Object.assign({}, comentario);
this.modal.close(comentario)
})
.catch(err => {
this.errores.otros = err.data.message; // TODO
});
}
}
}
angular.module('moduloPersonalApp')
.controller('ComentariosEditarModalCtrl', ComentariosEditarModalController);
})();
<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">Comentario</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-10">
<label>Creador</label> {{vm.usuario.nombreCompleto}}
</div>
<div class="col-md-10">
<label>Contenido</label>
<div class="">
<textarea type="text" name="contenido" class="form-control " ng-model="vm.comentarioSeleccionado.contenido"
required></textarea>
<p class="help-block" ng-show="form.contenido.$error.required && vm.enviado">
Ingrese el contenido del comentario
</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.contenido.$dirty">
Guardar
</button>
<button class="btn btn-default" type="button" ng-click="vm.modal.dismiss()">Cancelar</button>
</div>
</form>
<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>
<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">
<option ng-selected="tiposDato.propiedad == modal.modelo.propiedad" 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 >
</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>
......@@ -26,12 +26,14 @@
eliminarDato(id) {
return this.resource.remove({id: id}).$promise;
}
nuevoDatoPostulante(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;
}
}
......
'use strict';
(()=> {
class DatoPostulanteCrearModalController {
constructor($uibModalInstance, postulante, tipoDatoService, datoPostulanteService) {
this.enviado = false;
this.modal = $uibModalInstance;
this.postulante = postulante;
this.datoPostulante = {fk_postulante: this.postulante._id}
this.service = datoPostulanteService;
tipoDatoService.getTiposDato().then(tiposDato=> {
this.tiposDato = tiposDato;
this.tipoDatoSeleccionado = {};
})
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.datoPostulante.propiedad = this.tipoDatoSeleccionado.propiedad;
this.service.crearDatoPostulante(this.datoPostulante)
.then(datoPostulante=> {
this.tipoDatoSeleccionado.DatoPostulante = datoPostulante;
this.postulante.Datos.push(this.tipoDatoSeleccionado);
this.modal.close(datoPostulante)
})
.catch(err => {
this.errores.otros = err.data.message; // TODO
});
}
}
}
angular.module('moduloPersonalApp')
.controller('DatoPostulanteCrearModalCtrl', DatoPostulanteCrearModalController)
})();
'use strict';
(()=> {
class DatoPostulanteEditarModalController {
constructor($uibModalInstance, parametro, tipoDatoService, datoPostulanteService) {
this.errores = {};
this.enviado = false;
this.modal = $uibModalInstance;
this.datoPostulante = Object.assign({}, parametro.tipoDato.DatoPostulante)
this.tipoDato = parametro.tipoDato;
this.service = datoPostulanteService;
tipoDatoService.getTiposDato().then(tiposDato=> {
this.tiposDato = tiposDato;
this.tipoDatoSeleccionado = tiposDato.rows.find(x=>x.propiedad === this.datoPostulante.propiedad);
})
}
guardar(form) {
this.enviado = true;
if (form.$valid) {
this.service.editarDatoPostulante(this.datoPostulante._id,{
propiedad: this.tipoDatoSeleccionado.propiedad,
valor: this.datoPostulante.valor
})
.then(datoPostulante=> {
this.tipoDatoSeleccionado.DatoPostulante = datoPostulante;
this.tipoDato = Object.assign(this.tipoDato,this.tipoDatoSeleccionado);
this.modal.close(datoPostulante)
})
.catch(err => {
this.errores.otros = err.data.message; //TODO
});
}
}
}
angular.module('moduloPersonalApp')
.controller('DatoPostulanteEditarModalCtrl', DatoPostulanteEditarModalController)
})();
<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">Datos</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-10">
<label>Dato</label>
<div class="">
<select class="form-control" name="tiposDato" ng-model="vm.tipoDatoSeleccionado"
ng-options="tDato as tDato.nombre for tDato in vm.tiposDato.rows" required>
</select>
</div>
<p class="help-block" ng-show="form.tiposDato.$error.required && vm.enviado">
Seleccione un tipo de dato
</p>
</div>
<div class="col-md-10">
<label>Valor</label>
<div class="">
<textarea type="text" name="valor" class="form-control " ng-model="vm.datoPostulante.valor"
required></textarea>
<p class="help-block" ng-show="form.valor.$error.required && vm.enviado">
Ingrese el dato acorde al tipo seleccionado
</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.tiposDato.$dirty ||form.valor.$dirty)">
Guardar
</button>
<button class="btn btn-default" type="button" ng-click="vm.modal.dismiss()">Cancelar</button>
</div>
</form>
'use strict';
(()=> {
class PostulanteCrearModalController {
class PostulacionesCrearModalController {
constructor($uibModalInstance, postulante, cargoService, postulacionService) {
this.enviado = false;
this.errores={};
this.modal = $uibModalInstance;
this.postulante = postulante;
this.postulacion = {fk_postulante: this.postulante._id};
......@@ -20,14 +21,16 @@
this.postulacion.fk_cargo = this.cargoSeleccionado._id;
this.service.crearPostulacion(this.postulacion)
.then(postulacion=> {
this.cargoSeleccionado.Postulacion = postulacion;
this.postulante.Postulaciones.push(this.cargoSeleccionado);
this.modal.close(postulacion)
})
.catch(err => {
this.errores.otros = err.message;
this.errores.otros = err.data.message; // TODO
});
}
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesCrearModalCtrl', PostulanteCrearModalController);
.controller('PostulacionesCrearModalCtrl', PostulacionesCrearModalController);
})();
'use strict';
(()=> {
class PostulanteEditarModalController {
constructor($uibModalInstance, parametro, cargoService, postulacionService) {
class PostulacionesEditarModalController {
constructor($uibModalInstance, cargo, cargoService, postulacionService) {
this.errores = {};
this.enviado = false;
this.modal = $uibModalInstance;
this.postulacion = Object.assign({}, parametro.cargo.Postulacion);
this.postulacion = Object.assign({}, cargo.Postulacion);
this.cargo = cargo;
this.service = postulacionService;
cargoService.getCargos().then(cargos => {
this.cargos = cargos;
......@@ -21,7 +23,8 @@
presentacion: this.postulacion.presentacion
})
.then(postulacion=> {
console.log(postulacion);
this.cargoSeleccionado.Postulacion = postulacion;
this.cargo = Object.assign(this.cargo, this.cargoSeleccionado);
this.modal.close(postulacion)
})
.catch(err => {
......@@ -31,5 +34,5 @@
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesEditarModalCtrl', PostulanteEditarModalController);
.controller('PostulacionesEditarModalCtrl', PostulacionesEditarModalController);
})();
......@@ -5,9 +5,9 @@
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-10">
<div class="col-md-10">
<label>Cargos</label>
<div class="input-group">
<div class="">
<select class="form-control" name="cargos" ng-model="vm.cargoSeleccionado"
ng-options="crg as crg.nombre for crg in vm.cargos.rows" required>
</select>
......@@ -16,9 +16,9 @@
</p>
</div>
</div>
<div class="col-md-12">
<div class="col-md-10">
<label>Presentación</label>
<div class="input-group">
<div class="">
<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">
......
......@@ -45,6 +45,10 @@
editarPostulacion(id, postulacion) {
return this.resource.update({id: id}, postulacion).$promise;
}
eliminarPostulacion(id){
return this.resource.remove({id:id}).$promise;
}
}
angular.module('moduloPersonalApp')
.service('postulacionService', PostulacionService);
......
......@@ -2,7 +2,7 @@
(()=> {
class PostulanteEditarController {
constructor($stateParams, postulanteService, datoPostulanteService, tipoDatoService, $uibModal, Modal, tagService, tagPostulanteService) {
constructor($stateParams, postulanteService, datoPostulanteService, tipoDatoService, $uibModal, Modal, tagService, tagPostulanteService, postulacionService, comentarioService) {
this.errores = {}; // lista de errores
this.postulanteEnviado = false; // se refiere a si se intento enviar el formulario del postulante
this.Modal = Modal;
......@@ -12,6 +12,8 @@
this.tipoDatoService = tipoDatoService;
this.tagService = tagService;
this.tagPostulanteService = tagPostulanteService;
this.postulacionService = postulacionService;
this.comentarioService = comentarioService;
this.id = $stateParams.postulanteId;
this.tags = [];
this.service.getPostulante(this.id).then(postulante=> {
......@@ -20,6 +22,7 @@
});
}
//region datos del postulante
eliminarDato(dato) {
this.Modal.confirm.eliminar(dato => {
this.datoPostulanteService.eliminarDato(dato.DatoPostulante._id)
......@@ -29,54 +32,31 @@
})(dato.nombre, dato);
}
editarDato(dato) {
this.tipoDatoService.getTiposDato().then(tiposDato=> {
dato.tiposDato = tiposDato;
console.log(tiposDato);
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);
});
editarDato(tipoDato) {
this.modal.open({
templateUrl: 'app/datosPostulantes/modals/datosPostulantes.modal.html',
controller: 'DatoPostulanteEditarModalCtrl',
controllerAs: 'vm',
resolve: {
parametro: {postulante: this.postulante, tipoDato: tipoDato}
}
})
}
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);
});
this.modal.open({
templateUrl: 'app/datosPostulantes/modals/datosPostulantes.modal.html',
controller: 'DatoPostulanteCrearModalCtrl',
controllerAs: 'vm',
resolve: {
postulante: this.postulante
}
})
}
//endregion
//region postulante
guardarPostulante(form, campo) {
this.enviado = true;
if (form.$valid) {
......@@ -92,13 +72,16 @@
}
}
//endregion
//region postulaciones
editarPostulacion(cargo) {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
controller: 'PostulantesEditarModalCtrl',
controller: 'PostulacionesEditarModalCtrl',
controllerAs: 'vm',
resolve: {
parametro: {postulante: this.postulante, cargo: cargo}
cargo: cargo
}
})
}
......@@ -106,7 +89,7 @@
crearPostulacion() {
this.modal.open({
templateUrl: 'app/postulaciones/modals/postulaciones.editar.modal.html',
controller: 'PostulantesCrearModalCtrl',
controller: 'PostulacionesCrearModalCtrl',
controllerAs: 'vm',
resolve: {
postulante: this.postulante
......@@ -114,6 +97,18 @@
})
}
eliminarPostulacion(cargo) {
this.Modal.confirm.eliminar(cargo => {
this.postulacionService.eliminarPostulacion(cargo.Postulacion._id)
.then(()=> {
this.postulante.Postulaciones.splice(this.postulante.Postulaciones.indexOf(cargo), 1);
})
})(cargo.nombre, cargo);
}
//endregion
//region tags
autoCompletarTags(query) {
console.log(this.tags)
if (this.tags.length == 0) {
......@@ -127,11 +122,21 @@
adicionarTag(tag) {
if (tag._id) {
this.tagPostulanteService.crearTagPostulante({fk_tag: tag._id, fk_postulante: this.id});
this.tagPostulanteService.crearTagPostulante({fk_tag: tag._id, fk_postulante: this.id}).then(tagPostulante=> {
tag.TagPostulante = tagPostulante;
return true;
});
}
else {
this.tagService.crearTag(tag).then(tag=> {
this.tagPostulanteService.crearTagPostulante({fk_tag: tag._id, fk_postulante: this.id});
this.tagService.crearTag(tag).then(nuevoTag=> {
this.tagPostulanteService.crearTagPostulante({
fk_tag: nuevoTag._id,
fk_postulante: this.id
}).then(tagPostulante=> {
tag.TagPostulante = tagPostulante;
this.tags.rows.push(tag);
return true;
});
})
}
}
......@@ -139,6 +144,42 @@
quitarTag(tag) {
this.tagPostulanteService.eliminarTagPostulante(tag.TagPostulante._id);
}
//endregion
//region comentarios
crearComentario() {
this.modal.open({
templateUrl: 'app/comentarios/modals/comentarios.modal.html',
controller: 'ComentariosCrearModalCtrl',
controllerAs: 'vm',
resolve: {
postulante: this.postulante
}
})
}
editarComentario(comentarista) {
this.modal.open({
templateUrl: 'app/comentarios/modals/comentarios.modal.html',
controller: 'ComentariosEditarModalCtrl',
controllerAs: 'vm',
resolve: {
comentarista: comentarista
}
})
}
eliminarComentario(comentarista) {
this.Modal.confirm.eliminar(comentarista => {
this.comentarioService.eliminarComentario(comentarista.Comentario._id)
.then(()=> {
this.postulante.Comentarios.splice(this.postulante.Comentarios.indexOf(comentarista), 1);
})
})('el comentario de: ' + comentarista.nombreCompleto, comentarista);
}
//endregion
}
angular.module('moduloPersonalApp')
.controller('PostulantesEditarCtrl', PostulanteEditarController);
......
......@@ -62,14 +62,12 @@
<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">
<div class="input-group-btn">
<button type="button" class="btn btn-info" ng-click="vm.editarDato(dato)"><i
class="fa fa-edit"></i></button>
</span>
<span class="input-group-btn">
<button type="button" class="btn btn-danger" ng-click="vm.eliminarDato(dato)"><i
class="fa fa-trash"></i></button>
</span>
</div>
</div>
</div>
</div>
......@@ -95,10 +93,10 @@
</uib-accordion-group>
<uib-accordion-group heading="Tags" class="panel-primary" is-open="true">
<div class="col-md-10">
<tags-input ng-model="vm.postulante.Tags" name="tags" placeholder="Adicionar Tags" display-property="nombre"
min-length="2" on-tag-added="vm.adicionarTag($tag)" on-tag-removed="vm.quitarTag($tag)">
<auto-complete source="vm.autoCompletarTags($query)" min-length="2"></auto-complete>
</tags-input>
<tags-input ng-model="vm.postulante.Tags" name="tags" placeholder="Adicionar Tags" display-property="nombre"
min-length="2" on-tag-adding="vm.adicionarTag($tag)" on-tag-removed="vm.quitarTag($tag)">
<auto-complete source="vm.autoCompletarTags($query)" min-length="2"></auto-complete>
</tags-input>
</div>
</uib-accordion-group>
<uib-accordion-group heading="Postulaciones" class="panel-primary" is-open="true">
......@@ -137,6 +135,38 @@
</div>
</div>
</uib-accordion-group>
<uib-accordion-group heading="Comentarios" class="panel-primary" is-open="true">
<div class="col-md-12">
<div class="row">
<div class="col-md-10">
<div class="list-group">
<div class="list-group-item" ng-repeat="comentarista in vm.postulante.Comentarios">
<span class="pull-right">
<button type="button" class="btn btn-info" ng-click="vm.editarComentario(comentarista)"><i
class="fa fa-edit"></i></button>
<button type="button" class="btn btn-danger" ng-click="vm.eliminarComentario(comentarista)"><i
class="fa fa-trash"></i></button>
</span>
<h3 class="list-group-item-heading">{{comentarista.nombreCompleto}}
<small> dijo:</small>
</h3>
<p class="list-group-item-text">{{comentarista.Comentario.contenido}}</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10">