estadisticasview Class Reference

#include <estadisticasview.h>

Inheritance diagram for estadisticasview:

estadisticasdlg estadisticasdlg

Public Member Functions

int inicializa (postgresiface2 *)
 estadisticasview (QWidget *parent=0, const char *name=0)
 ~estadisticasview ()
void presentar ()
int inicializa (postgresiface2 *, int)
 estadisticasview (QWidget *parent=0, const char *name=0)
 ~estadisticasview ()
void presentar ()
void presentarbarras ()

Data Fields

postgresiface2conexionbase
postgresiface2conexionbase

Detailed Description

*
Author:
Tomeu Borrás Riera

Definition at line 42 of file estadisticasview.h.


Constructor & Destructor Documentation

estadisticasview::estadisticasview ( QWidget parent = 0,
const char *  name = 0 
)

Definition at line 41 of file estadisticasview.cpp.

00041                                                                      : estadisticasdlg(parent,name) {
00042 }

estadisticasview::~estadisticasview (  ) 

Definition at line 45 of file estadisticasview.cpp.

00045                                    {
00046 }

estadisticasview::estadisticasview ( QWidget parent = 0,
const char *  name = 0 
)

estadisticasview::~estadisticasview (  ) 


Member Function Documentation

int estadisticasview::inicializa ( postgresiface2  ) 

Definition at line 26 of file estadisticasview.cpp.

References conexionbase, and presentar().

Referenced by myplugin::BalanceBarras(), and myplugin::BalanceGrafico().

00026                                                          {
00027     conexionbase = conexion;
00028     presentar();
00029 #ifdef GDCHART
00030    delete m_pie;
00031 #endif
00032 
00033 #ifdef ESTADISTICAS
00034    delete m_imagen;
00035 #endif    
00036     
00037     
00038     return(0);
00039 }// end inicializa

void estadisticasview::presentar (  ) 

Definition at line 49 of file estadisticasview.cpp.

References postgresiface2::begin(), postgresiface2::cargacursor(), postgresiface2::commit(), conexionbase, postgresiface2::ejecuta(), cursor2::eof(), cursor2::numregistros(), cursor2::siguienteregistro(), and cursor2::valor().

Referenced by inicializa().

