From 54e3598fa57f5354f3e2c9e47c22a11fd8d1ab6a Mon Sep 17 00:00:00 2001
From: Billy Larru <blarru.ti@sacooliveros.edu.pe>
Date: Tue, 11 Sep 2018 17:31:26 -0500
Subject: [PATCH] [ADD programacion de seminario]

---
 src/main/webapp/js/general.js                                                               |   3 +++
 src/main/webapp/js/pages/programacion_seminario.js                                          | 363 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/webapp/vistas/modals/docentesporhoras/programacionSeminario/registroSeminario.jspf |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/main/webapp/vistas/programacionSeminario.jsp                                            |  68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 4 files changed, 479 insertions(+), 2 deletions(-)
 create mode 100644 src/main/webapp/js/pages/programacion_seminario.js
 create mode 100644 src/main/webapp/vistas/modals/docentesporhoras/programacionSeminario/registroSeminario.jspf

diff --git a/src/main/webapp/js/general.js b/src/main/webapp/js/general.js
index cbb4b8b..024c577 100644
--- a/src/main/webapp/js/general.js
+++ b/src/main/webapp/js/general.js
@@ -37,6 +37,9 @@ const URI_ADMINISTRATIVOS_TOLERANCIA_INDIVIDUAL = "toleranciasIndividuales";
 const URI_ADMINISTRATIVOS_ESTADO_TOLERANCIA_INDIVIDUAL = "estadoTolerancias";
 const URI_ADMINISTRATIVOS_VACACIONES_INDIVIDUAL = "vacacionesAdministrativasIndividuales";
 const URI_CARGOS = "cargoLaboral";
+const URI_DOCENTES_PROGRAMACION_SEMINARIO = "programacionSeminario";
+const URI_DOCENTES_TIPO_SEMINARIO = "tipoSeminario";
+const URI_DOCENTES_GRUPO_ACADEMICO = "grupoAcademico";
 //</editor-fold>
 
 
