00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "resmensualview.h"
00018
00019 #ifdef ESTADISTICAS
00020 #include "estadisticas/tolinechart.h"
00021 #include "estadisticas/topiechart.h"
00022 #endif
00023
00024 #ifdef GDCHART
00025
00026
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
00050 idmpatrimonial1 = "";
00051 idmpatrimonial2 = "";
00052 idmpatrimonial3 = "";
00053
00054 }
00055 resmensualview::~resmensualview(){
00056 }
00057
00058 int resmensualview::inicializa() {
00059
00060
00061 return(0);
00062 }
00063
00064 void resmensualview::accept() {
00065 presentar();
00066 presentarpie();
00067 }
00068
00069 void resmensualview::presentar() {
00070 std::list<double> milistad[12];
00071
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
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
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 }
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
00120 milistas[i].push_back(saldoant);
00121 }
00122 delete curs;
00123 fecha = fecha.addMonths(1);
00124 fecha1 = fecha1.addMonths(1);
00125 }
00126 }
00127 }
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 }
00141 #endif
00142 }
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 }
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;}
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 }
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 }
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 }
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 }
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
00240 std::list<double> valores;
00241 std::list<QString> labels;
00242
00243 while (!cursorapt->eof()) {
00244 QString nomcuenta;
00245
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 }
00252 delete micurs;
00253
00254 float valor = atof(cursorapt->valor("tdebe").ascii()) + atof(cursorapt->valor("thaber").ascii());
00255 if (valor > 0) {
00256
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
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 }
00278
00279
00280 cursorapt->siguienteregistro();
00281 #ifdef GDCHART
00282 j++;
00283 #endif
00284 }
00285
00286
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
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 }
00308
00309
00310 }
00311
00312
00313
00314
00315 #ifdef ESTADISTICAS
00316
00317 void resmensualview::generargrafico(float *, char**) {
00318 }
00319 #endif
00320
00321 #ifdef GDCHART
00322
00323 void resmensualview::generargrafico(float *h1, char**t2) {
00324 fprintf(stderr,"Principio de generargrafico\n");
00325
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
00341
00342
00343 GDC_ANNOTATION_T anno;
00344
00345
00346 FILE *outgif1 = fopen( "/tmp/graf.gif", "wb" );
00347
00348
00349 anno.color = 0x00FF00;
00350 strncpy( anno.note, "Did Not\nTrade", MAX_NOTE_LEN );
00351 anno.point = 3;
00352
00353 GDC_annotation = &anno;
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
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;
00367 GDC_3d_depth = 4.0;
00368
00369
00370 GDC_PlotColor = 0xFFFFFF;
00371
00372
00373
00374
00375
00376
00377 fprintf(stderr,"Voy a ejecutar out_graph\n");
00378
00379 out_graph( 200, 175,
00380 outgif1,
00381 GDC_COMBO_HLC_AREA,
00382 12,
00383 t,
00384 1,
00385 h,
00386 l,
00387 c,
00388 v );
00389
00390 fprintf(stderr,"He terminado de ejecutar out_graph\n");
00391
00392 fclose( outgif1 );
00393 fprintf(stderr,"Fin de generargrafico|n");
00394
00395 }
00396 #endif
00397
00398
00399 #ifdef DISLIN
00400
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
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
00436 bars(h1, h1, h1,5);
00437 endgrf();
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448 disfin();
00449 }
00450 #endif
00451
00452
00453