#-------------------------------------------------------------------------------
# SCRIPT Consulta sesiones de usuarios: El operador mete en un formulario lo
# que desea consultar; un usuario en particular o todos, un rango de fechas, etc.
# Al ejecutarse la consulta tira en pantalla cada usuario con la CANTIDAD de
# ACCESOS que ha tenido. Si se quiere un mayor nivel de detalle se presiona sobre
# la imagen y este detalle se despliega en pantalla.
#-------------------------------------------------------------------------------
use strict;
use CGI ':all';
use CGI qw/:standard *table/;
use DBI;
use CGI::Session;
use CGI::Ajax;
$ENV{DBDATE} = "DMY4";
require("../comunes/Crypt.pm");
require("../comunes/i_funciones.pm");
{
# FORM INICIAL : Muestra el formulario de especificación de consulta
#----------------------------------------------------------------------------
if ($control_form eq "" || $control_form eq "T"){
my $cgi = new CGI;
my $pjx = new CGI::Ajax('load_usuarios' => \&load_usuarios);
# Aquí estaba el error: load_sesiones y limpiar_sesiones deben especificarse TAMBIÉN
# Aquí, como éstas se utilizan en el resultado y NO en el form inicial yo pensaba que
# no era necesario.
$pjx->register('load_sesiones' => \&load_sesiones);
$pjx->register('limpiar_sesiones' => \&limpiar_sesiones);
$pjx->JSDEBUG(1);
$pjx->DEBUG(1);
print $pjx->build_html( $cgi, \&show_html);
}
#-------------------------------------------------------------------------------
# Concatena TODO el HTML que hay que desplayar relacionado al FORM de CONSULTA
#-------------------------------------------------------------------------------
sub generate_html() {
my $myhtml;
........
$myhtml = $myhtml . TR(td({-align=>'left', -height=>'20' ,-colspan=>20}," " ));
$myhtml = $myhtml . TR( td({-align=>"left",-colspan=>3 , -height=>'40'},
"Tipo de Usuario " . scrolling_list(-name=>"tipo_usuario_abm",
-id=>"tipo_usuario_abm",
-override=>1,
-default=>$tipo_usuario_abm,
-size=>1,
-value=>\@tipos_usuarios,
-labels=>\%tipos_usuarios,
-onChange=>"load_usuarios(['tipo_usuario_abm','sid'],['div_usuarios'],'POST')",
-class=>'texto_form') ),
td({-align=>"left",-colspan=>2 },
div({-id=>'div_usuarios'},
scrolling_list(-name=>"id_tipo_usuario_abm",
-id=>"id_tipo_usuario_abm",
-override=>1,
-default=>$id_tipo_usuario_abm,
-size=>1,
-value=>\@asoc_usuarios,
-labels=>\%asoc_usuarios,
-class=>'texto_form') )));
$myhtml = $myhtml . TR({-align=>'center'},
td({-align=>'left', -colspan=>5, -height=>30}, ' ' ));
............
# Botonera al pie del formulario
#---------------------------------------------------------------------------
$myhtml = $myhtml . TR({ -valign=>"center"},
td({-align=>"left",-height=>20, -colspan=>5 }, ' '));
$myhtml = $myhtml . TR({ -valign=>"center", -bgcolor=>'#E5E5E5'},
td({-align=>"left",-height=>20, -colspan=>5 },
submit(-name=>'consultar', -value=>'Consultar', -class=>'boton'),
submit(-name=>'limpiar', -value=>'Limpiar Form', -class=>'boton'),
...............
return ($myhtml);
}
#-------------------------------------------------------------------------------
# AJAX - Función 1 - inicial
#-------------------------------------------------------------------------------
sub show_html() {
my $tmphtml = generate_html();
my $myhtml = <<EOHTML;
$tmphtml
EOHTML
return($myhtml);
}
##-----------------------------------------------------------------------------
# Si presiono el botón consultar debo armar todo el resultado a desplayar
##-----------------------------------------------------------------------------
if ($Q::consultar ) {
my $cgi = new CGI;
my $pjx = new CGI::Ajax('load_sesiones' => \&load_sesiones);
$pjx->register('limpiar_sesiones' => \&limpiar_sesiones);
$pjx->JSDEBUG(1);
$pjx->DEBUG(1);
print $pjx->build_html( $cgi, \&show_html_2);
}
#-------------------------------------------------------------------------------
# Concatena TODO el HTML RESULTADO CONSULTA que hay que desplayar,
#-------------------------------------------------------------------------------
sub generate_html_2() {
my $myhtml_2;
............
while ( $sth->fetch() ) {
.....
$myhtml_2 = $myhtml_2 . TR( {-valign=>'top', -bgcolor=>'#FFFFFF'},
td({-align=>'left', -width=>20},
div({-id=>"div_imagen_$id_login_usu"},
img({-name=>'login_' . $id_login_usu ,
-id=>'login_' . $id_login_usu ,
-src=>"/images/ico_desplegar_on.gif",
-border=>0,
-value=> $id_login_usu ,
-onClick=>"load_sesiones(['login_$id_login_usu','fecha_inicio_i', 'fecha_fin_i','sid'],['div_sesiones_$id_login_usu', 'div_imagen_$id_login_usu'],'POST')"}) )),
td({-align=>'left'}, " " . $apellido_usu . ', ' . $nombre_usu),
td({-align=>'left'}, $razon_social ),
td({-align=>'center'}, $cant_sesiones ),
td({-align=>'center'}, $fecha_ultima_sesion) );
$myhtml_2 = $myhtml_2 . TR( td({-colspan=>5, -class=>'tabla'},
div({-id=>"div_sesiones_$id_login_usu"})));
$myhtml_2 = $myhtml_2 . TR( td({-colspan=>5},' '));
$i = $i + 1;
}# END while
........
return ($myhtml_2);
}
#-------------------------------------------------------------------------------
# Función llama a generate_html_2() y obtiene todo el código HTML RESULTADO de
# lo que se quiere consultar a desplayar
#-------------------------------------------------------------------------------
sub show_html_2() {
my $tmphtml = generate_html_2();
my $myhtml_2 = <<EOHTML_2;
$tmphtml
EOHTML_2
return($myhtml_2);
}
# AJAX - Función que desplaya usuarios dependiendo del tipo de usuario seleccionado
#-----------------------------------------------------------------------------------
sub load_usuarios {
my $tipo_usuario_abm = shift;
my $myhtml;
%asoc_usuarios = ('-1'=>" Todos ");
my $ref = $dbh_i->selectall_arrayref(" SELECT e.codent, e.razsoc " .
" FROM entidad e, vendcli vc ," .
" usuarios u " .
...... );
${$_}[1]=~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;
foreach (@$ref) {$asoc_usuarios{${$_}[0] . '_S'} = ${$_}[1]; }
(@asoc_usuarios) = sort { $asoc_usuarios{$a} cmp $asoc_usuarios{$b}} keys %asoc_usuarios;
$myhtml = $myhtml . scrolling_list(-name=>"id_tipo_usuario_abm",
-id=>"id_tipo_usuario_abm",
-override=>1,
-default=>$id_tipo_usuario_abm,
-size=>1,
-value=>\@asoc_usuarios,
-labels=>\%asoc_usuarios,
-class=>'texto_form');
.....
return($myhtml);
}
#-------------------------------------------------------------------------------
# AJAX - Función que desplaya el detalle de las sesiones del usuario
#-------------------------------------------------------------------------------
sub load_sesiones {
my $id_login = shift;
my $fecha_inicio_i = shift;
my $fecha_fin_i = shift;
my $myhtml_2;
my $myhtml_3;
my $query = " SELECT TO_CHAR(se.fecha_inicio_sesion,'%d/%m/%Y %I:%M:%S %p')" .
" FROM sesiones_h se " ........ ;
print $query if $DEBUG;
my $sth = $dbh_i->prepare($query) or die "ERROR prepare $query ";
$sth->execute() or die "ERROR execute $query ";
my ($fecha);
my @cols = (\$fecha);
$sth->bind_columns(undef, @cols);
$sth->{ ChopBlanks } = 1;
my $count = 0;
while ($sth->fetch()) {
$myhtml_2 = $myhtml_2 . $fecha . ' - ' ;
} # end While
$myhtml_3 = $myhtml_3 . img({-name=>'login_' . $id_login ,
-id=>'login_' . $id_login ,
-src=>"/images/ico_desplegar_off.gif",
-border=>0,
-value=> $id_login ,
-onClick=>"limpiar_sesiones(['login_$id_login','sid'],['div_sesiones_$id_login', 'div_imagen_$id_login'],'POST')"});
return($myhtml_2, $myhtml_3);
}
#-------------------------------------------------------------------------------
# AJAX - Función limpia el detalle desplayado y cambia la imagen mostrada
#-------------------------------------------------------------------------------
sub limpiar_sesiones {
my $id_login_usu = shift;
my $myhtml_2 = ' ' ;
my $myhtml_3;
$myhtml_3 = $myhtml_3 . img({-name=>'login_' . $id_login_usu ,
-id=>'login_' . $id_login_usu ,
-src=>"/images/ico_desplegar_on.gif",
-border=>0,
-value=> $id_login_usu ,
-onClick=>"load_sesiones(['login_$id_login_usu','fecha_inicio_i', 'fecha_fin_i','sid'],['div_sesiones_$id_login_usu', 'div_imagen_$id_login_usu'],'POST')"});
return($myhtml_2, $myhtml_3);
}