use CGI qw/:standard *Tr *table *td/;
use HTML::Myasp;
use SBMP::XSesion;
use SBMP::Documento;
use POSIX qw(strftime);
my $sesion = SBMP::XSesion->new();
my $id_docto = param('id_docto')||0;
my $id_version = param('id_version')||0;
my $id_origen = param('origen') || 0;
my $sistema = param('sistema') || '0|0';
my $tipos = param('tipo') || '0|0';
my $cod_indice = param('asocia') || 0;
my $cgi_origen = param('cgi_origen');
my $myDoc = new SBMP::Documento($id_docto, $id_version);
my ($id_sistema, $cod_sistema) = split /\|/, $sistema;
my ($id_tipo, $cod_tipo) = split /\|/, $tipos;
my $existecodigo ="";
my $enable;
#my $encuentra = () ;
my $encuentra;
my ($doctos_id, $doctos_nom);
my ($c_tipo, $c_sist, $c_ind, $c_correl);
my $default_tipo;
my $codigo;
my $fecha = param('fecha') || strftime "%d/%m/%Y", localtime;
if (param('accion') eq "S")
{
my $sth = $dbh->prepare("Update documentos Set id_sistema = ?, codigo = ? Where id_docto =?");
$sth->execute($id_sistema, '', $id_docto);
$dbh-commit;
}
if (param('accion') eq "G")
{
# $myDoc->agrega_evento_mig(1, param('fecha'), param('fecha')) if param('fecha');
# $myDoc->agrega_evento_mig(4, param('fec_rev'), param('fec_rev')) if param('fec_rev');
# $myDoc->agrega_evento_mig(8, param('fec_apr'), param('fec_apr')) if param('fec_apr');
# $myDoc->agrega_evento_mig(16, param('fec_apr'), undef) if param('fec_apr');
if (param('version')) {
my $sth = $dbh->prepare("Update version_documento Set titulo=?, version=?, version_rev = ?, fecha_ing = ? Where id_docto = ? And id_version_docto = ? ");
$sth->execute(param('titulo'), param('version'), param('version')."a", fecsql($fecha), $id_docto, $id_version);
}else{
my $sth = $dbh->prepare("Update version_documento Set titulo=?, fecha_ing = ? Where id_docto = ? And id_version_docto = ? ");
$sth->execute(param('titulo'), fecsql($fecha), $id_docto, $id_version);
}
print "tipo ". param('tipo');
#exit;
if (param('tipo') ne "0")
{
my ($cod_indice_ori, $tipo_ori) = $dbh->selectrow_array("Select cod_indice, id_tipo From documentos Where id_docto = $id_docto");
if ($cod_indice_ori ne $cod_indice)
{
$sw_act = 1;
}
else
{
$sw_act = 1;
}
if ($cod_tipo eq 'PG' || $cod_tipo eq 'PP')
{
if ($sw_act)
{
#my $next_correl = $dbh->selectrow_array("Select isnull(Max(correl),0) + 1 From documentos Where id_docto <> $id_docto And cod_indice = '$cod_indice' And id_sistema = $id_sistema");
my $sth = $dbh->prepare("Update Documentos Set id_sistema=?, id_origen=?, id_tipo=?, cod_indice=?, correl=? Where id_docto = ?");
$sth->execute($id_sistema, $id_origen, $id_tipo, $cod_indice, param('correl'), $id_docto);
($c_tipo, $c_sist, $c_ind, $c_correl) = $dbh->selectrow_array("Select c.cod_tipo, b.cod_sistema, a.cod_indice , Convert(varchar,a.correl) From documentos as a, sistemas as b, tipo_documento as c Where a.id_docto = $id_docto And a.id_tipo = c.id_tipo And a.id_sistema = b.id_sistema");
if ($c_ind =~ /\D/) {
$codigo = "$c_tipo$c_sist-$c_ind-".cero_izq($c_correl,2);
} else {
$codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
}
#valida codigo
my $encuentra= $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
if (@$encuentra) {
$existecodigo =" EL CODIGO YA EXISTE ";
}else{
my $sth = $dbh->prepare("Update Documentos Set codigo=? Where id_docto = ?");
$sth->execute($codigo, $id_docto);
}
#valida codigo
}
else
{
my $sth = $dbh->prepare("Update Documentos Set id_sistema=?, id_origen=? Where id_docto = ?");
$sth->execute($id_sistema, $id_origen, $id_docto);
($c_tipo, $c_sist, $c_ind, $c_correl) = $dbh->selectrow_array("Select c.cod_tipo, b.cod_sistema, a.cod_indice , Convert(varchar,a.correl) From documentos as a, sistemas as b, tipo_documento as c Where a.id_docto = $id_docto And a.id_tipo = c.id_tipo And a.id_sistema = b.id_sistema");
if ($c_ind =~ /\D/) {
$codigo = "$c_tipo$c_sist-$c_ind-".cero_izq($c_correl,2);
} else {
$codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
}
#valida codigo
#$codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
my $encuentra = $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
if (@$encuentra) {
$existecodigo =" EL CODIGO YA EXISTE ";
}else {
my $sth = $dbh->prepare("Update Documentos Set codigo=? Where id_docto = ?");
$sth->execute($codigo, $id_docto);
}
#valida codigo
}
}
else
{
if ($sw_act)
{
my $correl = param('correl');
print "Indice $cod_indice Correl $correl Sistema $cod_sistema";
my $correl_ok;
if (length($cod_indice) == 2)
{
$codigo = "$cod_tipo$cod_sistema-$cod_indice$correl";
my @corr = split /-/,$correl;
$correl_ok = @corr[@corr-1];
}
else
{
my @cod_docto = split /-/,$cod_indice;
shift @cod_docto;
$cod_indice = join '-', @cod_docto;
$codigo = "$cod_tipo$cod_sistema-$cod_indice-";
$codigo .= cero_izq($correl,2);
$correl_ok = $correl;
$cod_indice = '';
}
#my ($next_correl) = $dbh->selectrow_array("Select isnull(Max(correl),0) + 1 From documentos Where id_docto <> $id_docto And codigo like '".$codigo."__'");
print $id_sistema ." ". $id_origen ." ". $id_tipo ." ". $cod_indice ." ". $codigo ." ". $correl_ok ." ". $id_docto;
exit;
#valida codigo
my $encuentra= $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
if (@$encuentra) {
$existecodigo =" EL CODIGO YA EXISTE ";
}else{
my $sth = $dbh->prepare("Update Documentos Set id_sistema =?, id_origen=?, id_tipo = ?, cod_indice=?, codigo=?, correl=? Where id_docto = ?");
$sth->execute($id_sistema, $id_origen, $id_tipo, $cod_indice, $codigo, $correl_ok, $id_docto);
}
#valida codigo
}
else
{
my @cod_docto = split /-/,$cod_indice;
my $correl = shift @cod_docto;
$cod_indice = join '-', @cod_docto;
$codigo = "$cod_tipo$cod_sistema-$cod_indice-$correl";
my $sth = $dbh->prepare("Update Documentos Set id_sistema =?, id_origen=?, codigo=? Where id_docto = ?");
$sth->execute($id_sistema, $id_origen, $codigo, $id_docto);
}
}
}
else
{
my $sth = $dbh->prepare("Update Documentos Set id_sistema = ?, id_origen=? Where id_docto = ?");
$sth->execute($id_sistema, $id_origen, $id_docto);
}
#print "existecodigo". $existecodigo;
#exit;
if (!$existecodigo){
$dbh->commit;
print redirect("$cgi_origen?id_docto=$id_docto&id_version=$id_version");
print "\n\n";
}
}
#my ($sistema_id, $sistema_nom) = give_popup("Select Convert(varchar,id_sistema) + '|' + cod_sistema, nombre From sistemas where id_sistema not in (4) and ind_vigencia = 1","0|","[Seleccione]");
my ($sistema_id, $sistema_nom) = give_popup("Select Convert(varchar,id_sistema) + '|' + cod_sistema, nombre From sistemas where ind_vigencia = 1","0|","[Seleccione]");
my ($origen_id, $origen_nom) = give_popup("Select * From origen","0","[Seleccione]");
my ($tipo_id, $tipo_nom) = give_popup("Select Convert(varchar,id_tipo) + '|' + cod_tipo, nombre From tipo_documento","0","[Seleccione]");
my @tipo = split /\|/, param('tipo');
if ((@tipo[1] && (@tipo[1] eq 'PG' || @tipo[1] eq 'PP'))){
($doctos_id, $doctos_nom) = give_popup("Select cod_indice, nombre From indice_tematico Where id_tipo = @tipo[0]","0","[Seleccione]");
$default_tipo = $myDoc->{cod_indice};
}
#Proceso Seguridad
elsif (@tipo[1] && (@tipo[1] eq 'IS')) {
($doctos_id, $doctos_nom) = give_popup("Select cod_indice, nombre From indice_tematico Where id_sistema =4","0","[Seleccione]");
$default_tipo = $myDoc->{cod_indice};
}
elsif (@tipo[1] && @tipo[1] =~ /^R/)
{
($doctos_id, $doctos_nom) = give_popup("Select a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG','MA','IN','PA') And a.id_tipo = c.id_tipo And a.codigo is not null And id_docto <> $id_docto","0","[Seleccione]");
$default_tipo = $myDoc->{codigo};
}
elsif (@tipo[1])
{
($doctos_id, $doctos_nom) = give_popup("Select a.codigo, a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG') and c.id_tipo = a.id_tipo And a.codigo is not null And id_docto <> $id_docto And id_sistema = $id_sistema Union Select cod_indice, nombre From indice_tematico Where id_tipo = 2","0","[Seleccione]");
$default_tipo = $myDoc->{codigo};
}
elsif ($myDoc->{id_tipo}){
if ($myDoc->{id_tipo} == 2 )
{
($doctos_id, $doctos_nom) = give_popup("Select cod_indice, nombre From indice_tematico Where id_tipo = $myDoc->{id_tipo}","0","[Seleccione]");
$default_tipo = $myDoc->{cod_indice};
}
else
{
($doctos_id, $doctos_nom) = give_popup("Select a.codigo, a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG') and c.id_tipo = a.id_tipo And a.codigo is not null And id_docto <> $id_docto And id_sistema = (Select id_sistema From documentos Where id_docto = $id_docto) Union Select cod_indice, nombre From indice_tematico Where id_tipo = 2","0","[Seleccione]");
$default_tipo = $myDoc->{cod_indice} || padre($myDoc->{codigo});
}
}
$enable ="true";
if ($myDoc->{codigo} =~ /^S/){
$enable ="false";
}
print "Content-Type: text/html\n\n";
send_page("$dir_html"."clasificar_mig.htm",
{
-menu => sub { &prepara_menu($sesion->{id_perfil})},
-preparo => sub { $myDoc->preparo(1)},
-reviso => sub { $myDoc->preparo(4)},
-aprobo => sub { $myDoc->preparo(5)},
-uop => sub { $myDoc->uop},
-script => sub { &imprime_script},
-ocultos => sub { print hidden('id_docto'), hidden('id_version'),hidden('cgi_origen')},
-existe => sub { print $existecodigo},
},{
__name_usuario__ => $sesion->{name_usr},
__perfil__ => $sesion->{perfil},
__accion__ => "".hidden('accion',''),
__volver__ => "<a href='$cgi_origen?id_docto=$id_docto&id_version=$id_version'>Volver</a>",
__titulo__ => textfield(-name=>"titulo", -maxlength=>255, -size=>80, -default=>$myDoc->{titulo}),
__version__ => textfield(-name=>"version", -maxlength=>6, -size=>5, -default=>$myDoc->{version}),
__origen__ => popup_menu(-name=>'origen',-values=>$origen_id,-labels=>$origen_nom, -default=>$myDoc->{id_origen} , -disabled=>"true"),
__tipo_docto__ => popup_menu(-name=>'tipo',-values=>$tipo_id,-labels=>$tipo_nom, -default=>"$myDoc->{id_tipo}|$myDoc->{cod_tipo}", onchange=>"tipo_onChange()", -disabled=>$enable),
__sistema__ => popup_menu(-name=>'sistema',-values=>$sistema_id,-labels=>$sistema_nom, -default=>"$myDoc->{id_sistema}|$myDoc->{cod_sistema}", -onchange=>"sistema_onChange()", -disabled=>"true"),
__codigo__ => "".$myDoc->{codigo},
__correl__ => textfield(-name=>"correl", -maxlength=>10, -size=>10, -default=>$myDoc->{correl} || "000", -disabled=>$enable),
__fecha__ => textfield(-name=>"fecha", -maxlength=>10, -size=>11, -default=>$myDoc->{fecha_ing}, -disabled=>"true"),
__fec_rev__ => textfield(-name=>"fec_rev", -maxlength=>10, -size=>11, -default=>$myDoc->fec_last_event('4,5,12,14') || " ", -disabled=>"true"),
__fec_apr__ => textfield(-name=>"fec_apr", -maxlength=>10, -size=>11, -default=>$myDoc->fec_last_event(8) || " ", -disabled=>"true"),
__lista_doctos__ => popup_menu(-name=>'asocia',-values=>$doctos_id,-labels=>$doctos_nom, -default=>$default_tipo, -disabled=>$enable),
__toda__ => checkbox(-name=>'chk_new', -checked=>0, -label=>'Toda la Empresa'),
__boton__ => button(-name=>"rev", -value=>"Guardar", -onclick=>"javascript:valida_form();"),
}
);
sub cero_izq
{
my $cadena = shift;
my $largo = shift;
my $salida = $cadena;
for (my $i=0;$i < $largo - length($cadena);$i++)
{
$salida = "0".$salida;
}
return $salida;
}
sub padre
{
my @cod_docto = split /-/, shift;
pop @cod_docto;
shift @cod_docto;
my $origen = join '-', @cod_docto;
my $codigo_padre = $dbh->selectrow_array("Select codigo From documentos Where codigo like '___-$origen'");
return $codigo_padre;
}
sub imprime_script
{
my $script = <<EOF;
function muestraTipo(objeto)
{
var cadena = objeto.value.split('|');
document.getElementById('codigo').innerHTML = cadena[1];
if (cadena[1] == "R")
form1.subtipo.style.display = "block";
}
function tipo_onChange()
{
form1.accion.value = '';
form1.submit();
}
function sistema_onChange()
{
form1.sistema.disabled = false;
form1.accion.value = 'S';
form1.submit();
}
function valida_form()
{
var ind_err = 0;
var des_err = "Debe seleccionar los siguientes campos:\\n";
if (form1.tipo.value != "0|")
{
if (form1.asocia.value == "0")
{
ind_err = 1;
des_err += "Asociado a\\n";
}
}
if (ind_err)
{
alert(des_err);
}
else
{
form1.sistema.disabled = false;
form1.origen.disabled = false;
form1.accion.value = "G";
form1.submit();
}
}
function selecciona(tipo)
{
window.open('/sbmp/cgi-bin/popup_proc_responsable.cgi?tipo='+tipo+'&id_docto='+form1.id_docto.value+'&id_version='+form1.id_version.value+'&ind_proc_doc=1','WIN1','scrollbars=0,width=700,height=300');
}
EOF
print script({-language=>"javascript"},$script);
}