Commits

Igor Támara  committed a44b9e4

Se arregla bug de cierre de período sin cuentas con ajuste al peso

* Se reemplazan backslashes por doble comillas sencillas
* Se elimina la función mezcadenas
* Se cambia la forma de elección de período

  • Participants
  • Parent commits d223060

Comments (0)

Files changed (3)

File src/cuenta_php_files/cerrarperiodo.php

     case 3:
       //Usualmente se coloca el 30 de Diciembre del año en curso
       //Imprimir la cantidad de cuentas que se afectaron con el ajuste al peso.
-      if(!isset($_POST["permitidos"])||!isset($_POST["valor_ajuste"])) {
+      if(!isset($_POST["valor_ajuste"])) {
 	print "No puede continuar debido a falta de información en ajuste al peso";
 	break;
       }
       $_SESSION["valor_ajuste"]=$_POST["valor_ajuste"];
-      $_SESSION["permitidos"]=$_POST["permitidos"];
+      if(isset($_POST["permitidos"])) {
+          $_SESSION["permitidos"]=$_POST["permitidos"];
+      }
       print "
 <form action=\"cerrarperiodo.php\" method=\"post\">";
       print "Cuando se cierre el período, quedará almacenado en la cuenta:";
-      $digs="3705".toma_cadena("SELECT substr(text(max(oficial)+1),5) FROM tiposcuenta WHERE oficial LIKE '3705%'");
+      $digs="3705".toma_cadena("SELECT substr(text(max(oficial)+1),5) FROM tiposcuenta WHERE oficial::text LIKE '3705%'");
       $describir="Pérdida o ganancia ".$_SESSION["periodocierra"];
       print "
       <input name=\"digitos\" value=\"$digs\" size=\"8\">
       <input type=\"hidden\" name=\"valor_ajuste\" value=\"$valor_ajuste\">
       <input type=\"submit\" value=\"Finalizar\" name=\"envio\">
 </form>";
-      $q="SELECT SUM(tc.valor*tc.signo) FROM periodoscontables pc, transaccionescuenta tc, tiposcuenta  ti, transacciones t WHERE tc.idcuenta=ti.id AND t.id=tc.idtransaccion AND (ti.oficial like '4%' OR ti.oficial LIKE '5%') AND t.idperiodo=pc.id AND pc.fechaini>'31/12/".($_SESSION["periodocierra"]-1)."' AND pc.fechafin<'01/01/".($_SESSION["periodocierra"]+1)."' AND t.idestado=1 AND tc.idestado=1";
+      $q="SELECT SUM(tc.valor*tc.signo) FROM periodoscontables pc, transaccionescuenta tc, tiposcuenta  ti, transacciones t WHERE tc.idcuenta=ti.id AND t.id=tc.idtransaccion AND (ti.oficial::text like '4%' OR ti.oficial::text LIKE '5%') AND t.idperiodo=pc.id AND pc.fechaini>'31/12/".($_SESSION["periodocierra"]-1)."' AND pc.fechafin<'01/01/".($_SESSION["periodocierra"]+1)."' AND t.idestado=1 AND tc.idestado=1";
       $final=toma_cadena($q); 
       if ($final<0) {
 	print "<p>En este período se han generado excedentes por un valor de <b>".apesos(-$final)."</b>, salvo ajuste al peso.";
       else {
 	print "<p>En este período hubo pérdida por valor de <b>".apesos($final)."</b>, salvo ajuste al peso.";
       }
-      imprimetabla("Cierre de períodos anteriores","describetrans.php?muestra=2&id=%d&&fechaini=01/01/2000&fechafin=".toma_cadena("SELECT date('now')"),"SELECT id,oficial||' '||descripcion AS cierre_anterior FROM tiposcuenta WHERE oficial LIKE '3705%' AND oficial>3800");
+      imprimetabla("Cierre de períodos anteriores","describetrans.php?muestra=2&id=%d&&fechaini=01/01/2000&fechafin=".toma_cadena("SELECT date('now')"),"SELECT id,oficial||' '||descripcion AS cierre_anterior FROM tiposcuenta WHERE oficial::text LIKE '3705%' AND oficial>3800");
  break;
    case 4:
-     //Se hace ajuste al peso a 30 de Diciembre del año que se cierra
-      toma_cadena("SELECT ajustarpeso(".$_SESSION["periodocierra"].",".$_SESSION["valor_ajuste"].",".toma_cadena("SELECT iddatospersonales FROM datospersonalesusuario WHERE login='".$_SESSION["usuario"]."'").",'30-12-".$_SESSION["periodocierra"]."','".unecad($_SESSION["permitidos"],",")."');");
+      if(isset($_SESSION["permitidos"])) {
+        //Se hace ajuste al peso a 30 de Diciembre del año que se cierra
+       $q="SELECT ajustarpeso(".$_SESSION["periodocierra"].",".$_SESSION["valor_ajuste"].",".toma_cadena("SELECT iddatospersonales FROM datospersonalesusuario WHERE login='".$_SESSION["usuario"]."'").",'30-12-".$_SESSION["periodocierra"]."','".unecad($_SESSION["permitidos"],",")."');";
+       toma_cadena($q);
+      }
       #Se adiciona la cuenta para registro de pérdida o ganancia.
-      toma_cadena("INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza) SELECT ".$_POST["digitos"].",'".$_POST["descripcion"]."',id,naturaleza FROM tiposcuenta WHERE oficial=3705");
+      $q="INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza) SELECT ".$_POST["digitos"].",'".$_POST["descripcion"]."',id,naturaleza FROM tiposcuenta WHERE oficial=3705";
+      toma_cadena($q);
       #Se calcula pérdida o ganancia y se adiciona a la base de datos
-      toma_cadena("SELECT cierreperiodo(".$_SESSION["periodocierra"].",".$_POST["digitos"].",".toma_cadena("SELECT iddatospersonales FROM datospersonalesusuario WHERE login='".$_SESSION["usuario"]."'").")");
+     $q="SELECT cierreperiodo(".$_SESSION["periodocierra"].",'".$_POST["digitos"]."',".toma_cadena("SELECT iddatospersonales FROM datospersonalesusuario WHERE login='".$_SESSION["usuario"]."'").")";
+      toma_cadena($q);
       #Se cierran los períodos contables
-      toma_cadena("UPDATE periodoscontables SET idestado = 2 WHERE nombre like '%".$_SESSION["periodocierra"]."'");
+      $q="UPDATE periodoscontables SET idestado = 2 WHERE nombre like '%".$_SESSION["periodocierra"]."'";
+      toma_cadena($q);
       #Se calculan los saldos para el período
-      toma_cadena("SELECT saldosparaperiodo(".$_SESSION["periodocierra"].")");
+      $q="SELECT saldosparaperiodo(".$_SESSION["periodocierra"].")";
+      toma_cadena($q);
       #Se actualizan periodoactual y periodosiguiente
-      toma_cadena("UPDATE variables SET valor=".($_SESSION["periodocierra"]+1)." WHERE nombre='periodoactual'");
-      toma_cadena("UPDATE variables SET valor=".($_SESSION["periodocierra"]+1)." WHERE nombre='periodosiguiente'");
+      $q="UPDATE variables SET valor=".($_SESSION["periodocierra"]+1)." WHERE nombre='periodoactual'";
+      toma_cadena($q);
+      $q="UPDATE variables SET valor=".($_SESSION["periodocierra"]+1)." WHERE nombre='periodosiguiente'";
+      toma_cadena($q);
       //Se coloca siguiente el mismo, porque es posible que se matriculen más estudiantes de forma tardía.
-      print "<p>Se hizo el <a href=\"describetrans.php?muestra=1&id=".toma_cadena("SELECT max(id) FROM transacciones WHERE descripcion='Ajustes al peso ".$_SESSION["periodocierra"]."'")."\">ajuste al peso</a>.";
+      if(isset($_SESSION["permitidos"])) {
+         print "<p>Se hizo el <a href=\"describetrans.php?muestra=1&id=".toma_cadena("SELECT max(id) FROM transacciones WHERE descripcion='Ajustes al peso ".$_SESSION["periodocierra"]."'")."\">ajuste al peso</a>.";
+     }
       print "<p>Se hizo el <a href=\"describetrans.php?muestra=1&id=".toma_cadena("SELECT max(id) FROM transacciones WHERE descripcion='Cierre del período ".$_SESSION["periodocierra"]."'")."\">cierre del período</a>.";
       print "<p>El período actual es ahora ".($_SESSION["periodocierra"]+1).", consulte el <a href=\"balanceprueba.php?periodo=0\">balance anual</a>, también puede <a href=\"configura.php\">Cambiar de año</a> para comparar los balances del año anterior y el actual."; //Finalmente, podría proceder a <a href=\"pensiones.php?causar=1\">causar</a> las pensiones.";
       $_SESSION["anio"]+=1;

File src/cuenta_php_files/configura.php

 <input name="id" type="hidden" value="1">
 <select name="anio">
 ';
-  option("SELECT distinct periodo,periodo FROM matriculas ORDER BY periodo DESC",$_SESSION["anio"]);
+  option("SELECT DISTINCT date_part('year',fechaini),date_part('year',fechaini) FROM periodoscontables ORDER BY 1 DESC",$_SESSION["anio"]);
   print '
 </select>
 <input type="submit" value="Cambiar año">

File src/sql/creacionfunciones.sql

 saldo=0.0
 naturaleza=plpy.execute("SELECT naturaleza FROM tiposcuenta WHERE id=%d" % cuenta)[0]["naturaleza"]
 #Se obtiene el saldo del último período calculado
-q="SELECT pc.anterior AS anterior,(s.debito-s.credito)*ti.naturaleza AS saldo FROM periodoscontables pc,saldos s,tiposcuenta ti WHERE nombre=\'Enero %s\' AND pc.anterior=s.idperiodo AND ti.id=s.idtiposcuenta AND s.activo=1 AND s.idtiposcuenta=%d" %(anio,cuenta)
+q="SELECT pc.anterior AS anterior,(s.debito-s.credito)*ti.naturaleza AS saldo FROM periodoscontables pc,saldos s,tiposcuenta ti WHERE nombre=''Enero %s'' AND pc.anterior=s.idperiodo AND ti.id=s.idtiposcuenta AND s.activo=1 AND s.idtiposcuenta=%d" %(anio,cuenta)
 res1=plpy.execute(q)
 if len(res1)>0 :
   #Se toma el saldo inicial para la cuenta si había saldo
   periodo=res1[0]["anterior"]
 else :
   #Dado que la cuenta no tenía saldo, se comienza en cero, y se obtiene el período contable inicial del año.
-  periodo=(plpy.execute("SELECT anterior FROM periodoscontables WHERE nombre=\'Enero %s\'" % anio)[0]["anterior"])
+  periodo=(plpy.execute("SELECT anterior FROM periodoscontables WHERE nombre=''Enero %s''" % anio)[0]["anterior"])
 #Se calcula el movimiento entre el último período calculado y la fecha especificada
-q="SELECT SUM(tc.valor*tc.signo) AS valor FROM transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idperiodo>%d AND date_lt(t.fecha,date(\'%s\')) AND tc.idcuenta = %d  AND tc.idestado=1 AND t.idestado=1" % (periodo,fecha,cuenta)
+q="SELECT SUM(tc.valor*tc.signo) AS valor FROM transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idperiodo>%d AND date_lt(t.fecha,date(''%s'')) AND tc.idcuenta = %d  AND tc.idestado=1 AND t.idestado=1" % (periodo,fecha,cuenta)
 res2=plpy.execute(q)
 if len(res2)>0 :
   if res2[0]["valor"]!=None :
 fregistro=args[3]
 
 #Búsqueda del id de la transaccion
-nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=\'NI\'")[0]["ultimatransaccion"]
-tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'NI\'")[0]["id"]
-res=plpy.execute("SELECT id,fechaini FROM periodoscontables WHERE nombre=\'Cancela %d\'" % anio)
+nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=''NI''")[0]["ultimatransaccion"]
+tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''NI''")[0]["id"]
+res=plpy.execute("SELECT id,fechaini FROM periodoscontables WHERE nombre=''Cancela %d''" % anio)
 if (len(res)==0) :
   #No existía período contable para el año en mención.
   return -1
 idperiodo=res[0]["id"]
 fecha=res[0]["fechaini"]
-res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,\'%s\',\'Ajustes al peso %d\',%d, %d,%d,%d,\'%s\',%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,fregistro,idperiodo,tiponota))
+res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,''%s'',''Ajustes al peso %d'',%d, %d,%d,%d,''%s'',%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,fregistro,idperiodo,tiponota))
 
 #Se toma el id para las transaccionescuenta
-trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=\'Ajustes al peso %d\'" % (tiponota,anio))[0]["max"]
+trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=''Ajustes al peso %d''" % (tiponota,anio))[0]["max"]
 
-#plpy.info("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE \'%s\' OR ti.oficial LIKE \'%s\') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
-res=plpy.execute("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE \'%s\' OR ti.oficial LIKE \'%s\') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
+#plpy.info("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE ''%s'' OR ti.oficial LIKE ''%s'') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
+res=plpy.execute("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE ''%s'' OR ti.oficial LIKE ''%s'') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
 
 total=0.0
 hechas=1
 filtro=args[4]
 
 #Búsqueda del id de la transaccion
-nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=\'NI\'")[0]["ultimatransaccion"]
-tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'NI\'")[0]["id"]
-res=plpy.execute("SELECT id,fechafin-1 as fechafin FROM periodoscontables WHERE nombre=\'Diciembre %d\'" % anio)
+nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=''NI''")[0]["ultimatransaccion"]
+tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''NI''")[0]["id"]
+res=plpy.execute("SELECT id,fechafin-1 as fechafin FROM periodoscontables WHERE nombre=''Diciembre %d''" % anio)
 if (len(res)==0) :
   #No existía período contable para el año en mención.
   return -1
 idperiodo=res[0]["id"]
 fecha=res[0]["fechafin"]
-res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,\'%s\',\'Ajustes al peso %d\',%d, %d,%d,%d,\'%s\',%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,fregistro,idperiodo,tiponota))
+res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,''%s'',''Ajustes al peso %d'',%d, %d,%d,%d,''%s'',%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,fregistro,idperiodo,tiponota))
 
 #Se toma el id para las transaccionescuenta
-trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=\'Ajustes al peso %d\'" % (tiponota,anio))[0]["max"]
+trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=''Ajustes al peso %d''" % (tiponota,anio))[0]["max"]
 
-res=plpy.execute("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE \'%s\' OR ti.oficial LIKE \'%s\') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
+res=plpy.execute("SELECT  ti.id,ti.naturaleza AS signo,ti.oficial AS cuenta ,sum(tc.valor*tc.signo) AS saldo FROM tiposcuenta ti, transaccionescuenta tc, transacciones t WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo<%d AND ti.id=tc.idcuenta AND (ti.oficial LIKE ''%s'' OR ti.oficial LIKE ''%s'') GROUP BY ti.oficial,ti.descripcion,ti.id,ti.naturaleza HAVING sum(tc.valor*tc.signo)<> 0 AND @sum(tc.valor*tc.signo)<%d ORDER BY text(ti.oficial)" % (idperiodo,"1%","2%",args[1]))
 
 total=0.0
 hechas=1
 -- /usr/lib/postgresql/createlang plpythonu bd
 CREATE OR REPLACE FUNCTION cierreperiodo(int4,text,int4) RETURNS numeric
 AS '
-anio=args[0]
+anio=args[0].
 cuenta=args[1]
 idtercero=args[2]
 
 #Búsqueda de la cuenta donde se colocará el resultado del ejercicio
 try :
-   nrocuenta=plpy.execute("SELECT id from tiposcuenta WHERE oficial=\'%s\'" % cuenta)[0]["id"]
+   nrocuenta=plpy.execute("SELECT id from tiposcuenta WHERE oficiali::text=''%s''" % cuenta)[0]["id"]
 except :
    #No existía la cuenta en donde se iba a almacenar el resultado
    return -2
 #Búsqueda del id de la transaccion
-nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=\'NI\'")[0]["ultimatransaccion"]
-tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'NI\'")[0]["id"]
-res=plpy.execute("SELECT id,fechaini FROM periodoscontables WHERE nombre=\'Cancela %d\'" % anio)
+nronotai=1+plpy.execute("SELECT ultimatransaccion(id) from tiposcomprobante where abrevia=''NI''")[0]["ultimatransaccion"]
+tiponota=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''NI''")[0]["id"]
+res=plpy.execute("SELECT id,fechaini FROM periodoscontables WHERE nombre=''Cancela %d''" % anio)
 if (len(res)==0) :
   #No existía período de cancelación para el año en mención.
   return -1
 idperiodo=res[0]["id"]
 fecha=res[0]["fechaini"]
-res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,\'%s\',\'Cierre del período %d\',%d, %d,%d,%d,date(\'now\'),%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,idperiodo,tiponota))
+res=plpy.execute("INSERT INTO transacciones(idcomprobante,fecha,descripcion,tipotercero,idtercero,idestado,idusuario,fecharegistro,idperiodo,idtipocomprobante) VALUES (%d,''%s'',''Cierre del período %d'',%d, %d,%d,%d,date(''now''),%d,%d)" % (nronotai,fecha,anio,3,idtercero,1,idtercero,idperiodo,tiponota))
 
 #Se toma el id para las transaccionescuenta
-plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=\'Cierre del período %d\'" % (tiponota,anio))
-trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=\'Cierre del período %d\'" % (tiponota,anio))[0]["max"]
+plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=''Cierre del período %d''" % (tiponota,anio))
+trans=plpy.execute("SELECT max(id) from transacciones WHERE idtipocomprobante=%d AND descripcion=''Cierre del período %d''" % (tiponota,anio))[0]["max"]
 
 #Se calculan los saldos de todas las cuentas 4 y 5 presentes que no sean cero.
-res=plpy.execute("SELECT ti.id,ti.oficial||\' \'||ti.descripcion AS cuenta, sum(tc.valor*tc.signo) AS saldo  FROM tiposcuenta ti, transaccionescuenta tc, transacciones t, periodoscontables pc WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo=pc.id AND pc.nombre like \'%"+`anio`+"\' AND ti.id=tc.idcuenta AND (ti.oficial like \'4%\' OR ti.oficial like \'5%\')GROUP BY ti.oficial, ti.descripcion, ti.id HAVING sum(tc.valor*tc.signo)<> 0 ORDER BY text(ti.oficial)")
+res=plpy.execute("SELECT ti.id,ti.oficial||'' ''||ti.descripcion AS cuenta, sum(tc.valor*tc.signo) AS saldo  FROM tiposcuenta ti, transaccionescuenta tc, transacciones t, periodoscontables pc WHERE t.id=tc.idtransaccion AND t.idestado=1 AND tc.idestado=1 AND t.idperiodo=pc.id AND pc.nombre like ''%"+`anio`+"'' AND ti.id=tc.idcuenta AND (ti.oficial::text like ''4%'' OR ti.oficial::text like ''5%'')GROUP BY ti.oficial, ti.descripcion, ti.id HAVING sum(tc.valor*tc.signo)<> 0 ORDER BY text(ti.oficial)")
 i=1
 debe=0.0
 haber=0.0
 CREATE OR REPLACE FUNCTION saldosparaperiodo(int4) RETURNS int
 AS '
 anio=args[0]
-panterior=plpy.execute("SELECT anterior FROM periodoscontables WHERE nombre=\'Enero %d\'" % anio)[0]["anterior"]
-pultimo=plpy.execute("SELECT id FROM periodoscontables WHERE nombre=\'Cancela %d\'" % anio)[0]["id"]
-plpy.execute("INSERT INTO saldos (idperiodo,idtiposcuenta,debito,credito,activo) SELECT %d,int4(s.id),@s.v* @(sign(s.v)+s.n)/2,@s.v* @(sign(s.v)-s.n)/2,1 FROM (SELECT mezcadenas(saldos.id,mov.id) AS id,haganumero(saldos.inicial)+haganumero(mov.movimiento) AS v,int4(mezcadenas(saldos.naturaleza,mov.naturaleza)) AS n FROM (SELECT ti.id AS id,(sum(s.debito)-sum(s.credito))*ti.naturaleza AS inicial, ti.naturaleza AS naturaleza FROM saldos s, tiposcuenta ti WHERE s.idtiposcuenta= ti.id AND s.idperiodo=%d GROUP BY ti.naturaleza , ti.id) AS saldos FULL OUTER JOIN (SELECT ti.id AS id, SUM(tc.valor*tc.signo)*ti.naturaleza AS movimiento, ti.naturaleza FROM tiposcuenta ti, transaccionescuenta tc , transacciones t WHERE tc.idestado=1 AND t.idestado=1 AND ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND t.idperiodo>%d AND t.idperiodo<=%d GROUP BY ti.id,ti.naturaleza HAVING @SUM(tc.valor*tc.signo)*ti.naturaleza>=1) AS mov ON mov.id=saldos.id GROUP BY saldos.id,mov.id,saldos.inicial,mov.movimiento,saldos.naturaleza,mov.naturaleza  HAVING  haganumero(saldos.inicial)+haganumero(mov.movimiento)<>0) AS s" % (pultimo,panterior,panterior,pultimo))
+panterior=plpy.execute("SELECT anterior FROM periodoscontables WHERE nombre=''Enero %d''" % anio)[0]["anterior"]
+pultimo=plpy.execute("SELECT id FROM periodoscontables WHERE nombre=''Cancela %d''" % anio)[0]["id"]
+plpy.execute("INSERT INTO saldos (idperiodo,idtiposcuenta,debito,credito,activo) SELECT %d,int4(s.id),@s.v* @(sign(s.v)+s.n)/2,@s.v* @(sign(s.v)-s.n)/2,1 FROM (SELECT coalesce(saldos.id,mov.id) AS id,haganumero(saldos.inicial)+haganumero(mov.movimiento) AS v,int4(coalesce(saldos.naturaleza,mov.naturaleza)) AS n FROM (SELECT ti.id AS id,(sum(s.debito)-sum(s.credito))*ti.naturaleza AS inicial, ti.naturaleza AS naturaleza FROM saldos s, tiposcuenta ti WHERE s.idtiposcuenta= ti.id AND s.idperiodo=%d GROUP BY ti.naturaleza , ti.id) AS saldos FULL OUTER JOIN (SELECT ti.id AS id, SUM(tc.valor*tc.signo)*ti.naturaleza AS movimiento, ti.naturaleza FROM tiposcuenta ti, transaccionescuenta tc , transacciones t WHERE tc.idestado=1 AND t.idestado=1 AND ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND t.idperiodo>%d AND t.idperiodo<=%d GROUP BY ti.id,ti.naturaleza HAVING @SUM(tc.valor*tc.signo)*ti.naturaleza>=1) AS mov ON mov.id=saldos.id GROUP BY saldos.id,mov.id,saldos.inicial,mov.movimiento,saldos.naturaleza,mov.naturaleza  HAVING  haganumero(saldos.inicial)+haganumero(mov.movimiento)<>0) AS s" % (pultimo,panterior,panterior,pultimo))
 return plpy.execute("SELECT sum(activo) FROM saldos WHERE activo=1 AND idperiodo=%d GROUP BY idperiodo" % pultimo)[0]["sum"]
 '
 LANGUAGE plpythonu;
 AS 'return args[0].count(args[1])>0'
 LANGUAGE plpythonu;
 
--- Recibe dos cadenas, de las cuáles retorna aquella que no sea nula, si 
--- ambas son NO nulas, retorna la primera.  Si ambas son nulas
--- retorna null
--- Requiere que se haya creado el lenguaje previamente para la base de datos
--- /usr/lib/postgresql/createlang plpythonu bd
--- Ejemplo de uso :
--- select mezcadenas(2,2);
--- retorna 2
--- select mezcadenas(2,null);
--- retorna 2
-CREATE OR REPLACE FUNCTION mezcadenas(text,text) RETURNS text
-   AS '
-if args[0]==None :
-  return args[1]
-else :
-  return args[0]
-'
-LANGUAGE plpythonu;
-
 -- Recibe dos enteros, retorna la suma de los dos, cuando encuentra None
 -- asume que el valor es 0
 -- Requiere que se haya creado el lenguaje previamente para la base de datos
 AS '
 id=args[0]
 anio=args[1]
-aniom=plpy.execute("SELECT to_char(fecha,\'YYYY/MM\') AS fecha FROM matriculas WHERE estudiante=%d AND periodo=%d" %(id,anio))[0]["fecha"]
+aniom=plpy.execute("SELECT to_char(fecha,''YYYY/MM'') AS fecha FROM matriculas WHERE estudiante=%d AND periodo=%d" %(id,anio))[0]["fecha"]
 cant=0
 
 #Se revisa si tiene descuentos para hacer el ajuste correspondiente
 if anio==int(aniom.split("/")[0]) and int(aniom.split("/")[1])>1 :
   #Se matriculó iniciado el período académico
-  cons=plpy.execute("SELECT int4(round(sum(@tc.valor*tc.signo)/m.costopension,0)+int4(to_char(m.fecha,\'MM\'))-2) AS mesporpagar FROM transaccionescuenta tc,tiposcuenta ti,transacciones t, estudiantes e, matriculas m WHERE ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND (ti.oficial = 1305050000000+int4(e.codigoestudiante) OR ti.oficial=2705450000000+int4(codigoestudiante) ) AND e.id=%d AND t.idestado=1 AND e.id=m.estudiante AND m.periodo=%d AND t.descripcion SIMILAR TO e.codigoestudiante||\':\\\\\\[%d%s\' GROUP BY m.costopension,m.fecha" % (id,anio,anio,"-(P|A)%"));
+  cons=plpy.execute("SELECT int4(round(sum(@tc.valor*tc.signo)/m.costopension,0)+int4(to_char(m.fecha,''MM''))-2) AS mesporpagar FROM transaccionescuenta tc,tiposcuenta ti,transacciones t, estudiantes e, matriculas m WHERE ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND (ti.oficial = 1305050000000+int4(e.codigoestudiante) OR ti.oficial=2705450000000+int4(codigoestudiante) ) AND e.id=%d AND t.idestado=1 AND e.id=m.estudiante AND m.periodo=%d AND t.descripcion SIMILAR TO e.codigoestudiante||'':\\\\\\[%d%s'' GROUP BY m.costopension,m.fecha" % (id,anio,anio,"-(P|A)%"));
   if len(cons)==1 :
     #Ya ha hecho algún Pago
     return cons[0]["mesporpagar"]
   else :
     #Si no había hecho pago, se revisa el mes en el que se matriculó
-    cant=plpy.execute("SELECT int4(to_char(fecha,\'MM\'))-2 AS mes FROM matriculas WHERE estudiante=%d AND periodo=%d" %(id,anio))[0]["mes"]
+    cant=plpy.execute("SELECT int4(to_char(fecha,''MM''))-2 AS mes FROM matriculas WHERE estudiante=%d AND periodo=%d" %(id,anio))[0]["mes"]
 else :
   #Se matriculó ANTES de iniciar el período.
-  cons=plpy.execute("SELECT int4(round(sum(@tc.valor*tc.signo)/m.costopension,0)) AS mesporpagar FROM transaccionescuenta tc,tiposcuenta ti,transacciones t, estudiantes e, matriculas m WHERE ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND (ti.oficial = 1305050000000+int4(e.codigoestudiante) OR ti.oficial=2705450000000+int4(codigoestudiante) ) AND e.id=%d AND t.idestado=1 AND e.id=m.estudiante AND m.periodo=%d AND t.descripcion SIMILAR TO e.codigoestudiante||\':\\\\\\[%d%s\' GROUP BY m.costopension" % (id,anio,anio,"-(P|A)%"));
+  cons=plpy.execute("SELECT int4(round(sum(@tc.valor*tc.signo)/m.costopension,0)) AS mesporpagar FROM transaccionescuenta tc,tiposcuenta ti,transacciones t, estudiantes e, matriculas m WHERE ti.id=tc.idcuenta AND t.id=tc.idtransaccion AND (ti.oficial = 1305050000000+int4(e.codigoestudiante) OR ti.oficial=2705450000000+int4(codigoestudiante) ) AND e.id=%d AND t.idestado=1 AND e.id=m.estudiante AND m.periodo=%d AND t.descripcion SIMILAR TO e.codigoestudiante||'':\\\\\\[%d%s'' GROUP BY m.costopension" % (id,anio,anio,"-(P|A)%"));
   if len(cons)==1 :
     #Ya ha hecho algún Pago
     return cons[0]["mesporpagar"]
 
 CREATE OR REPLACE FUNCTION nuevocodigo(int) RETURNS int
 AS '
-res=plpy.execute("SELECT int4(max(codigoestudiante))+1 AS codigo FROM estudiantes WHERE codigoestudiante LIKE (SELECT to_char(d.fechanacimiento,\'YYYY\')||\'%s\' FROM datospersonales d WHERE id=%d)  UNION  SELECT int4(to_char(d.fechanacimiento,\'YYYY\')) AS codigo FROM datospersonales d WHERE id=%d ORDER BY codigo DESC" %("%",args[0],args[0]))
+res=plpy.execute("SELECT int4(max(codigoestudiante))+1 AS codigo FROM estudiantes WHERE codigoestudiante LIKE (SELECT to_char(d.fechanacimiento,''YYYY'')||''%s'' FROM datospersonales d WHERE id=%d)  UNION  SELECT int4(to_char(d.fechanacimiento,''YYYY'')) AS codigo FROM datospersonales d WHERE id=%d ORDER BY codigo DESC" %("%",args[0],args[0]))
 if res[0]["codigo"]==None or res[1]["codigo"]==None:
   #Se crea un nuevo código
   return (res[1]["codigo"]*1000)+1
 AS
 '
 tipo=args[0]
-res=plpy.execute(" SELECT max(t.idcomprobante) FROM transacciones t WHERE t.idtipocomprobante=%d AND to_char(t.fecha,\'YYYY\')=(SELECT valor FROM variables WHERE nombre=\'periodoactual\')" % tipo)
+res=plpy.execute(" SELECT max(t.idcomprobante) FROM transacciones t WHERE t.idtipocomprobante=%d AND to_char(t.fecha,''YYYY'')=(SELECT valor FROM variables WHERE nombre=''periodoactual'')" % tipo)
 if len(res)==0 or res[0]["max"]==None :
  return 1
 if tipo==1 or tipo==7 :
 a=args[0].split("|")
 for i in a :
   b=i.split(",")
-  if b[2]==\'0\' :
+  if b[2]==''0'' :
     plpy.execute("INSERT INTO transaccionescuenta(idcuenta,valor,signo,idestado,idtransaccion) VALUES ((SELECT id FROM tiposcuenta WHERE oficial=%s%s),%s,-1,1,%d)" % (b[0],b[1],b[3],args[1]))
   else :
     plpy.execute("INSERT INTO transaccionescuenta(idcuenta,valor,signo,idestado,idtransaccion) VALUES ((SELECT id FROM tiposcuenta WHERE oficial=%s%s),%s,1,1,%d)"%(b[0],b[1],b[2],args[1]))
   cadena="%s,,%s,0|270545,%s,0,%s|416005,%s,0,%s" %(banco,valor,codigoestudiante,(12-mes)*((valor-valor%12)/12),codigoestudiante,(mes*(valor-valor%12)/12)+valor%12)
 if not descuento == 0 :
   #En caso de que haya un descuento en la matrícula, se registra en la tabla de descuentos.
-  plpy.execute("INSERT INTO descuentos (persona,periodo,concepto,pago,descuento,fechainicial,fechafinal) VALUES ((SELECT id FROM estudiantes WHERE codigoestudiante=\'%s\'),%d,\'%s[%d-M] \'||\'%s\',%s,%s,date(\'%s\'),date(\'%s\')) " %(codigoestudiante,anio,codigoestudiante,anio,descripcion,valor,descuento,fecha,fecha))
+  plpy.execute("INSERT INTO descuentos (persona,periodo,concepto,pago,descuento,fechainicial,fechafinal) VALUES ((SELECT id FROM estudiantes WHERE codigoestudiante=''%s''),%d,''%s[%d-M] ''||''%s'',%s,%s,date(''%s''),date(''%s'')) " %(codigoestudiante,anio,codigoestudiante,anio,descripcion,valor,descuento,fecha,fecha))
   res=res+1
   cadena="%s,,%s,0|417501,%s,%s,0|270545,%s,0,(%s+%s)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor,descuento)
   if int(fecha.split("/")[2])==anio :
     cadena="%s,,%s,0|417501,%s,%s,0|270545,%s,0,%s|416005,%s,0,%s" %(banco,valor,codigoestudiante,descuento,codigoestudiante,(12-mes)*((valor+descuento)-(valor+descuento)%12)/12,codigoestudiante,mes*(valor+descuento-(valor+descuento)%12)/12+(valor+descuento)%12)
   if plpy.execute("SELECT COUNT(*) FROM tiposcuenta WHERE oficial=417501%s" % codigoestudiante)[0]["count"]==0 :
     #Si la subcuenta de descuentos para el estudiante no existía, se crea.
-    plpy.execute("INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza,puc) VALUES (417501%s,\'Descuentos en costos educativos %s\',(SELECT id FROM tiposcuenta WHERE oficial=417501),-1,0)" %(codigoestudiante,codigoestudiante))
+    plpy.execute("INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza,puc) VALUES (417501%s,''Descuentos en costos educativos %s'',(SELECT id FROM tiposcuenta WHERE oficial=417501),-1,0)" %(codigoestudiante,codigoestudiante))
     res=res+1
-plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (\'%s:[%d-M] Matricula estudiante %s %s\',date(\'%s\'),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(\'%s\')) AND date_le(date(\'%s\'),fechafin)),1,date(\'today\'),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,(SELECT id FROM tiposcomprobante WHERE abrevia=\'CO\'),%d)" % (codigoestudiante,anio,codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,numconsigna))
-id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like \'%s:[%d-M]%s\'" % (codigoestudiante,anio," Matricula estudiante%"))[0]["id"]
-return res+plpy.execute("SELECT registratransacciones(\'%s\',%d)" % (cadena,id))[0]["registratransacciones"]
+plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (''%s:[%d-M] Matricula estudiante %s %s'',date(''%s''),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(''%s'')) AND date_le(date(''%s''),fechafin)),1,date(''today''),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,(SELECT id FROM tiposcomprobante WHERE abrevia=''CO''),%d)" % (codigoestudiante,anio,codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,numconsigna))
+id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like ''%s:[%d-M]%s''" % (codigoestudiante,anio," Matricula estudiante%"))[0]["id"]
+return res+plpy.execute("SELECT registratransacciones(''%s'',%d)" % (cadena,id))[0]["registratransacciones"]
 return 0
 
 '
 idregistra=args[6]
 nroconsigna=args[7]
 banco=args[8]
-tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'CO\'")[0]["id"]
-plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (\'%s:[%d-A%d] Pago anticipado mes(es) %s estudiante %s %s\',date(\'%s\'),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(\'%s\')) AND date_le(date(\'%s\'),fechafin)),1,date(\'today\'),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
-id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like \'%s:[%d-A%d]%s\'" % (codigoestudiante,anio,periodo," Pago anticipado mes(es) %"))[0]["id"]
-res=plpy.execute("SELECT registratransacciones(\'%s,,%s,0|270545,%s,0,%s\',%d)" % (banco,valor,codigoestudiante,valor,id))[0]["registratransacciones"]
+tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''CO''")[0]["id"]
+plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (''%s:[%d-A%d] Pago anticipado mes(es) %s estudiante %s %s'',date(''%s''),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(''%s'')) AND date_le(date(''%s''),fechafin)),1,date(''today''),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
+id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like ''%s:[%d-A%d]%s''" % (codigoestudiante,anio,periodo," Pago anticipado mes(es) %"))[0]["id"]
+res=plpy.execute("SELECT registratransacciones(''%s,,%s,0|270545,%s,0,%s'',%d)" % (banco,valor,codigoestudiante,valor,id))[0]["registratransacciones"]
 return res+1	
 '
 LANGUAGE plpythonu;
 ff=args[6]
 if plpy.execute("SELECT count(*) FROM descuentos WHERE persona=%d AND periodo=%d" % (id,anio))[0]["count"]>0 :
   return 0