diff --git a/src/main/webapp/js/pages/programacion_seminario.js b/src/main/webapp/js/pages/programacion_seminario.js
new file mode 100644
index 0000000..a68fa84
--- /dev/null
+++ b/src/main/webapp/js/pages/programacion_seminario.js
@@ -0,0 +1,363 @@
+function getColumns() {
+	let columns = [
+		{
+			title: `N°`,
+			data: `id`,
+			className: 'text-center'
+		},
+		{
+			title: `APELLIDOS Y NOMBRES`,
+			data: null,
+			render: (data) => {
+				let nombresCompletos;
+				let nombres = data.trabajador_nombres;
+				let apellidos = data.trabajador_apellidos;
+				nombresCompletos = `${apellidos} ${nombres}`;
+
+				return nombresCompletos;
+			}
+		},
+		{
+			title: `TIPO`,
+			data: `tiposeminario_descripcion`,
+			className: 'text-center'
+		},
+		{
+			title: `GRUPO ACAD.`.split(" ").join("<br>"),
+			data: `grupoacademico_descripcion`,
+			className: 'text-center'
+		},
+		{
+			title: `FECHA`,
+			data: `fecha_seminario`,
+			className: 'text-center'
+		},
+		{
+			title: `HORA INICIO`,
+			data: `hora_inicio`,
+			className: 'text-center'
+		},
+		{
+			title: `HORA FIN`,
+			data: `hora_fin`,
+			className: 'text-center'
+		},
+		{
+			title: `OBSERVACIÓN`,
+			data: `observacion`,
+			className: 'text-center'
+		},
+		{
+			title: `ESTADO`,
+			data: `estado`,
+			className: 'text-center',
+			render: (data) => {
+				let label = "";
+				let text = "";
+
+				switch (data) {
+					case 0:
+						label = "label bg-purple";
+						text = "PENDIENTE";
+						break;
+					case 1:
+						label = "label label-success";
+						text = "ACEPTADO";
+						break;
+					case 2:
+						label = "label label-danger";
+						text = "RECHAZADO";
+						break;
+				}
+
+				return `<span class="${label}">${text}</span>`;
+			}
+		},
+		{
+			title: `ACCIONES`,
+			data: null,
+			className: 'text-center',
+			render: (data) => {
+				let acciones = "";
+				let verdetalle = "";
+				let editar = "";
+				let eliminar = "";
+				let aceptar = "";
+				let rechazar = "";
+
+				if (data.estado === 1) {
+					eliminar = `<span style="cursor: pointer"><i class="eliminar fa fa-power-off text-danger-700"></i>&nbsp;&nbsp;</span>`;
+				} else {
+					eliminar = `<span style="cursor: pointer"><i class="eliminar fa fa-power-off text-success-700"></i>&nbsp;&nbsp;</span>`;
+				}
+
+				aceptar = `<span style="cursor: pointer"><i class="aceptar icon-checkmark4 text-success-700"></i>&nbsp;&nbsp;</span>`;
+				rechazar = `<span style="cursor: pointer"><i class="rechazar icon-cross2 text-danger-700"></i>&nbsp;&nbsp;</span>`;
+				verdetalle = `<span style="cursor: pointer"><i class="verdetalle icon-three-bars text-primary-700"></i>&nbsp;&nbsp;</span>`;
+				editar = `<span style="cursor: pointer"><i class="editar icon-pencil text-slate-800"></i>&nbsp;&nbsp;</span>`;
+
+
+
+				acciones = aceptar + rechazar + verdetalle + editar + eliminar;
+				return acciones;
+			}
+		},
+	];
+
+	return columns;
+}
+
+const listarPersonal = (selectorName) => {
+	initSelect2(selectorName, baseURLRest + URI_TRABAJADORES, {title: "nombresapellidos", subtitle: "documentoidentidad"});
+};
+
+const listarSedes = (selectorName) => {
+	ajaxWebService.get(URI_SEDES).then((result) => {
+		let sedes = result.data;
+		sedes = _.orderBy(sedes, s => s.descripcion);
+		let html = `<option value="">[TODOS]</option>`;
+		sedes.forEach(sede => html += `<option value="${sede.codigo}">${sede.descripcion}</option>`);
+		$(`${selectorName}`).html(html);
+		$(selectorName).select2();
+	});
+};
+
+const mostrarModalAprobarSeminario = (data) => {
+	let {id, estado} = data;
+	let titulo = "";
+	let textoConfirmacion = ""
+	let tituloOperacion = "";
+	if (estado == 0) {
+		titulo = 'Está seguro de aprobar el seminario?';
+		textoConfirmacion = 'Sí, aprobar!';
+		tituloOperacion = '¡Aprobado exitosamente!';
+		estado = 1;
+	}
+
+	swal({
+		title: titulo,
+		text: "",
+		type: 'warning',
+		showCancelButton: true,
+		confirmButtonColor: '#3085d6',
+		cancelButtonColor: '#d33',
+		confirmButtonText: textoConfirmacion
+	}).then((result) => {
+		if (result.value) {
+			ajaxWebService.patch(`${URI_DOCENTES_PROGRAMACION_SEMINARIO}/${id}`, {estado}).then((response) => {
+				if (response.status) {
+					swal({
+						type: 'success',
+						title: tituloOperacion,
+						showConfirmButton: false,
+						timer: 1500
+					});
+					listarSeminariosProgramados();
+				}
+			});
+		}
+	});
+};
+
+
+const mostrarModalRechazarSeminario = (data) => {
+	let {id, estado} = data;
+	let titulo = "";
+	let textoConfirmacion = ""
+	let tituloOperacion = "";
+	if (estado == 0) {
+		titulo = 'Está seguro de desaaprobar el seminario?';
+		textoConfirmacion = 'Sí, desaprobar!';
+		tituloOperacion = '¡Desaprobado exitosamente!';
+		estado = 2;
+	}
+
+	swal({
+		title: titulo,
+		text: "",
+		type: 'warning',
+		showCancelButton: true,
+		confirmButtonColor: '#3085d6',
+		cancelButtonColor: '#d33',
+		confirmButtonText: textoConfirmacion
+	}).then((result) => {
+		if (result.value) {
+			ajaxWebService.patch(`${URI_DOCENTES_PROGRAMACION_SEMINARIO}/${id}`, {estado}).then((response) => {
+				if (response.status) {
+					swal({
+						type: 'success',
+						title: tituloOperacion,
+						showConfirmButton: false,
+						timer: 1500
+					});
+					listarSeminariosProgramados();
+				}
+			});
+		}
+	});
+};
+
+function listarSeminariosProgramados(objParams = {}){
+	ajaxWebService.get(URI_DOCENTES_PROGRAMACION_SEMINARIO, objParams).then((response) => {
+		let columns = getColumns();
+
+		let wrapsNameDatatable = `divDatatable`;
+		let classNameForDatatable = `display table table-bordered`;
+
+		makeDatatable(
+			wrapsNameDatatable,
+			{
+				data: response.data,
+				columns,
+			},
+			classNameForDatatable,
+			).then((nodes) => {
+			nodes.container
+				.off()
+				.on("click", ".verdetalle", function () {
+					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
+					mostrarModalVerDetalleTolerancia(data);
+				})
+				.on("click", ".editar", function () {
+					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
+					mostrarModalEditarTolerancia(data);
+				})
+				.on("click", ".eliminar", function () {
+					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
+					mostrarModalEliminarTolerancia(data);
+				})
+				.on("click", ".aceptar", function () {
+					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
+					mostrarModalAprobarSeminario(data);
+				})
+				.on("click", ".rechazar", function () {
+					let data = nodes.datatable.DataTable().row($(this).parents("tr")).data();
+					mostrarModalRechazarSeminario(data);
+				});
+		});
+	});
+}
+
+const aplicarFiltro = () => {
+
+};
+
+const listarTipoSeminario = (nodeIdentifier) => {
+	ajaxWebService.get(URI_DOCENTES_TIPO_SEMINARIO).then((response) => {
+		let tiposSeminario = response.data;
+		tiposSeminario = _.orderBy(tiposSeminario, s => s.descripcion);
+		let html = `<option value="">[SELECCIONE]</option>`;
+		html += tiposSeminario.map(tipoSeminario => `<option value="${tipoSeminario.id}">${tipoSeminario.descripcion}</option>`);
+		$(nodeIdentifier).html(html);
+	});
+};
+
+const listarGrupoAcademico = (nodeIdentifier) => {
+	ajaxWebService.get(URI_DOCENTES_GRUPO_ACADEMICO).then((response) => {
+		let gruposacademicos = response.data;
+		gruposacademicos = _.orderBy(gruposacademicos, grupoAcademico => grupoAcademico.descripcion);
+		let html = `<option value="">[SELECCIONE]</option>`;
+		html += gruposacademicos.map(grupoAcademico => `<option value="${grupoAcademico.id}">${grupoAcademico.descripcion}</option>`);
+		$(nodeIdentifier).html(html);
+	});
+};
+
+
+const inicializarInputsModalNuevoSeminario = () => {
+	listarPersonal("#cboDocentes");
+	listarTipoSeminario("#cboTipoSeminario");
+	listarGrupoAcademico("#cboGrupoAcademico");
+	initDatePicker("#dpFechaSeminario");
+};
+
+const registrarSeminario = () => {
+	let trabajador = $("#cboDocentes").select2('data')[0];
+	let trabajador_id = trabajador.id;
+	let trabajador_apellidos = trabajador.apellidos;
+	let trabajador_nombres = trabajador.nombres;
+	let trabajador_documentoidentidad = "";
+	let tiposeminario_id = $("#cboTipoSeminario").val();
+	let tiposeminario_descripcion = $("#cboTipoSeminario option:selected").text();
+	let grupoacademico_id = $("#cboGrupoAcademico").val();
+	let grupoacademico_descripcion = $("#cboGrupoAcademico option:selected").text();
+	let fecha_seminario = $("#dpFechaSeminario").val();
+	let hora_inicio = $("#txtHoraInicio").val();
+	let hora_fin = $("#txtHoraFin").val();
+	let observacion = $("#txtObservacion").val();
+
+	let params = {
+		trabajador_id,
+		trabajador_apellidos,
+		trabajador_nombres,
+		trabajador_documentoidentidad,
+		tiposeminario_id,
+		tiposeminario_descripcion,
+		grupoacademico_id,
+		grupoacademico_descripcion,
+		fecha_seminario,
+		hora_inicio,
+		hora_fin,
+		observacion,
+		estado: 0
+	};
+
+	ajaxWebService.post(URI_DOCENTES_PROGRAMACION_SEMINARIO, params)
+		.then((response) => {
+			if (response.status) {
+				swal({
+					type: 'success',
+					title: '¡Seminario registrado exitosamente!',
+					showConfirmButton: false,
+					timer: 1500
+				});
+				listarSeminariosProgramados();
+			} else {
+				swal({
+					type: 'success',
+					title: '¡No ha sido posible registrar el seminario!',
+					showConfirmButton: false,
+					timer: 1500
+				})
+			}
+
+		});
+
+
+
+};
+
+const mostrarModalNuevoSeminario = () => {
+	ajaxModal.get("docentesporhoras/programacionSeminario/registroSeminario.jspf").then((response) => {
+		swal({
+			title: '<strong>Registro de seminario</strong>',
+			html: response.data,
+			showCloseButton: true,
+			showCancelButton: true,
+			focusConfirm: false,
+			confirmButtonText: '<i class="icon-checkmark2"></i> Registrar seminario',
+			confirmButtonAriaLabel: 'Registrar seminario',
+			cancelButtonText: '<i class="icon-cross3"></i>Cancelar',
+			cancelButtonAriaLabel: 'Thumbs down',
+			width: '30%',
+			customClass: 'swal2-overflow',
+			onOpen: () => {
+				inicializarInputsModalNuevoSeminario();
+			}
+		}).then((result) => {
+			if (result.value) {
+				registrarSeminario();
+			}
+		});
+	});
+};
+
+
+
+$(document).ready(function () {
+	$("#btnNuevoSeminario").click(mostrarModalNuevoSeminario);
+	$("#btnMostrarTodo").click(listarSeminariosProgramados);
+	$("#btnAplicarFiltro").click(aplicarFiltro);
+	listarPersonal("#cboDocenteFiltro");
+	listarSedes("#cboSedesFiltro");
+	initDatePicker("#dpFechaInicioFiltro", "#dpFechaFinFiltro");
+});
\ No newline at end of file
diff --git a/src/main/webapp/vistas/modals/docentesporhoras/programacionSeminario/registroSeminario.jspf b/src/main/webapp/vistas/modals/docentesporhoras/programacionSeminario/registroSeminario.jspf
new file mode 100644
index 0000000..789901f
--- /dev/null
+++ b/src/main/webapp/vistas/modals/docentesporhoras/programacionSeminario/registroSeminario.jspf
@@ -0,0 +1,47 @@
+<form id="frm" onsubmit="return false;" autocomplete="off">
+
+	<div class="row">
+		<div class="form-group col-md-8">
+			<label>Docente</label>
+			<select id="cboDocentes" class="select-search form-control"></select>
+		</div>
+		<div class="form-group col-md-4">
+			<label>Tipo de seminario</label>
+			<select id="cboTipoSeminario" class="select-search form-control"></select>
+		</div>
+	</div>
+	<div class="row">
+		<div class="form-group col-md-4">
+			<label>Fecha Seminario</label>
+			<div class="input-group">
+				<span class="input-group-addon"><i class="icon-calendar"></i></span>
+				<input type="text" class="form-control" id="dpFechaSeminario">
+			</div>
+		</div>
+		<div class="form-group col-md-4">
+			<label>Hora inicio</label>
+			<div class="input-group">
+				<span class="input-group-addon"><i class="fa fa-clock-o"></i></span>
+				<input type="time" class="form-control" id="txtHoraInicio">
+			</div>
+		</div>
+		<div class="form-group col-md-4">
+			<label>Hora fin</label>
+			<div class="input-group">
+				<span class="input-group-addon"><i class="fa fa-clock-o"></i></span>
+				<input type="time" class="form-control" id="txtHoraFin">
+			</div>
+		</div>
+
+	</div>
+	<div class="row">
+		<div class="form-group col-md-4">
+			<label>Grupo academico</label>
+			<select id="cboGrupoAcademico" class="select-search form-control"></select>
+		</div>
+		<div class="form-group col-md-8">
+			<label>Observacion</label>
+			<textarea name="txtObservacion" id="txtObservacion" cols="30" rows="4" class="form-control"></textarea>
+		</div>
+	</div>
+</form>
\ No newline at end of file
diff --git a/src/main/webapp/vistas/programacionSeminario.jsp b/src/main/webapp/vistas/programacionSeminario.jsp
index c780207..724a6b9 100644
--- a/src/main/webapp/vistas/programacionSeminario.jsp
+++ b/src/main/webapp/vistas/programacionSeminario.jsp
@@ -6,18 +6,82 @@
 		<%@include file="templates/header.jsp" %>
 		<!--template-core-->
 		<!--css de la pagina-->
