<?php
require_once('include/MVC/Controller/SugarController.php');
require_once('config.php');
require_once('include/connectors/johnsyslab/connEmail.php');
require_once('include/connectors/johnsyslab/connSMS.php');
require_once('include/connectors/johnsyslab/connWhatsapp.php');

$GLOBALS['installing'] = true;
require_once('include/entryPoint.php');
$GLOBALS['log'] = LoggerManager :: getLogger('SugarCRM');
//require_once('cronSendCampanias.php');

class campa_programadosController extends SugarController 
{

   function action_mostrar()
   {
    	
    	$modulo_comunicaciones=BeanFactory::getBean("COMM1_communications",$_REQUEST['id']);
     
        $fecha=explode(" ", $modulo_comunicaciones->datetime_execute);
        $fecha_hora_min=explode(":",$fecha[1]);
        $hora=$fecha_hora_min[0];
        $minuto=$fecha_hora_min[1];
        $tipo="";
       if($hora>=12)
       {
         $tipo="PM";
         $hora=$hora-12;
         
       }
       else{
         $tipo="AM";
       }
        $comunicacaionArray=array
                                (
                                 'id'=>$_REQUEST['id'],
                                 'nombre' =>$modulo_comunicaciones->name,
                                 'tipo_campania'=>$modulo_comunicaciones->tipo_campania,
                                 'fecha'=>$fecha[0],
                                 'hora'=>$hora,
                                 'minuto'=>$minuto
                                );

       $horas=array();
       for($i=0;$i<=12;$i++)
       {
          $horas[$i]=$i;
       }   
       $minutos=array();
       for($i=0;$i<60;$i++)
       {
          $minutos[$i]=$i;
       }   

       
       
       $this->view_object_map['horas'] = $horas;     
       $this->view_object_map['minutos'] = $minutos;
       $this->view_object_map['tipo'] = $tipo;                 

        $this->view_object_map['comunicacaionArray'] = $comunicacaionArray;
        $this->view = 'mostrar';
        
    }




   function action_listview()
    {
        parent::action_listview();
    }

   function action_actualizar()
    {
       /*$modulo_comunicaciones=BeanFactory::getBean("COMM1_communications",$_REQUEST['id']);
       $modulo_comunicaciones->name=$_REQUEST['nombre'];
       $modulo_comunicaciones->tipo_campania=$_REQUEST['tipo'];
       $modulo_comunicaciones->datetime_execute=$_REQUEST['fecha'];
       $modulo_comunicaciones->save();*/

       $db = DBManagerFactory::getInstance();

       $id=$_REQUEST['id'];      
       $nombre=$_REQUEST['nombre'];
      // $tipo=$_REQUEST['tipo_envio'];
       $fecha=$_REQUEST['fecha'];
       $hora=$_REQUEST['hora'];
       $minutos=$_REQUEST['minutos'];
      
              //$ampm = substr($_REQUEST['fecha'],strlen($_REQUEST['fecha'])-5);
              echo $ampm;
              // $ampm=explode(" ",$ampm);
              
                    if($_REQUEST['tipo']== 'PM'){
                        
						if($hora!=12)
						{
						  $hora=($hora+12); 
						}
                        
                        // aumentamos las horas
                        $fecha = $fecha.' '.$hora.':'.$minutos;
                    }else{
                       
                        if($hora == 12){
                            $hora = '00';
                        }
                        // aumentamos las horas
                         $fecha = $fecha.' '.$hora.':'.$minutos;
                    }
                    
                     //$fecha=$_REQUEST['fecha'];

                  //   echo $_REQUEST['fecha'];

       $sql = "UPDATE comm1_communications SET name='{$nombre}',datetime_execute='{$fecha}' WHERE id='{$id}'";
       $db->query($sql);


      echo 'actualizado';
       exit();

      

    }
    

    function action_eliminar(){
      $db = DBManagerFactory::getInstance();
      $id=$_REQUEST['id'];

      
       $sql ="DELETE FROM comm1_clientes_communications WHERE comm1_communications_id_c='{$id}'";
       $db->query($sql);
       
       $sql ="DELETE FROM comm1_communications WHERE id='{$id}'";
       $db->query($sql);

       echo 'elminado';
       exit();


    }

    function action_enviar(){
      $db = DBManagerFactory::getInstance();
      $id=$_REQUEST['id'];
      //echo $id;
      $sql = "SELECT *
              FROM comm1_communications 
              WHERE 
                deleted = 0 AND
                status = 'PENDIENTE' AND
                id ='{$id}'
              ";
    $result = $db->query($sql);
    // recorremos los resultados
    $fechaM = @date('Y-m-d H:i:s');


    if(isset($result->num_rows) && $result->num_rows>0){
        while($row = $db->fetchByAssoc($result) ){
            echo $row['tipo_campania'];
            // dividimos por el tipo de campania
            switch($row['tipo_campania']){
                case "EMAIL":
                    echo "enviado";
                    $this->fnProcessEmail($row,$fechaM);
                    break;
                case "SMS":
                    $this->fnProcessSms($row,$fechaM);
                    break;
                case "WHATSAPP":
                    $this->fnProcessWhatsapp($row,$fechaM);
                    break;
            }
        }
    }else
    {
        echo "no";
    }

      

    }
    

    private function fnGetDatosPendientes($row,$db){
    // consultamos los registros pendientes por enviar
    $sql = "SELECT clicom.*,
                leads.first_name,
                leads.last_name,
                leads.phone_mobile,
                addr.email_address,
                
                /*contacts_cstm.nit_cedula_c,*/
                leads.do_not_call,
                leads.id as contact_id
            FROM 
                comm1_clientes_communications clicom
                    INNER JOIN
                        (
                            leads  
                                INNER JOIN
                                    (
                                        email_addr_bean_rel bean 
                                            INNER JOIN
                                                email_addresses addr ON
                                                    bean.email_address_id = addr.id AND
                                                    bean.primary_address = 1
                                    )
                                    ON leads.id = bean.bean_id
                                INNER JOIN
                                    leads_cstm cstm ON
                                        leads.id = cstm.id_c
                        )
                        ON clicom.contact_id_c = leads.id
            WHERE 
                clicom.deleted = 0 AND
                clicom.status = 'PENDIENTE' AND
                clicom.datetime_send IS NULL AND
                clicom.comm1_communications_id_c = '".$row['id']."' AND
                leads.do_not_call = 0
        ";
    return $db->query($sql);
    
}

/**
 * procesa action send email
 * 
 * @author john jairo cortes garcia <john.cortes@syslab.so>
 * @param type $row
 */
private function fnProcessEmail($row,$fechaM){
    // instance db
   
    $db = DBManagerFactory::getInstance();

    $result = $this->fnGetDatosPendientes($row,$db);
    echo "enviando email";
    
    if(isset($result->num_rows) && $result->num_rows>0){
        while($row2 = $db->fetchByAssoc($result)){
            // validamos si no se le puede enviar mas
            if($row2['do_not_call'] == 1){
                continue;
            }
            // set email
            $objEmail = new connEmail();
            // set asunto personalizado
            $asunto = $this->strReplaceColumnsTxt($row['name'],$row2);
            //$nombre=fncampiarnombre($row2["first_name"]);
            $asunto="hola Sr(a) ".$row2["first_name"].", enviamos ".$asunto;
            // reemplazamos las pal claves
            $objEmail->setAsunto(ucwords(strtolower($asunto)));
            if (filter_var($row2['email_address'], FILTER_VALIDATE_EMAIL)) {
                // verificamos si hay q reemplazar
                if($row['crossing_fields'] == "S"){
                    $row['msj_text'] = $this->strReplaceColumnsTxt($row['msj_text'],$row2);
                }
                //echo "enviar email::".$row2["first_name"]."->".$row2["last_name"]."<br/>";
                $objEmail->setDestinatario($row2['email_address']);
                 
                // creamos el archivo temporal y set header
                $objEmail->setHeader($this->createFileTmpViewMail($row2['contact_id'],$row2['id'],html_entity_decode($row['msj_text'])));
              
                // set footer
                $objEmail->setFooter($this->fnFooterDarDeBajaContacto($row2['contact_id']));
                //

                $objEmail->sendEmail(html_entity_decode($row['msj_text']));
                // actualizamos el estado

                $this->fnUpdateEstadoSend($row2['id'],$row2['email_address'],$fechaM);

            }
        }
        // verificamos para actualizar la principal
       $this->fnUpdateEstadoGeneneral($row,$fechaM);
    }else{
        echo "No hay datos de EMAIL para enviar<br/>";
    }
}

private function fncampiarnombre($palabra){
 $nombre=explode(" ",$palabra);
 return  $nombre[0];
}


/**
 * envia los sms
 * 
 * @author john jairo cortes garcia <john.cortes@syslab.so>
 * @param type $row
 */
private function fnProcessSms($row,$fechaM){
    // instance db
    $db = DBManagerFactory::getInstance();
    $result = $this->fnGetDatosPendientes($row,$db);
    
    if(isset($result->num_rows) && $result->num_rows>0){
        $objConnSms = new connSMS();
        while($row2 = $db->fetchByAssoc($result)){
            // verificamos consistencia del numero
            if(isset($row2['phone_mobile']) && $row2['phone_mobile']!=""){
                if(strlen($row2['phone_mobile']) == 10 && substr($row2['phone_mobile'],0,1) == 3){
                    // verificamos si hay q reemplazar
                    if($row['crossing_fields'] == "S"){
                        $row['msj_text'] = $this->strReplaceColumnsTxt($row['msj_text'],$row2);
                    }
                    echo "enviar sms::".$row2["first_name"]."->".$row2["last_name"]."<br/>";
                    $objConnSms->sendSmsAvisel($row2['phone_mobile'], $row['msj_text']);
                    // actualizamos el estado
                    $this->fnUpdateEstadoSend($row2['id'],$row2['phone_mobile'],$fechaM);
                }
            }
        }
        // verificamos para actualizar la principal
        $this->fnUpdateEstadoGeneneral($row,$fechaM);
    }else{
        echo "No hay datos de SMS para enviar<br/>";
    }
}

private function fnProcessWhatsapp($row,$fechaM){
    // instance db
    $db = DBManagerFactory::getInstance();
    $result = $this->fnGetDatosPendientes($row,$db);
    
    if(isset($result->num_rows) && $result->num_rows>0){
        $objConnWhatsapp = new connWhatsapp();
        while($row2 = $db->fetchByAssoc($result)){
            if(strlen($row2['phone_mobile']) == 10 && substr($row2['phone_mobile'],0,1) == 3){
                echo "enviar whatsapp::".$row2["first_name"]."->".$row2["last_name"]."<br/>";
                // enviamos la imagen
                if($row['image1'] != "" && $row['image1']!=null){
                    $pathI = dirname(__FILE__)."/tmpimagenes/img_whatsapp/".$row['image1'];
                    $objConnWhatsapp->sendMsgImage($row2['phone_mobile'],$pathI);
                }
                // enviamos el texto
                if($row['msj_text'] != "" && $row['msj_text']!=null){
                    // verificamos si hay q reemplazar
                    if($row['crossing_fields'] == "S"){
                        $row['msj_text'] = strReplaceColumnsTxt($row['msj_text'],$row2);
                    }
                    $objConnWhatsapp->sendMsgText($row2['phone_mobile'],$row['msj_text']);
                }
                // actualizamos el estado
                fnUpdateEstadoSend($row2['id'],$row2['phone_mobile'],$fechaM);
            }
        }
        // verificamos para actualizar la principal
        fnUpdateEstadoGeneneral($row,$fechaM);
    }else{
        echo "No hay datos de WHATSAPP para enviar<br/>";
    }
}

/**
 * actualiza el estado general de la campania
 * 
 * @author john jairo cortes garcia <john.cortes@syslab.so>
 * @param type $row
 * @param type $fechaM
 * @return boolean
 * @throws Exception
 */
private function fnUpdateEstadoGeneneral($row,$fechaM){
    try{
        $db = DBManagerFactory::getInstance();
        // verificamos si aun hay pendientes por enviar
        $result = $this->fnGetDatosPendientes($row,$db);
        if(isset($result->num_rows) && $result->num_rows==0){
            $sql = "
                UPDATE
                    comm1_communications
                SET
                    status = 'EJECUTADA',
                    date_modified = '".$fechaM."'
                WHERE
                    id = '".$row['id']."'
                ";
        }
        $db->query($sql);
        
        return true;
    } catch (Exception $ex) {
        throw $ex;
    }
}

private function fnUpdateEstadoSend($id,$sendT,$fechaM){
    try{
        $db = DBManagerFactory::getInstance();
        
        $sql = "
            UPDATE
                comm1_clientes_communications
            SET
                status = 'EJECUTADA',
                date_modified = '".$fechaM."',
                datetime_send = '".$fechaM."',
                send_target = '".$sendT."'
            WHERE
                id = '".$id."'
                 ";
        $db->query($sql);
        
        return true;
    } catch (Exception $ex) {
        throw $ex;
    }
}

/**
 * reemplaza las palabras reservadas
 * 
 * @authot john jairo cortes garcia <john.cortes@syslab.so>
 * @param type $strTxt
 * @param type $row2
 * @return type
 * @throws Exception
 */
private function strReplaceColumnsTxt($strTxt,$row2){
    try{
        $strTxt = str_replace("[first_name]",$row2['first_name'],$strTxt);
        $strTxt = str_replace("[last_name]",$row2['last_name'],$strTxt);
        $strTxt = str_replace("[phone_mobile]",$row2['phone_mobile'],$strTxt);
        $strTxt = str_replace("[nit_cedula_c]",$row2['first_name'],$strTxt);
        
        return $strTxt;
    } catch (Exception $ex) {
        throw $ex;
    }
}


/**
 * 
 * @author john jairo cortes garcia <john.cortes@syslab.so>
 * @param type $idcliente
 * @param type $idcamparowcli
 * @param type $htmlcliente
 * @return boolean
 * @throws Exception
 */
private function createFileTmpViewMail($idcliente,$idcamparowcli,$htmlcliente){
    try{
        $namefile = $idcliente."_".$idcamparowcli;
        $pathApp = dirname(__FILE__);
        $daynow = @date('Ymd');
        if(!is_dir($pathApp."/tmpimagenes/filescampanias/".$daynow)){
            // creamos el directorio en la carpeta control //
            mkdir($pathApp."/tmpimagenes/filescampanias/".$daynow, 0755);
        }
        
        /**creamos el archivo html**/
        if (file_exists($pathApp."/tmpimagenes/filescampanias/".$daynow."/" . $namefile . '.html'))
            unlink($pathApp."/tmpimagenes/filescampanias/".$daynow."/" . $namefile . '.html');
        /* abrimos un archivo*/
        @chmod($namefile, 0777);
        $fp = fopen($pathApp."/tmpimagenes/filescampanias/".$daynow."/" . $namefile . '.html', "w");
        /* escribimos en el archivo */
        fwrite($fp,$htmlcliente);
        fclose($fp);
        // return
        $strH = "<div style='font-style:verdana;font-size:9pt;'>Si no visualiza correctamente este mensaje pulse <a href='http://".$_SERVER['SERVER_NAME']."/tmpimagenes/filescampanias/".$daynow."/" . $namefile . ".html'>aquí</a></div>";
        return $strH;
    } catch (Exception $ex) {
        throw $ex;
    }
}

/**
 * 
 * @param type $idcontacto
 * @throws Exception
 */
private function fnFooterDarDeBajaContacto($idcontacto){
    try{        
        $strH = "<div style='font-style:verdana;font-size:9pt;'>Si no desea recibir mas estos boletines pulse <a href='http://".$_SERVER['SERVER_NAME']."/do_not_call.php?record=".$idcontacto."'>aqui</a></div>";
        return $strH;
    } catch (Exception $ex) {
        throw $ex;
    }
}
























}




?>