-res=plpy.execute("INSERT INTO descuentos (persona,periodo,concepto,pago,descuento,fechainicial,fechafinal) VALUES (%d,%d,(SELECT codigoestudiante||\'[%d-P] %s\' FROM estudiantes WHERE id=%d),%s,%s,date(\'%s\'),date(\'%s\')) " %(id,anio,anio,descripcion,id,pago,descuento,fi,ff))
+res=plpy.execute("INSERT INTO descuentos (persona,periodo,concepto,pago,descuento,fechainicial,fechafinal) VALUES (%d,%d,(SELECT codigoestudiante||''[%d-P] %s'' FROM estudiantes WHERE id=%d),%s,%s,date(''%s''),date(''%s'')) " %(id,anio,anio,descripcion,id,pago,descuento,fi,ff))
 if plpy.execute("SELECT COUNT(*) FROM tiposcuenta WHERE oficial=4175010000000+int8((SELECT codigoestudiante FROM estudiantes WHERE id=%d))" % id)[0]["count"]==0 :
   #Si la subcuenta de descuentos para el estudiante no existía, se crea.
-  plpy.execute("INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza,puc) VALUES (4175010000000+int8((SELECT codigoestudiante FROM estudiantes WHERE id=%d)),\'Descuentos en costos educativos \'||(SELECT codigoestudiante FROM estudiantes WHERE id=%d),(SELECT id FROM tiposcuenta WHERE oficial=417501),-1,0)" %(id,id))
+  plpy.execute("INSERT INTO tiposcuenta(oficial,descripcion,hijade,naturaleza,puc) VALUES (4175010000000+int8((SELECT codigoestudiante FROM estudiantes WHERE id=%d)),''Descuentos en costos educativos ''||(SELECT codigoestudiante FROM estudiantes WHERE id=%d),(SELECT id FROM tiposcuenta WHERE oficial=417501),-1,0)" %(id,id))
   return 2
 return 1
 '
 idregistra=args[6]
 nroconsigna=args[7]
 banco=args[8]
-tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'CO\'")[0]["id"]
+tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''CO''")[0]["id"]
 cant=0
-res=plpy.execute("SELECT sum(d.descuento) AS descuento FROM descuentos d,estudiantes e WHERE e.id=d.persona AND e.codigoestudiante=%s AND d.periodo=%d AND d.concepto LIKE \'%s[%d-P]%s\'" % (codigoestudiante,anio,codigoestudiante,anio,"%"))
+res=plpy.execute("SELECT sum(d.descuento) AS descuento FROM descuentos d,estudiantes e WHERE e.id=d.persona AND e.codigoestudiante=%s AND d.periodo=%d AND d.concepto LIKE ''%s[%d-P]%s''" % (codigoestudiante,anio,codigoestudiante,anio,"%"))
 if len(res)==0 or res[0]["descuento"]==None:
   #Si no tenía descuento, no puede adicionar nada.
   return cant
 descuento=res[0]["descuento"]
-plpy.info("SELECT registratransacciones(\'%s,,%s,0|417501,%s,%s,0|130505,%s,0,%f\',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,3))
+plpy.info("SELECT registratransacciones(''%s,,%s,0|417501,%s,%s,0|130505,%s,0,%f'',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,3))
 return 0
-plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (\'%s:[%d-P%d] Pagando mes(es) %s con descuento estudiante %s %s\',date(\'%s\'),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(\'%s\')) AND date_le(date(\'%s\'),fechafin)),1,date(\'today\'),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
-id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like \'%s:[%d-P%d]%s\'" % (codigoestudiante,anio,periodo," Pagando mes(es) %"))[0]["id"]
-cant=cant+plpy.execute("SELECT registratransacciones(\'%s,,%s,0|417501,%s,%s,0|130505,%s,0,%f\',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,id))[0]["registratransacciones"]
+plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (''%s:[%d-P%d] Pagando mes(es) %s con descuento estudiante %s %s'',date(''%s''),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(''%s'')) AND date_le(date(''%s''),fechafin)),1,date(''today''),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
+id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like ''%s:[%d-P%d]%s''" % (codigoestudiante,anio,periodo," Pagando mes(es) %"))[0]["id"]
+cant=cant+plpy.execute("SELECT registratransacciones(''%s,,%s,0|417501,%s,%s,0|130505,%s,0,%f'',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,id))[0]["registratransacciones"]
 return cant+1	
 '
 LANGUAGE plpythonu;
 idregistra=args[6]
 nroconsigna=args[7]
 banco=args[8]
-tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=\'CO\'")[0]["id"]
+tipoc=plpy.execute("SELECT id FROM tiposcomprobante WHERE abrevia=''CO''")[0]["id"]
 cant=0
-res=plpy.execute("SELECT sum(d.descuento) AS descuento FROM descuentos d,estudiantes e WHERE e.id=d.persona AND e.codigoestudiante=%s AND d.periodo=%d AND d.concepto LIKE \'%s[%d-P]%s\'" % (codigoestudiante,anio,codigoestudiante,anio,"%"))
+res=plpy.execute("SELECT sum(d.descuento) AS descuento FROM descuentos d,estudiantes e WHERE e.id=d.persona AND e.codigoestudiante=%s AND d.periodo=%d AND d.concepto LIKE ''%s[%d-P]%s''" % (codigoestudiante,anio,codigoestudiante,anio,"%"))
 if len(res)==0 :
   #Si no tenía descuento, no puede adicionar nada.
   return cant
 descuento=res[0]["descuento"]
-plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (\'%s:[%d-A%d] Pago anticipado con descuento mes(es) %s estudiante %s %s\',date(\'%s\'),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(\'%s\')) AND date_le(date(\'%s\'),fechafin)),1,date(\'today\'),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
-id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like \'%s:[%d-A%d]%s\'" % (codigoestudiante,anio,periodo," Pago anticipado con descuento mes(es) %"))[0]["id"]
-cant=cant+plpy.execute("SELECT registratransacciones(\'%s,,%s,0|417501,%s,%s,0|270545,%s,0,%f\',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,id))[0]["registratransacciones"]
+plpy.execute("INSERT INTO transacciones(descripcion,fecha,idperiodo,idestado,fecharegistro,tipotercero,idtercero,idusuario,idtipocomprobante,idcomprobante) VALUES (''%s:[%d-A%d] Pago anticipado con descuento mes(es) %s estudiante %s %s'',date(''%s''),(SELECT id FROM periodoscontables WHERE date_le(fechaini,date(''%s'')) AND date_le(date(''%s''),fechafin)),1,date(''today''),1,(SELECT id FROM estudiantes WHERE codigoestudiante=%s),%d,%d,%d)" % (codigoestudiante,anio,periodo,meses[periodo-1],codigoestudiante,descripcion,fecha,fecha,fecha,codigoestudiante,idregistra,tipoc,nroconsigna))
+id=plpy.execute("SELECT id FROM transacciones WHERE descripcion like ''%s:[%d-A%d]%s''" % (codigoestudiante,anio,periodo," Pago anticipado con descuento mes(es) %"))[0]["id"]
+cant=cant+plpy.execute("SELECT registratransacciones(''%s,,%s,0|417501,%s,%s,0|270545,%s,0,%f'',%d)" % (banco,valor,codigoestudiante,descuento,codigoestudiante,valor+descuento,id))[0]["registratransacciones"]
 return cant+1	
 '
 LANGUAGE plpythonu;
 anio=args[1]
 fecha=args[2]
 registra=args[3]
-q="INSERT INTO retiros(id,periodo,fechaingreso,fechasalida) SELECT estudiante,periodo,fecha,date(\'%s\') from matriculas where estudiante=%d and periodo=%d" % (fecha,idest,anio)
+q="INSERT INTO retiros(id,periodo,fechaingreso,fechasalida) SELECT estudiante,periodo,fecha,date(''%s'') from matriculas where estudiante=%d and periodo=%d" % (fecha,idest,anio)
 plpy.execute(q)
 q1="UPDATE matriculas SET activo=false WHERE estudiante=%d AND periodo=%d" % (idest,anio)
 plpy.execute(q1)
-q2="INSERT INTO logstransaccion(referencia,fecha,tipotransaccion,registra,detalle) SELECT %d,date(\'now\'),id,%d,\'Retiro %s\' FROM tiposlogtransaccion where nombre=\'Retiro estudiante\'" % (idest,registra,fecha) 
+q2="INSERT INTO logstransaccion(referencia,fecha,tipotransaccion,registra,detalle) SELECT %d,date(''now''),id,%d,''Retiro %s'' FROM tiposlogtransaccion where nombre=''Retiro estudiante''" % (idest,registra,fecha) 
 plpy.execute(q2)
 return 3
 ' LANGUAGE plpythonu; 
 q1="UPDATE transacciones SET idestado=2 WHERE id=%d" % (idt)
 res=plpy.execute(q1)
 cant=cant+len(res)+1
-q2="INSERT INTO logstransaccion(referencia,fecha,tipotransaccion,registra,detalle) SELECT %d,date(\'now\'),id,%d,\'Elimina trans. %s\' FROM tiposlogtransaccion where nombre=\'Eliminar RegTrans\'" % (idt,reg,motivo) 
+q2="INSERT INTO logstransaccion(referencia,fecha,tipotransaccion,registra,detalle) SELECT %d,date(''now''),id,%d,''Elimina trans. %s'' FROM tiposlogtransaccion where nombre=''Eliminar RegTrans''" % (idt,reg,motivo) 
 plpy.execute(q2)
 return cant
 ' LANGUAGE plpythonu; 
 anio=args[2]
 
 #Se actualiza la dirección
-q="SELECT d.direccioncasa FROM datospersonales d, estudiantes e  WHERE e.id=d.id AND e.login=\'%s\' AND d.direccioncasa is not null" % (otro)
+q="SELECT d.direccioncasa FROM datospersonales d, estudiantes e  WHERE e.id=d.id AND e.login=''%s'' AND d.direccioncasa is not null" % (otro)
 
 res=plpy.execute(q)
 cant=len(res)
 if cant>=1:
   #Se actualizan datos de dirección en el hermano si no tenía.
-  q="UPDATE datospersonales SET direccioncasa = n.direccioncasa FROM (select d.direccioncasa from datospersonales d, estudiantes e where e.id=d.id AND e.login=\'%s\') AS n,estudiantes e WHERE datospersonales.id=e.id AND e.login=\'%s\'" % (orig,otro)
+  q="UPDATE datospersonales SET direccioncasa = n.direccioncasa FROM (select d.direccioncasa from datospersonales d, estudiantes e where e.id=d.id AND e.login=''%s'') AS n,estudiantes e WHERE datospersonales.id=e.id AND e.login=''%s''" % (orig,otro)
   plpy.execute(q)
   
-q="SELECT e.madre, e.padre, m.acudiente1, m.acudiente2 FROM estudiantes e, matriculas m WHERE e.login=\'%s\' AND m.estudiante=e.id AND m.periodo=%d" % (otro,anio)
+q="SELECT e.madre, e.padre, m.acudiente1, m.acudiente2 FROM estudiantes e, matriculas m WHERE e.login=''%s'' AND m.estudiante=e.id AND m.periodo=%d" % (otro,anio)
 res=plpy.execute(q)
 cant=len(res)
 if cant!=1 :
   if i!=None:
     return 0
 
-q="UPDATE estudiantes SET madre=orig.madre, padre=orig.padre FROM (SELECT e.madre, e.padre, m.acudiente1, m.acudiente2 FROM estudiantes e, matriculas m WHERE e.login=\'%s\' AND m.estudiante=e.id AND m.periodo=%d) AS orig WHERE login=\'%s\'" % (orig,anio,otro)
+q="UPDATE estudiantes SET madre=orig.madre, padre=orig.padre FROM (SELECT e.madre, e.padre, m.acudiente1, m.acudiente2 FROM estudiantes e, matriculas m WHERE e.login=''%s'' AND m.estudiante=e.id AND m.periodo=%d) AS orig WHERE login=''%s''" % (orig,anio,otro)
 plpy.execute(q)
 
-q="UPDATE matriculas SET acudiente1=orig.acudiente1, acudiente2=orig.acudiente2 FROM (SELECT e.madre, e.padre, m.acudiente1, m.acudiente2,e.id FROM estudiantes e, matriculas m WHERE e.login=\'%s\' AND m.estudiante=e.id AND m.periodo=%d) AS orig, estudiantes e2 WHERE e2.id=estudiante AND periodo=%d AND e2.login=\'%s\'" % (orig,anio,anio,otro)
+q="UPDATE matriculas SET acudiente1=orig.acudiente1, acudiente2=orig.acudiente2 FROM (SELECT e.madre, e.padre, m.acudiente1, m.acudiente2,e.id FROM estudiantes e, matriculas m WHERE e.login=''%s'' AND m.estudiante=e.id AND m.periodo=%d) AS orig, estudiantes e2 WHERE e2.id=estudiante AND periodo=%d AND e2.login=''%s''" % (orig,anio,anio,otro)
 plpy.execute(q)
 return 1
 ' LANGUAGE plpythonu; 
 anio=args[0]
 idt=args[1]
 #Se busca la
-q="SELECT t.id,busca.per,busca.previo,busca.anio FROM transacciones t, (SELECT substring (descripcion,0,15) AS inicial,substring(descripcion, \'%d-P([0-9])\') AS per ,int4(to_char(fecha,\'MM\'))-int4(substring(descripcion, \'%d-P([0-9])\')) AS previo,%d-int4(to_char(fecha,\'YYYY\')) as anio FROM transacciones WHERE id=%d AND idestado=1) AS busca WHERE descripcion LIKE (busca.inicial||\'C\'||busca.per||\'%s\') and t.idestado=1" %(anio, anio, anio, idt , \'%\')
+q="SELECT t.id,busca.per,busca.previo,busca.anio FROM transacciones t, (SELECT substring (descripcion,0,15) AS inicial,substring(descripcion, ''%d-P([0-9])'') AS per ,int4(to_char(fecha,''MM''))-int4(substring(descripcion, ''%d-P([0-9])'')) AS previo,%d-int4(to_char(fecha,''YYYY'')) as anio FROM transacciones WHERE id=%d AND idestado=1) AS busca WHERE descripcion LIKE (busca.inicial||''C''||busca.per||''%s'') and t.idestado=1" %(anio, anio, anio, idt , ''%'')
 res1=plpy.execute(q)
 if len(res1)>0 :
   if res1[0]["previo"]<=0 and res1[0]["anio"]>=0:
     #La transacción se cambia si es de pago y se hizo en una fecha previa a la causación.
     idn=res1[0]["id"]
     #Se busca los ids de trece y veintisiete dada la transacción
-    q="SELECT sub.idcuenta AS tr, ti.id  as vs FROM (SELECT tc.idcuenta,\'270545\'||substr(ti.oficial,7) AS vs FROM transaccionescuenta tc, tiposcuenta ti WHERE tc.idtransaccion=%d AND tc.idcuenta=ti.id AND ti.oficial LIKE \'130505%s\') AS sub , tiposcuenta ti WHERE ti.oficial=sub.vs" % (idt,"%")
+    q="SELECT sub.idcuenta AS tr, ti.id  as vs FROM (SELECT tc.idcuenta,''270545''||substr(ti.oficial,7) AS vs FROM transaccionescuenta tc, tiposcuenta ti WHERE tc.idtransaccion=%d AND tc.idcuenta=ti.id AND ti.oficial LIKE ''130505%s'') AS sub , tiposcuenta ti WHERE ti.oficial=sub.vs" % (idt,"%")
     res2=plpy.execute(q)
     if len(res2)<1:
       #Debería existir las dos cuentas : 13 y 27 para el estudiante de la transacción.
     tr=res2[0]["tr"]
     vs=res2[0]["vs"]
     #Se cambia la descripción de las transacciones
-    q="UPDATE transacciones set descripcion=replace(replace(descripcion , \'Pagando\' , \'Pago anticipado\'),\'%d-P\',\'%d-A\') WHERE id=%d" %(anio,anio,idt);
+    q="UPDATE transacciones set descripcion=replace(replace(descripcion , ''Pagando'' , ''Pago anticipado''),''%d-P'',''%d-A'') WHERE id=%d" %(anio,anio,idt);
     plpy.execute(q)
-    q="UPDATE transacciones set descripcion=replace(replace(descripcion , \'Causando mes\' , \'Se cancela pago anticipado\'),\'%d-C\',\'%d-a\') WHERE id=32179" %(anio,anio);
+    q="UPDATE transacciones set descripcion=replace(replace(descripcion , ''Causando mes'' , ''Se cancela pago anticipado''),''%d-C'',''%d-a'') WHERE id=32179" %(anio,anio);
     plpy.execute(q)
     #Se cambia las subcuentas de las transacciones
     q="UPDATE transaccionescuenta set idcuenta=%d WHERE idcuenta=%d AND (idtransaccion=%d OR idtransaccion=%d)" % (vs,tr,idt,idn)