-
+		<link href="../css/lib/sweetalert2.min.css" rel="stylesheet" type="text/css"/>
 		<!--css-->
 	</head>
 	<body>
 		<%@include file="templates/header-body.jsp" %>
 		<!--  content -->
+		<div class="col-md-6 col-md-offset-3">
+			<div class="panel panel-primary">
+				<div class="panel-heading">
+					<h5 class="panel-title">Busqueda</h5>
+				</div>
+
+				<div class="panel-body">
+					<div class="row">
+						<div class="col-md-6 form-group">
+							<label>Docente</label>
+							<select class="select-search form-control" id="cboDocenteFiltro">
+							</select>
+						</div>
+						<div class="col-md-6 form-group">
+							<label>Sede</label>
+							<select  id="cboSedesFiltro" class="select-search form-control">
+
+							</select>
+						</div>
+					</div>
 
+					<div class="row">
+						<div class="col-md-6 form-group">
+							<label>Fecha Inicio</label>
+							<div class="input-group">
+								<span class="input-group-addon"><i class="icon-calendar"></i></span>
+								<input type="text" class="form-control" name="dpFechaInicioFiltro" id="dpFechaInicioFiltro">
+							</div>
+						</div>
+						<div class="col-md-6 form-group">
+							<label>Fecha Fin</label>
+							<div class="input-group">
+								<span class="input-group-addon"><i class="icon-calendar"></i></span>
+								<input type="text" class="form-control" name="dpFechaFinFiltro" id="dpFechaFinFiltro">
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="panel-footer">
+					<div class="text-center">
+						<button class="btn btn-primary" id="btnAplicarFiltro"><i class="icon-eye4"></i> Aplicar filtro</button>&nbsp;
+						<button class="btn btn-primary" id="btnMostrarTodo"><i class="icon-eye4"></i> Mostrar Todo</button>&nbsp;
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-md-12">
+			<div class="panel panel-primary card-3" style="margin-top: 30px"> 
+				<div class="panel-heading" style="padding: 8px 15px">
+					<h6 class="panel-title" style="font-size: 15px; font-family: inherit">LISTADO DE SEMINARIOS PROGRAMADOS</h6>
+					<div class="heading-elements">                                                                
+						<button type="button" id="btnNuevoSeminario" class="btn bg-slate border-slate-600 btn-xs"><i class="glyphicon glyphicon-plus"></i>&nbsp; Nuevo seminario</button>
+					</div>
+				</div>
+				<div id="divDatatable">
+				</div>
+			</div>
+		</div>
 		<!-- / content -->
 
 		<%@include file="templates/footer-body.jsp"%>
 		<!--js de la pagina-->
-
+		<script src="../plantilla/assets/js/core/libraries/jquery_ui/widgets.min.js" type="text/javascript"></script>
+		<script src="../plantilla/assets/js/plugins/ui/moment/moment.min.js" type="text/javascript"></script>
+		<script src="../plantilla/assets/js/plugins/pickers/datepicker.js" type="text/javascript"></script>
+		<script src="../js/lib/bootstrap-select.min.js" type="text/javascript"></script>
+		<script src="../plantilla/assets/js/plugins/forms/selects/select2.min.js"></script>
+		<script src="../js/lib/lodash.js" type="text/javascript"></script>
+		<script src="../js/pages/programacion_seminario.js" type="text/javascript"></script>
 		<!--js-->   
 
 	</body>
--
libgit2 0.26.0