/**
  * Actualizar Etapa de Oportunidad
  *
  * @param string $id_cliente
  * @return boolean
  */
 function ajax_actualizar_oportunidad($id_oportunidad = NULL)
 {
     $id_oportunidad = $this->input->post('id_oportunidad', true);
     $id_etapa = $this->input->post('id_etapa', true);
     //Si el $fieldset es vacio
     if (empty($id_oportunidad) || empty($id_etapa)) {
         return false;
     }
     //
     // Begin Transaction
     // docs: https://ellislab.com/codeigniter/user-guide/database/transactions.html
     //
     $this->db->trans_start();
     $fieldset = array("id_etapa_venta" => $id_etapa);
     $clause = array("uuid_oportunidad = UNHEX('{$id_oportunidad}')" => NULL);
     //Actualizar Cliente Potencial
     $this->db->where($clause)->update('opp_oportunidades', $fieldset);
     //-----------------
     // Verificar si la etapa fue actualiza a Vendido
     //-----------------
     $fields = array("ocat.valor AS etapa_venta", "HEX(opp.uuid_propiedad) AS uuid_propiedad");
     $clause = array("opp.uuid_oportunidad = UNHEX('{$id_oportunidad}')" => NULL);
     $checkEtapa = $this->db->select($fields)->distinct()->from('opp_oportunidades AS opp')->join('opp_oportunidades_cat AS ocat', 'ocat.id_cat = opp.id_etapa_venta', 'LEFT')->where($clause)->get()->result_array();
     //-----------------
     // Obtener los Estados de las Propiedades
     //-----------------
     $listaEstadosPropiedades = $this->db->select("id_cat AS id_estado_propiedad")->distinct()->from('rpo_propiedades_cat')->where("valor", "no_disponible")->get()->result_array();
     //verificar si la etapa fue actualiza a Vendido
     //si es vendido, cambiar la propiedad a No Disponible.
     if (!empty($checkEtapa) && !empty($checkEtapa[0]["etapa_venta"]) && $checkEtapa[0]["etapa_venta"] == "vendido") {
         //Actualizar Propiedad
         $fieldset = array("id_estado_propiedad" => $listaEstadosPropiedades[0]["id_estado_propiedad"]);
         $clause = array("uuid_propiedad = UNHEX('" . $checkEtapa[0]["uuid_propiedad"] . "')" => NULL);
         $this->db->where($clause)->update('rpo_propiedades', $fieldset);
     }
     //---------------------------------------
     //End Transaction
     $this->db->trans_complete();
     //redis
     if ($this->is_redis_as_runnig && ($checkEtapa[0]["etapa_venta"] != "vendido" && $checkEtapa[0]["etapa_venta"] != "venta_perdida")) {
         //verifica si el redis esta corriendo
         //armar datos
         $creado_por = CRM_Controller::$uuid_usuario;
         $datosOportunidad = $this->db->query("Select id_oportunidad, nombre, fecha_creacion,HEX(id_asignado) as id_asignado from opp_oportunidades where HEX(uuid_oportunidad) = '" . $id_oportunidad . "' ")->row_array();
         $datos_notificaciones = array();
         $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'oportunidad_actualizar_etapa', 'etapa' => $checkEtapa[0]["etapa_venta"]);
         $datos_notificaciones['data'] = json_encode($data_notificacion);
         $uuid_asignado = $datosOportunidad['id_asignado'];
         $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por);
         $args = array('id' => $notificacion['id']);
         //$this->redis->publish('oportunidad',json_encode(array('id_asignado' =>$uuid_asignado, 'id_notificacion' => $notificacion['id'] )));
         $schedules = Jobs::mostrar_jobs(array('id_job' => 2));
         if (!empty($schedules)) {
             foreach ($schedules as $schedule) {
                 $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia']));
                 $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama'));
                 $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'fecha_oportunidad' => $datosOportunidad['fecha_creacion'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia']));
                 $schedule_usuarios = json_decode($schedule['uuid_usuarios']);
                 if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) {
                     ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $args);
                 } else {
                     ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $args);
                 }
             }
         }
     }
     // Managing Errors
     if ($this->db->trans_status() === FALSE) {
         log_message("error", "MODULO: Oportunidades --> No se pudo actualizar la etapa de la oportunidad en DB.");
         return array("respuesta" => false, "mensaje" => "Hubo un error al tratar de actualizar la etapa de la oportunidad.");
     } else {
         //Limpiar cache
         @CRM_Controller::$cache->delete("infoOportunidad");
         @CRM_Controller::$cache->delete("listado_oportunidades");
         return array("respuesta" => true, "mensaje" => "Se ha cambiado la etapa de la oportunidad satisfactoriamente.");
     }
 }
 /**
  * Guardar Formulario de Cliente Juridico
  *
  * @return boolean
  */
 function guardar_actividad()
 {
     if (Util::is_array_empty($_POST)) {
         return false;
     }
     //Init Fieldset variable
     $fieldset = array();
     //Remover el boton de submit que por default
     //viene con el valor "Guardar"
     unset($_POST["campo"]["guardar"]);
     $modulo_relacionado_con = $this->seleccionar_modulos_relacionado_con(array('valor' => $_POST['campo']['modulo_relacion']));
     if (!isset($_POST["campo"]["uuid_cliente"])) {
         $uuid_cliente = $this->seleccionar_cliente_de_oportunidad($_POST["campo"]["uuid_oportunidad"]);
         //$uuid_cliente= $uuid_cliente[0]['uuid_cliente'];
         $fieldset["uuid_cliente"] = $uuid_cliente[0]['uuid_cliente'];
     }
     unset($_POST["campo"]["modulo_relacion"]);
     //Recorrer arreglo e insertar los valores que no estan vacios
     //en el fieldset
     foreach ($_POST["campo"] as $fieldname => $fieldvalue) {
         if (empty($fieldvalue)) {
             continue;
         }
         //check if is an array
         if (is_array($fieldvalue)) {
             foreach ($fieldvalue as $name => $value) {
                 if ($value != "") {
                     if (strpos($name, 'uuid_') !== false) {
                         $fieldset["{$name} = UNHEX('{$value}')"] = NULL;
                     } else {
                         $fieldset[$name] = $this->security->xss_clean($value);
                     }
                 }
             }
         } else {
             if (strpos($fieldname, 'uuid_') !== false) {
                 $this->db->set($fieldname, "UNHEX('{$fieldvalue}')", FALSE);
             } else {
                 $fieldset[$fieldname] = $fieldvalue;
             }
         }
     }
     if (isset($_POST['campo']['completada'])) {
         if ($_POST['campo']['completada'] != 0 || $_POST['campo']['completada'] == "") {
             $fieldset["completada"] = 1;
         } else {
             $fieldset["completada"] = 0;
         }
     } else {
         $fieldset["completada"] = 0;
     }
     //Si el $fieldset es vacio
     if (Util::is_array_empty($fieldset)) {
         return false;
     }
     //
     // Begin Transaction
     // docs: https://ellislab.com/codeigniter/user-guide/database/transactions.html
     //
     $this->db->trans_start();
     $fieldset["creado_por"] = $this->session->userdata('id_usuario');
     $fieldset["fecha_creacion"] = date('Y-m-d H-i-s');
     $fieldset["relacionado_con"] = $modulo_relacionado_con[0]['id_cat'];
     $fieldset["fecha"] = date('Y-m-d H:i:s', strtotime($fieldset["fecha"]));
     //Campos adicionales
     $this->db->set('uuid_actividad', 'ORDER_UUID(uuid())', FALSE);
     //Guardar Actividad
     $this->db->insert('act_actividades', $fieldset);
     $idActividad = $this->db->insert_id();
     //---------------------------------------
     //End Transaction
     $this->db->trans_complete();
     $uuid_oportunidad = $_POST['campo']['uuid_oportunidad'];
     $uuid_tipo = $this->db->query("SELECT HEX(uuid_tipo_actividad) AS uuid_tipo,etiqueta FROM act_tipo_actividades WHERE etiqueta LIKE '%telefonica%'")->row_array();
     $tipo_actividad = $_POST['campo']['uuid_tipo_actividad'];
     $oportunidades = $this->db->query("select count(uuid_oportunidad) as oportunidades from act_actividades where HEX(uuid_oportunidad) ='" . $uuid_oportunidad . "'")->row_array();
     if ($this->is_redis_as_runnig && $oportunidades['oportunidades'] == 1 && $uuid_tipo['uuid_tipo'] != $tipo_actividad) {
         //armar datos
         $uuid_asignado = $_POST["campo"]["uuid_asignado"];
         $creado_por = CRM_Controller::$uuid_usuario;
         $datosOportunidad = $this->db->query("Select id_oportunidad, nombre from opp_oportunidades where HEX(uuid_oportunidad) = '" . $uuid_oportunidad . "' ")->row_array();
         $datos_notificaciones = array();
         $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'tiene_oportunidad');
         $datos_notificaciones['data'] = json_encode($data_notificacion);
         $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por);
         $args = array('id' => $notificacion['id']);
         $schedules = Jobs::mostrar_jobs(array('id_job' => 3));
         $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia']));
         $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama'));
         if (!empty($schedules)) {
             foreach ($schedules as $schedule) {
                 $schedule_usuarios = json_decode($schedule['uuid_usuarios']);
                 $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia']));
                 if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) {
                     ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args);
                 } else {
                     ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args);
                 }
             }
         }
     }
     if ($this->is_redis_as_runnig && $oportunidades['oportunidades'] >= 5) {
         $oportunidades = $this->db->query("select HEX(uuid_tipo_actividad) as uuid_tipo_actividad from act_actividades where HEX(uuid_oportunidad) ='" . $uuid_oportunidad . "' LIMIT 5")->result_array();
         $tipo = $this->db->query("SELECT HEX(uuid_tipo_actividad) AS uuid_tipo FROM act_tipo_actividades WHERE  etiqueta LIKE '%reunion%' OR etiqueta LIKE '%visita%'")->result_array();
         $array5_opotunidad = array();
         $array_tipo = array();
         foreach ($oportunidades as $actividades) {
             array_push($array5_opotunidad, $actividades['uuid_tipo_actividad']);
         }
         foreach ($tipo as $actividades) {
             array_push($array_tipo, $actividades['uuid_tipo']);
         }
         $array_conciden = array_intersect($array5_opotunidad, $array_tipo);
         if (count($array_conciden) == 0) {
             //armar datos
             $uuid_asignado = $_POST["campo"]["uuid_asignado"];
             $creado_por = CRM_Controller::$uuid_usuario;
             $datosOportunidad = $this->db->query("Select id_oportunidad, nombre from opp_oportunidades where HEX(uuid_oportunidad) = '" . $uuid_oportunidad . "' ")->row_array();
             $datos_notificaciones = array();
             $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'tiene_actividad');
             $datos_notificaciones['data'] = json_encode($data_notificacion);
             $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por);
             $args = array('id' => $notificacion['id']);
             $schedules = Jobs::mostrar_jobs(array('id_job' => 7));
             $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia']));
             $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama'));
             if (!empty($schedules)) {
                 foreach ($schedules as $schedule) {
                     $schedule_usuarios = json_decode($schedule['uuid_usuarios']);
                     $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia']));
                     if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) {
                         ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args);
                     } else {
                         ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args);
                     }
                 }
             }
         }
     }
     // Managing Errors
     if ($this->db->trans_status() === FALSE) {
         log_message("error", "MODULO: Actividades --> No se pudo guadar los datos de la actividad en DB.");
         return false;
     } else {
         /* Notifications::guardar_notificacion(
         			array(
         					"tipo_notificacion"=>'actualizacion',
         					"modulo"=>$_POST['campo']['relacionado_con'],
         					"id"=>$_POST['campo']['uuid_relacion'],
          			));*/
         //guardar el id en variable de session
         $this->session->set_userdata('uuid_actividad', $idActividad);
         return true;
     }
 }
 function reportes()
 {
     $this->assets->agregar_css(array('public/assets/css/plugins/jquery/awesome-bootstrap-checkbox.css', 'public/assets/css/plugins/bootstrap/bootstrap-datetimepicker.css', 'public/assets/css/plugins/bootstrap/daterangepicker-bs3.css', 'public/assets/css/plugins/jquery/chosen/chosen.min.css', 'public/assets/js/plugins/jquery/sweetalert/sweetalert.css'));
     $this->assets->agregar_js(array('public/assets/js/plugins/jquery/chosen.jquery.min.js', 'public/assets/js/plugins/jquery/jquery-validation/jquery.validate.min.js', 'public/assets/js/plugins/jquery/jquery-validation/localization/messages_es.min.js', 'public/assets/js/moment-with-locales-290.js', 'public/assets/js/plugins/bootstrap/daterangepicker.js', 'public/assets/js/plugins/jquery/sweetalert/sweetalert.min.js', 'public/assets/js/modules/configuraciones/configuraciones.js', 'public/assets/js/modules/configuraciones/notificaciones.js', 'public/assets/js/default/tabla-dinamica.jquery.js', 'public/assets/js/modules/configuraciones/reportes.js'));
     $jobInfo = Jobs::seleccionar_jobs(array("tipo" => "reporte"));
     $listaReportesDB = Jobs::mostrar_jobs(array("tipo" => "reporte"));
     $data = array("reportes" => $jobInfo["jobs"], "roles" => $jobInfo["roles"], "jobs" => $listaReportesDB, "usuarios" => $this->usuarios_model->listar_usuarios(array(), 'nombre', $sord = 1, $limit = 1000, $start = 0));
     //Breadcrum Array
     $breadcrumb = array("titulo" => '<i class="fa fa-folder-open"></i>  Ventas', "ruta" => array(0 => array("nombre" => "Administraci&oacute;n", "activo" => false, "url" => 'configuracion'), 1 => array("nombre" => '<b>Reportes</b>', "activo" => true)), "filtro" => false, "menu" => array("nombre" => '<i class="fa fa-plus"></i> &nbsp;Agregar', "url" => "javascript:;", "clase" => "agregarBtn"));
     $this->template->agregar_titulo_header('Configuracion');
     $this->template->agregar_breadcrumb($breadcrumb);
     $this->template->agregar_contenido($data);
     $this->template->visualizar();
 }