<?php
if(!isset($_SESSION)) {
    session_start();
}

require_once($_SERVER['DOCUMENT_ROOT'].'/varios/varios.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/clases/Varios.Class.php');

if( Varios::isActiveSession() 
    && Varios::hasModuleAccess(10)
) {
  $bodega     = null;
  $fecha      = null;
  if( isset($_SESSION['filtroGestionReservasBodega'])
    && strlen($_SESSION['filtroGestionReservasBodega']) > 0
  ) {
    $bodega     = filter_var( $_SESSION['filtroGestionReservasBodega'] , FILTER_SANITIZE_NUMBER_INT);
  }
  if( isset($_SESSION['filtroGestionReservasFecha'])
    && strlen($_SESSION['filtroGestionReservasFecha']) > 0
  ) {
    $fecha     = filter_var( $_SESSION['filtroGestionReservasFecha'] , FILTER_SANITIZE_STRING);
    $fecha     = Varios::formatFechaSQL2($fecha);
  }

  if( parametrosValidos( $fecha, $bodega ) ) {
    require_once($_SERVER['DOCUMENT_ROOT'].'/clases/gestionReserva.Class.php');
    $reserva_obj  = new gestionReserva(null);
    $puertas_inf = $reserva_obj->informacionBodegaPuertas($bodega);
    $bloques_inf = $reserva_obj->informacionBloques($fecha);
    ?>
    <script type="text/javascript" src="/js/gestionReservas/gestionReservasNueva.js?p=1<?php echo _Version;?>"></script>
    
    <div class="col-xs-12 table-responsive">
    <table id="tablaReservas" class="table table-striped table-bordered">
        <thead>
            <tr>
                <th class="formato_izquierda" width="15%" style="font-size: 16px;">Bloque</th><?php
                foreach ($puertas_inf as $value) {
                    imprimirCabecera( $value );
                }?>
            </tr>
        </thead>
        <tbody><?php
            foreach ($bloques_inf as $valBloque) {?>
                <tr>
                    <td><?php echo '<span style="font-size: 14px">'.'[ '.$valBloque['bloq_inicio_formato'].' - '.$valBloque['bloq_fin_formato'].' ]'.'</span><BR>';?></td><?php
                    bloqueVerReservas( $reserva_obj, $puertas_inf, $valBloque, $fecha );  
                    ?>
                </tr><?php
            }?>
        </tbody>
    </table>
    </div>
      <?php
  }
} else {
  echo 'Seleccione la Fecha y la Bodeja';
}

function imprimirCabecera( $value ) {?>
    <th width="10%"><?php 
        $color     = '#F00';
        $prioridad = $value['puer_prioridad'];

        if( strtoupper($prioridad) == 'PRIORIDAD MEDIA' ) {
            $color = '#E7AB0B';
        } else if( strtoupper($prioridad) == 'PRIORIDAD BAJA' ) {
            $color = '#12A21D';
        }
        
        echo '<span style="font-size: 16px">'.$value['puer_bodega_nombre'].'</span><BR>';
        // echo '<span style="font-size: 14px">'.$value['puer_descripcion'].'</span><br>';
        echo '<span style="font-size: 16px">'.$value['puer_codigo'].'</span><BR>';
        echo '<span style="color: '.$color.'">'.$value['puer_prioridad'].'</span><BR>';
        ?>
    </th><?php
}

function parametrosValidos( $fecha, $bodega ) {
  if( strlen($fecha) == 0 ) {
    echo 'Seleccione una Fecha';
    return false;
  }
  return true;
}

function hasReserves( $bloquePuerta_inf ) {
    return $bloquePuerta_inf['rese_cantidad_bloque'] > 0;
}

function isExecuted( $bloquePuerta_inf ) {
    return ($bloquePuerta_inf['para_estado_UID'] == '101006');
}

function isConfirm( $bloquePuerta_inf ) {
    return ($bloquePuerta_inf['para_estado_UID'] == '101002');
}

function isPending( $bloquePuerta_inf ) {
    return ($bloquePuerta_inf['para_estado_UID'] == '101001');
}

function iconShowInformation( $bloquePuerta_inf ) {?>
    <a class="danger" href="#" title="Mostrar información de la reserva" 	
        onclick="gestionReservasVerInformacion('<?php echo Varios::codifica($bloquePuerta_inf['rese_UID']);?>')">
        <i class="picons-thin-icon-thin-0093_list_bullets" style="color:black; font-size:20px;"></i>
    </a><?php
}

function iconModify( $bloquePuerta_inf ) {
    $reservaId     = $bloquePuerta_inf['rese_UID'];
    $reservaIdCod  = Varios::codifica($reservaId);

    $cadena        = Varios::codifica('gestionModificar'._TOKEN);
    $tokenCod 	   = Varios::codifica(Varios::generaToken($cadena));
    ?>
    <a class="danger" href="gestionReservasModificar.php?p=<?php echo $reservaIdCod;?>&t=<?php echo $tokenCod;?>" title="Modificar reserva">
        <i class="picons-thin-icon-thin-0001_compose_write_pencil_new" style="color:black; font-size:20px;"></i>
    </a>&nbsp;&nbsp;
    <?php
}

function iconSeparate( $bloquePuerta_inf ) {
    require_once($_SERVER['DOCUMENT_ROOT'].'/clases/gestionReserva.Class.php');
    $reserva_obj  = new gestionReserva(null);
    $reserva_inf  = $reserva_obj->informacionReserva( $bloquePuerta_inf['rese_UID'], null, 0);
    $reserva_obj->Close();
    
    $cantidadBloques = $reserva_inf['rese_cantidad_bloque'];
    if( $cantidadBloques == _cantidadMaximaBloques ) {
        $cargaTipo     = ( strlen($bloquePuerta_inf['rese_pallets']) > 0 ? 'Pallet' : 'Unidades' );
        $cargaCantidad = ( strlen($bloquePuerta_inf['rese_pallets']) > 0 ? $reserva_inf['rese_cantidad_pallet'] : $reserva_inf['rese_cantidad_granel'] );
        
        $separacionPosible = false;
        if( 
            ( $cargaTipo == 'Pallet' && $cargaCantidad > _cantidadMaximaPallet )
            || ( $cargaTipo == 'Unidades' && $cargaCantidad > _cantidadMaximaGranel )
        ) {
            $separacionPosible = true;
        }
        
        if( $separacionPosible ) {
            $reservaId     = $bloquePuerta_inf['rese_UID'];
            $reservaIdCod  = Varios::codifica($reservaId);

            $cadena        = Varios::codifica('gestionSeparar'._TOKEN);
            $tokenCod 	   = Varios::codifica(Varios::generaToken($cadena));
            ?>
            <a class="danger" href="gestionReservasSeparar.php?p=<?php echo $reservaIdCod;?>&t=<?php echo $tokenCod;?>" title="Nueva reserva dependiente">
                <i class="picons-thin-icon-thin-0130_structure_map_files" style="color:black; font-size:20px;"></i>
            </a>&nbsp;&nbsp;
            <?php
        }
    }
}

function iconConfirm( $bloquePuerta_inf ) {
    $cadena = Varios::codifica('gestionReservaConfirmar'.$bloquePuerta_inf['rese_UID']._TOKEN);
    $token 	= Varios::codifica(Varios::generaToken($cadena));

    $titulo  = '<b>Confirmar</b> Reserva de ';
    $titulo .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];
    
    $titulo1  = '<b>Confirmar</b> la Reserva de ';
    $titulo1 .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];
    ?>
    <a class="danger" href="#" title="Confirmar solicitud" 
        onclick="gestionReservasConfirmar('<?php 
            echo $titulo;?>', '<?php
            echo Varios::codifica($bloquePuerta_inf['rese_UID']);?>', '<?php
            echo $titulo1;?>', '<?php
            echo $token;?>')">
        <i class="picons-thin-icon-thin-0663_like_thumb_up_vote" style="color:green; font-size:20px;"></i>
    </a>&nbsp;&nbsp;<?php
}

function iconReject( $bloquePuerta_inf ) {
    if( $bloquePuerta_inf['rese_cantidad_hijos'] == 0 ) {
        $cadena = Varios::codifica('gestionReservaTarea'.$bloquePuerta_inf['rese_UID']._TOKEN);
        $token 	= Varios::codifica(Varios::generaToken($cadena));

        $titulo  = '<b>Anular</b> Reserva de ';
        $titulo .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];

        $icon = 'picons-thin-icon-thin-0060_error_warning_danger_stop_delete_exit';
        
        ?>
        <a class="danger" href="#" title="Anular solicitud" 
            onclick="gestionReservasAnularRechazar('<?php 
                echo $titulo;?>', '<?php
                echo Varios::codifica($bloquePuerta_inf['rese_UID']);?>', '<?php
                echo 'Anular';?>', '<?php
                echo Varios::codifica('Anular');?>', '<?php
                echo $titulo;?>', '<?php
                echo $token;?>')">
            <i class="<?php echo $icon;?>" style="color:red; font-size:20px;"></i>
        </a>&nbsp;&nbsp;<?php
    }
}

function iconCancel( $bloquePuerta_inf ) {
    $cadena = Varios::codifica('gestionReservaTarea'.$bloquePuerta_inf['rese_UID']._TOKEN);
    $token 	= Varios::codifica(Varios::generaToken($cadena));

    $titulo  = '<b>Rechazar</b> Reserva de ';
    $titulo .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];

    $icon    = 'picons-thin-icon-thin-0664_dislike_thumb_down_vote';
    ?>
    <a class="danger" href="#" title="Rechazar solicitud" 
        onclick="gestionReservasAnularRechazar('<?php 
            echo $titulo;?>', '<?php
            echo Varios::codifica($bloquePuerta_inf['rese_UID']);?>', '<?php
            echo 'Rechazar';?>', '<?php
            echo Varios::codifica('Rechazar');?>', '<?php
            echo $titulo;?>', '<?php
            echo $token;?>')">
        <i class="<?php echo $icon;?>" style="color:red; font-size:20px;"></i>
    </a>&nbsp;&nbsp;<?php
}


function iconClose( $bloquePuerta_inf ) {
    $cadena = Varios::codifica('gestionReservaCerrar'.$bloquePuerta_inf['rese_UID']._TOKEN);
    $token 	= Varios::codifica(Varios::generaToken($cadena));

    $titulo  = '<b>Cerrar</b> Reserva de ';
    $titulo .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];
    
    $titulo1  = '<b>Cerrar</b> la Reserva de ';
    $titulo1 .= 'Fecha: '.$bloquePuerta_inf['rese_fecha_formato'];

    ?>
    <a class="danger" href="#" title="Cerrar reserva" 
        onclick="gestionReservasCerrar('<?php 
            echo $titulo;?>', '<?php
            echo Varios::codifica($bloquePuerta_inf['rese_UID']);?>', '<?php
            echo $titulo1;?>', '<?php
            echo $token;?>')">
        <i class="picons-thin-icon-thin-0489_storehouse_storage" style="color:green; font-size:20px;"></i>
    </a>&nbsp;&nbsp;<?php
}

function bloqueVerReservas( $reserva_obj, $puertas_inf, $valBloque, $fecha ) {
    $v_cantidad = 0;
    foreach ($puertas_inf as $valPuerta) {
        $v_cantidad++;
        $bloqId           = $valBloque['bloq_UID'];
        $puertaId         = $valPuerta['puer_UID'];
        $bloquePuerta_inf = $reserva_obj->informacionBloqueReservaVerificar($bloqId, $puertaId, $fecha, 0);
        
        if( $bloquePuerta_inf[0] == 'Inicio' ) {
            if( hasReserves( $bloquePuerta_inf ) ) {
                $bloqueCantidad = $bloquePuerta_inf['rese_cantidad_bloque'];
                if( $bloqueCantidad > 0 ) {
                    ?>
                    <td style="vertical-align: text-top; background-color: <?php echo $bloquePuerta_inf['color_fondo'];?>;
                                border: 3px solid <?php echo $bloquePuerta_inf['color_borde'];?>;"
                        rowspan="<?php echo $bloqueCantidad?>" title="<?php
                        echo $bloquePuerta_inf['pers_razon_social'];
                        ?>"><?php
                    showCellInformacion( $bloquePuerta_inf );
                    ?>
                    </td><?php
                }
            }
        } else if( $bloquePuerta_inf[0] == 'Libre' ) {
            showNew( $puertaId, $bloqId, $valPuerta, $bloquePuerta_inf );
        }
        
    }
}

function showNew( $puertaId, $bloqId, $valPuerta, $bloquePuerta_inf ) {
    $cantidadBloquesLibres = $bloquePuerta_inf['cantidad_bloques_libres'];
    
    $bodegaLibre = false;
    $puertaLibre = false;

    $cadena   = Varios::codifica('gestionReservasNueva'.$puertaId.'-'.$bloqId._TOKEN);
    $token    = Varios::generaToken($cadena);
    
    ?>
    <td style="text-align: center;"><?php        
        if( $valPuerta['para_bodega_estado'] == 1 ) {
            $bodegaLibre = true;    
        }

        if( $valPuerta['puer_estado'] == 1 ) {
            $puertaLibre = true;    
        }
        
        if(
            $bodegaLibre && $puertaLibre
            && $cantidadBloquesLibres > 0
        ){
            if ( Varios::hasModuleActionAccess(6, 6) ) {?>
                <button class="mr-2 mb-2 btn btn-outline-primary" onclick="gestionReservasNueva('<?php
                        echo Varios::codifica($token);?>', '<?php
                        echo Varios::codifica($puertaId);?>', '<?php
                        echo Varios::codifica($bloqId);?>', '<?php
                        echo Varios::codifica($cantidadBloquesLibres);?>')">
                    Reservar
                    <span style="font-size: x-small; color:#000">
                        <?php 
                            echo '('.$cantidadBloquesLibres.' bloque'.($cantidadBloquesLibres > 1 ? 's' :'').')';
                        ?>
                    </span></button><?php
            }
        } else if( !$bodegaLibre && !$puertaLibre ) {?>
            <span style='color: #F00'>Bodega y Puerta Inactivas</span><?php
        } else if( !$bodegaLibre ) {?>
            <span style='color: #F00'>Bodega Inactiva</span><?php
        } else if( !$puertaLibre ) {?>
            <span style='color: #F00'>Puerta Inactiva</span><?php
        }
        ?>
    </td><?php 
}

function showCellInformacion( $bloquePuerta_inf ) {
    showCellInformacionTextOption1( $bloquePuerta_inf );
    iconShowInformation( $bloquePuerta_inf );
    if( isExecuted( $bloquePuerta_inf ) ) {
        // iconShowInformation( $bloquePuerta_inf );
    } elseif( isConfirm( $bloquePuerta_inf ) ) {
        iconSeparate($bloquePuerta_inf);
        iconModify( $bloquePuerta_inf );
        iconClose( $bloquePuerta_inf );
        iconReject( $bloquePuerta_inf );
    }  elseif( isPending( $bloquePuerta_inf ) ) {
        iconConfirm( $bloquePuerta_inf );
        iconCancel( $bloquePuerta_inf );                    
    }
}

function showCellInformacionTextOption1( $bloquePuerta_inf ) {
    echo '<strong> RES '.$bloquePuerta_inf['rese_correlativo'].
        $bloquePuerta_inf['rese_correlativo_padre'].'</strong><br/>'. 
    '<strong>'.$bloquePuerta_inf['pers_razon_social'].'</strong><br/>'. 
        '<span>'.$bloquePuerta_inf['rese_estado'].'</span><br/>';
}

function showCellInformacionTextOption2( $bloquePuerta_inf ) {
    echo '<strong>'.$bloquePuerta_inf['rese_estado'].'</strong><br/>'. 
        '<strong> Fecha: '.$bloquePuerta_inf['rese_fecha_formato'].'</strong><br/>'.
        '<strong>'.$bloquePuerta_inf['bloque'].'</strong><br/>'.
                    $bloquePuerta_inf['pers_razon_social'].'<br/>'.
                    $bloquePuerta_inf['rese_documento'].
                    $bloquePuerta_inf['rese_pallets'].$bloquePuerta_inf['rese_granel'];
}

function showCellInformacionTextOption3( $bloquePuerta_inf ) {
    echo '<strong>'.$bloquePuerta_inf['pers_razon_social'].'</strong><br>Libres:'.$bloquePuerta_inf['cantidad_libres_siguientes'];
}
?>