<?php
class ActividadesControlador extends Controladores {
/**
* Vista que se encarga de mostrar todos los detalles/datos asociados a
* los registros de Actividades.
* @return HTML Datos e información de Actividades.
*/
function verDetalles() {
$Actividad = PlanesActividades::datosCompletos($this->actividadID);
Vistas::mostrar('planeador', 'actividades/form-ver-detalles', array('Actividad' => $Actividad));
}
/**
* Vista que se encarga de organizar la forma de presentar
* los registros de Actividades al usuario.
* @return HTML Listado de Actividades.
*/
function mostrarActividades() {
Vistas::mostrar('planeador', 'actividades/lst-todos');
}
/**
* Permite mostrar en forma de tabla los registros de Actividades.
* @return HTML Formulario solo con datos inciales o necesarios.
*/
function tablaListado() {
$Actividades = PlanesActividades::todas();
Vistas::mostrar('planeador', 'actividades/tbl-todos',
array( 'Actividades' => $Actividades)
);
}
/**
* Responde con el formulario de Actividades vacio, solo datos necesarios.
* LLama a la función que devuleve el formulario pero
* sin enviarle los datos de Actividades.
* Esta función se crea para poder gestionar el permiso de NUEVO Actividades
* @return HTML Formulario solo con datos inciales o necesarios.
*/
function mostrarFormularioNuevo() {
if(empty($this->ActividadPredefinidasID)){
$this->mostrarSeleccionarTipoActividad();
}else{
$this->mostrarFormulario(null, $this->ActividadPredefinidasID);
}
}
/**
* Entrega la vista desde donde se puede seleccionar un tipo de actividad
* y de esta precargar operaciones para la nueva actividad.
* @return HTML Formulario con los datos de los Tipos de Actividades a seleccionar.
*/
private function mostrarSeleccionarTipoActividad() {
Vistas::mostrar('planeador', 'actividades/form-antes-actividades',
array("TiposActividades" => PlanesTiposActividades::todos())
);
}
/**
* Función que toma los datos enviados y crea un nuevo registro
* @return RespuestasSistema
*/
private function guardarNuevo() {
$codigoActividad = Consecutivos::usar('ACTIVIDADES', TRUE);
$actividadID = PlanesActividades::guardar($this->accionID,$this->planID, $this->tipoActividadID, $codigoActividad, $this->actividadTITULO, $this->actividadDESCRIPCION, $this->actividadJUSTIFICACION, $this->actividadLOGROESPERADO, $this->actividadLUGAR, $this->actividadFCHINICIO, $this->actividadFCHFINAL, $this->actividadINGRESO, $this->cargoID, $this->metaID);
if ($actividadID):
if($this->agregarSolicitud($actividadID) and $this->agregarOperacion($actividadID)){
echo RespuestasSistema::exito("Se Guardo la actividad con EXITO", PlanesActividades::datos($actividadID));
}else{
echo RespuestasSistema::error('Hubo un error al procesar alguno de los registros. Verifica los datos, o contacta al centro TICS.');
}
else:
echo RespuestasSistema::fallo("No se pudo CREAR la nueva ACTIVIDAD. Si vuelve a suceder, contacte con el Centro TICS.");
endif;
}
private function crearConsecutivoOperacion($tipoOperacionID){
switch ($tipoOperacionID) {
case '1':
return Consecutivos::usar('TAREAS', 'TAR');
break;
case '2':
return Consecutivos::usar('ADQUISICION', 'COM');
break;
}
}
private function agregarSolicitud($actividadID){
$actividad = PlanesActividades::datos($actividadID);
if(!empty($this->personalSolicitado)):
$n = 0;
if(count($this->personalSolicitado)):
foreach($this->personalSolicitado as $solicitud):
$codigoSolicitud = Consecutivos::usar('SOLICITUDPERSONAL', 'SOLPER');
$solicitudID = SolicitudPersonal::guardar($actividadID, $codigoSolicitud, $this->solicitudDESCRIPCION[$solicitud], $this->solicitudOBSERVACIONES[$solicitud], $this->solicitudNUMSOLICITUD[$solicitud], $this->solicitudTIEMPOESTIMADO[$solicitud]);
if($solicitudID>0 and !empty($solicitudID)):
Notificaciones::paraColaborador(Parametros::valor('JEFETH')->colaboradorID, Notificaciones::INFORMACION , 'SOLICITUD DE PERSONAL', "SE REALIZO UNA SOLICITUD DE PERSONAL PARA LA ACTIVIDAD # ". $actividad->actividadCODIGO . " CON LA FINALIDAD QUE CUMPLA LAS SIGUIENTES FUNCIONES: " . $this->solicitudDESCRIPCION[$solicitud], "mostrarSolicitudPersonal" );
$n++;
endif;
endforeach;
endif;
if(count($this->personalSolicitado)==$n):
return true;
else:
return false;
endif;
endif;
return true;
}
private function agregarOperacion($actividadID){
if(!empty($this->operacionID) and count($this->operacionID)):
$n = 0;
foreach($this->operacionID as $operacion):
$operacionPredefinida = PlanesOperacionesPredefinidas::datos($this->planOperacionPredefinidaID[$operacion]);
$colaborador = Colaboradores::porCargo($operacionPredefinida->claseOperacionCARGOREVISION);
if(empty($this->planOperacionID[$operacion])):
$codigoOperacion = $this->crearConsecutivoOperacion($this->tipoOperacionID[$operacion]);
$operacionID = PlanesOperaciones::guardar($actividadID, $this->tipoOperacionID[$operacion], $this->planOperacionPredefinidaID[$operacion], $codigoOperacion, $this->planOperacionDESCRIPCION[$operacion], $this->planOperacionFCHINICIO[$operacion], $this->planOperacionFCHFINAL[$operacion], $this->planOperacionCOSTO[$operacion], $operacionPredefinida->rubroID, $operacionPredefinida->centroCostosID, $operacionPredefinida->claseOperacionID);
if($this->tipoOperacionID[$operacion] == 2 and $operacionID >0):
Notificaciones::paraColaborador($colaborador->colaboradorID, Notificaciones::OPERACION , 'SOLICITUD DE COMPRA', "SE REALIZO UNA SOLICITUD DE COMPRA PARA LA OPERACIÓN ". $codigoOperacion . " CON LA SIGUIENTE DESCRIPCIÓN: " . $this->planOperacionDESCRIPCION[$operacion], "pendientesDelColaboradorRevisionTecnicaOperacionesPlaneador" );
Notificaciones::paraColaborador(Parametros::valor('JEFEFINANCIERA')->colaboradorID, Notificaciones::INFORMACION , 'SOLICITUD DE COMPRA', "SE REALIZO UNA SOLICITUD DE COMPRA PARA LA OPERACIÓN ". $codigoOperacion . " CON LA SIGUIENTE DESCRIPCIÓN: " . $this->planOperacionDESCRIPCION[$operacion], "pendientesDelColaboradorRevisionFinancieraOperacionesPlaneador" );
endif;
else:
$operacionActual = PlanesOperaciones::datos($this->planOperacionID[$operacion]);
$operacionID = PlanesOperaciones::actualizar($this->planOperacionDESCRIPCION[$operacion], $this->planOperacionFCHINICIO[$operacion], $this->planOperacionFCHFINAL[$operacion], $this->planOperacionCOSTO[$operacion], $this->planOperacionID[$operacion]);
if($this->tipoOperacionID[$operacion] == 2 and $operacionID >0):
Notificaciones::paraColaborador($colaborador->colaboradorID, Notificaciones::OPERACION , 'SOLICITUD DE COMPRA', "SE EDITO LA SOLICITUD DE COMPRA PARA LA OPERACIÓN ". $operacionActual->planOperacionCODIGO . " CON LA SIGUIENTE DESCRIPCIÓN: " . $this->planOperacionDESCRIPCION[$operacion], "pendientesDelColaboradorRevisionTecnicaOperacionesPlaneador" );
Notificaciones::paraColaborador(Parametros::valor('JEFEFINANCIERA')->colaboradorID, Notificaciones::INFORMACION , 'SOLICITUD DE COMPRA', "SE EDITO LA SOLICITUD DE COMPRA PARA LA OPERACIÓN ". $operacionActual->planOperacionCODIGO . " CON LA SIGUIENTE DESCRIPCIÓN: " . $this->planOperacionDESCRIPCION[$operacion], "pendientesDelColaboradorRevisionFinancieraOperacionesPlaneador" );
endif;
endif;
if($operacionID >0 and !empty($operacion)):
$n++;
endif;
endforeach;
if(count($this->operacionID)==$n):
return true;
else:
return false;
endif;
endif;
return true;
}
private function eliminarSolicitud($solicitud,$actividad){
SolicitudPersonal::eliminar($solicitud);
Notificaciones::paraColaborador(Parametros::valor('JEFETH')->colaboradorID, Notificaciones::INFORMACION , 'SOLICITUD DE PERSONAL', "SE ELIMINO LA SOLICITUD DE PERSONAL PARA LA ACTIVIDAD ". $actividad->actividadCODIGO , "mostrarSolicitudPersonal" );
}
private function eliminarOperacion($operacion){
$operacionPredefinida = PlanesOperacionesPredefinidas::datos($operacion->operacionPredefinidaID);
$colaborador = Colaboradores::porCargo($operacionPredefinida->claseOperacionCARGOREVISION);
PlanesOperaciones::eliminar($operacion->planOperacionID);
if($operacion->tipoOperacionID == 2):
Notificaciones::paraColaborador($colaborador->colaboradorID, Notificaciones::OPERACION , 'SOLICITUD DE COMPRA', "SE ELIMINO LA SOLICITUD DE COMPRA DE LA OPERACIÓN ". $operacion->planOperacionCODIGO . " CON LA SIGUIENTE DESCRIPCIÓN: " . $operacion->planOperacionDESCRIPCION , "pendientesDelColaboradorRevisionTecnicaOperacionesPlaneador" );
Notificaciones::paraColaborador(Parametros::valor('JEFEFINANCIERA')->colaboradorID, Notificaciones::INFORMACION , 'SOLICITUD DE COMPRA', "SE ELIMINO LA SOLICITUD DE COMPRA DE LA OPERACIÓN ". $operacion->planOperacionCODIGO . " CON LA SIGUIENTE DESCRIPCIÓN: " . $operacion->planOperacionDESCRIPCION , "pendientesDelColaboradorRevisionFinancieraOperacionesPlaneador" );
endif;
}
/**
* Recibe el ID del Actividades y obtiene sus datos para ser enviados
* al formulario, y asi cargar los datos en los inputs.
* Esta función se crea para poder gestionar el permiso de EDITAR Actividades
* @return HTML Formulario con los datos del Actividades a editar.
*/
function mostrarFormularioEditar() {
$Actividad = PlanesActividades::datos($this->actividadID);
$this->mostrarFormulario($Actividad, $Actividad->tipoActividadID);
}
/**
* Función que toma los datos enviados y actualiza el registro
* @return RespuestasSistema
*/
private function guardarCambios() {
$actividadID = PlanesActividades::actualizar($this->accionID,$this->planID, $this->actividadTITULO, $this->actividadDESCRIPCION, $this->actividadJUSTIFICACION, $this->actividadLOGROESPERADO, $this->actividadLUGAR, $this->actividadFCHINICIO, $this->actividadFCHFINAL, $this->actividadINGRESO, $this->cargoID, $this->metaID, $this->actividadID);
if ($actividadID>0):
$actividad = PlanesActividades::datosCompletos($this->actividadID);
PlanesActividades::registrarCambio($this->actividadID, json_encode($actividad));
foreach($actividad->solicitudesPersonal as $solicitudesActuales):
if(!in_array($solicitudesActuales->solicitudPersonalID, $this->personalSolicitadoID)):
$this->eliminarSolicitud($solicitudesActuales->solicitudPersonalID,$actividad);
endif;
endforeach;
foreach($actividad->operaciones as $operacionActuales):
if(!in_array($operacionActuales->planOperacionID, $this->planOperacionID)):
$this->eliminarOperacion($operacionActuales);
endif;
endforeach;
if($this->agregarSolicitud($this->actividadID) and $this->agregarOperacion($this->actividadID)){
echo RespuestasSistema::exito("Se Actualizo la actividad con EXITO", PlanesActividades::datos($this->actividadID));
}else{
echo RespuestasSistema::error('Hubo un error al procesar alguno de los registros. Verifica los datos, o contacta al centro TICS.');
}
else:
echo RespuestasSistema::fallo("No se pudo Actualizar la ACTIVIDAD. Si vuelve a suceder, contacte con el Centro TICS.");
endif;
}
/**
* Muestra el Formulario procesado para ser mostrado al usuario.
* Se le envian unos datos inciales para la carga de la vista, y
* se envia los datos del PlanesOperaciones cuando se esta editando.
* @return HTML Vista del Formulario de PlanesOperaciones
*/
private function mostrarFormulario($Actividad = null, $ActividadPredefinidasID=null) {
Vistas::mostrar('planeador', 'actividades/form-actividades',array(
"planes" => Planes::todos(Planes::PLANEACION),
'acciones' => Acciones::todas(ProgramasEstados::PLANEACION),
'actividadPredefinidasID' => $ActividadPredefinidasID,
'Actividad' => $Actividad)
);
}
/**
* Muestra el Formulario que se va a usar en el formulario de actividad
* para cargar/agregar operaciones predefinidas.
* se envia los datos del PlanesOperaciones de la Actividad cuando se esta editando.
* @return HTML Vista del Formulario de PlanesOperaciones
*/
function mostrarFormularioOperaciones(){
$tipoActividades = array();
if(isset($this->actividadPredefinidasID)):
if($this->actividadPredefinidasID!='null'):
$tipoActividades = PlanesTiposActividades::datosCompletos($this->actividadPredefinidasID);
endif;
endif;
$actividadID='';
if(isset($this->actividadID)){
$actividadID = $this->actividadID;
}
Vistas::mostrar('planeador', 'actividades/form-operaciones-actividad',
array(
"actividadPredefinida" => $tipoActividades,
"operacionesPredefinidas" => PlanesOperacionesPredefinidas::paraListas(),
"actividadID" => $actividadID,
"hash_form"=> $this->hash_form
)
);
}
/**
* Guardar Datos Recibidos, bien sea como un registro nuevo, o como una actualización.
* Despues imprime las Respuesta del Sistema a la ejecución de la operacion
*/
function guardarDatos() {
if (empty($this->actividadID)) {
$this->guardarNuevo();
} else {
$this->guardarCambios();
}
}
/**
* Eliminar un registro de la base de datos.
* Esta operación es irreversible.
* Si se tiene la referencia integral activada, la base de datos no va
* dejar eliminar si tiene otros registros asociados.
* @return RespuestasSistema Resultado de la Operacion que se envia al cliente
*/
function eliminar() {
$ActividadesParaEliminar = $this->checkb;
if (count($ActividadesParaEliminar)) {
$n = 0;
foreach ($ActividadesParaEliminar as $actividadELIMINAR):
$actividad = PlanesActividades::datosCompletos($actividadELIMINAR);
foreach($actividad->solicitudesPersonal as $solicitudesActuales):
$this->eliminarSolicitud($solicitudesActuales->solicitudPersonalID,$actividad);
endforeach;
foreach($actividad->operaciones as $operacionActuales):
$this->eliminarOperacion($operacionActuales);
endforeach;
if (PlanesActividades::eliminar($actividadELIMINAR)>0) {
$n++;
}
endforeach;
if ($n == 0) {
echo RespuestasSistema::error('No fue posible ELIMINAR. Contacte al centro TICS.');
} else if ($n == count($ActividadesParaEliminar)) {
echo RespuestasSistema::exito('Se realizó la OPERACION [ELIMINAR] exitosamente!');
} else {
echo RespuestasSistema::error('Hubo un error al [ELIMINAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
}
} else {
echo RespuestasSistema::error('No llegarón los datos para [ELIMINAR]. Contacta al centro TICS');
}
}
/**
* Cambiar el estado de un registro de la base de datos.
* Esta operacion cambia a estado ACTIVO el registro.
* @return RespuestasSistema Resultado de la Operacion
*/
function reactivar() {
$PlanesOperacionesParaActivar = $this->planOperacionSELECCIONADOS;
if (count($PlanesOperacionesParaActivar)) {
$n = 0;
foreach ($PlanesOperacionesParaActivar as $planOperacionACTIVAR):
if (PlanesOperaciones::activar($planOperacionACTIVAR)) {
$n++;
}
endforeach;
if ($n == 0) {
echo RespuestasSistema::error('No fue posible REACTIVAR. Contacte al centro TICS.');
} else if ($n == count($PlanesOperacionesParaActivar)) {
echo RespuestasSistema::exito('Se realizó la OPERACION [REACTIVAR] exitosamente!');
} else {
echo RespuestasSistema::error('Hubo un error al [REACTIVAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
}
} else {
echo RespuestasSistema::error('No llegarón los datos para [REACTIVAR]. Contacta al centro TICS');
}
}
/**
* Cambiar el estado de un registro de la base de datos.
* Esta operacion cambia a estado DESACTIVO / SUSPENDIDO / CANCELADO el registro.
* @return RespuestasSistema Resultado de la Operacion
*/
function desactivar() {
$PlanesOperacionesParaDesactivar = $this->planOperacionSELECCIONADOS;
if (count($PlanesOperacionesParaDesactivar)) {
$n = 0;
foreach ($PlanesOperacionesParaDesactivar as $planOperacionDESACTIVAR):
if (PlanesOperaciones::desactivar($planOperacionDESACTIVAR)) {
$n++;
}
endforeach;
if ($n == 0) {
echo RespuestasSistema::error('No fue posible DESACTIVAR. Contacte al centro TICS.');
} else if ($n == count($PlanesOperacionesParaDesactivar)) {
echo RespuestasSistema::exito('Se realizó la OPERACION [DESACTIVAR] exitosamente!');
} else {
echo RespuestasSistema::error('Hubo un error al [DESACTIVAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
}
} else {
echo RespuestasSistema::error('No llegarón los datos para [DESACTIVAR]. Contacta al centro TICS');
}
}
/**
* Permite mostrar en forma de tabla los registros de Actividades.
* @return HTML Formulario solo con datos inciales o necesarios.
*/
function tablaListadoSolicitud() {
$solicitudes = PlanesActividades::solicitudPersonal($this->actividadID);
Vistas::mostrar('planeador', 'actividades/tbl-solicitud',
array( 'solicitudes' => $solicitudes, 'hash_form'=> $this->hash_form)
);
}
/**
* Permite mostrar los detalles de la Actividad.
* @return HTML Formulario solo con datos inciales o necesarios.
*/
function detallesActividad() {
if(@$this->tipoPlanID){
$Actividad = PlanesActividades::datosCompletos($this->actividadID, $this->tipoPlanID);
Vistas::mostrar('planeador', 'actividades/ver-detalles', array('Actividad' => $Actividad, 'TipoPlanID' => $this->tipoPlanID, 'hash_padre'=>$this->hash_padre));
}else{
$Actividad = PlanesActividades::datosCompletos($this->actividadID);
Vistas::mostrar('planeador', 'actividades/ver-detalles', array('Actividad' => $Actividad, 'hash_padre'=>$this->hash_padre));
}
}
function mostrarTablaCompletaPorAccion(){
if(empty($this->tipoPlanID)){
$Actividades = PlanesActividades::delaAccion($this->accionID);
foreach($Actividades as $actividad):
$actividad->Total = PlanesOperaciones::presupuestoTotalPorActividad($actividad->actividadID);
$actividad->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorActividad($actividad->actividadID);
$actividad->FechaInicio = PlanesOperaciones::fechaTempranaPorActividad($actividad->actividadID);
$actividad->FechaFinal = PlanesOperaciones::fechaTardiaPorActividad($actividad->actividadID);
endforeach;
Vistas::mostrar("planeador", "actividades/tbl-completa", array("Actividades"=>$Actividades, 'hash_padre'=>$this->hash_padre));
}else{
$Actividades = PlanesActividades::delaAccion($this->accionID, $this->tipoPlanID);
foreach($Actividades as $actividad):
$actividad->Total = PlanesOperaciones::presupuestoTotalPorActividadyTipoPlan($actividad->actividadID, $this->tipoPlanID);
$actividad->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorActividad($actividad->actividadID, $this->tipoPlanID);
$actividad->FechaInicio = PlanesOperaciones::fechaTempranaPorActividad($actividad->actividadID, $this->tipoPlanID);
$actividad->FechaFinal = PlanesOperaciones::fechaTardiaPorActividad($actividad->actividadID, $this->tipoPlanID);
endforeach;
Vistas::mostrar("planeador", "actividades/tbl-completa", array("Actividades"=>$Actividades,'TipoPlanID' => $this->tipoPlanID, 'hash_padre'=>$this->hash_padre));
}
}
}