Example #1
0
 /**
  * Store a newly created resource in storage.
  * POST /lista/horario_tipo
  *
  * @return Response
  */
 public function postHorariotipo()
 {
     //si la peticion es ajax
     if (Request::ajax()) {
         $horarioTipo = HorarioTipo::get(Input::all());
         return Response::json(array('rst' => 1, 'datos' => $horarioTipo));
     }
 }
Example #2
0
<?php

/** @var HorarioTipoController $this */
/** @var HorarioTipo $model */
$this->breadcrumbs = array('Horario Tipos');
$this->menu = array(array('label' => Yii::t('AweCrud.app', 'Create') . ' ' . HorarioTipo::label(), 'icon' => 'plus', 'url' => array('create')), array('label' => Yii::t('AweCrud.app', 'Manage'), 'icon' => 'list-alt', 'url' => array('admin')));
?>

<fieldset>
    <legend>
        <?php 
echo Yii::t('AweCrud.app', 'List');
?>
 <?php 
echo HorarioTipo::label(2);
?>
    </legend>

<?php 
$this->widget('bootstrap.widgets.TbListView', array('dataProvider' => $dataProvider, 'itemView' => '_view'));
?>
</fieldset>
Example #3
0
<?php

/** @var HorarioTipoController $this */
/** @var HorarioTipo $model */
$this->breadcrumbs = array('Horario Tipos' => array('index'), $model->id);
$this->header = '<i class="aweso-info-sign aweso-2x"></i> ' . Yii::t('AweCrud.app', 'View') . ' ' . HorarioTipo::label() . ' ' . CHtml::encode($model);
$this->menu = array(array('label' => Yii::t('AweCrud.app', 'Manage'), 'icon' => 'list-alt', 'url' => array('admin')));
?>

<fieldset>
    <div class="row-fluid">
        <div class="span5">
            <!-- widget button -->
            <div class="widget border-cyan" id="widget-button">

                <!-- widget header -->
                <div class="widget-header bg-cyan">
                    <!-- widget title -->
                    <h4 class="widget-title"><i class="aweso-info"></i> Informacion General</h4>
                    <!-- widget action, you can also use btn, btn-group, nav-tabs or nav-pills (also support dropdown). enjoy! -->
                    <div class="widget-action">
                        <button data-toggle="collapse" data-collapse="#widget-button" class="btn">
                            <i class="aweso-chevron-up color-cyan" data-toggle-icon="aweso-chevron-down  aweso-chevron-up"></i>
                        </button>
                    </div>
                </div><!-- /widget header -->
                <!-- widget content -->
                <div class="widget-content bg-white">

                    <?php 
$this->widget('bootstrap.widgets.TbDetailView', array('data' => $model, 'attributes' => array('nombre', 'estado')));
Example #4
0
/** @var HorarioTipoController $this */
/** @var HorarioTipo $model */
/** @var AweActiveForm $form */
$form = $this->beginWidget('ext.AweCrud.components.AweActiveForm', array('id' => 'horario-tipo-form', 'type' => 'horizontal', 'enableAjaxValidation' => true, 'clientOptions' => array('validateOnSubmit' => false, 'validateOnChange' => true), 'enableClientValidation' => false));
?>
<div class="row-fluid">
    <div class="span12">
        <!-- widget button -->
        <div class="widget border-cyan" id="widget-button">

            <!-- widget header -->
            <div class="widget-header bg-cyan">
                <!-- widget title -->
                <h4 class="widget-title"><i class="aweso-user"></i> <?php 
echo Yii::t('AweCrud.app', $model->isNewRecord ? 'Create' : 'Update') . ' ' . HorarioTipo::label();
?>
</h4>
                <!-- widget action, you can also use btn, btn-group, nav-tabs or nav-pills (also support dropdown). enjoy! -->
                <div class="widget-action">
                    <button data-toggle="collapse" data-collapse="#widget-button" class="btn">
                        <i class="aweso-chevron-up color-cyan" data-toggle-icon="aweso-chevron-down  aweso-chevron-up"></i>
                    </button>
                </div>
            </div><!-- /widget header -->
            <div class="widget-content form bg-white">


                <p class="note">
                    <?php 