00049                                  {
00050       int j,num1;
00051       QString query;
00052       cursor2 *cursorapt;
00053       QString finicial = "01/01/2003";
00054       QString ffinal = "31/12/2003";
00055       QString cinicial = "10";
00056       QString cfinal = "99";
00057 
00058       // Hacemos la consulta de los apuntes a listar en la base de datos.
00059  //     int idc_coste = ccostes[combocoste->currentItem()];
00060 
00061       // La consulta es compleja, requiere la creación de una tabla temporal y de cierta mandanga por lo que puede
00062                 // Causar problemas con el motor de base de datos.
00063                 fprintf(stderr,"BALANCE: Empezamos a hacer la presentacion\n");
00064       conexionbase->begin();
00065                 query.sprintf("CREATE TEMPORARY TABLE balance AS SELECT cuenta.idcuenta, codigo, nivel(codigo) AS nivel, cuenta.descripcion, padre, tipocuenta ,debe, haber, tdebe, thaber,(tdebe-thaber) AS tsaldo, (debe-haber) AS saldo, adebe, ahaber, (adebe-ahaber) AS asaldo FROM cuenta LEFT JOIN (SELECT idcuenta, sum(debe) AS tdebe, sum(haber) AS thaber FROM apunte WHERE fecha >= '%s' AND fecha<= '%s' GROUP BY idcuenta) AS t1 ON t1.idcuenta = cuenta.idcuenta LEFT JOIN (SELECT idcuenta, sum(debe) AS adebe, sum(haber) AS ahaber FROM apunte WHERE fecha < '%s' GROUP BY idcuenta) AS t2 ON t2.idcuenta = cuenta.idcuenta", finicial.ascii(), ffinal.ascii(), finicial.ascii() );
00066       conexionbase->ejecuta(query);
00067       query.sprintf("UPDATE BALANCE SET padre=0 WHERE padre ISNULL");
00068       conexionbase->ejecuta(query);
00069       query.sprintf("DELETE FROM balance WHERE debe=0 AND haber =0");
00070       conexionbase->ejecuta(query);
00071 
00072       // Para evitar problemas con los nulls hacemos algunos updates
00073       query.sprintf("UPDATE BALANCE SET tsaldo=0 WHERE tsaldo ISNULL");
00074       conexionbase->ejecuta(query);
00075       query.sprintf("UPDATE BALANCE SET tdebe=0 WHERE tdebe ISNULL");
00076       conexionbase->ejecuta(query);
00077       query.sprintf("UPDATE BALANCE SET thaber=0 WHERE thaber ISNULL");
00078       conexionbase->ejecuta(query);
00079       query.sprintf("UPDATE BALANCE SET asaldo=0 WHERE asaldo ISNULL");
00080       conexionbase->ejecuta(query);
00081 
00082 
00083                 query.sprintf("SELECT idcuenta FROM balance ORDER BY padre DESC");
00084                 cursorapt = conexionbase->cargacursor(query,"Balance1view");
00085 
00086       while (!cursorapt->eof())  {
00087          query.sprintf("SELECT * FROM balance WHERE idcuenta=%s",cursorapt->valor("idcuenta").ascii());
00088          cursor2 *mycur = conexionbase->cargacursor(query,"cursorrefresco");
00089 
00090          query.sprintf("UPDATE balance SET tsaldo = tsaldo + (%2.2f), tdebe = tdebe + (%2.2f), thaber = thaber +(%2.2f), asaldo= asaldo+(%2.2f) WHERE idcuenta = %d",atof(mycur->valor("tsaldo").ascii()), atof(mycur->valor("tdebe").ascii()), atof(mycur->valor("thaber").ascii()),atof(mycur->valor("asaldo").ascii()),  atoi(mycur->valor("padre").ascii()));
00091 //                      fprintf(stderr,"%s para el código\n",query, cursorapt->valor("codigo").c_str());
00092                         conexionbase->ejecuta(query);
00093          delete mycur;
00094                         cursorapt->siguienteregistro();
00095                 }// end while
00096                 delete cursorapt;
00097       
00098 
00099       // Borramos todo lo que no es de este nivel
00100       query.sprintf("DELETE FROM balance where nivel(codigo)>%s","2");
00101       conexionbase->ejecuta(query);
00102 
00103       //Borramos todo lo que tiene un hijo en el balance
00104       query.sprintf("DELETE FROM balance WHERE idcuenta IN (SELECT padre FROM balance)");
00105       conexionbase->ejecuta(query);
00106 
00107 
00108                 query.sprintf("SELECT * FROM balance WHERE debe <> 0  OR haber <> 0 ORDER BY codigo");
00109                 cursorapt = conexionbase->cargacursor(query,"mycursor");
00110 
00111 
00112       // Calculamos cuantos registros van a crearse y dimensionamos la tabla.
00113       num1 = cursorapt->numregistros();
00114       j=0;
00115 
00116 #ifdef GDCHART
00117       char *label[1000];
00118       float p[1000];
00119 #endif
00120       while (!cursorapt->eof()) {
00121          // Acumulamos los totales para al final poder escribirlos
00122          float valor =  atof(cursorapt->valor("tsaldo").ascii());
00123          if (valor > 0) {
00124 #ifdef ESTADISTICAS
00125                   m_pie->addValue(valor,cursorapt->valor("descripcion").mid(0,15).ascii());
00126 #endif
00127 #ifdef GDCHART
00128                   label[j]=new char[30];
00129                   strcpy(label[j], cursorapt->valor("descripcion").mid(0,15).ascii());
00130                   p[j]=valor;
00131                   fprintf(stderr,"%s %d", label[j], p[j]);
00132 #endif
00133                   
00134          } else {
00135 #ifdef ESTADISTICAS
00136                   m_pie->addValue(-valor,cursorapt->valor("descripcion").mid(0,15).ascii());
00137 #endif
00138 #ifdef GDCHART
00139                   label[j]=new char[30];
00140                   strcpy(label[j], cursorapt->valor("descripcion").mid(0,15).ascii());
00141                   p[j]=-valor;
00142                   fprintf(stderr,"%s %d", label[j], p[j]);
00143 #endif
00144          } // end if
00145 
00146          // Calculamos la siguiente cuenta registro y finalizamos el bucle
00147          cursorapt->siguienteregistro();
00148          j++;
00149       }// end while
00150 
00151       // Vaciamos el cursor de la base de datos.
00152       delete cursorapt;
00153       query.sprintf("DROP TABLE balance");
00154       conexionbase->ejecuta(query);
00155       conexionbase->commit();
00156 
00157         /* values to chart */
00158               
00159 #ifdef GDCHART                  
00160       fprintf(stderr,"Llamamos a sacapie\n");
00161 //      sacapie(p, label, j);
00162       sacapie(p, label, (j-1>10 )? 10:j-1);
00163 //      sacapie(p, label, 4);
00164       fprintf(stderr,"Hemos terminado sacapie \n");
00165       QPixmap *imag= new QPixmap("/tmp/pie.gif");
00166       fprintf(stderr,"Y ahora hemos creado la imagen\n");
00167       m_imagen->setPixmap(*imag);
00168       fprintf(stderr,"Y ahora la hemos mostrado\n");   
00169       //Destruimos la memoria utilizada
00170       for(int i=0;i<j;i++) delete label[i];
00171       delete imag;
00172 #endif
00173 }// end presentar

