Commit 3045b71e authored by D’jalmar Gutierrez Titirico's avatar D’jalmar Gutierrez Titirico 🚲

Se añadio la funcionalidad de añadir/remover/editar comentarios a los postulantes

Se quito la referencia a google analytics
	modified:   client/index.html
Se modifico las relaciones entre los usuarios y los postulantes respecto a los comentarios
Se esta tomando como una relacion n:m y no como relaciones separadas 1:n, 1:m
	modified:   server/sqldb/index.js
parent 2378ae93
......@@ -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>
'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};
......@@ -31,5 +32,5 @@
}
}
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.cargo = parametro.cargo;
this.postulacion = Object.assign({}, cargo.Postulacion);
this.cargo = cargo;
this.service = postulacionService;
cargoService.getCargos().then(cargos => {
this.cargos = cargos;
......@@ -34,5 +34,5 @@
}
}
angular.module('moduloPersonalApp')
.controller('PostulantesEditarModalCtrl', PostulanteEditarModalController);
.controller('PostulacionesEditarModalCtrl', PostulacionesEditarModalController);
})();
......@@ -2,7 +2,7 @@
(()=> {
class PostulanteEditarController {
constructor($stateParams, postulanteService, datoPostulanteService, tipoDatoService, $uibModal, Modal, tagService, tagPostulanteService,postulacionService) {
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;
......@@ -13,6 +13,7 @@
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=> {
......@@ -21,7 +22,7 @@
});
}
//region Datos del postulante
//region datos del postulante
eliminarDato(dato) {
this.Modal.confirm.eliminar(dato => {
this.datoPostulanteService.eliminarDato(dato.DatoPostulante._id)
......@@ -77,10 +78,10 @@
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
}
})
}
......@@ -88,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
......@@ -96,7 +97,7 @@
})
}
eliminarPostulacion(cargo){
eliminarPostulacion(cargo) {
this.Modal.confirm.eliminar(cargo => {
this.postulacionService.eliminarPostulacion(cargo.Postulacion._id)
.then(()=> {
......@@ -104,6 +105,7 @@
})
})(cargo.nombre, cargo);
}
//endregion
//region tags
......@@ -144,6 +146,40 @@
}
//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);
......
......@@ -93,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-adding="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">
......@@ -135,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">
<div class="pull-right">
<button class="btn btn-success" type="button" ng-click="vm.crearComentario()">
<i class="fa fa-plus"></i>
Nuevo Comentario
</button>
</div>
</div>
</div>
</div>
</uib-accordion-group>
</uib-accordion>
</div>
</div>
......@@ -14,7 +14,7 @@
}
getPostulante(id) {
return this.resource.get({id: id, incluye: ['Datos','Postulaciones','Tags']}).$promise;
return this.resource.get({id: id, incluye: ['Datos','Postulaciones','Tags','Comentarios']}).$promise;
}
crearPostulante(postulante) {
......
......@@ -68,10 +68,12 @@
<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.controller.js"></script>
<script src="app/postulantes/editar/postulantes.editar.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>
<script src="app/comentarios/modals/comentarios.crear.modal.controller.js"></script>
<script src="app/comentarios/modals/comentarios.editar.modal.controller.js"></script>
<script src="app/cuenta/cuenta.js"></script>
<script src="app/cuenta/iniciarSesion.controller.js"></script>
<script src="app/datosPostulantes/datosPostulantes.controller.js"></script>
......@@ -87,8 +89,8 @@
<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/cargos/cargos.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>
<script src="app/tags/tags.controller.js"></script>
......
......@@ -12,7 +12,7 @@ var rolAdministrador = config.userRoles[2];
router.get('/',autenticacion.estaAutenticado(), formatearRuta, controller.index);
router.get('/:id', autenticacion.estaAutenticado(), controller.show);
router.post('/', autenticacion.tieneRol(rolAdministrador), controller.create);
router.put('/:id',autenticacion.tieneRol(rolAdministrador), controller.update);
router.put('/:id',autenticacion.tieneRol(rolAdministrador), controller.update); // TODO validar que el creador del comentario sea el que esta modificando
router.patch('/:id',autenticacion.tieneRol(rolAdministrador), controller.update);
router.delete('/:id',autenticacion.tieneRol(rolAdministrador), controller.destroy);
......
......@@ -16,6 +16,7 @@ export function yo(req, res, next) {
})
.spread((usuario, creado)=> {
res.json({
_id:usuario._id,
nombreUsuario: usuario.nombreUsuario,
correo: usuario.correo,
nombreCompleto: usuario.nombreCompleto,
......
......@@ -36,6 +36,8 @@ function obtenerDependencia(nombreDependencia) {
return {model: db.Cargo, as: nombreDependencia}
case 'Comentario':
return {model: db.Comentario, as: nombreDependencia}
case 'Comentarios':
return {model: db.Usuario, as: nombreDependencia}
case 'DatoPostulante':
return {model: db.DatoPostulante, as: nombreDependencia}
case 'Postulacion':
......
......@@ -53,25 +53,16 @@ db.Cargo.belongsToMany(db.Postulante, {
through: {model: db.Postulacion, unique: false}
});
//relacion n-1 entre Comentario y Postulante
db.Postulante.hasMany(db.Comentario, {
//relacion n-1 entre Usuario y Postulante (comentarios)
db.Postulante.belongsToMany(db.Usuario, {
foreignKey: 'fk_postulante',
as: 'Comentarios'
as: 'Comentarios',
through: {model: db.Comentario, unique: false}
});
db.Comentario.belongsTo(db.Postulante, {
foreignKey: 'fk_postulante',
as: 'Postulante'
});
//relacion n-1 entre Comentario y Usuario
db.Usuario.hasMany(db.Comentario,{
foreignKey:'fk_usuario',
as:'Comentarios'
});
db.Comentario.belongsTo(db.Usuario,{
foreignKey:'fk_usuario',
as: 'Usuario'
db.Usuario.belongsToMany(db.Postulante, {
foreignKey: 'fk_usuario',
as: 'Comentarios',
through: {model: db.Comentario, unique: false}
});
// relacion n-m entre Postulante y Tag
......@@ -100,9 +91,9 @@ db.DatoPostulante.belongsTo(db.Postulante, {
as: 'Postulante'
});
db.DatoPostulante.belongsTo(db.TipoDato,{
foreignKey:'propiedad',
as:'TipoDato'
db.DatoPostulante.belongsTo(db.TipoDato, {
foreignKey: 'propiedad',
as: 'TipoDato'
});
db.TagPostulante.belongsTo(db.Postulante, {
foreignKey: 'fk_postulante',
......@@ -112,6 +103,14 @@ db.TagPostulante.belongsTo(db.Tag, {
foreignKey: 'fk_tag',
as: 'Tag'
});
db.Comentario.belongsTo(db.Postulante,{
foreignKey:'fk_postulante',
as:'Postulante'
});
db.Comentario.belongsTo(db.Usuario,{
foreignKey:'fk_usuario',
as:'Usuario'
});
export default db;
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