<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of permisos
 *
 * @author root
 */
class PermisosControlador extends Controladores {

    function inicio() {
        $App = Cliente::app();
        Vistas::mostrarApps("permisos", "inicio",
            array(
                'Motivos' => PermisosMotivos::todos(),
                'Politica' => Aplicaciones::politica('16')
            )
        );
    }


    function registroPermiso() {
        $colaborador = Colaboradores::porCedula($this->cedulaEmpleado);
        $idPermiso = Permisos::registrarPermiso($colaborador->colaboradorID,
                $this->motivoPermiso, $this->fechaInicioPermiso,
                $this->JustificacionPermiso);
        if (!is_null($idPermiso)) {
            $Permiso = Permisos::datosCompletos($idPermiso);
            $notificacion = $this->notificarSolicitudPermiso($Permiso);
            if (!isset($notificacion)) {
                print_r("notificacion");
            }
            if ($notificacion === true) {
                echo RespuestasSistema::exito(array("IDPERMISO" => $idPermiso));
            } else {
                echo RespuestasSistema::alerta(
                    array("IDPERMISO" => $idPermiso),
                    "Se registró el permiso, pero no se pudo enviar la notificación al correo electrónico. Contacte con su jefe inmediato o personal de talento humano.\r\n"
                    . $notificacion
                );
            }
        } else {
            echo RespuestasSistema::fallo("NO SE PUDO REGISTRAR EL PERMISO");
        }
    }

    function notificarSolicitudPermiso($Permiso) {

        $Notificado = false;
        $Mensaje = "";

        //Notiificando al JefeInmediato
        $emailDestino = "ronald.fabra7@gmail.com"; //$Permiso->jefeInmediatoColaboradorEMAIL;
        $nombreDestino = $Permiso->jefeInmediatoPersonaNOMBRES . " " . $Permiso->jefeInmediatoPersonaAPELLIDOS;
        $mensaje = Permisos::correoAutorizacion($Permiso,
                $Permiso->colaboradorJEFEINMEDIATO, $emailDestino,
                $nombreDestino);
        $NotificadoJefe = Correos::enviarContacto(
                array($emailDestino, $nombreDestino),
                'Tiene una nueva Solicitud de Permiso pendiente por AUTORIZAR.', 
                $mensaje
        );
        if (!$NotificadoJefe) {
            $Mensaje .= 'No se pudo enviar el correo de notificación al Jefe Inmediato';
        }

        //Enviar Copia de Autorizacion
        $ColaboradorCopiaID = Parametros::valor('COLABORADORCOPIAPERMISOS');
        $ColaboradorCopia = Colaboradores::porId($ColaboradorCopiaID);
        $emailDestino =  "ronald.fabra7@gmail.com"; //$ColaboradorCopia->colaboradorEMAIL;
        $nombreDestino = $ColaboradorCopia->personaNOMBRES . " " . $ColaboradorCopia->personaAPELLIDOS;
        $mensaje = Permisos::correoAutorizacion($Permiso,
                $ColaboradorCopia->colaboradorID, $emailDestino, $nombreDestino);
        $NotificadoCopia = Correos::enviarContacto(
                array($emailDestino, $nombreDestino),
                'COPIA: Solicitud de Permiso pendiente por AUTORIZAR.',
                $mensaje
        );
        if (!$NotificadoCopia) {
            $Mensaje .= 'No se pudo enviar la copia del correo de notificación a Talento Humano.';
        }
        
         //Notiificando al colaborador
        $emailDestino =  "ronald.fabra7@gmail.com"; //$Permiso->colaboradorEMAIL;
        $nombreDestino = $Permiso->personaNOMBRES . " " . $Permiso->personaAPELLIDOS;
        $mensaje = Permisos::correoSolicitud($Permiso);
        $NotificadoColaborador = Correos::enviarContacto(
                array($emailDestino, $nombreDestino),
                'Se ha regitrado una nueva Solicitud de Permiso.',
                $mensaje
        );
        if (!$NotificadoColaborador) {
            $Mensaje .= 'No se pudo enviar el correo de soporte de la solictud de permisos.';
        }
        if ($NotificadoJefe and $NotificadoCopia and $NotificadoColaborador) {
            $Notificado = true;
        } else {
            return $Mensaje;
        }
        return $Notificado;
    }

    function confirmarPermiso() {
        $permiso = Permisos::datosCompletos($this->idPermiso);
        Vistas::mostrarApps("permisos", "respuesta",
            array('Permiso' => $permiso));
    }

//autorixzacion
    function autorizar() {
        $this->colaboradorID = $this->datos[0];
        $this->permisoID = $this->datos[1];
        $this->confirmarAutorizacion();
    }

    function noAutorizar() {
        $this->colaboradorID = $this->datos[0];
        $this->permisoID = $this->datos[1];
        $this->confirmarAutorizacion();
    }

    function confirmarAutorizacion() {
        $Permiso = Permisos::datosCompletos($this->permisoID);
        if ($Permiso) {
            $this->validarEstado($Permiso, 'autorizacion');
        } else {
            Vistas::mostrarApps("permisos", "error", array());
        }
    }

    function autorizacion() {
        Permisos::autorizacion($this->colaboradorID, $this->permisoID,
            Permisos::AUTORIZADO);
        $Permiso = Permisos::datosCompletos($this->permisoID);
        $this->notificarAutorizacion($Permiso);
        Vistas::mostrarApps("permisos", "fin-proceso",
            array('Permiso' => $Permiso));
    }

    function noAutorizacion() {
        Permisos::autorizacion($this->colaboradorID, $this->permisoID,
            Permisos::NOAUTORIZADO);
        $Permiso = Permisos::datosCompletos($this->permisoID);
        $this->notificarAutorizacion($Permiso);
        Vistas::mostrarApps("permisos", "fin-proceso",
            array('Permiso' => $Permiso));
    }

    function notificarAutorizacion($Permiso) {
        $emailDestino = $Permiso->colaboradorEMAIL;
        $nombreDestino = $Permiso->personaNOMBRES . " " . $Permiso->personaAPELLIDOS;
        $mensaje = Permisos::correoRespuestaAutorizacion($Permiso);
        $Notificado = Correos::enviarContacto(
                array($emailDestino, $nombreDestino),
                'PRUEBA APP PERMISOS: Respuesta a tu solicitud de permiso del dia ' . $Permiso->permisoFCHSOLICITADO . '.',
                $mensaje
        );
        if (!$Notificado) {
            return $Mensaje .= 'No se pudo enviar el correo de respuesta a la solicitud de permiso.';
        }
        return $Notificado;
    }

//CAncelacion
    function cancelar() {
        $this->permisoID = $this->datos[0];
        $Permiso = Permisos::datosCompletos($this->permisoID);
        if ($Permiso) {
            if ($Permiso->permisoESTADO == Permisos::PENDIENTE) {
                Vistas::mostrarApps(
                    "permisos", 'cancelacion',
                    array(
                 'Permiso' => $Permiso)
                );
            } else if ($Permiso->permisoESTADO == Permisos::AUTORIZADO) {
                $fecha = new DateTime();
                $fecha = $fecha->format('Y-m-d H:i:s');
                if ($Permiso->permisoFCHPERMISO < $fecha) {
                    Vistas::mostrarApps(
                        "permisos", 'cerrar',
                        array(
                     'Permiso' => $Permiso)
                    );
                } else {
                    Vistas::mostrarApps(
                        "permisos", 'cancelacion',
                        array(
                     'Permiso' => $Permiso)
                    );
                }
            } else {
                Vistas::mostrarApps(
                    "permisos", "fin-proceso",
                    array(
                 'Permiso' => $Permiso)
                );
            }
        } else {
            Vistas::mostrarApps("permisos", "error", array());
        }
    }

    function cancelacion() {
        Permisos::cancelacion($this->permisoID);
        $permiso = Permisos::datosCompletos($this->permisoID);
        Vistas::mostrarApps("permisos", "fin-proceso",
            array('Permiso' => $permiso));
    }

//Cerrado
    function cerrar() {
        $this->permisoID = $this->datos[0];
        $Permiso = Permisos::datosCompletos($this->permisoID);
        if ($Permiso) {
            if ($Permiso->permisoESTADO == Permisos::AUTORIZADO):
                Vistas::mostrarApps(
                    "permisos", 'cerrar',
                    array(
                 'Permiso' => $Permiso)
                );
            else:
                Vistas::mostrarApps(
                    "permisos", "fin-proceso",
                    array(
                 'Permiso' => $Permiso)
                );
            endif;
        }else {
            Vistas::mostrarApps("permisos", "error", array());
        }
    }

    function cerrado() {
        if (isset($this->justificacion)) {
            Permisos::nousar($this->permisoID, $this->justificacion);
        } else {
            Permisos::cerrar($this->permisoID);
        }
        $Permiso = Permisos::datosCompletos($this->permisoID);
        $this->notificarCerrado($Permiso);
        Vistas::mostrarApps(
            "permisos", "fin-proceso", array(
         'Permiso' => $Permiso)
        );
    }

    function notificarCerrado($Permiso) {
        //arma el correo que se le envia a quien autorizó
        //$ColaboradorAutorizo = Colaboradores::porId($Permiso->colaboradorAUTORIZA);
        $emailDestino = $Permiso->autorizoColaboradorEMAIL;
        $nombreDestino = $Permiso->autorizoPersonaNOMBRES . " " . $Permiso->autorizoPersonaAPELLIDOS;
        $mensaje = Permisos::correoCerrado($Permiso,
                $Permiso->autorizoColaboradorID, $emailDestino,
                $nombreDestino);
        $Notificado = Correos::enviarContacto(
             array($emailDestino, $nombreDestino),
                'PRUEBA APP PERMISOS: Aviso de regreso de permiso del colaborador ' . $Permiso->personaNOMBRES . ' ' . $Permiso->personaAPELLIDOS . '.',
                $mensaje
        );
        if (!$Notificado) {
            return $Mensaje .= 'No se pudo enviar la copia del correo de notificación a Talento Humano.';
        }
        return $Notificado;
    }

    private
        function validarEstado($Permiso, $vistaPendiente) {
        if ($Permiso->permisoESTADO == Permisos::PENDIENTE):
            Vistas::mostrarApps(
                "permisos", $vistaPendiente,
                array(
             'Permiso' => $Permiso,
             'Colaborador' => $this->colaboradorID)
            );
        else:
            Vistas::mostrarApps(
                "permisos", "fin-proceso",
                array(
             'Permiso' => $Permiso,
             'Colaborador' => $this->colaboradorID)
            );
        endif;
    }

}