int estadisticasview::inicializa ( postgresiface2 ,
int   
)

Definition at line 26 of file estadisticasview.cpp.

References conexionbase, presentar(), and presentarbarras().

00026                                                                    {
00027     conexionbase = conexion;
00028     if (tipo ==0)
00029         presentar();
00030     else
00031         presentarbarras();
00032     return(0);
00033 }// end inicializa

void estadisticasview::presentar (  ) 

void estadisticasview::presentarbarras (  ) 

Definition at line 139 of file estadisticasview.cpp.

References postgresiface2::begin(), postgresiface2::cargacursor(), postgresiface2::commit(), conexionbase, postgresiface2::ejecuta(), cursor2::eof(), cursor2::siguienteregistro(), and cursor2::valor().

Referenced by inicializa().

00139                                        {
00140     QString query;
00141     cursor2 *cursorapt;
00142     QString finicial = "01/01/2003";
00143     QString ffinal = "31/12/2005";
00144     QString cinicial = "10";
00145     QString cfinal = "99";
00146     
00147     // La consulta es compleja, requiere la creación de una tabla temporal y de cierta mandanga por lo que puede
00148     // Causar problemas con el motor de base de datos.
00149     fprintf(stderr,"BALANCE: Empezamos a hacer la presentacion\n");
00150     conexionbase->begin();
00151     query.sprintf("CREATE TEMPORARY TABLE balance AS SELECT cuenta.idcuenta, codigo, nivel(codigo) AS nivel, cuenta.descripcion, padre, tipocuenta ,debe, haber, tdebe, thaber,(tdebe-thaber) AS tsaldo, (debe-haber) AS saldo, adebe, ahaber, (adebe-ahaber) AS asaldo FROM cuenta LEFT JOIN (SELECT idcuenta, sum(debe) AS tdebe, sum(haber) AS thaber FROM apunte WHERE fecha >= '%s' AND fecha<= '%s' GROUP BY idcuenta) AS t1 ON t1.idcuenta = cuenta.idcuenta LEFT JOIN (SELECT idcuenta, sum(debe) AS adebe, sum(haber) AS ahaber FROM apunte WHERE fecha < '%s' GROUP BY idcuenta) AS t2 ON t2.idcuenta = cuenta.idcuenta", finicial.ascii(), ffinal.ascii(), finicial.ascii() );
00152     conexionbase->ejecuta(query);
00153     query.sprintf("UPDATE BALANCE SET padre=0 WHERE padre ISNULL");
00154     conexionbase->ejecuta(query);
00155     query.sprintf("DELETE FROM balance WHERE debe=0 AND haber =0");
00156     conexionbase->ejecuta(query);
00157 
00158     // Para evitar problemas con los nulls hacemos algunos updates
00159     query.sprintf("UPDATE BALANCE SET tsaldo=0 WHERE tsaldo ISNULL");
00160     conexionbase->ejecuta(query);
00161     query.sprintf("UPDATE BALANCE SET tdebe=0 WHERE tdebe ISNULL");
00162     conexionbase->ejecuta(query);
00163     query.sprintf("UPDATE BALANCE SET thaber=0 WHERE thaber ISNULL");
00164     conexionbase->ejecuta(query);
00165     query.sprintf("UPDATE BALANCE SET asaldo=0 WHERE asaldo ISNULL");
00166     conexionbase->ejecuta(query);
00167 
00168 
00169     query.sprintf("SELECT idcuenta FROM balance ORDER BY padre DESC");
00170     cursorapt = conexionbase->cargacursor(query,"Balance1view");
00171 
00172     while (!cursorapt->eof())  {
00173         query.sprintf("SELECT * FROM balance WHERE idcuenta=%s",cursorapt->valor("idcuenta").ascii());
00174         cursor2 *mycur = conexionbase->cargacursor(query,"cursorrefresco");
00175 
00176         query.sprintf("UPDATE balance SET tsaldo = tsaldo + (%2.2f), tdebe = tdebe + (%2.2f), thaber = thaber +(%2.2f), asaldo= asaldo+(%2.2f) WHERE idcuenta = %d",atof(mycur->valor("tsaldo").ascii()), atof(mycur->valor("tdebe").ascii()), atof(mycur->valor("thaber").ascii()),atof(mycur->valor("asaldo").ascii()),  atoi(mycur->valor("padre").ascii()));
00177         //                      fprintf(stderr,"%s para el código\n",query, cursorapt->valor("codigo").c_str());
00178         conexionbase->ejecuta(query);
00179         delete mycur;
00180         cursorapt->siguienteregistro();
00181     }// end while
00182     delete cursorapt;
00183 
00184 
00185     // Borramos todo lo que no es de este nivel
00186     query.sprintf("DELETE FROM balance where nivel(codigo)>%s","2");
00187     conexionbase->ejecuta(query);
00188 
00189     //Borramos todo lo que tiene un hijo en el balance
00190     query.sprintf("DELETE FROM balance WHERE idcuenta IN (SELECT padre FROM balance)");
00191     conexionbase->ejecuta(query);
00192 
00193 
00194     query.sprintf("SELECT descripcion, tsaldo::integer AS tsaldoi FROM balance WHERE debe <> 0  OR haber <> 0 ORDER BY codigo");
00195     cursorapt = conexionbase->cargacursor(query,"mycursor");
00196 
00197     QString valores="data=[(";
00198     QString plot="";
00199     int init=0;
00200     int iplot=1;
00201 
00202     while (!cursorapt->eof()) {
00203         if (init != 0) valores += ",";
00204         // Acumulamos los totales para al final poder escribirlos
00205         valores+=QString::number(cursorapt->valor("tsaldoi").toInt());
00206         
00207         plot += "plot"+QString::number(iplot)+"=bar_plot.T(label=\\\""+cursorapt->valor("descripcion")+"\\\", hcol="+QString::number(iplot-1)+", cluster=("+QString::number(iplot-1)+",3)) \\n";
00208         iplot++;
00209         cursorapt->siguienteregistro();
00210         init=1;
00211     }// end while
00212     valores+=")]";
00213     plot+="ar.add_plot(plot1";
00214     for (int i=2;i<iplot;i++) {
00215         plot += ",plot"+QString::number(i);
00216     }// end for
00217     plot+=")\\n";
00218     
00219     
00220     // Vaciamos el cursor de la base de datos.
00221     delete cursorapt;
00222     query.sprintf("DROP TABLE balance");
00223     conexionbase->ejecuta(query);
00224     conexionbase->commit();
00225 
00226     /* values to chart */
00227     fprintf(stderr,"Llamamos a sacapie\n");
00228     system("cp /usr/lib/bulmages/plugins/plotbars.py /tmp");
00229     QString cadena = " sed -e \"s&###DATA###&"+valores+"&g\"  /tmp/plotbars.py > /tmp/plotbars1.py";
00230     system (cadena.ascii());
00231     cadena = " sed -e \"s&###PLOT###&"+plot+"&g\"  /tmp/plotbars1.py > /tmp/plotbars2.py";
00232     fprintf(stderr,"%s\n",cadena.ascii());
00233     system (cadena.ascii());
00234     system("python /tmp/plotbars2.py --format=png > /tmp/pie.png");
00235 
00236     
00237     
00238     fprintf(stderr,"Hemos terminado sacapie \n");
00239     QPixmap *imag= new QPixmap("/tmp/pie.png");
00240     fprintf(stderr,"Y ahora hemos creado la imagen\n");
00241     m_imagen->setPixmap(*imag);
00242     fprintf(stderr,"Y ahora la hemos mostrado\n");
00243     //Destruimos la memoria utilizada
00244     delete imag;
00245 
00246 }// end presentarbarras


Field Documentation

postgresiface2* estadisticasview::conexionbase

Definition at line 46 of file estadisticasview.h.

Referenced by inicializa(), presentar(), and presentarbarras().

postgresiface2* estadisticasview::conexionbase

Definition at line 36 of file estadisticasview.h.


The documentation for this class was generated from the following files:
Generated on Sat Dec 15 00:01:51 2007 for BulmaGes by  doxygen 1.5.1