resmensualview.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           resmensualview.cpp  -  description
00003                              -------------------
00004     begin                : dom jul 20 2003
00005     copyright            : (C) 2003 by Tomeu Borrás Riera
00006     email                : tborras@conetxia.com
00007  ***************************************************************************/
00008 /***************************************************************************
00009  *                                                                         *
00010  *   This program is free software; you can redistribute it and/or modify  *
00011  *   it under the terms of the GNU General Public License as published by  *
00012  *   the Free Software Foundation; either version 2 of the License, or     *
00013  *   (at your option) any later version.                                   *
00014  *                                                                         *
00015  ***************************************************************************/
00016 
00017 #include "resmensualview.h"
00018 // Si se va a compilar con el modulo de estadisticas se ponen las estadisticas
00019 #ifdef ESTADISTICAS
00020 #include "estadisticas/tolinechart.h"
00021 #include "estadisticas/topiechart.h"
00022 #endif
00023 
00024 #ifdef GDCHART
00025 //#include "gdc.h"
00026 //#include "gdchart.h"
00027 #include "estadisticasview.h"
00028 #include <qlabel.h>
00029 #endif
00030 
00031 #ifdef DISLIN
00032 #include <stdio.h>
00033 #include "dislin.h"
00034 #endif
00035 
00036 #include "qdatetime.h"
00037 #include "qstring.h"
00038 #include "qlineedit.h"
00039 #include "qobject.h"
00040 #include "listcuentasview1.h"
00041 #include "mpatrimonialesview.h"
00042 #include "empresa.h"
00043 
00044 
00045 resmensualview::resmensualview(empresa *emp, QWidget *parent, const char *name ) : resmensualdlg(parent,name) {
00046 
00047 empresaactual = emp;
00048 conexionbase = emp->bdempresa();
00049 // Inicializamos los valores de las masas patrimoniales.
00050 idmpatrimonial1 = "";
00051 idmpatrimonial2 = "";
00052 idmpatrimonial3 = "";
00053 
00054 }
00055 resmensualview::~resmensualview(){
00056 }
00057 
00058 int resmensualview::inicializa() {
00059 //    presentar();
00060 //    pie->show();
00061     return(0);
00062 }// end inicializa
00063 
00064 void resmensualview::accept() {
00065    presentar();
00066    presentarpie();
00067 }// end accept
00068 
00069 void resmensualview::presentar() {
00070    std::list<double> milistad[12];
00071 //   std::list<double> milistah[12];
00072    std::list<double> milistas[12];
00073    char *mes[]={"ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dec"};
00074    
00075 
00076    QString codigo[3];
00077    codigo[0]=cod1->text();
00078    codigo[1]=cod2->text();
00079    codigo[2]=cod3->text();
00080    QString codigomasa[3];
00081    codigomasa[0]= idmpatrimonial1.ascii();
00082    codigomasa[1]= idmpatrimonial2.ascii();
00083    codigomasa[2]= idmpatrimonial3.ascii();
00084    
00085    string ano = "2004";
00086 
00087    for (int j=0; j<3; j ++) {
00088       QDate fecha(2004,1,1);
00089       QDate fecha1(2004,1,31);
00090       float saldoant=0;
00091       float movant=0;
00092       for(int i=0; i<12;i++) {
00093          // Buscamos los datos de enero.
00094          QString finicial = fecha.toString("dd/MM/yyyy");
00095          QString ffinal = fecha1.toString("dd/MM/yyyy");
00096          QString query;
00097          string cod = codigo[j].ascii();
00098          string cod1 = codigomasa[j].ascii();
00099          query="";
00100          if (cod != "") {
00101             query.sprintf( "SELECT debetotal(id_cuenta('%s'),'%s','%s') as tdebe, habertotal(id_cuenta('%s'),'%s','%s') as thaber",codigo[j].ascii(),(char *)finicial.ascii(),(char *)ffinal.ascii(), codigo[j].ascii(),(char *)finicial.ascii(),(char *)ffinal.ascii());
00102 //         } else if (cod1 != "" ) {
00103          } else if (cod1 != "") {
00104             query.sprintf( "SELECT debempatrimonial(%s,'%s','%s') as tdebe, habermpatrimonial(%s,'%s','%s') as thaber",codigomasa[j].ascii(),(char *)finicial.ascii(),(char *)ffinal.ascii(), codigomasa[j].ascii(),(char *)finicial.ascii(),(char *)ffinal.ascii());
00105          }// end if
00106          if (query != "") {
00107                   fprintf(stderr,"%s\n",query.ascii());
00108                   conexionbase->begin();
00109                   cursor2 *curs = conexionbase->cargacursor(query,"midursor");
00110                   conexionbase->commit();
00111                   if (!curs->eof()) {
00112                      milistad[i].push_back(movant + atof(curs->valor("tdebe").ascii()) +atof(curs->valor("thaber").ascii()));
00113                      milistas[i].push_back(saldoant + atof(curs->valor("tdebe").ascii()) - atof(curs->valor("thaber").ascii()));
00114                      saldoant = saldoant + atof(curs->valor("tdebe").ascii()) - atof(curs->valor("thaber").ascii());
00115                      movant = movant +  atof(curs->valor("tdebe").ascii()) + atof(curs->valor("thaber").ascii());
00116                      fprintf(stderr,"metido en el gráfico%s\n", curs->valor("tdebe").ascii());
00117                   } else {
00118                      milistad[i].push_back(movant);
00119          //            milistad[i].push_back(0);
00120                      milistas[i].push_back(saldoant);
00121                   }// end if
00122                   delete curs;
00123                   fecha = fecha.addMonths(1);
00124                   fecha1 = fecha1.addMonths(1);
00125          }// end if
00126       }// end for
00127    }// end for
00128 #ifdef ESTADISTICAS
00129    line->clear();   
00130    line->showGrid(12);
00131    line->setTitle(tr("Progresion de saldos"));
00132    line->setSamples(12);
00133    line1->clear();
00134    line1->showGrid(12);
00135    line1->setTitle(tr("Movimientos menusales"));
00136    line1->setSamples(12);
00137    for (int i=0; i<12;i++) {
00138       line->addValues(milistas[i],mes[i]);
00139       line1->addValues(milistad[i],mes[i]);
00140    }// end for
00141 #endif
00142 }// end presentar
00143 
00144 void resmensualview::buscacodigocta() {
00145    listcuentasview1 *listcuentas = new listcuentasview1(empresaactual);
00146    listcuentas->setModoLista();
00147    listcuentas->inicializa();
00148    listcuentas->exec();
00149    cod1->setText(listcuentas->codcuenta());
00150    delete listcuentas;   
00151 }// end buscacodigocta
00152 
00153 
00154 void resmensualview::buscacodigocta1() {
00155    listcuentasview1 *listcuentas = new listcuentasview1(empresaactual);
00156    listcuentas->setModoLista();
00157    listcuentas->inicializa();
00158    listcuentas->exec();
00159    cod2->setText(listcuentas->codcuenta());
00160    delete listcuentas;}// end buscacodigocta
00161 
00162 void resmensualview::buscacodigocta2() {
00163    listcuentasview1 *listcuentas = new listcuentasview1(empresaactual);
00164    listcuentas->setModoLista();
00165    listcuentas->inicializa();
00166    listcuentas->exec();
00167    cod3->setText(listcuentas->codcuenta());
00168    delete listcuentas;
00169 }// end buscacodigocta
00170 
00171 void resmensualview::buscampatrimonial1() {
00172    mpatrimonialesview * nuevae = new mpatrimonialesview(0,"mpatrimoniales",true);
00173    nuevae->inicializa(conexionbase);
00174    nuevae->setmodoselector();
00175    nuevae->exec();
00176    mpatrimonial1->setText((char *) (nuevae->getnommasa()).ascii());
00177    idmpatrimonial1 = nuevae->getidmasa();
00178    delete nuevae;
00179    
00180 }// end buscampatrimonial1
00181 
00182 void resmensualview::buscampatrimonial2() {
00183    mpatrimonialesview * nuevae = new mpatrimonialesview(0,"mpatrimoniales",true);
00184    nuevae->inicializa(conexionbase);
00185    nuevae->setmodoselector();
00186    nuevae->exec();
00187    mpatrimonial2->setText((char *) (nuevae->getnommasa()).ascii());
00188    idmpatrimonial2 = nuevae->getidmasa();
00189    delete nuevae;
00190 
00191 }// end buscampatrimonial1
00192 
00193 void resmensualview::buscampatrimonial3() {
00194    mpatrimonialesview * nuevae = new mpatrimonialesview(0,"mpatrimoniales",true);
00195    nuevae->inicializa(conexionbase);
00196    nuevae->setmodoselector();
00197    nuevae->exec();
00198    mpatrimonial3->setText((char *) (nuevae->getnommasa()).ascii());
00199    idmpatrimonial3 = nuevae->getidmasa();
00200    delete nuevae;
00201 
00202 }// end buscampatrimonial1
00203 
00204 void resmensualview::presentarpie() {
00205 #ifdef GDCHART 
00206       char *label[1000];
00207       float p[1000];
00208       int j=0;
00209 #endif
00210 #ifdef DISLIN 
00211       char *label[1000];
00212       float p[1000];
00213       int j=0;
00214 #endif
00215       char query[2900];
00216       cursor2 *cursorapt;
00217 
00218       QString finicial = "01/01/2003";
00219       QString ffinal = "31/12/2003";
00220       QString cinicial = "10";
00221       QString cfinal = "99";
00222       QString codigo[3];
00223       codigo[0]=cod1->text();
00224       codigo[1]=cod2->text();
00225       codigo[2]=cod3->text();
00226 
00227 #ifdef ESTADISTICAS
00228       toPieChart *pies[3];
00229       pies[0] = pie;
00230       pies[1] = pie1;
00231       pies[2] = pie2;
00232 #endif
00233 
00234       for (int i=0; i<3; i++) {      
00235          conexionbase->begin();
00236                 sprintf(query,"SELECT sum(debe) as tdebe, sum(haber) as thaber, contrapartida FROM apunte WHERE apunte.idcuenta=id_cuenta('%s') GROUP BY contrapartida", codigo[i].ascii());
00237                 cursorapt = conexionbase->cargacursor(query,"mycursor");
00238          conexionbase->commit();
00239          // Calculamos cuantos registros van a crearse y dimensionamos la tabla.
00240          std::list<double> valores;
00241          std::list<QString> labels;
00242 
00243          while (!cursorapt->eof()) {
00244             QString nomcuenta;
00245             // Acumulamos los totales para al final poder escribirlos
00246             sprintf(query,"SELECT * FROM cuenta WHERE idcuenta = %s",cursorapt->valor("contrapartida").ascii());
00247             conexionbase->begin();
00248             cursor2 *micurs= conexionbase->cargacursor(query,"mioldcursor");
00249             if (!micurs->eof()) {
00250                nomcuenta = micurs->valor("codigo") +" "+ micurs->valor("descripcion");
00251             }// end if
00252             delete micurs;
00253 
00254             float valor =  atof(cursorapt->valor("tdebe").ascii()) + atof(cursorapt->valor("thaber").ascii());
00255             if (valor > 0) {
00256    //                  pie->addValue(valor,nomcuenta.substr(0,25).c_str());
00257                      valores.push_back(valor);
00258                      labels.push_back(nomcuenta.mid(0,25).ascii());
00259 #ifdef GDCHART
00260                   label[j]=new char[30];
00261                   strcpy(label[j], cursorapt->valor("descripcion").mid(0,15).ascii());
00262                   p[j]=valor;
00263                   fprintf(stderr,"%s %d", label[j], p[j]);
00264 #endif
00265                      
00266             } else {
00267    //                  pie->addValue(-valor,nomcuenta.substr(0,25).c_str());
00268                      valores.push_back(-valor);
00269                      labels.push_back(nomcuenta.mid(0,25).ascii());
00270 #ifdef GDCHART
00271                   label[j]=new char[30];
00272                   strcpy(label[j], cursorapt->valor("descripcion").mid(0,15).ascii());
00273                   p[j]=-valor;
00274                   fprintf(stderr,"%s %d", label[j], p[j]);
00275 #endif
00276                      
00277             }// end if
00278 
00279             // Calculamos la siguiente cuenta registro y finalizamos el bucle
00280             cursorapt->siguienteregistro();
00281 #ifdef GDCHART
00282             j++;
00283 #endif
00284          }// end while
00285 
00286          // Vaciamos el cursor de la base de datos.
00287          delete cursorapt;
00288 #ifdef ESTADISTICAS         
00289          pies[i]->setValues(valores,labels);
00290 #endif
00291 #ifdef GDCHART
00292    generargrafico(p, label);               
00293       fprintf(stderr,"Llamamos a sacapie\n");
00294       fprintf(stderr,"Hemos terminado sacapie \n");
00295       QPixmap *imag= new QPixmap("/tmp/graf.gif");
00296       fprintf(stderr,"Y ahora hemos creado la imagen\n");
00297       imgsaldos->setPixmap(*imag);
00298       fprintf(stderr,"Y ahora la hemos mostrado\n");   
00299       //Destruimos la memoria utilizada
00300       for(int i=0;i<j;i++) delete label[i];
00301       delete imag;
00302 #endif
00303 
00304 #ifdef DISLIN
00305 generargrafico(p, label);
00306 #endif    
00307       }// end for    
00308       
00309 
00310 }// end presentarpie
00311 
00312 
00313 
00314 
00315 #ifdef ESTADISTICAS
00316 // Si se compila con las librerias de estadisticas se supone que no se va a llamar a esta función, por tanto no hace nada.
00317 void resmensualview::generargrafico(float *, char**) {
00318 }// end resmensualview
00319 #endif
00320 
00321 #ifdef GDCHART
00322 // Esta funcion es si se compila con GDCHART
00323 void resmensualview::generargrafico(float *h1, char**t2) {
00324 fprintf(stderr,"Principio de generargrafico\n");
00325         /* set some sample data points */
00326         float   h[12]  = {      17.8,  17.1,  17.3,  0,  17.2,  17.1,
00327                                                 17.3,  17.3,  17.3,  17.1,         17.5,  17.4 };
00328 
00329         float   c[12]  =  { 17.0,  16.8,  16.9,  0,  16.9,  16.8,
00330                                             17.2,  16.8,  17.0,  16.9,         16.4,  16.1 };
00331 
00332         float   l[12]  = {  16.8,  16.8,  16.7,  0,  16.5,  16.0,
00333                                                 16.1,  16.8,  16.5,  16.9,         16.2,  16.0 };
00334 
00335         float   v[12]  = {  150.0, 100.0, 340.0,  0, 999.0, 390.0,
00336                                                 420.0, 150.0, 100.0,  340.0,       1590.0, 700.0 };
00337         char    *t[12] = {      "May", "Jun", "Jul",  "Aug",       "Sep",  "Oct",
00338                                                 "Nov", "Dec", "Jan", "Feb",        "Mar",  "Apr" };
00339 
00340 //      /* set color RGB as ulong array */
00341 //      unsigned long   setcolor[3]    = { 0xC0C0FF, 0xFF4040, 0xFFFFFF };
00342 
00343         GDC_ANNOTATION_T        anno;
00344 
00345         /* need an open FILE pointer  - can be stdout */
00346         FILE                            *outgif1 = fopen( "/tmp/graf.gif", "wb" );      /* rem: test open() fail */
00347 
00348 
00349         anno.color = 0x00FF00;
00350         strncpy( anno.note, "Did Not\nTrade", MAX_NOTE_LEN );   /* don't exceed MAX_NOTE_LEN */
00351         anno.point = 3;                                                                                 /* first is 0 */
00352 //      GDC_annotation_font = GDC_TINY;
00353         GDC_annotation = &anno;                                                                 /* set annote option */
00354 
00355         GDC_HLC_style = (GDC_HLC_STYLE_T) (GDC_HLC_I_CAP | GDC_HLC_CLOSE_CONNECTED);
00356         GDC_HLC_cap_width = 45;
00357 
00358         GDC_bar_width     = 75;                                                                 /* % */
00359 
00360 //      GDC_BGImage = "W.gif";
00361 
00362         GDC_title = "Widget Corp.";
00363         GDC_ytitle = "Price ($)";
00364         GDC_ytitle2 = "Volume (K)";
00365         GDC_ytitle_size = GDC_SMALL;
00366         GDC_VolColor = 0x4040FFL;                                                               /* aka combo */
00367         GDC_3d_depth  = 4.0;                                                                    /* % entire gif */
00368 
00369 //      GDC_SetColor  = setcolor;                                                               /* see README */
00370         GDC_PlotColor = 0xFFFFFF;
00371 //      GDC_grid = FALSE;
00372 
00373 //      GDC_xtitle="fy.1998";
00374 
00375 //      fprintf( stdout, "Content-Type: image/gif\n\n" );               /* rem: for web use */
00376                                                                                                                         /* finally: make the call */
00377 fprintf(stderr,"Voy a ejecutar out_graph\n");
00378 
00379         out_graph( 200, 175,                                                                    // overall width, height
00380                            outgif1,                                                                             // open FILE pointer
00381                            GDC_COMBO_HLC_AREA,                                                  // chart type
00382                            12,                                                                                  // number of points
00383                            t,                                                                                   // X axis label array
00384                            1,                                                                                   // number of sets (see README)
00385                            h,                                                                                   // set 1 (high)
00386                            l,                                                                                   // low
00387                            c,                                                                                   // close
00388                            v );                                                                                 // combo/volume
00389 
00390 fprintf(stderr,"He terminado de ejecutar out_graph\n");
00391                            
00392         fclose( outgif1 );
00393 fprintf(stderr,"Fin de generargrafico|n");
00394 
00395 }// end generargrafico
00396 #endif
00397 
00398 
00399 #ifdef DISLIN
00400 // Si se compila con las librerias de DISLIN se ejecutará esta versión.
00401 void resmensualview::generargrafico(float *h1, char**t2) {
00402 char cbuf[80];
00403   float xray[5]  = {2.,4.,6.,8.,10.},
00404         y1ray[5] = {0.,0.,0.,0.,0.},
00405         y2ray[5] = {3.2,1.5,2.0,1.0,3.0};
00406 
00407   int ic1ray[5]  = {50,150,100,200,175},
00408       ic2ray[5]  = {50,150,100,200,175};
00409 
00410       
00411   fprintf(stderr,"resmensualview::generargrafico DISLIN version. \n");
00412       
00413   metafl("XWIN");
00414   setpag("da4p");
00415   disini();
00416   pagera();
00417   hwfont();
00418 
00419 //  titlin("3-D Bar Graph / 3-D Pie Chart", 2);
00420   titlin("Resumen", 2);
00421   htitle(40);
00422 
00423   shdpat(16);
00424   axslen(1500,1000);
00425   axspos(300,1400);
00426 
00427   barwth(0.5);
00428   bartyp("3dvert");
00429   labels("second","bars");
00430   labpos("outside","bars");
00431   labclr(255,"bars");
00432   graf(0.,12.,0.,2.,0.,5.,0.,1.);
00433   title();
00434   color("red");
00435 //  bars(xray,y1ray,y2ray,5);
00436    bars(h1, h1, h1,5);
00437   endgrf();
00438 /*
00439   shdpat(16);
00440   labels("data","pie");
00441   labclr(255,"pie");
00442   chnpie("none");
00443   pieclr(ic1ray,ic2ray,5);
00444   pietyp("3d");
00445   axspos(300,2700);
00446   piegrf(cbuf,0,y2ray,5);       
00447 */
00448   disfin();
00449 }// end resmensualview
00450 #endif
00451 
00452 
00453 

Generated on Sat Dec 15 00:00:58 2007 for BulmaGes by  doxygen 1.5.1