<?php

require_once 'Mail.php';
require_once 'Mail/mime.php';

/**
 * comisionar actions.
 *
 * @package    comisiones
 * @subpackage comisionar
 * @author     Software House LTDA <gerencia@sofhouse.net>
 * @version    SVN: $Id: actions.class.php 9301 2008-05-27 01:08:46Z dwhittle $
 */
/*
 * Actualizacion  => Fecha : 31 de Mayo de 2011
 * Autor => Alexia Velasquez
 * Linea => 804
 * Modificacion => Se modifico condicion para permitir el registro de observaciones con numero de caracteres hasta 1000.



 * */
class comisionarActions extends sfActions {

    public function executeToggleInterrupcion() {
        $comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));

        $comision->setInterrupcion(!$comision->getInterrupcion());
        $comision->save();
        $this->redirect('comisionar/edit?id=' . $comision->getId() . '&vigencia=' . $comision->getVigencia());
    }

    public function executeObserva() {
        $this->comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
    }

    public function executeGuardar_observa() {

        if (strlen($this->getRequestParameter('observa')) > 1000) {
            $this->getUser()->setFlash('error', "<div class='success'>Las observaciones para la comisi&oacute;n <b>" . $comision->getId() . "</b> sobrepasan el numero de caracteres permitidos<br/></div>");
        } else {
            $comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
            $comision->setObserva($this->getRequestParameter('observa'));
            $comision->save();
            $this->getUser()->setFlash('mensaje', "<div class='success'>Las observaciones de la comisi&oacute;n <b>" . $comision->getId() . "</b> han sido guardadas correctamente<br/></div>");
        }
        return $this->redirect('comisionar/complete');
    }

    public function executeActividades() {
        $this->comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
    }

    public function executeGuardar_actividades() {
        $comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
        $comision->setActividad($this->getRequestParameter('actividad'));
        $comision->save();
        $this->getUser()->setFlash('mensaje', "<div class='success'>Las actividades de la comisi&oacute;n <b>" . $comision->getId() . "</b> han sido guardadas correctamente<br/></div>");
        return $this->redirect('comisionar/complete');
    }

    public function executeObjetivos() {
        $this->comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
    }

    public function executeGuardar_objetivos() {
        $comision = ComisionesPeer::retrieveByPK($this->getRequestParameter('id'));
        $comision->setObjetivo($this->getRequestParameter('objetivo'));
        $comision->save();
        $this->getUser()->setFlash('mensaje', "<div class='success'>Los objetivos de la comisi&oacute;n <b>" . $comision->getId() . "</b> han sido guardados correctamente<br/></div>");
        return $this->redirect('comisionar/complete');
    }

    public function executeComplete() {
        
    }

    function executeRefresh($request) {
        $this->getResponse()->setHttpHeader('Content-Type', 'application/json;charset=utf-8');
        $resultado = array("title" => "Mi carta normal", "name" => "Sr. Pérez");
        return $this->renderText(json_encode($resultado));
    }

    public function executeActualizar_estado() {
        echo $this->id_comision = $this->getRequestParameter('id');
        echo $this->vigencia = $this->getRequestParameter('vigencia');
        echo $param = $this->getRequestParameter('param');


        $this->ValidarCierre($this->id_comision);
        $this->comision = ComisionesPeer::retrieveByPK($this->id_comision, $this->vigencia);

//    $this->comision->setActivo($param == 'false' ? 0 : 1);
        $this->comision->setActivo($param);
        $this->comision->setJustificacion('');

        if ($param == -1):
            $this->setTemplate('justificacion');
        else:
            //guardar log
            $logEvent = new Log();
            $logEvent->setStamp(time());
            $logEvent->setUsername($this->getUser()->getAttribute('username'));
            $logEvent->setAccion(($param ? 'Abrir' : 'Cerrar') . ' comision #' . $this->id_comision . '-' . $this->vigencia);
            $logEvent->setIp($_SERVER['REMOTE_ADDR']);
            $logEvent->save();

            $this->comision->save();

            //si la comision se cerró, enviar mails a los comisionados
            if ($param == 0):

                //ACTUALIZACION 26 DE MARZO DE 2014, SE MODIFICO PARA QUE EN CASO DE PRORROGA O ADICION SOLO ENVIE CORREO A LOS COMISIONADOS QUE TIENEN VALOR.
                //buscar todos los comisionados asociados
                $c = new Criteria();
                $c->add(ComisionadosPlantaPeer::ID_COMISION, $this->id_comision);
                $c->addAnd(ComisionadosPlantaPeer::VIGENCIA, $this->vigencia);
                $c->addJoin(ComisionadosObjsPeer::NITOCC, ComisionadosPlantaPeer::NITOCC);
                $c->addJoin(ComisionadosObjsPeer::ID_COMISION, ComisionadosPlantaPeer::ID_COMISION);
                $c->addJoin(ComisionadosObjsPeer::VIGENCIA, ComisionadosPlantaPeer::VIGENCIA);
                $c->addAnd(ComisionadosObjsPeer::VALOR, 0, Criteria::NOT_EQUAL);
                $comisPlanta = ComisionadosPlantaPeer::doSelectJoinTerceros($c);

                $c = new Criteria();
                $c->add(ComisionadosContratoPeer::ID_COMISION, $this->id_comision);
                $c->addAnd(ComisionadosContratoPeer::VIGENCIA, $this->vigencia);
                $c->addJoin(ComisionadosObjsPeer::NITOCC, ComisionadosContratoPeer::NITOCC);
                $c->addJoin(ComisionadosObjsPeer::ID_COMISION, ComisionadosContratoPeer::ID_COMISION);
                $c->addJoin(ComisionadosObjsPeer::VIGENCIA, ComisionadosContratoPeer::VIGENCIA);
                $c->addAnd(ComisionadosObjsPeer::VALOR, 0, Criteria::NOT_EQUAL);
                $comisContratos = ComisionadosContratoPeer::doSelectJoinTerceros($c);



                //preparar el swiftmail
                // Esta libreria es externa a symfony y posee problemas al llamarla asi que es mejor utilizar librerias propias de symfony como sfMail();
                /*        require_once sfConfig::get('sf_lib_dir').'/mailer/swift_required.php';
                  $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
                  $message = Swift_Mailer::newInstance($transport);
                 */
                //preparar y enviar mensajes
                $fallidos = array();
                foreach ($comisPlanta as $planta) {
                    if ($planta->getTerceros()->getEmail() == '') {
                        //si no tiene correo, agregar datos a lista de fallidos
                        $fallidos[] = $planta->getTerceros()->getRazsoc() . ' - NIT o CC: ' . $planta->getNitocc();
                    } else {

                        //Buscar la informacion que irá en el mail
                        $destinos = DestinosComisionadosPeer::getObjetosDestinosComisionado($planta->getNitocc(), $this->id_comision, $this->vigencia);
                        $objetos = ComisionadosObjsPeer::getAllObjetosGasto($planta->getNitocc(), $this->id_comision, $this->vigencia);
                        $taxis = TarifasDestinoPeer::getTaxisComisionado($planta->getNitocc(), $this->id_comision, $this->vigencia);

                        //preparar el mensaje

                        $contenido = $this->getPartial('informes/detalles', array('idComision' => $this->id_comision, 'vigencia' => $this->vigencia,
                            'comisionado' => $planta, 'comision' => $this->comision, 'destinos' => $destinos, 'objetos' => $objetos, 'taxis' => $taxis, 'lugar' => 'planta'));


                        $email = $planta->getTerceros()->getEmail();
                        $this->enviarEmail($email, 'Notificacion de programacion de comision No ' . $this->id_comision, $contenido);
                    }
                }

                //hacer lo mismo para comisionados de contrato
                foreach ($comisContratos as $contrato) {
                    if ($contrato->getTerceros()->getEmail() == '') {
                        //si no tiene correo, agregar datos a lista de fallidos
                        $fallidos[] = $contrato->getTerceros()->getRazsoc() . ' - NIT/CC: ' . $contrato->getNitocc();
                    } else {
                        //Buscar la informacion que irá en el mail
                        $destinos = DestinosComisionadosPeer::getObjetosDestinosComisionado($contrato->getNitocc(), $this->id_comision, $this->vigencia);
                        $objetos = ComisionadosObjsPeer::getAllObjetosGasto($contrato->getNitocc(), $this->id_comision, $this->vigencia);
                        $taxis = TarifasDestinoPeer::getTaxisComisionado($contrato->getNitocc(), $this->id_comision, $this->vigencia);

                        $contenido = $this->getPartial('informes/detalles', array('idComision' => $this->id_comision, 'vigencia' => $this->vigencia,
                            'comisionado' => $contrato, 'comision' => $this->comision, 'destinos' => $destinos, 'objetos' => $objetos, 'taxis' => $taxis, 'lugar' => ''));



                        $email = $contrato->getTerceros()->getEmail();
                        $this->enviarEmail($email, 'Notificacion de programacion de comision No ' . $this->id_comision, $contenido);



                        //limpiar memoria
                        unset($message);
                        unset($destinos);
                        unset($objetos);
                        unset($taxis);
                    }
                }

                //si hay intentos fallidos, enviar un mail al admin
                if (count($fallidos) > 0) {
                    //preparar el mensaje
                    $message = new sfMail();
                    $message->setCharset('utf-8');
                    $message->setContentType('text/html');

                    $message->setSubject('Notificacion de programacion de comision No ' . $this->id_comision);
                    $message->setSender('gerencia@sofhouse.net', 'Software House Ltda');
                    //$message->setFrom(sfConfig::get('app_nom_admin'));
                    $message->setFrom('Web safi - Comisiones');

                    //$message->addAddress($planta->getTerceros()->getEmail());
                    $message->addAddress('websafi@sofhouse.net'); //TODO cambiar email
                    $message->addAddress('mcramirez@ingeominas.gov.co');
                    $contenido = '<h1 align="center" style="color:#2771bc">Comisi&oacute;n #' . $this->id_comision . '</h1>';
                    $contenido .= '<b>Las siguientes personas no cuentan con una dirección de correo en el sistema:</b><br/>';
                    $contenido .= '<ul>';
                    foreach ($fallidos as $fallido) {
                        $contenido .= '<li>' . $fallido . '</li>';
                    }
                    $contenido .= '</ul>';

                    $message->setBody($contenido);

                    //enviar el mensaje
                    $message->send();

                    //limpiar memoria
                    unset($message);
                    unset($destinos);
                    unset($objetos);
                    unset($taxis);
                }

            endif; //end enviar mails
        endif;
    }

    public function executeAnular() {
        $id_comision = $this->getRequestParameter('id_comision');
        $vigencia = $this->getRequestParameter('vigencia');

        //buscar comision
        $comision = ComisionesPeer::retrieveByPK($id_comision, $vigencia);

        $comision->setActivo(-1);
        $comision->setJustificacion('Justificaci&oacute;n Anulaci&oacute;n: ' . $this->getRequestParameter('justificacion'));
        $comision->save();

        //guardar log
        $logEvent = new Log();
        $logEvent->setStamp(time());

        //$logEvent->setIdUsuario($this->getUser()->getAttribute('id'));   11/05/11 Campo no existe.
        $logEvent->setUsername($this->getUser()->getAttribute('username'));
        $logEvent->setAccion('Anular comision #' . $id_comision . '-' . $vigencia);
        $logEvent->setIp($_SERVER['REMOTE_ADDR']);
        $logEvent->save();

        $this->redirect('comisionar/index');
    }

    public function executeFilter_preview() {
        $this->id_comision = $this->getRequestParameter('id');
        $this->vigencia = $this->getRequestParameter('vigencia');
        $this->tipoComision = $this->getRequestParameter('tipocomision');
        $this->comision = ComisionesPeer::retrieveByPK($this->id_comision, $this->vigencia);

        //0-Func 1-Inv 2-Todos
        $con = Propel::getConnection();
        $sql = "SELECT pro.FUNC_INV FROM PROYECTOS pro WHERE pro.codigo='" . $this->comision->getCodpro() . "'";

        $sentencia = $con->prepareStatement($sql);
        $resultset2 = $sentencia->executeQuery();

        while ($resultset2->next()) {
            $this->inv = $resultset2->getString('FUNC_INV');
        }
    }

    public function executePreview_cdp() {

        $id_comision = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $func_inv = $this->getRequestParameter('func_inv');
        $this->vigencia = $vigencia;

        $this->comision = ComisionesPeer::retrieveByPk($id_comision, $vigencia);
        $cpo = $this->comision->getProyectos()->getCodigo();
        $con = Propel::getConnection();
        $sql = "SELECT pro.FUNC_INV FROM PROYECTOS pro WHERE pro.codigo='" . $cpo . "'";

        $sentencia = $con->prepareStatement($sql);
        $resultset2 = $sentencia->executeQuery();

        while ($resultset2->next()) {
            $inv = $resultset2->getString('FUNC_INV');
        }
        $c = new Criteria();
        $c->add(ObjetosGastoPeer::ANO_FISCAL, $vigencia, Criteria::EQUAL);
        $this->objetos = ObjetosGastoPeer::doSelect($c);

        if( !is_null($func_inv) ){ 
           $inv = $func_inv;            
        }

        if ($inv == 1) {
            $this->redirect('comisionar/preview_cdp_inv1?id=' . $id_comision . '&vigencia=' . $vigencia);
        }
    }

    public function executePreview_cdp_inv1() {
        $id_comision = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $this->vigencia = $vigencia;
        $this->comision = ComisionesPeer::retrieveByPk($id_comision, $vigencia);

        $this->objetos = ObjetosGastoPeer::doSelect(new Criteria());
    }

    public function executePreview_cdp_inv2() {
        $id_comision = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $this->vigencia = $vigencia;
        $this->comision = ComisionesPeer::retrieveByPk($id_comision, $vigencia);
        $id_rubro = $this->getRequestParameter('rubro');

        $this->id_rubro = $id_rubro[0];


        $c = new Criteria();
        $c->add(ObjetosGastoPeer::ANO_FISCAL, $vigencia, Criteria::EQUAL);
        $this->objetos = ObjetosGastoPeer::doSelect($c);
    }

    public function executeCambios($request) {


        $id = $this->getRequestParameter('id');
        $id_comision = $this->getRequestParameter('id_comision');
        $value = $this->getRequestParameter('param');

        $comision = ComisionesPeer::retrieveByPk($id_comision, $this->getRequestParameter('vigencia'));

        echo $id;


        switch ($id) {
            case "objetivos":
                $comision->setObjetivo($value);
                break;
            case "actividades":
                $comision->setActividad($value);
                break;
            case "observaciones":
                $comision->setObserva($value);
                break;
        }
        $comision->save();
        exit();
    }

    public function executeUpdate_() {
        $this->comisionados_planta = ComisionadosPlantaPeer::getComisionados($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));
        $this->comisionados_contrato = ComisionadosContratoPeer::getComisionados($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));
    }

    public function executeUpdate_variables() {
        $this->comision = ComisionesPeer::retrieveByPk($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));
    }

    public function executeEdit_obj($request) {
        $id_comision = $this->getRequestParameter('id_comision');
        $nitocc = $this->getRequestParameter('nitocc');
        $codobj = $this->getRequestParameter('codobj');
        $vigencia = $this->getRequestParameter('vigencia');
        $valor = $this->getRequestParameter('value');


        $c = new Criteria();
        $c->add(ComisionadosObjsPeer::NITOCC, $nitocc);
        $c->add(ComisionadosObjsPeer::ID_COMISION, $id_comision);
        $c->add(ComisionadosObjsPeer::CODOBJ, $codobj);
        $c->add(ComisionadosObjsPeer::VIGENCIA, $vigencia);

        $comisionado = ComisionadosPlantaPeer::retrieveByPK($id_comision, $nitocc, $vigencia);
        if (!$comisionado):
            $comisionado = ComisionadosContratoPeer::retrieveByPK($id_comision, $nitocc, $vigencia);
        endif;


        $obj = ComisionadosObjsPeer::doSelectOne($c);

        $valor_save = $valor + $obj->getViaticos() + $obj->getTaxis();

        $obj->setValor($valor_save);
        $obj->save();
        $this->nuevo_valor = $valor;
    }

    public function executeIndex($request) {
        
        $this->codare = $this->getRequestParameter('codare');
        $this->id_proyecto = $this->getRequestParameter('id_proyecto');
        $this->tipcomi = $this->getRequestParameter('tipcomi');
        $this->num_comision = $this->getRequestParameter('numero_comision');
        $this->vigencia = $this->getRequestParameter('vigencia');
        $this->programador=$this->getRequestParameter('programador')?$this->getRequestParameter('programador'):'';

        //20170213 Si recibimos el paramero programador Obtenemos todos los ID para el username seleccionado por el usuario 
        if($this->programador!=''){
            $c = new Criteria();
            $c->add(UsuariosPeer::USERNAME, $this->programador);
            $usuario = UsuariosPeer::doSelect($c);
            //Asignamos todos los ID para el username a un arreglo que se utilizara para filtrar todas las posibles comisiones del usuario
            if($usuario){
                $ids=array(); 
                foreach($usuario as $usuarios):        
                    $ids[]=$usuarios->getid();
                endforeach;
            }
        }   


        $c = new Criteria();
        $c->add(ComisionesPeer::ESTADO, 1);
        if (!($this->getUser()->hasCredential('admin') || $this->getUser()->hasCredential('superadmin'))):
            $c->add(ComisionesPeer::USERNAME, $this->getUser()->getAttribute('id'));
        endif;
        $c->addDescendingOrderByColumn(ComisionesPeer::VIGENCIA);
        $c->addDescendingOrderByColumn(ComisionesPeer::ID);


        //Inicio filtro
        $this->getRequestParameter('codare') ? $c->add(ComisionesPeer::CODARE, $this->getRequestParameter('codare')) : '';
        $this->getRequestParameter('id_proyecto') ? $c->add(ComisionesPeer::CODPRO, $this->getRequestParameter('id_proyecto')) : '';
        $this->getRequestParameter('tipcomi') ? $c->add(ComisionesPeer::TIPCOMI, $this->getRequestParameter('tipcomi')) : '';
        $this->getRequestParameter('numero_comision') ? $c->add(ComisionesPeer::ID, $this->getRequestParameter('numero_comision')) : '';
        $this->getRequestParameter('vigencia') ? $c->add(ComisionesPeer::VIGENCIA, $this->getRequestParameter('vigencia')) : '';
        $this->getRequestParameter('programador') ? $c->add(ComisionesPeer::USERNAME, $ids,Criteria::IN) : '';

        $this->filterEstado = $this->getRequestParameter('filter_estado');
        if ($this->filterEstado == '') {
            $c->add(ComisionesPeer::ACTIVO, 1);
            $this->filterEstado = 1;
        } else if ($this->filterEstado != -2) {
            $c->add(ComisionesPeer::ACTIVO, $this->filterEstado);
        }
        //Fin filtro

        $this->comisiones = ComisionesPeer::doSelectJoinAll($c);
        $c = new Criteria();
        $c->add(AreasPeer::ID_AREA, $this->codare);
        $area_1 = AreasPeer::doSelectOne($c);

        if ($this->getRequestParameter('codare')):
            $c = new Criteria();
            $c->add(ProyectosPeer::ID_AREA_LIDER, $area_1->getIdArea());
            $c->add(ProyectosPeer::ANO_FISCAL, date("Y"), Criteria::EQUAL);
            $this->proyectos = ProyectosPeer::doSelect($c);
        endif;
        
        $c = new Criteria();
        $c->addAscendingOrderByColumn(AreasPeer::DESCRIPCION);
        $c->add(AreasPeer::ID_NIVEL, 1);
        $c->add(AreasPeer::ESTADO, 1);//Se agrega filtro de estado - 20170106
        $this->areas = AreasPeer::doSelect($c);
    }

    public function executeCreate($request) {

        $this->titulo = "Nueva comisi&oacute;n";
        $c = new Criteria;
        $c->addAscendingOrderByColumn(TiposComisionPeer::TIPCOMI);
        $this->tipos_comision = TiposComisionPeer::doSelect($c);
        
        $c = new Criteria();
        $c->add(AreasPeer::ID_NIVEL, 1);
        $c->add(AreasPeer::ESTADO, 1);//Se agrega filtro de estado - 20170106
        $c->addAscendingOrderByColumn(AreasPeer::DESCRIPCION);
        $this->areas = AreasPeer::doSelect($c);

        if ($this->getRequestParameter('id_area')):
            $c = new Criteria();
            $c->add(ProyectosPeer::CODARE, $this->getRequestParameter('id_area'));
            $c->add(ProyectosPeer::ANO_FISCAL, date("Y"), Criteria::EQUAL);
            $this->proyectos = ProyectosPeer::doSelect($c);
        else:
            $this->proyectos = new Proyectos;
        endif;
    }

    public function handleErrorCrear() {
        $this->forward('comisionar', 'create');
    }

    public function executeCrear($request) {

        //$this->forward404If(!$request->isMethod('POST'));
        echo $id_tipo_comision = $this->getRequestParameter('id_tipo_comision');
        echo "area" . $id_area = $this->getRequestParameter('id_area');

        echo "proyecto" . $id_proyecto = $this->getRequestParameter('id_proyecto');

        echo $interrumpida = $this->getRequestParameter('interrumpida');
        echo "vigencia" . $vigencia = date('Y');

        $aplica_porcentaje = $this->getRequestParameter('aplica_porcentaje');
        $consecutivo = ConsecutivosPeer::retrieveByPK(1);

        $id_comisiones = $consecutivo->getConsecutivoComision();
        //20170113 como se cambio el combo de seleccion de area para que devolciera el Id_area en vez de codigo hay que buscamos el codigo segun el id_area
        $c = new Criteria();
        $c->add(AreasPeer::ID_AREA, $id_area);
        $area = AreasPeer::doSelectOne($c);


        $comis = new Comisiones;
        $comis->setId($id_comisiones);
        $comis->setVigencia($vigencia);
        //$comis->setCodare($id_area);20170112 se cambio por la linea inferior que trae el codigo del objeto
        $comis->setCodare($area->getCodigo());
        $comis->setTipcomi($id_tipo_comision);
        $comis->setCodpro($id_proyecto);
        $comis->setFecha(date('Y-m-d'));
        $comis->setUsername($this->getUser()->getAttribute('id'));
        $comis->setInterrupcion($interrumpida);
        $comis->setAplicaPorcentaje($aplica_porcentaje);
        $comis->save();
        $consecutivo = ConsecutivosPeer::retrieveByPK(1);
        $consecutivo->setConsecutivoComision($id_comisiones + 1);
        $consecutivo->save();



        $c = new Criteria();
        $c->addDescendingOrderByColumn(ComisionesPeer::ID);
        $c->addDescendingOrderByColumn(ComisionesPeer::VIGENCIA);
        $comisionn = ComisionesPeer::doSelectOne($c);

        //grabar al log
        $logEvent = new Log();
        $logEvent->setStamp(time());
        $logEvent->setUsername($this->getUser()->getAttribute('username'));
        $logEvent->setAccion('Crear comision #' . $comisionn->getId() . '-' . $vigencia);
        $logEvent->setIp($_SERVER['REMOTE_ADDR']);
        $logEvent->save();

        return $this->redirect('comisionar/edit?id=' . $id_comisiones . '&vigencia=' . $vigencia);
    }

    public function executeAdicionar() {

        $idOriginal = $this->getRequestParameter('idOriginal');
        $id = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $FechaSalida = $this->getRequestParameter('fecha_salida');
        $original = ComisionesPeer::retrieveByPK($idOriginal, $vigencia);

        if (!$original || $original->getActivo() != 0):
            $this->getUser()->setFlash('error', 'No existe la comisión No. ' . $idOriginal . ' con vigencia ' . $vigencia . ' o no se encuentra cerrada');


        else:

            if (!ComisionesPeer::validarFechaAdicion($idOriginal, $FechaSalida, $vigencia)):
                $this->getUser()->setFlash('error', 'La fecha de salida del comisionado  debe ser mayor o igual a la fecha de salida de la comisi&oacute;n a la que se adiciono');

            else:

                //copiar toda la informacion pertinente de la comision original a la adicion
                $adicion = ComisionesPeer::retrieveByPK($id, $vigencia);


                $adicion->setObjetivo($original->getObjetivo());

                $adicion->setActividad($original->getActividad());
                $observaciones = $original->getObserva();
                $adicion->setObserva($observaciones);
                $adicion->setIdOriginal($idOriginal);
                $adicion->save();

                //copiar destinos
                $destinos = DestinosPeer::getDestinosComision($idOriginal, $vigencia);
                foreach ($destinos as $destino):
                    $dest = new Destinos();
                    $dest = $destino->copy();
                    $dest->setCodmun($destino->getCodmun());
                    $dest->setIdComision($id);
                    $dest->setVigencia($vigencia);
                    $dest->save();
                endforeach;

                //copiar comisionados planta
                $origsPlanta = ComisionadosPlantaPeer::getComisionados($idOriginal, $vigencia);
                foreach ($origsPlanta as $planta):
                    $comisionado = new ComisionadosPlanta();
                    $comisionado = $planta->copy();
                    $comisionado->setIdComision($id);
                    $comisionado->setNitocc($planta->getNitocc());
                    $comisionado->setFechaSalida($FechaSalida);
                    $comisionado->setVigencia($vigencia);
                    $comisionado->setDias(0);
                    $comisionado->setDiasManu(0);
                    $comisionado->setGastosTaxis(0);
                    $comisionado->save();

                    //copiar destinos_comisionado
                    $destinosComi = DestinosComisionadosPeer::getObjetosDestinosComisionado($comisionado->getNitocc(), $idOriginal, $vigencia);
                    foreach ($destinosComi as $destino):
                        $dest = new DestinosComisionados();
                        $dest = $destino->copy();
                        $dest->setNitocc($destino->getNitocc());
                        $dest->setIdComision($id);
                        $dest->setCodmun($destino->getCodmun());
                        $dest->setVigencia($vigencia);
                        $dest->save();
                    endforeach;

                    //objeto de gasto 06 para cada comisionado
                    $obj = new ComisionadosObjs();
                    $obj->setNitocc($comisionado->getNitocc());
                    $obj->setCodobj('07');
                    $obj->setIdComision($id);
                    $obj->setVigencia($vigencia);
                    $obj->setValor(0);
                    $obj->setEstado(1);
                    $obj->setObserva('');
                    $obj->save();
                endforeach;

                //copiar comisionados contratos
                $origsContrato = ComisionadosContratoPeer::getComisionados($idOriginal, $vigencia);
                foreach ($origsContrato as $planta):
                    $comisionado = new ComisionadosContratoPeer();
                    $comisionado = $planta->copy();
                    $comisionado->setIdComision($id);
                    $comisionado->setNitocc($planta->getNitocc());
                    $comisionado->setFechaSalida($FechaSalida);
                    $comisionado->setVigencia($vigencia);
                    $comisionado->setDias(0);
                    $comisionado->setDiasManu(0);
                    $comisionado->setGastosTaxis(0);
                    $comisionado->save();

                    //copiar destinos_comisionado
                    $destinosComi = DestinosComisionadosPeer::getObjetosDestinosComisionado($comisionado->getNitocc(), $idOriginal, $vigencia);
                    foreach ($destinosComi as $destino):
                        $dest = new DestinosComisionados();
                        $dest = $destino->copy();
                        $dest->setNitocc($destino->getNitocc());
                        $dest->setIdComision($id);
                        $dest->setCodmun($destino->getCodmun());
                        $dest->setVigencia($vigencia);
                        $dest->save();
                    endforeach;

                    //objeto de gasto 06 para cada comisionado
                    $obj = new ComisionadosObjs();
                    $obj->setNitocc($comisionado->getNitocc());
                    $obj->setCodobj('07');
                    $obj->setIdComision($id);
                    $obj->setVigencia($vigencia);
                    $obj->setValor(0);
                    $obj->setEstado(1);
                    $obj->setObserva('');
                    $obj->save();
                endforeach;

            endif;
        endif; //endIf comision original existe


        $this->redirect('comisionar/edit?id=' . $id . '&vigencia=' . $vigencia);
    }

    public function executeProrrogar() {



        $idOriginal = $this->getRequestParameter('idOriginal');


        $id = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $FechaSalida = $this->getRequestParameter('fecha_salida');




        $original = ComisionesPeer::retrieveByPK($idOriginal, $vigencia);

        if (!$original || $original->getActivo() != 0):
            $this->getUser()->setFlash('error', 'No existe la comisión No. ' . $idOriginal . ' con vigencia ' . $vigencia . ' o no se encuentra cerrada');


        else:

            if (!ComisionesPeer::validarFechaHoy($id, $FechaSalida, $vigencia)):
                $this->getUser()->setFlash('error', 'La fecha de salida del comisionado  debe ser mayor o igual a la fecha actual');

            else:

                //copiar toda la informacion pertinente de la comision original a la adicion
                $adicion = ComisionesPeer::retrieveByPK($id, $vigencia);


                $adicion->setObjetivo($original->getObjetivo());

                $adicion->setActividad($original->getActividad());
                $observaciones = $original->getObserva();
                $adicion->setObserva($observaciones);
                $adicion->setIdOriginal($idOriginal);

                $adicion->save();

                //copiar destinos
                $destinos = DestinosPeer::getDestinosComision($idOriginal, $vigencia);
                foreach ($destinos as $destino):
                    $dest = new Destinos();
                    $dest = $destino->copy();
                    $dest->setCodmun($destino->getCodmun());
                    $dest->setIdComision($id);
                    $dest->setVigencia($vigencia);
                    $dest->save();
                endforeach;

                //copiar comisionados planta
                $origsPlanta = ComisionadosPlantaPeer::getComisionados($idOriginal, $vigencia);
                foreach ($origsPlanta as $planta):
                    $comisionado = new ComisionadosPlanta();
                    $comisionado = $planta->copy();
                    $comisionado->setIdComision($id);
                    $comisionado->setNitocc($planta->getNitocc());
                    $comisionado->setFechaSalida($FechaSalida);
                    $comisionado->setVigencia($vigencia);
                    $comisionado->setDias(0);
                    $comisionado->setDiasManu(0);
                    $comisionado->setGastosTaxis(0);
                    $comisionado->save();

                    //copiar destinos_comisionado
                    $destinosComi = DestinosComisionadosPeer::getObjetosDestinosComisionado($comisionado->getNitocc(), $idOriginal, $vigencia);
                    foreach ($destinosComi as $destino):
                        $dest = new DestinosComisionados();
                        $dest = $destino->copy();
                        $dest->setNitocc($destino->getNitocc());
                        $dest->setIdComision($id);
                        $dest->setCodmun($destino->getCodmun());
                        $dest->setVigencia($vigencia);
                        $dest->save();
                    endforeach;

                    //objeto de gasto 06 para cada comisionado
                    $obj = new ComisionadosObjs();
                    $obj->setNitocc($comisionado->getNitocc());
                    $obj->setCodobj('07');
                    $obj->setIdComision($id);
                    $obj->setVigencia($vigencia);
                    $obj->setValor(0);
                    $obj->setEstado(1);
                    $obj->setObserva('');
                    $obj->save();
                endforeach;

                //copiar comisionados contratos
                $origsContrato = ComisionadosContratoPeer::getComisionados($idOriginal, $vigencia);
                foreach ($origsContrato as $planta):
                    $comisionado = new ComisionadosContratoPeer();
                    $comisionado = $planta->copy();
                    $comisionado->setIdComision($id);
                    $comisionado->setNitocc($planta->getNitocc());
                    $comisionado->setFechaSalida($FechaSalida);
                    $comisionado->setVigencia($vigencia);
                    $comisionado->setDias(0);
                    $comisionado->setDiasManu(0);
                    $comisionado->setGastosTaxis(0);
                    $comisionado->save();

                    //copiar destinos_comisionado
                    $destinosComi = DestinosComisionadosPeer::getObjetosDestinosComisionado($comisionado->getNitocc(), $idOriginal, $vigencia);
                    foreach ($destinosComi as $destino):
                        $dest = new DestinosComisionados();
                        $dest = $destino->copy();
                        $dest->setNitocc($destino->getNitocc());
                        $dest->setIdComision($id);
                        $dest->setCodmun($destino->getCodmun());
                        $dest->setVigencia($vigencia);
                        $dest->save();
                    endforeach;

                    //objeto de gasto 06 para cada comisionado
                    $obj = new ComisionadosObjs();
                    $obj->setNitocc($comisionado->getNitocc());
                    $obj->setCodobj('07');
                    $obj->setIdComision($id);
                    $obj->setVigencia($vigencia);
                    $obj->setValor(0);
                    $obj->setEstado(1);
                    $obj->setObserva('');
                    $obj->save();
                endforeach;

            endif;
        endif; //endIf comision original existe


        $this->redirect('comisionar/edit?id=' . $id . '&vigencia=' . $vigencia);
    }

    public function executeEdit() {
        $directorioPrototype = sfConfig::get('sf_prototype_web_dir');

        $this->getResponse()->addJavascript($directorioPrototype . '/js/prototype');

        $this->id_comision = $this->getRequestParameter('id');

        $c = new Criteria;
        $c->addAscendingOrderByColumn(TiposComisionPeer::TIPCOMI);
        $this->tipos_comision = TiposComisionPeer::doSelect($c);





        $this->comision = ComisionesPeer::retrieveByPk($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));



        $this->comisionados_planta = ComisionadosPlantaPeer::getComisionados($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));

        $this->comisionados_contrato = ComisionadosContratoPeer::getComisionados($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));

        $c = new Criteria();
        $c->add(DestinosPeer::ID_COMISION, $this->getRequestParameter('id'));
        $c->add(DestinosPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->add(DestinosPeer::ESTADO, 1);
        $this->destinos = DestinosPeer::doSelect($c);



        //si se trata de una comision de adicion, cambiar de template
        if ($this->comision->getTipcomi() == '06'):


            $this->setTemplate('adicion');
        endif;

        if ($this->comision->getTipcomi() == '05' || $this->comision->getTipcomi() == '03' || $this->comision->getTipcomi() == '04'):


            $this->setTemplate('prorroga');
        endif;
    }

    public function executeUpdate() {



        $id = $this->getRequestParameter('id');
        $vigencia = $this->getRequestParameter('vigencia');
        $objetivos = utils::utfToAcute($this->getRequestParameter('objetivos'));
        $actividades = utils::utfToAcute($this->getRequestParameter('actividades'));
        $observaciones = utils::utfToAcute($this->getRequestParameter('observaciones'));
        $destinos_add = utils::utfToAcute($this->getRequestParameter('destinos_add'));
        $id_proyecto = utils::utfToAcute($this->getRequestParameter('id_proyecto'));
        $aplica_porcentaje = $this->getRequestParameter('aplica_porcentaje');


        $comision = ComisionesPeer::retrieveByPk($id, $vigencia);
        if ($comision):



            if (strlen($observaciones) <= 2000 && strlen($actividades) <= 2000) {
                $comision->setObjetivo($objetivos);
                $comision->setActividad($actividades);

//Actualizacion  => Fecha : 31 de Mayo de 2011
//Se modifico condicion para permitir el registro de observaciones con numero de caracteres hasta 1000.

                if (strlen($observaciones) > 1000) {

                    $comision->setDestinosAdd($destinos_add);
                    $comision->setAplicaPorcentaje($aplica_porcentaje);
                    $comision->setCodpro($id_proyecto);
                    $comision->save();
                    $this->getUser()->setFlash('message', "<div class='success'>La comisi&oacute;n <strong>" . $id . "</strong> ha sido guardada correctamente.</br> ERROR => Las observaciones para la comisi&oacute;n <b>" . $id . "</b> sobrepasan el numero de caracteres permitidos<br/></div>");
                } else {

                    $comision->setDestinosAdd($destinos_add);
                    $comision->setAplicaPorcentaje($aplica_porcentaje);
                    $comision->setObserva($observaciones);
                    $comision->setCodpro($id_proyecto);
                    $comision->save();
                    $this->getUser()->setFlash('message', "<div class='success'>La comisi&oacute;n <strong>" . $id . "</strong> ha sido guardada correctamente</div>");
                }
            } else {



                $comision->setDestinosAdd($destinos_add);
                $comision->setCodpro($id_proyecto);
                $comision->setAplicaPorcentaje($aplica_porcentaje);
                $comision->save();
                $this->getUser()->setFlash('message', "<div class='error'>ERROR => Las observaciones o Actividades para la comisi&oacute;n <b>" . $id . "</b> sobrepasan el numero de caracteres permitidos (2000)<br/></div>");
            }

            return $this->redirect('comisionar/edit?id=' . $comision->getId() . '&vigencia=' . $vigencia);
        endif;
    }

    public function executeDelete() {
        $comision = ComisionesPeer::retrieveByPk($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));
        if ($comision):
            $comision->setEstado(0);
            $comision->save();
        endif;
        return $this->redirect('comisionar/index');
    }

    public function executePreview() {
        $c = new Criteria();
        $c->add(ComisionesPeer::ID, $this->getRequestParameter('id'));
        $c->add(ComisionesPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        foreach (ComisionesPeer::doSelectJoinAll($c) as $this->comision):
        endforeach;

        $c = new Criteria();
        $c->add(ComisionadosPlantaPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosPlantaPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->add(ComisionadosPlantaPeer::ESTADO, 1);
        $this->plantas = ComisionadosPlantaPeer::doSelect($c);

        $c = new Criteria();
        $c->add(ComisionadosContratoPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosContratoPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->add(ComisionadosContratoPeer::ESTADO, 1);
        $this->contratos = ComisionadosContratoPeer::doSelect($c);

        $c = new Criteria();
        $c->add(DestinosPeer::ID_COMISION, $this->comision->getId());
        $c->add(DestinosPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->add(DestinosPeer::ESTADO, 1);
        $this->destinos = DestinosPeer::doSelectJoinAll($c);
    }

    public function executePreviewDetalle() {


        $comision = ComisionesPeer::retrieveByPk($this->getRequestParameter('id'), $this->getRequestParameter('vigencia'));

        $c = new Criteria();
        $c->add(ComisionadosObjsPeer::ID_COMISION, $this->getRequestParameter('id'));
        $c->add(ComisionadosObjsPeer::VIGENCIA, $this->getRequestParameter('vigencia'));


        foreach (ComisionadosObjsPeer::doSelect($c) as $this->gastos):

        endforeach;


        $c = new Criteria();
        $c->add(ComisionesPeer::ID, $this->getRequestParameter('id'));
        $c->add(ComisionesPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        foreach (ComisionesPeer::doSelectJoinAll($c) as $this->comision):

        endforeach;

        //solo muestra los comisionados a los que se ha agregado gastos.


        $c = new Criteria();
        $c->add(ComisionadosObjsPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosObjsPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        if ($comision->getTipcomi() == '01' || $comision->getTipcomi() == '02' || $comision->getTipcomi() == '07') {
            $c->add(ComisionadosObjsPeer::VALOR, 0, Criteria::GREATER_EQUAL);
        }
        $c->add(ComisionadosPlantaPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosPlantaPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->addJoin(ComisionadosPlantaPeer::NITOCC, ComisionadosObjsPeer::NITOCC);
        $c->add(ComisionadosPlantaPeer::ESTADO, 1);

        $c->setDistinct();

        $this->plantas = ComisionadosPlantaPeer::doSelect($c);





        $c = new Criteria();
        $c->add(ComisionadosObjsPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosObjsPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        if ($comision->getTipcomi() == '01' || $comision->getTipcomi() == '02' || $comision->getTipcomi() == '07') {
            $c->add(ComisionadosObjsPeer::VALOR, 0, Criteria::GREATER_EQUAL);
        }
        $c->add(ComisionadosContratoPeer::ID_COMISION, $this->comision->getId());
        $c->add(ComisionadosContratoPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->addJoin(ComisionadosContratoPeer::NITOCC, ComisionadosObjsPeer::NITOCC);
        $c->add(ComisionadosContratoPeer::ESTADO, 1);

        $c->setDistinct();
        $this->contratos = ComisionadosContratoPeer::doSelect($c);

        $c = new Criteria();
        $c->add(DestinosPeer::ID_COMISION, $this->getRequestParameter('id'));
        $c->add(DestinosPeer::VIGENCIA, $this->getRequestParameter('vigencia'));
        $c->add(DestinosPeer::ESTADO, 1);
        $this->destinos = DestinosPeer::doSelect($c);
    }

    public function executePdf() {

        $htmlContent = $this->getRequestParameter('htmlContent');

        $filename = $this->getRequestParameter('filename');
        $tipo = $this->getRequestParameter('tipo');
        $id_comision = $this->getRequestParameter('id_comision');
        $vigencia = $this->getRequestParameter('vigencia');

        //Compatibilidad Internet Explorer del demonio
        $htmlContent = urlencode($htmlContent);
        $htmlContent = str_replace('%0D', '', $htmlContent);
        $htmlContent = str_replace('%0A', '', $htmlContent);
        $htmlContent = urldecode($htmlContent);

        //Inicializacion TCPDF
        $pdf = new PDF('L', 'mm', 'Letter');
        $pdf->setComision($id_comision, $vigencia);
        $pdf->SetAutoPageBreak(true, 20);
        $pdf->SetFont('helvetica', '', 6);
        $pdf->SetFillColor(255);
        $pdf->SetTextColor(0);

        $pdf->AddPage();
        //Contenido
        $pdf->writeHTML($htmlContent, true, 0, true, 0);
        //Guardar
        $pdf->Output($filename . '.pdf', 'D');
    }

    public function executeCdpdf() {

        $htmlContent = $this->getRequestParameter('htmlContent');
        $filename = $this->getRequestParameter('filename');
        $tipo = $this->getRequestParameter('tipo');
        $id_comision = $this->getRequestParameter('id_comision');
        $vigencia = $this->getRequestParameter('vigencia');
        $inv = $this->getRequestParameter('inv');
        //Compatibilidad Internet Explorer del demonio
        $htmlContent = urlencode($htmlContent);
        $htmlContent = str_replace('%0D', '', $htmlContent);
        $htmlContent = str_replace('%0A', '', $htmlContent);
        $htmlContent = urldecode($htmlContent);

        //Inicializacion TCPDF
        $pdf = new CDPDF();
        $pdf->setComision($id_comision, $vigencia);
        $pdf->setInversion($inv);
        $pdf->SetAutoPageBreak(true, 20);
        $pdf->SetFont('helvetica', '', 9);
        $pdf->SetFillColor(255);
        $pdf->SetTextColor(0);
        $pdf->SetMargins(20, 40, 20);

        $pdf->AddPage();
        //Contenido
        $pdf->writeHTML($htmlContent, true, 0, true, 0);
        //Guardar
        $pdf->Output($filename . '.pdf', 'D');
    }

    /**
     * Muestra una vista resumida con toda la informacion de la comision
     * @return unknown_type
     */
    public function executeResumen() {
        $this->id = $this->getRequestParameter('id');
        $this->vigencia = $this->getRequestParameter('vigencia');

        //buscar comision
        $this->comision = ComisionesPeer::retrieveByPk($this->id, $this->vigencia);

        //comisionados
        $this->comisionados_planta = ComisionadosPlantaPeer::getComisionados($this->id, $this->vigencia);
        $this->comisionados_contrato = ComisionadosContratoPeer::getComisionados($this->id, $this->vigencia);

        //destinos
        $c = new Criteria();
        $c->add(DestinosPeer::ID_COMISION, $this->id);
        $c->add(DestinosPeer::VIGENCIA, $this->vigencia);
        $c->add(DestinosPeer::ESTADO, 1);

        $this->destinos = DestinosPeer::doSelect($c);
    }

    private function validarCierre($id_comision) {
        //ACA se valida que toda la comision este lista para ser cerrada
        //TODO hacer validacion
        return true;
    }

    private function enviarEmail($destinatario, $asunto, $cuerpo) {


  //  $text = 'Text version of email';
        $html = $cuerpo;
        //$file = '/home/richard/example.php';
        $crlf = "\n";
        $hdrs = array(
            'From' => 'websafi@sgc.gov.co',
            'Subject' => $asunto
        );

        $mime = new Mail_mime($crlf);

  //$mime->setTXTBody($text);
        $mime->setHTMLBody($html);
  //$mime->addAttachment($file, 'text/plain');
  //do not ever try to call these lines in reverse order
        $body = $mime->get();
        $hdrs = $mime->headers($hdrs);

        $smtpinfo["host"] = "172.25.1.3";
        $smtpinfo["port"] = "25";

        //$smtpinfo["debug"] = true;
        $mail_object = & Mail::factory("smtp", $smtpinfo);
  //echo $destinatario;
        $mail_object->send($destinatario, $hdrs, $body);
  //$mail_object->send('alexia.velasquez@sofhouse.net',$hdrs,$body);
  //$mail_object->send('mcapera@sgc.gov.co',$hdrs,$body);
    }

  //ACTUALIZAR COMISIONADO

    public function executeActualiza() {
        
    }

    public function executeActua_comisionado() {

        $this->nitocc = $this->getRequestParameter('nitocc');

        if ($this->nitocc != "") {
            
        } else {
            $this->getUser()->setFlash('message', "<div class='error'>No ha seleccionado un Comisionado</div>");
            $this->redirect('comisionar/actualiza');
        }
    }

    public function executeGuardar_comisionado() {

        $this->nitocc = $this->getRequestParameter('nitocc');

        $this->email = $this->getRequestParameter('email');

        $tercero = TercerosPeer::retrieveByPk($this->nitocc);
        $tercero->setEmail($this->email);
        $tercero->save();

        $this->getUser()->setFlash('message', "<div class='error'>Se ha actualizado correctamente el comisionado</div>");
        $this->redirect('comisionar/actualiza');
    }

}