echo Yii::t('AweCrud.app', 'Fields with');
Example #5
0
                                    <div class="controls">
                <?php 
// echo $form->textField($model, 'nombre', array('maxlength' => 64))
?>
                <?php 
// echo $form->error($model, 'nombre')
?>
 
                                    </div>                                           
                                </div>-->

                <?php 
echo $form->textFieldRow($model, 'nombre', array('maxlength' => 45));
?>
                <?php 
echo $form->dropDownListRow($model, 'horario_tipo_id', array('' => ' -- Seleccione -- ') + CHtml::listData(HorarioTipo::model()->findAll(), 'id', Horario::representingColumn()), array('placeholder' => null));
?>
                <?php 
echo $form->timepickerRow($model, 'hora_inicio_jornada', array('options' => array('showMeridian' => false, 'defaultTime' => false, 'noAppend' => true), 'htmlOptions' => array('class' => 'span6')));
?>
                <?php 
echo $form->timepickerRow($model, 'hora_inicio_reseso', array('options' => array('showMeridian' => false, 'defaultTime' => false, 'noAppend' => true), 'htmlOptions' => array('class' => 'span6')));
?>
                <?php 
echo $form->timepickerRow($model, 'hora_fin_reseso', array('options' => array('showMeridian' => false, 'defaultTime' => false, 'noAppend' => true), 'htmlOptions' => array('class' => 'span6')));
?>
                <?php 
echo $form->timepickerRow($model, 'hora_fin_jornada', array('options' => array('showMeridian' => false, 'defaultTime' => false, 'noAppend' => true), 'htmlOptions' => array('class' => 'span6')));
?>
                <?php 
