#include <estadisticasview.h>
Inheritance diagram for estadisticasview:

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 | |
| postgresiface2 * | conexionbase |
| postgresiface2 * | conexionbase |
Definition at line 42 of file estadisticasview.h.
| estadisticasview::estadisticasview | ( | QWidget * | parent = 0, |
|
| const char * | name = 0 | |||
| ) |
| estadisticasview::~estadisticasview | ( | ) |
| estadisticasview::estadisticasview | ( | QWidget * | parent = 0, |
|
| const char * | name = 0 | |||
| ) |
| estadisticasview::~estadisticasview | ( | ) |
| 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
Definition at line 46 of file estadisticasview.h.
Referenced by inicializa(), presentar(), and presentarbarras().
Definition at line 36 of file estadisticasview.h.
1.5.1