#!/usr/local/bin/perl
##############################################################################
# Modulo:       SQLparser.pl
# Funcion:      Gestiona las consultas SQL, interpretando tags en un HTML.
# Autor:        David Perez
##############################################################################

###########################################################################
# Comentarios.

###########################################################################

require "SQLparser.cfg";

require "cgi-lib.pl";
require "BD.pl";

# Valores por defecto de las tablas que vamos a usar.

$System_defecto="Ambito=''&Variable=''&Valor=''";
$Clientes_defecto="verso=''&rima_c=''&rima_a=''&metrica=0&tema=''&tipo=''&autor=''&cad1=''&car1=''&ent1=0&real1=0.0";
$Proyectos_defecto="Estado=''&IDOrder=''&Cliente=''&ProjectMgr=''&PalPresup=0&PalMedidas=0&IdiomaOrig=''&IdiomaDest=''&Presupuesto=0.0&FechaInicio=''&FechaEntrega=''";
$debug = 0;

# Estas variables definen qu‚ campos de todos los que componen un registro
# se van a visualizar en un cuadro resumen.
$Proyectos_resumen="Estado&IDOrder&Cliente&ProjectMgr&FechaInicio&FechaEntrega";


# Get Form Information
&ReadParse(*FORM);

# Return the user HTML
&return_html;


###############
# Visualiza las variables de sistema.
#

sub ListaSystem {
   
   @sistema=&ConsultarTabla ("System", %FORM);
   $fila = 0;

   print "<TABLE WIDTH=100% BORDER=1>\n";
   while ($sistema[$fila]) {
      @pairs = split(/\|/, $sistema[$fila]);

      # En la primera fila, se pone una cabecera.
      if ($fila == 0) {
         print "<TR>\n";

         foreach $pair (@pairs) {
            ($name, $value) = split(/=/, $pair);
            print "<TD bgcolor=#0000FF text=#FFFF00>".$name."</TD>\n";
         }
         print "</TR>\n";
      }

      print "<TR>\n";

      foreach $pair (@pairs) {
         ($name, $value) = split(/=/, $pair);
         print "<TD>".$value."</TD>\n";
      }
      print "</TR>\n";
      $fila++;
   }

   # Si no había ninguna variable, se visualiza.
   if ($fila == 0) {
      print "<TR><TD>No se han encontrado variables de sistema.</TD></TR>\n";
   }
   print "</TABLE>\n";

   # En este punto hemos terminado.
}


###############
# Visualiza los proyectos que cumplen el criterio del formulario.
#

sub ListaProyectos {
   
   @proyectos=&ConsultarTabla ("Proyectos", %FORM);
   $fila = 0;

   print "<TABLE WIDTH=100% BORDER=1>\n";
   while ($proyectos[$fila]) {
      @pairs = split(/\|/, $proyectos[$fila]);

      # En la primera fila, se pone una cabecera.
      if ($fila == 0) {
         print "<TR>\n";

         # Anteponemos a cada proyecto una casilla de selección.
         print "<TD>Selecci&oacute;n</TD>\n";

         foreach $pair (@pairs) {
            ($name, $value) = split(/=/, $pair);

            # Como esto es un listado resumen, no vamos a poner todos los 
            # campos de un proyecto, sino s¢lo los indicados en la variable.

            if (index ($Proyectos_resumen, $name) != -1) {
               print "<TD bgcolor=#0000FF text=#FFFFFF>".$name."</TD>\n";
            }
         }
         print "</TR>\n";
      }

      print "<TR>\n";

      # Anteponemos a cada proyecto una casilla de selección.
      # Como hasta dentro de dos campos no tenemos el ID del proyecto, y quiero
      # que la selección de un proyecto devuelva directamente su ID, no imprimo
      # ahora, sino que lo guardo para imprimir luego.
      $linea1 = "<TD><input type=radio name=IDOrder value=";
      $linea2 = "></TD>\n";
      $guarda = 1;

      foreach $pair (@pairs) {
         ($name, $value) = split(/=/, $pair);

         # Como esto es un listado resumen, no vamos a poner todos los 
         # campos de un proyecto, sino s¢lo los indicados en la variable.

         if (index ($Proyectos_resumen, $name) != -1) {

            # Mientras no hayamos encontrado el IDProject, guardamos.
            if ($guarda == 1) {
               # Si lo encontramos, ya podemos imprimir todo lo guardado.
               if ($name eq 'IDOrder') {
                  print $linea1.$value.$linea2;
                  print "<TD><a href=http://www.orchestra.es/cgi-local/SQLparser.pl?returnHTML=detallePrj.html&IDOrder=".$value.">".$value."</a></TD>\n";
                  $guarda = 0;
               } else {
                  $linea2 .= "<TD>".$value."</TD>\n";
               }
            } else {
               print "<TD>".$value."</TD>\n";
            }
         }
      }
      print "</TR>\n";
      $fila++;
   }

   # Si no había ningún proyecto, se visualiza.
   if ($fila == 0) {
      print "<TR><TD>No se han encontrado proyectos en esta b&uacute;squeda.</TD></TR>\n";
   }
   print "</TABLE>\n";

   # En este punto hemos terminado.
}


###############
# Visualiza todos los campos de un proyecto, y permite interactuar con ‚l.
#

sub DetalleProyecto {

   @proyectos=&ConsultarTabla ("Proyectos", %FORM);

   print "<form method=post action=http://www.orchestra.es/cgi-local/SQLparser.pl?returnHTML=modPrj.html>\n";
   print "<TABLE WIDTH=75% BORDER=1>\n";
   if ($proyectos[0]) {
      @pairs = split(/\|/, $proyectos[0]);

      foreach $pair (@pairs) {
         ($name, $value) = split(/=/, $pair);

         print "<TR>\n";
         print "<TD>".$name."</TD>\n";
         print "<TD>".$value."</TD>\n";
         print "</TR>\n";
      }
   }

   # Si no había ningún proyecto, se visualiza.
   if ($fila == 0) {
      print "<TR><TD>No se han encontrado proyectos en esta b&uacute;squeda.</TD></TR>\n";
   }
   print "</TABLE>\n";
   print "</form>\n";

   # En este punto hemos terminado.
}


###############
# Modifica un proyecto. El campo Accion indica lo que realmente se quiere
# hacer con el proyecto.
#

sub ModProyecto {

   $accion=$FORM{'Accion'};

   if ($FORM{'IDOrder'}) {
      # A ver qu‚ se quiere hacer con el proyecto.
      if ($accion eq 'Ciclo de vida') {
         print "<p>Has solicitado avanzar por el cico de vida del proyecto cuyos detalles se muestran debajo; \n";
         print "por favor selecciona el nuevo estado y pulsa el bot&oacute;n Aceptar para confirmarlo.\n";

         # Ponemos una lista en la que seleccionar el estado.
         print "<form method=post action=http://www.orchestra.es/cgi-local/SQLparser.pl>\n";
         print "<p><select name=Estado size=1>\n";

         print "<option value=EsperaDoc>Esperando documentos</option>\n";
         print "<option value=EsperaTrad>Esperando traductor</option>\n";
         print "<option value=Traduciendo>Traduciendo</option>\n";
         print "<option value=Corrigiendo>Corrigiendo</option>\n";
         print "<option value=Editando>Editando</option>\n";
         print "<option value=Entregable>Para entregar</option>\n";
         print "<option value=EsperaConf>Esperando confirmaci&oacute;n</option>\n";
         print "<option value=FaltaCobrar>A falta de cobrar</option>\n";
         print "<option value=Cerrado>Cerrado</option>\n";

         print "</select></p>\n";
         print "<input type=submit name=Aceptar value=\"Aceptar\">\n";
      }
      if ($accion eq 'Cancelar') {
         print "<p>Has solicitado cancelar el proyecto cuyos detalles se muestran debajo; \n";
         print "por favor selecciona la causa de la cancelaci&oacute;n y pulsa el bot&oacute;n Aceptar para confirmarlo.\n";

         # Ponemos una lista en la que seleccionar el motivo de la cancelaci¢n.
         print "<form method=post action=http://www.orchestra.es/cgi-local/SQLparser.pl>\n";
         print "<p><select name=select size=1>\n";
         print "<option value=palabras>N&uacute;mero de palabras incorrecto</option>\n";
         print "<option value=idioma>Idioma incorrecto</option>\n";
         print "</select></p>\n";
         print "<input type=submit name=Aceptar value=\"Aceptar\">\n";
      }
      if ($accion eq 'Recibir documentos') {
         print "<p>Has solicitado recibir los documentos del proyecto cuyos detalles se muestran debajo; \n";
         print "por favor pulsa el bot&oacute;n Aceptar para confirmarlo.\n";
      }

      print "<hr noshade size=1>\n";
      &DetalleProyecto;
      print "<hr noshade size=1>\n</form>";
      print "</form>\n";
   } else {
      print "No se ha seleccionado ning&uacute;n proyecto.<br>\n";
      print "Pulsa Back y vuelve a la p&aacute;gina anterior para seleccionar uno.\n";
   }
}


###############
# Crea un nuevo proyecto con los datos indicados en el formulario.
#

sub CreateProject {
   
   $FORM{'FechaInicio'} = $FORM{'FIDia'}."/".$FORM{'FIMes'}."/".$FORM{'FIAnyo'}."/".$FORM{'FIHora'};
   $FORM{'FechaEntrega'} = $FORM{'FEDia'}."/".$FORM{'FEMes'}."/".$FORM{'FEAnyo'}."/".$FORM{'FEHora'};
   &ActualizarTabla ("Proyectos", %FORM);

   # Tal vez habrá que ver qué devuelve ActualizarTabla.
   print "<p>Proyecto a&ntilde;adido a la base de datos de Orchestra</p>\n";
}


###############
# Actualiza la tabla de variables del sistema.
#

sub UpdateSystem {
   
   &ActualizarTabla ("System", %FORM);

   # Tal vez habrá que ver qué devuelve ActualizarTabla.
   print "<p>Variable a&ntilde;adida a la tabla de Sistema de Orchestra</p>\n";
}


###############
# Devuelve la pagina HTML
#
# Interpreta las lineas de la pagina que se le indica, por si se han incluido
# tags. Los que reconoce son:
#
#	$variable$ Visualiza una variable.
#	!variable! Visualiza el valor de un campo del formulario recibido.
#	&variable& Ejecuta una función.

sub return_html {

   open(MAIN,"$basedir$FORM{'returnHTML'}") || die $!;
   @main = <MAIN>;
   close(MAIN);

   print "Content-type: text/html\n\n";

   foreach $main_line (@main) {
      if ($main_line =~ /<!-- ORK TAG (.*)\$(.*)\$(.*) -->/) {
         print $1,${$2},$3;
      } else {
         if ($main_line =~ /<!-- ORK TAG (.*)\!(.*)\!(.*) -->/) {
            print $1,$FORM{$2},$3;
         } else {
            if ($main_line =~ /<!-- ORK TAG (.*)\&(.*)\&(.*) -->/) {
               print $1;
               $funcion = $2;
               &{$funcion};
               print $3;
            } else {
               print $main_line;
            }
         }
      }
   }
}