echo $form->textAreaRow($model, 'Descripcion', array('rows' => 3, 'cols' => 50));
Example #6
0
 /**
  * Recepciona datos de Bandeja Controller
  * 
  * @return type
  */
 public function postRecepccion()
 {
     $data = array();
     $valida = array();
     $dataOfficetrack = Input::all();
     $dataGestion = Input::all();
     $dataGestionPendiente = Input::all();
     if (trim($dataGestion["fecha_agenda"]) != '' and trim($dataGestion['dia_id']) != '' and $dataGestion['dia_id'] != date("N", strtotime(date($dataGestion["fecha_agenda"])))) {
         $exc['code'] = '0000';
         $exc['file'] = 'BandejaController.php';
         $exc['line'] = '26';
         $exc['message'] = $dataGestion['codactu'] . ', No cuadran dias =>' + $dataGestion['dia_id'] . ' == ' . date("N", strtotime(date($dataGestion["fecha_agenda"])));
         $exc['trace'] = $dataGestion['dia_id'] . "|" . $dataGestion['fecha_agenda'] . "|" . $dataGestion['estado_id'] . "|" . $dataGestion['submotivo_id'] . "|" . $dataGestion['motivo_id'] . "|" . $dataGestion['quiebre_id'] . "|" . $dataGestion['actividad_id'];
         $this->_errorController->saveError($exc);
         return Response::json(array('rst' => 2, 'msj' => 'Ocurrio una interrupción en el registro de la información.', 'codactu' => $dataGestion['codactu']));
         /*
         $dataGestion['dia_id'].' == '.date("N",strtotime(date($dataGestion["fecha_agenda"])))
         */
         exit(0);
     }
     /**
      * Validacion Técnico en un solo horario y fecha
      * 
      * Datos requeridos:
      * tecnico:12
      * horario_id:19
      * dia_id:5
      * fecha_agenda:2015-05-08
      * estado_agendamiento: 1-1
      */
     $tecAsignadoBool = false;
     $resultAsignado = array();
     if ($dataGestion["estado_agendamiento"] == '1-1') {
         //No validar para tecnico NINGUNO
         $tecArray = DB::table('tecnicos')->where('id', '=', $dataGestion["tecnico"])->where('estado', '=', '1')->select('ninguno')->get();
         if (isset($tecArray[0]) and $tecArray[0]->ninguno == 0) {
             $dataValidaCupo = new stdClass();
             $dataValidaCupo->tecnico_id = $dataGestion["tecnico"];
             $dataValidaCupo->horario_id = $dataGestion["horario_id"];
             $dataValidaCupo->dia_id = $dataGestion["dia_id"];
             $dataValidaCupo->fecha_agenda = $dataGestion["fecha_agenda"];
             $asignado = GestionMovimiento::getTecnicoHorario($dataValidaCupo);
             if (is_array($asignado) and count($asignado["asignado"]) > 0) {
                 $ordenAgenda = $asignado["asignado"][0];
                 $tecAsignadoBool = true;
                 $resultAsignado = array('rst' => 2, 'msj' => 'El técnico seleccionado ya tiene una orden ' . 'agendada para el horario asignado', 'codactu' => $ordenAgenda->codactu);
             }
             //Respuesta tecnico con agenda asignada
             if ($tecAsignadoBool) {
                 return $resultAsignado;
                 exit;
             }
         }
     }
     /**
      * Para estados: Cancelado y Pendiente, evaluar si
      * la orden está asignada a un técnico y dejarla 
      * sin efecto. 2015-06-25
      * 
      * Obtener ultimo movimiento antes de grabar la gestion
      */
     $getOtoff = "";
     if ($dataGestion["estado"] == 5 or $dataGestion["estado"] == 7) {
         if (isset($dataGestion["gestion_id"]) and $dataGestion["gestion_id"] > 0) {
             $ultimov = DB::table('ultimos_movimientos')->where('gestion_id', $dataGestion["gestion_id"])->first();
             $ultimov = Helpers::stdToArray($ultimov);
             /**
              * Valida si la orden tiene: 
              * - horario
              * - dia
              * - celula
              * - tecnico
              */
             if ($ultimov["horario_id"] > 0 and $ultimov["dia_id"] > 0 and $ultimov["celula_id"] > 0 and $ultimov["tecnico_id"] > 0) {
                 $ultimov["estado"] = "";
                 $ultimov["actividad"] = "";
                 $ultimov["duration"] = 1;
                 $ultimov["quiebre"] = "";
                 $ultimov["eecc_final"] = "";
                 $ultimov["cr_observacion"] = "";
                 $ultimov["carnet"] = "";
                 $ultimov["velocidad"] = "";
                 $ultimov["paquete"] = "";
                 $ultimov['fecha_agenda'] = "";
                 $ultimov['hora_agenda'] = "";
                 $ultimov["estado_agendamiento"] = "1-1";
                 $ultimov["coordinado2"] = "0";
                 //Envio a OT
                 $savedata["otdata"] = $ultimov;
                 $rot = Helpers::ruta('officetrack/enviartarea', 'POST', $savedata, false);
                 //Respuesta OT
                 //$getOtoff = $rot->officetrack;
             }
         }
     }
     $getOtoff = "";
     DB::beginTransaction();
     $rgm2['sql'] = '';
     $rgm2['estofic'] = '';
     if (isset($dataGestion["gestion_id"]) and $dataGestion["gestion_id"] > 0 and $dataGestion["estado_officetrack"] == 0) {
         $ultimov = DB::table('ultimos_movimientos')->where('gestion_id', $dataGestion["gestion_id"])->first();
         $ultimov = Helpers::stdToArray($ultimov);
         $sql = "  SELECT ct.officetrack\n                    FROM tecnicos t\n                    INNER JOIN celula_tecnico ct ON t.id=ct.tecnico_id\n                    WHERE ct.tecnico_id='" . $ultimov["tecnico_id"] . "'\n                    AND ct.celula_id='" . $ultimov["celula_id"] . "'\n                    AND ct.estado=1";
         $tecnicoinfo = DB::select($sql);
         $tecnicoinfo = Helpers::stdToArray($tecnicoinfo);
         if (count($tecnicoinfo) > 0) {
             $rgm2['estofic'] = $tecnicoinfo[0]['officetrack'];
         }
         $rgm2['sql'] = $sql;
         /**
          * Valida si la orden tiene: 
          * - horario
          * - dia
          * - celula
          * - tecnico
          */
         if ($ultimov["horario_id"] > 0 and $ultimov["dia_id"] > 0 and $ultimov["celula_id"] > 0 and $ultimov["tecnico_id"] > 0 and $rgm2['estofic'] == 1) {
             $ultimov["estado"] = "";
             $ultimov["actividad"] = "";
             $ultimov["duration"] = 1;
             $ultimov["quiebre"] = "";
             $ultimov["eecc_final"] = "";
             $ultimov["cr_observacion"] = "";
             $ultimov["carnet"] = "";
             $ultimov["velocidad"] = "";
             $ultimov["paquete"] = "";
             $ultimov['fecha_agenda'] = "";
             $ultimov['hora_agenda'] = "";
             $ultimov["estado_agendamiento"] = "0-0";
             $ultimov["coordinado2"] = "0";
             //Envio a OT
             $savedata["otdata"] = $ultimov;
             $rot = Helpers::ruta('officetrack/enviartarea', 'POST', $savedata, false);
             //Registrar Pendiente
             $dataGestionPendiente['estado_agendamiento'] = '0-0';
             $dataGestionPendiente['motivo'] = '2';
             $dataGestionPendiente['submotivo'] = '18';
             $dataGestionPendiente['estado'] = '7';
             $dataGestionPendiente['horario_id'] = '';
             $dataGestionPendiente['dia_id'] = '';
             $dataGestionPendiente['fecha_agenda'] = '7';
             $dataGestionPendiente['tecnico'] = '';
             $dataGestionPendiente['usuario_sistema'] = 'sistema';
             //697
             $rgm = Helpers::ruta('gestion_movimiento/crear', 'POST', $dataGestionPendiente, false);
             //Respuesta OT
             //$getOtoff = $rot->officetrack;
         }
     }
     $rgm = Helpers::ruta('gestion_movimiento/crear', 'POST', $dataGestion, false);
     $rgm = Helpers::stdToArray($rgm);
     //$rgm["sql"]=$rgm2["sql"];
     $rgm['estofic'] = $rgm2['estofic'];
     //Registra o actualiza XY del cliente
     $dataXyCliente = array('codigo' => $dataGestion['inscripcion'], 'nombre' => $dataGestion['nombre_cliente_critico'], 'coord_x' => $dataGestion['x'], 'coord_y' => $dataGestion['y'], 'direccion' => $dataGestion['direccion_instalacion'], 'estado' => 1);
     if ($dataGestion["cliente_xy_insert"] == 1) {
         $query = DB::table('clientes')->insert($dataXyCliente);
     } else {
         $query = DB::table('clientes')->where('codigo', $dataGestion['inscripcion'])->update($dataXyCliente);
     }
     $rvalida = "0";
     if (Input::get('tecnico') and Input::get('tecnico') != '') {
         $valida = array();
         //Indica si cumple con el envio a officetrack acitividad + quiebre
         $valida["actividad_id"] = $dataOfficetrack["actividad_id"];
         $valida["quiebre_id"] = $dataOfficetrack["quiebre_id"];
         //El estado del tecnico de officetrack
         $valida["tecnico_id"] = $dataOfficetrack["tecnico"];
         $valida["celula_id"] = $dataOfficetrack["celula"];
         //El estado de Agendamiento para officetrack
         $valida["motivo_id"] = $dataOfficetrack["motivo"];
         $valida["submotivo_id"] = $dataOfficetrack["submotivo"];
         $valida["estado_id"] = $dataOfficetrack["estado"];
         //El evento indica si anteriormente ya se realizó una transacción OT
         $valida["transmision"] = $dataOfficetrack["transmision"];
         $rvalida = Helpers::ruta('officetrack/validar', 'POST', $valida, false);
     }
     // true indica que se enviara a officetrack
     $dataGestion['officetrack_envio'] = $rvalida;
     if ($rvalida == "1" and $rgm['rst'] == "1") {
         $dataOfficetrack['gestion_id'] = $rgm['gestion_id'];
         /*if ( !isset($dataOfficetrack['id_gestion']) ) {
               $idGestion=Gestion::getGenerarID();
               $dataOfficetrack['gestion_id']=$idGestion;
               $dataGestion['gestion_id_officetrack']=$idGestion;
           }*/
         $tecnico = Tecnico::find($dataOfficetrack['tecnico']);
         $dataOfficetrack['carnet'] = $tecnico['carnet_tmp'];
         $estado = Estado::find($dataOfficetrack['estado']);
         $dataOfficetrack['estado'] = $estado['nombre'];
         $horarioTipo = HorarioTipo::find($dataOfficetrack['horario_tipo']);
         $dataOfficetrack['duration'] = $horarioTipo['minutos'];
         $velocidad = array('', '', '');
         if (trim($dataOfficetrack['paquete']) != '') {
             $velocidad = explode("|", $dataOfficetrack['paquete']);
         }
         $dataOfficetrack['velocidad'] = $velocidad[2];
         $dataOfficetrack['eecc_final'] = $dataOfficetrack['empresa_id'];
         $dataOfficetrack['cr_observacion'] = $dataOfficetrack['observacion2'];
         $savedata["otdata"] = $dataOfficetrack;
         $rot = Helpers::ruta('officetrack/enviartarea', 'POST', $savedata, false);
         $rot = Helpers::stdToArray($rot);
         if ($rot['officetrack'] == "OK") {
             //registrara normalmente
             DB::commit();
             $rgm['msj'] = 'Registro realizado correctamente con Officetrack';
             $rgm['estado_agendamiento'] = $dataGestion['estado_agendamiento'];
             $rgm['tecnico'] = $dataGestion['tecnico'];
             if ($dataGestion["estado_agendamiento"] != '1-1' and $dataGestion["tecnico"] != '') {
                 $url = "http://psiweb.ddns.net:2230/webpsi/sms_enviar_individual_ajax.php";
                 $tecnicoinfo = DB::table('tecnicos')->where('id', $dataGestion["tecnico"])->first();
                 $postData = array('enviar_sms' => 1, 'celular' => '996475583', 'iduser' => Auth::user()->id, 'mensaje' => "La actuación: " . $dataGestion['codactu'] . " ha sido eliminada, favor de sincronizar para actualizar. PSI-OFFICETRACK");
                 $rgm['mensaje'] = "Llego";
                 $ch = curl_init();
                 curl_setopt($ch, CURLOPT_URL, $url);
                 curl_setopt($ch, CURLOPT_HEADER, false);
                 curl_setopt($ch, CURLOPT_POST, true);
                 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                 //Retorno
                 $result = curl_exec($ch);
                 curl_close($ch);
             } else {
                 $rgm['mensaje'] = "No Llego :(";
             }
             return Response::json($rgm);
         } else {
             DB::rollback();
             return Response::json(array('rst' => 2, 'msj' => 'No se pudo realizar el envio : ' . $rot['officetrack'] . '; Intente nuevamente el envio a officetrack', 'codactu' => $dataGestion['codactu']));
         }
     } elseif ($rgm['rst'] == "1") {
         DB::commit();
         $rgm['msj'] = 'Registro realizado correctamente';
         return Response::json($rgm);
     } else {
         DB::rollback();
         $this->_errorController->saveError($rgm['err']);
         return Response::json(array('rst' => 2, 'msj' => $rgm['msj']));
     }
     /*else { // registrará directo sin officetrack
                 $rgm = Helpers::ruta(
                     'gestion_movimiento/crear',
                     'POST', 
                     $dataGestion, 
                     false
                 );
     
                 $rgm= Helpers::stdToArray($rgm);
                 $rgm['msj']='Registro realizado correctamente';
                 return Response::json(
                     $rgm
                 );
             }*/
 }
Example #7
0
 /**
  * Listar registro de actividades con estado 1
  * POST agenda/agendaLibre
  *
  * @return Response
  */
 public function postLibre()
 {
     /**
      * Datos base para agendamiento
      */
     $diaMes = date("d");
     $diaSemana = date("N");
     $ini = date("Y/n/" . $diaMes);
     $fechaIni = date("Y-m-d");
     //Aumentandole 7 dias
     $fecha = new DateTime($ini);
     $fecha->add(new DateInterval('P7D'));
     $fechaFin = $fecha->format('Y-m-d');
     //Cabecera
     $idMes = date("m");
     //Mensaje de respuesta
     $agendaMsj = "";
     /**
      * Restriccion:
      * -----------
      * Agendamiento para trobas digitalizadas
      * en quiebres:
      *          - DIGITALIZACION
      *          - POST DIGIT
      * Solo si se encuentra el registro en dig_trobas
      */
     $agendarOrden = true;
     if (Input::get('quiebre') !== null) {
         $ffttData = new stdClass();
         $aquiebre = trim(Input::get('quiebre'));
         if ($aquiebre == 'DIGITALIZACION' or $aquiebre == 'POST DIGIT') {
             $ffttData->fftt = Input::get('fftt');
             $ffttData->tipoactu = Input::get('tipoactu');
             $ffttel = $this->_ffttController->getExplodefftt($ffttData);
             if ($ffttel["tipo"] == 'catv') {
                 //Buscar troba digitalizada
                 $trobadig = DB::table('geo_trobapunto AS gt')->join('dig_trobas AS dt', 'gt.id', '=', 'dt.troba_id')->where('gt.zonal', '=', 'LIM')->where('dt.fecha_fin', '!=', '0000-00-00')->where('gt.nodo', '=', $ffttel["nodo"])->where('gt.troba', '=', $ffttel["troba"])->select('gt.id', 'gt.zonal', 'gt.nodo', 'gt.troba', 'dt.fecha_inicio', 'dt.fecha_fin')->get();
                 //Indice [0] => existe respuesta
                 if (isset($trobadig[0])) {
                     $hoy = new DateTime($fechaIni);
                     $fin = new DateTime($trobadig[0]->fecha_fin);
                     $interval = $fin->diff($hoy);
                     $diasDiff = (int) $interval->format('%R%a');
                     //Si menor a +3 dias el día base cambia
                     if ($diasDiff < 3) {
                         $diasDiff *= -3;
                         $fechaIni = date("Y-m-d", strtotime($trobadig[0]->fecha_fin . " +3 day"));
                         $ini = date("Y/n/" . substr($fechaIni, -2));
                         $diaSemana = date("N", strtotime($fechaIni));
                         $diaMes = substr($fechaIni, -2);
                         $fechaFin = date("Y-m-d", strtotime($fechaIni . " +7 day"));
                         $idMes = date("m", strtotime($fechaIni));
                         //Mostrar agenda solo si $fechaIni = hoy
                         if ($fechaIni != date("Y-m-d")) {
                             $agendarOrden = false;
                             $agendaMsj = '<div class="alert alert-warning' . ' alert-dismissable">
                                       <button type="button" class="close"' . ' data-dismiss="alert"' . ' aria-hidden="true">×</button>
                                       <h4><i class="icon fa' . ' fa-warning"></i> Agenda' . ' disponible el ' . date("d/m/Y", strtotime($fechaIni)) . '</h4></div>';
                         }
                     }
                 } else {
                     //No se puede agendar por fecha de digitalizacion
                     $agendarOrden = false;
                     $agendaMsj = '<div class="alert alert-warning' . ' alert-dismissable">
                                       <button type="button" class="close"' . ' data-dismiss="alert"' . ' aria-hidden="true">×</button>
                                       <h4><i class="icon fa' . ' fa-warning"></i> Troba no' . ' digitalizada.</h4>
                                   </div>';
                 }
             }
         }
     }
     $zona = Input::get('zona');
     $empresa = Input::get('empresa');
     $tipo = Input::get('tipo');
     //1 o 2
     $quiebreGrupoId = Input::get('quiebre_grupo');
     $query = "SELECT \n                IF(b.fecha_agenda IS NULL, \n                    DATE_ADD(?, \n                        INTERVAL IF(a.diaId < ?, 7-?+a.diaId, a.diaId-?)\n                    DAY), \n                    b.fecha_agenda\n                ) fecha, \n                a.*, \n                IF(b.ocupado IS NULL, 0, b.ocupado) ocupado, \n                a.capacidad - IF(b.ocupado IS NULL, 0, b.ocupado) libre\n        FROM\n\n            (SELECT \n                dia_id as diaId, chd.horario_id as horarioId, d.nombre, h.horario\n                'hora', h.hora_inicio AS horaIni, h.hora_fin as horaFin,\n                chd.capacidad, ch.empresa_id as empresaId, \n                ch.zonal_id as zonalId, chd.estado as estado,\n                ch.quiebre_grupo_id\n            FROM \n                capacidad_horario ch \n                JOIN capacidad_horario_detalle chd \n                    ON chd.capacidad_horario_id=ch.id\n                JOIN horarios h ON chd.horario_id=h.id\n                JOIN dias d ON chd.dia_id=d.id\n            WHERE ch.quiebre_grupo_id=? AND ch.empresa_id=? \n            AND ch.zonal_id=? AND ch.horario_tipo_id=? and h.estado=1 \n            AND chd.estado=1\n            ) a\n\n        LEFT JOIN\n\n            (SELECT \n                gd.gestion_id AS id, \n                gm.fecha_agenda,q.quiebre_grupo_id,\n                gm.gestion_id, gm.empresa_id, gm.zonal_id, \n                gm.horario_id, gm.dia_id, COUNT(*) ocupado \n            FROM gestiones_movimientos gm\n            INNER JOIN gestiones_detalles gd ON gd.gestion_id=gm.gestion_id\n            INNER JOIN quiebres q ON q.id=gd.quiebre_id AND q.estado=1\n            INNER JOIN (\n                SELECT max(g2.id) id\n                FROM gestiones_movimientos g2\n                GROUP BY g2.gestion_id\n            ) gm2 ON gm2.id=gm.id\n            WHERE gm.fecha_agenda BETWEEN ? AND ?\n            AND gm.empresa_id=? \n            AND gm.zonal_id=?\n            AND q.quiebre_grupo_id=?\n            GROUP BY\n                gm.empresa_id, gm.zonal_id,\n                gm.horario_id, gm.dia_id,q.quiebre_grupo_id\n            ) b\n        ON a.empresaId=b.empresa_id AND a.zonalId=b.zonal_id\n        AND a.diaId=b.dia_id AND a.horarioId=b.horario_id\n        AND a.quiebre_grupo_id=b.quiebre_grupo_id\n        ORDER BY hora,fecha";
     $horarios = DB::select($query, array($fechaIni, $diaSemana, $diaSemana, $diaSemana, $quiebreGrupoId, $empresa, $zona, $tipo, $fechaIni, $fechaFin, $empresa, $zona, $quiebreGrupoId));
     $cantidadHorarios = Horario::where('horario_tipo_id', '=', $tipo)->where('estado', '=', 1)->get();
     $cantidadMinutos = HorarioTipo::where('id', '=', $tipo)->first();
     $cantidadMinutos = $cantidadMinutos->minutos;
     $nombreMeses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
     $nombreDias = array("domingo", "lunes", "martes", "mi&eacute;rcoles", "jueves", "viernes", "s&aacute;bado", "domingo", "lunes", "martes", "mi&eacute;rcoles", "jueves", "viernes", "s&aacute;bado", "domingo", "lunes", "martes", "mi&eacute;rcoles", "jueves", "viernes");
     //creando la cabecera
     $table = '<table id="horario" class="table table-bordered"><thead style="font-size: 15px !important;">';
     $table .= '<tr><th colspan=8>' . date("Y") . ' - ' . $nombreMeses[$idMes - 1] . '</th></tr>';
     $table .= '<tr><th>Hora</th>';
     for ($i = 0; $i < 7; $i++) {
         $nuevafecha = strtotime("+{$i} day", strtotime($fechaIni));
         $nombreDia = $nombreDias[$diaSemana + $i];
         $numeroDia = $diaMes + $i;
         $table .= "<th>" . $nombreDia . "(" . date("d", $nuevafecha) . ")</th>";
     }
     $table .= '</tr></thead><tbody>';
     $numeroCeldaHora = 0;
     $numeroCeldaValor = 0;
     foreach ($cantidadHorarios as $value) {
         $horarioId = $value->id;
         $table .= '<tr><td title="' . $numeroCeldaHora . '" style="background:#49afcd">HORA</td>';
         $contDias = 0;
         $numeroCeldaValor++;
         foreach ($horarios as $data) {
             if ($horarioId == $data->horarioId) {
                 $fec = new DateTime($ini);
                 $fec->add(new DateInterval('P' . $contDias . 'D'));
                 $fechaRes = $fec->format('Y-m-d');
                 $nombreDia = $nombreDias[$diaSemana + $contDias];
                 $codigoDia = substr($fechaRes, 8, 2);
                 $codigoDia = $codigoDia == 0 ? 7 : $codigoDia;
                 $estado = "";
                 $cantLibres = (int) $data->libre;
                 /*$libres = "Total:"
                   . $data->capacidad
                   . "<br>Libres:"
                   . $cantLibres;*/
                 $libres = $cantLibres . "/" . $data->capacidad;
                 $hoy = date("Y-m-d");
                 if ($data->estado == 0) {
                     $estado = "background:#f0e535;color:#000";
                     //yellow
                 } elseif ($data->ocupado >= $data->capacidad) {
                     $estado = "background:#f0e535;color:#000";
                 } elseif ($hoy == $fechaRes) {
                     //sumar la cantidad de hora en el intervalo
                     $hora = new DateTime();
                     $hora->add(new DateInterval('PT' . $cantidadMinutos . 'M'));
                     $hora = $hora->format('H:i:s');
                     if ($hora >= $data->horaFin) {
                         $estado = "background:#f0e535;color:#000";
                     }
                     //yellow
                 }
                 //Imprimiendo estado del horario
                 $hora = $data->hora;
                 //$buscar=array(" ","-");
                 //$reemplazar=array("","");
                 //$hora = str_replace($buscar,$reemplazar,$hora);
                 $table = str_replace("HORA", $hora, $table);
                 $table .= '<td title="' . $numeroCeldaValor . '" data-fec="' . $fechaRes . '" data-horario="' . $data->horarioId . '" data-dia="' . $data->diaId . '" data-hora="' . $data->hora . '" data-total="' . $data->capacidad . '" style="' . $estado . '">' . $libres . '</td>';
                 $contDias++;
                 $numeroCeldaValor++;
             }
         }
         $table .= '</tr>';
         $numeroCeldaHora += 8;
     }
     $table .= '</tbody></table>';
     if ($agendarOrden) {
         return Response::json(array('rst' => 1, 'html' => $table));
     } else {
         return Response::json(array('rst' => 1, 'html' => $agendaMsj));
     }
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer the ID of the model to be loaded
  */
 public function loadModel($id, $modelClass = __CLASS__)
 {
     $model = HorarioTipo::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }