Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //include("funciones_php.php");
- //list($nombre_usuario) = seguridad();
- // Le indica al servidor web, y específicamente al módulo PHP, que sirva los archivos .php con codificación UTF8
- //de forma tal que, entre otras cosas, las palabras acentuadas se vean correctamente.
- header('Content-Type: text/html; charset=UTF-8');
- // Indico cual es la zona horaria para nuestra ubicación geográfica.
- date_default_timezone_set('America/Argentina/Buenos_Aires');
- // Incluyo el archivo de configuración que contiene la data que permite conectarse a la base de datos en el motor de datos.
- include_once("configuracion_acceso_motor_de_datos.php");
- // Con la informacion incluída en "configuracion_acceso_motor_de_datos.php" me conecto efectivamente a la base de datos en el motor de datos.
- mysql_connect(PHPGRID_DBHOST,PHPGRID_DBUSER,PHPGRID_DBPASS);
- mysql_select_db(PHPGRID_DBNAME);
- // Le indico al motor de datos que la codificación con la que debe trabajar es UTF8. De esta forma los datos
- //se guardaran y recuperaran con esa codificación.
- mysql_query ("SET NAMES 'utf8'");
- include(PHPGRID_LIBPATH."inc/jqgrid_dist.php");
- // ALERTA!!!!
- // Recupera la clave del registro que selecciona el usuario en la grilla padre.
- $d_id = $_REQUEST["rowid"];
- // Si no se recupera ninguna clave entonces se asigna una por defecto.
- if (empty($d_id)) $d_id = 0;
- // Creo una grilla.
- $g = new jqgrid();
- // Le asigno un título a la subgrilla.
- $grid["caption"] = "Aperturas de: ".$_POST["d_nombre"];
- // Coloco la barra de opciones en la parte superior de la grilla.
- $grid["toolbar"] = "top";
- // Permito la selección de varios registros a la vez.
- $grid["multiselect"] = true;
- // No permito que la grilla se redimensione acompañando la dimensiones del navegador. Es decir si el usuario
- //achica el ancho del navegador entonces la grilla no se achicará en la misma proporsión.
- $grid["autoresize"] = false;
- // Si permito que se expanda la grilla al ancho de la pantalla.
- $grid["autowidth"] = true;
- // Permito que los registros se muestren en forma descendente. Es decir el primer registro listado será el último que se ingresó.
- $grid["sortorder"] = "DESC";
- // Indico que anchura debe tener el formulario en el modo "Nuevo Registro".
- $grid["add_options"] = array('width'=>'620');
- // Indico que anchura debe tener el formulario en el modo "Edición de un Registro".
- $grid["edit_options"] = array('width'=>'620');
- // Indico que anchura debe tener el formulario en el modo "Vista de un Registro".
- $grid["view_options"] = array('width'=>'620');
- // Indico que altura debe tener la grilla.
- $grid["height"] = "";
- // Indico cual es el mensaje que se debe mostrar cuando se están cargando los registros en la grilla.
- $grid["loadtext"] = "Cargando ...";
- // Indico con que modo voy a trabajar con la grilla; si con páginas de registros o que sólo se carguen registros a medida que el scroll
- //lo vaya pidiendo. Utilizo el último ya que es útil para manejar "records set" de gran tamaño.
- $grid["scroll"] = false;
- // Indico que para la columna "Actions" se utilicen íconos en lugar de palabras.
- $grid["actionicon"] = true;
- // Indico que no se recargue la grilla luego de haberse editado un registro.
- $grid["reloadedit"] = true;
- // Indico que no se recargue la grilla luego de haberse insertado un registro.
- $grid["reloadinsert"] = true;
- // Permite que al cerrar el formulario de "Nuevo Registro" se recargue automáticamente toda la página.
- $grid["add_options"]["afterSubmit"] = "function(){ window.location.reload(); return [true,'']; }";
- // Permite habilitar el mecanismo de subgrilla -- by default 'rowid' (PK) of parent is passed
- $grid["subGrid"] = true;
- // Relacionada con la línea anterior, permite indicar la página web que renderiza la subgrilla.
- $grid["subgridurl"] = "grilla_reservas.php";
- // Permite pasar a la página que renderiza la subgrilla la clave del registro que el usuario selecciona.
- $grid["subgridparams"] = "a_id";
- // Permite enviar a la página que renderiza la subgrilla otros campos del registro que el usuario
- //selecciona, y que deben ser recuperados con $_POST.
- // $grid["subgridparams"] = "p_provincia,pciudad,p_calle";
- // Definidas las propiedades que quiero tenga la grilla le informo a ésta de ellas.
- $g->set_options($grid);
- // ALERTA!!!!
- // Le indico a al grilla que tabla de la base de datos va a estar unido a ella.
- $g->table = "aperturas";
- // Indico que quiero capturar el evento on_insert y defino la función de callback llamada "insert_row".
- // Al ser el tercer parámetro "false" significa que toda la lógica para insertar el registro esta en
- //la función de callback y entonces se anula la operación de inserción por defecto que hace la grilla.
- $e["on_insert"] = array("insert_row", null, false);
- // Indico que quiero capturar el evento on_update y defino la función de callback llamada "update_row".
- // Al ser el tercer parámetro "true" significa que primero se ejecuta la función de callback y luego
- //el código de actualización de la grilla.
- $e["on_update"] = array("update_row", null, true);
- // Indico que quiero capturar el evento on_delete y defino la función de callback llamada "delete_row".
- // Al ser el tercer parámetro "false" significa que toda la lógica para borrar el registro esta en
- //la función de callback y entonces se anula la operación de eliminación por defecto que hace la grilla.
- $e["on_delete"] = array("delete_row", null, false);
- // Esta función de callback permite actuar al capturar el evento "on_insert". Recibe como dato de entrada
- //una variable "$data" que contiene todos los datos que se indicaron en el formulario "Nuevo Registro".
- function insert_row($data)
- {
- // Inserto el registro correspondiente a la nueva apertura.
- global $d_id;
- if (strtotime($data["params"]["a_fecha_partida"]) > strtotime($data["params"]["a_fecha_retorno"]))
- phpgrid_error('La fecha de partida no puede ser posterior a la fecha de retorno.');
- $sentencia_sql = "insert into aperturas set
- d_id = '".$d_id."',
- a_nro_plazas_disponibles = '".$data["params"]["a_nro_plazas_disponibles"]."',
- a_nro_plazas_reservadas = '0',
- a_fecha_partida = '".$data["params"]["a_fecha_partida"]."',
- a_fecha_retorno = '".$data["params"]["a_fecha_retorno"]."',
- a_estado = '".$data["params"]["a_estado"]."',
- a_estampilla_tiempo = '".date("Y-m-d H:i:s")."'";
- $resultado = mysql_query($sentencia_sql);
- // No conozco que valor tomó el campo a_id al ejecutarse la última sentencia sql ya que este es de tipo
- //autoincrement y lo necesito para lo que sigue.
- $sentencia_sql = "select max(a_id) as a_id from aperturas";
- $resultado = mysql_query($sentencia_sql);
- $rs = mysql_fetch_assoc($resultado);
- $a_id = $rs["a_id"];
- // En la tabla asientos debo crear tantos registros como plazas disponibles tenga la nueva apertura.
- for ($i = 0; $i <= $data["params"]["a_nro_plazas_disponibles"]; $i++)
- {
- $sentencia_sql = "insert into asientos set
- aa_id = '".$i."',
- a_id = '".$a_id."',
- aa_estado = 'Libre'";
- $resultado = mysql_query($sentencia_sql);
- };
- }
- // Esta función de callback permite actuar al capturar el evento "on_update". Recibe como dato de entrada
- //una variable "$data" que contiene todos los datos que se indicaron en el formulario de "Edición de un Registro".
- //Y lo que hace es considerar el caso en donde se intenta editar un registro que fue eliminado por otro usuario, y
- //el caso en donde se intenta editar un registro que fue editado previamente por otro usuario. En ambos cados nos
- //muestra un mensaje de que debemos refrescar la página.
- function update_row($data)
- {
- global $d_id;
- $a_id = $data["params"]["a_id"];
- $sentencia_sql = "select * from aperturas where d_id = '".$d_id."' and a_id = '".$a_id."'";
- $resultado = mysql_query($sentencia_sql);
- $nro_registros = mysql_num_rows($resultado);
- if ( $nro_registros == 0)
- phpgrid_error('Este registro ha sido eliminado por otro usuario y es por ello que no es posible ejecutar la tarea solicitada. Por favor refresque la página (tecla F5).');
- else
- {
- $rs = mysql_fetch_assoc($resultado);
- //phpgrid_error(strtotime($rs["a_estampilla_tiempo"]).">".strtotime($data["params"]["a_estampilla_tiempo"]));
- if (strtotime($rs["a_estampilla_tiempo"]) > strtotime($data["params"]["a_estampilla_tiempo"]))
- {
- error('Este registro ha sido modificado por otro usuario, por favor refresque la página (tecla F5).');
- }
- else
- {
- // Actualizo el campo "estampilla_tiempo" con una nueva estampilla de tiempo, y que luego será volcada
- //en la tabla de la base de datos por código de la grilla.
- $data["params"]["a_estampilla_tiempo"] = date("Y-m-d H:i:s");
- if (strtotime($data["params"]["a_fecha_partida"]) > strtotime($data["params"]["a_fecha_retorno"]))
- phpgrid_error('La fecha de partida no puede ser posterior a la fecha de retorno.');
- if ($data["params"]["a_nro_plazas_disponibles"] < $rs["a_nro_plazas_disponibles"])
- phpgrid_error('El número de plazas disponibles no puede ser menor que el que ya existía.');
- // En la tabla asientos debo crear tantos registros como nuevas plazas disponibles se hayan indicado.
- for ($i = $rs["a_nro_plazas_disponibles"]+1 ; $i <= $data["params"]["a_nro_plazas_disponibles"]; $i++)
- {
- $sentencia_sql = "insert into asientos set
- aa_id = '".$i."',
- a_id = '".$a_id."',
- aa_estado = 'Libre'";
- $resultado = mysql_query($sentencia_sql);
- };
- };
- };
- };
- /// Esta función de callback permite actuar al capturar el evento "on_delete". Recibe como dato de entrada
- //una variable "$data".
- // Para el evento "on_delete" sólo es pasado el id del registro en cuestión. No es posible obtener información
- //sobre ningún otro parámetro a menos que busque ésta explicitamente antes de eliminar el registro.
- function delete_row($data)
- {
- $a_id = $data["a_id"];
- $sentencia_sql = "select c_id from reservas where a_id = '".$a_id."'";
- $resultado = mysql_query($sentencia_sql);
- $nro_registros = mysql_num_rows($resultado);
- if ( $nro_registros > 0)
- phpgrid_error('No es posible eliminar la apertura ya que existen reservas efectuadas para el mismo. Elimine esa(s) reservas(s) primero y vuelva a intentarlo.');
- else
- {
- $sentencia_sql = "delete from aperturas where a_id = '".$a_id."'";
- $resultado = mysql_query($sentencia_sql);
- };
- };
- // ALERTA!!!!
- // Definidos los eventos que quiero capturar en la grilla le informo a ésta de ellos.
- $g->set_events($e);
- // Indico propiedades de la columna "a_id".
- $col = array();
- $col["name"] = "a_id";
- $col["title"] = "Id";
- $col["edittype"] = "text";
- //$col["width"] = "0";
- $col["editoptions"] = array("rows"=>1, "cols"=>60,"style"=>"resize: none");
- $col["hidden"] = true;
- $col["editable"] = true; // Importante: NO setear este parámetro en "false" ya que entonces en la función de
- //callback "on_update" no podré recuperar el valor de este campo debido a que al ser "no editable" la librería no
- //lo envía como al resto de los parámetros del formulario que sí con editables.
- $cols[] = $col;
- // Indico propiedades de la columna "a_nro_plazas_disponibles".
- $col = array();
- $col["name"] = "a_nro_plazas_disponibles";
- $col["title"] = "Nro Plazas Disponibles";
- $col["edittype"] = "text";
- //$col["width"] = "0";
- $col["editoptions"] = array("size"=>45);
- $col["editoptions"]["onclick"] = "this.focus();this.select();";
- $col["editrules"] = array("required"=>true,"number"=>true);
- $col["hidden"] = false;
- $col["editable"] = true;
- $cols[] = $col;
- // Indico propiedades de la columna "a_nro_plazas_reservadas".
- $col = array();
- $col["name"] = "a_nro_plazas_reservadas";
- $col["title"] = "Nro Plazas Reservadas";
- $col["edittype"] = "text";
- //$col["width"] = "0";
- $col["editoptions"] = array("size"=>45);
- $col["editoptions"]["onclick"] = "this.focus();this.select();";
- $col["editrules"] = array("number"=>true);
- $col["editoptions"]["readonly"] = true;
- $col["show"] = array("view"=>true, "add"=>false, "edit"=>true, "list"=>true);
- $col["hidden"] = false;
- $col["editable"] = true;
- $cols[] = $col;
- // Indico propiedades de la columna "a_fecha_partida".
- $col = array();
- $col["name"] = "a_fecha_partida";
- $col["title"] = "Fecha Partida";
- $col["formatter"] = "date";
- //$col["width"] = "120";
- $col["formatoptions"] = array("srcformat"=>'Y-m-d',"newformat"=>'d/m/Y');
- //$col["editoptions"] = array("style"=>"width:400px");
- $col["editrules"] = array("required"=>true);
- $col["hidden"] = false;
- $col["editable"] = true;
- $cols[] = $col;
- // Indico propiedades de la columna "a_fecha_retorno".
- $col = array();
- $col["name"] = "a_fecha_retorno";
- $col["title"] = "Fecha Retorno";
- $col["formatter"] = "date";
- //$col["width"] = "120";
- $col["formatoptions"] = array("srcformat"=>'Y-m-d',"newformat"=>'d/m/Y');
- //$col["editoptions"] = array("style"=>"width:400px");
- $col["editrules"] = array("required"=>true);
- $col["hidden"] = false;
- $col["editable"] = true;
- $cols[] = $col;
- // Indico propiedades de la columna "a_estado".
- $col = array();
- $col["name"] = "a_estado";
- $col["title"] = "Estado";
- $col["edittype"] = "select";
- $col["editoptions"] = array("value"=>'Abierto:Abierto;Cerrado:Cerrado');
- $col["editrules"] = array("false"=>true);
- $col["hidden"] = false;
- $col["editable"] = true;
- $cols[] = $col;
- // Indico propiedades de la columna "a_estampilla_tiempo".
- $col = array();
- $col["name"] = "a_estampilla_tiempo";
- $col["title"] = "Estampilla Tiempo";
- $col["edittype"] = "text";
- //$col["width"] = "0";
- $col["editoptions"] = array("size"=>45);
- $col["hidden"] = true;
- $col["editable"] = true;
- $col["export"] = false;
- $cols[] = $col;
- // Indico propiedades de la columna "act".
- $col = array();
- $col["name"] = "act";
- $col["title"] = "Acciones";
- //$col["width"] = "0";
- $col["hidden"] = true;
- $col["editable"] = false;
- $col["export"] = false;
- $cols[] = $col;
- // Esta sentencia SQL es la que va a decir cuales son las operaciones asociada con la cuenta de cada cliente.
- $g->select_command = "select a_id, a_nro_plazas_disponibles, a_nro_plazas_reservadas, a_fecha_partida, a_fecha_retorno, a_estado, a_estampilla_tiempo
- from aperturas
- where d_id = '".$d_id."'";
- // Definidas las propiedades que quiero tengan cada una de las columnas de la grilla le informo a ésta de ellas.
- $g->set_columns($cols,true);
- // Indico que acciones sí permito en la grilla y cuales no.
- $g->set_actions
- (
- array
- (
- "add"=>true,
- "edit"=>true,
- "clone"=>false,
- "bulkedit"=>false,
- "delete"=>true,
- "view"=>true,
- "rowactions"=>false,
- "export"=>false,
- "autofilter"=>true,
- "search"=>false,
- "inlineadd"=>false,
- "showhidecolumns"=>false
- )
- );
- // Construyo la grilla y le asigno un nombre, que será único en la pagina html.
- $out = $g->render("aperturas");
- ?>
- <div style="padding:5px;">
- <?php echo $out; ?>
- </div>
- <script type="text/javascript">
- /*
- Aclaración: No se porque este script debe ir despues de que genero la grilla. Si lo pongo antes del php echo $out no funciona.
- CUSTOM TOOLBAR BUTTON
- ---------------------
- caption: (string) the caption of the button, can be a empty string.
- buttonicon: (string) is the ui icon name from UI theme icon set. If this option is set to 'none' only the text appear.
- onClickButton: (function) action to be performed when a button is clicked. Default null.
- position: ('first' or 'last') the position where the button will be added (i.e., before or after the standard buttons).
- title: (string) a tooltip for the button.
- cursor : string (default pointer) determines the cursor when we mouseover the element
- id : string (optional) - if set defines the id of the button (actually the id of TD element) for future manipulation
- */
- jQuery(document).ready(function(){
- jQuery('#aperturas').jqGrid('navButtonAdd', '#aperturas_pager',
- {
- 'caption' : '',
- 'buttonicon' : 'ui-icon-suitcase',
- 'title' : 'Listado de clientes',
- 'onClickButton': function()
- {
- // for all ids
- // var allRowsOnCurrentPage = $('#list1').jqGrid('getDataIDs');
- // for selected rows
- var selectedRows = jQuery('#aperturas').jqGrid('getGridParam','selarrrow');
- window.open("imprimir_listado_clientes.php?a_id="+selectedRows,'_self');
- },
- 'position': 'last'
- });
- });
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement