00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <unistd.h>
00024 #include <QCheckBox>
00025 #include <QTextStream>
00026
00027 #include "diarioprintview.h"
00028 #include "empresa.h"
00029 #include "selectccosteview.h"
00030 #include "selectcanalview.h"
00031 #include "diarioview.h"
00032
00033 using namespace std;
00034
00035
00037
00041 DiarioPrintView::DiarioPrintView(Empresa *emp, QWidget *parent)
00042 : QDialog(parent), PEmpresaBase(emp) {
00043 _depura("DiarioPrintView::DiarioPrintView", 0);
00044 setupUi(this);
00045 numdigitos = ((Empresa *)empresaBase())->numdigitosempresa();
00046 _depura("END DiarioPrintView::DiarioPrintView", 0);
00047 }
00048
00049
00051
00053 DiarioPrintView::~DiarioPrintView() {
00054 _depura("DiarioPrintView::~DiarioPrintView", 0);
00055 _depura("END DiarioPrintView::~DiarioPrintView", 0);
00056 }
00057
00058
00062
00065 QString DiarioPrintView::montaQuery() {
00066 _depura("DiarioPrintView::montaQuery", 0);
00067 DiarioView *diario = ((Empresa *)empresaBase())->diarioempresa();
00068 QString query;
00069 QString fecha;
00070 QString fechaasiento;
00071 QString descripcion;
00072 QString concepto;
00073 QString codigocuenta;
00074 QString nomcuenta;
00075 QString cadaux;
00076 QString finicial = diario->mui_fechainicial->text();
00077 QString ffinal = diario->mui_fechafinal->text();
00078 QString cad;
00079
00081 selectcanalview *scanal = ((Empresa *)empresaBase())->getselcanales();
00082 SelectCCosteView *scoste = ((Empresa *)empresaBase())->getselccostes();
00083 QString ccostes = scoste->cadcoste();
00084 if (ccostes != "") {
00085 ccostes.sprintf(" AND idc_coste IN (%s) ", ccostes.toAscii().constData());
00086 }
00087 QString ccanales = scanal->cadcanal();
00088 if (ccanales != "") {
00089 ccanales.sprintf(" AND idcanal IN (%s) ", ccanales.toAscii().constData());
00090 }
00091 QString tabla;
00092 if (diario->mui_asAbiertos->isChecked()) {
00093 tabla = "borrador";
00094 } else {
00095 tabla = "apunte";
00096 }
00097 query = "SELECT asiento.ordenasiento, " + tabla + ".contrapartida, " + tabla + ".fecha, asiento.fecha AS fechaasiento,cuenta.tipocuenta, cuenta.descripcion, "+tabla+".conceptocontable,"+tabla+".descripcion AS descapunte, to_char("+tabla+".debe,'MI999G999G990D99') AS debe, to_char("+tabla+".haber,'MI999G999G990D99') AS haber, cuenta.idcuenta, asiento.idasiento, "+tabla+".idc_coste, "+tabla+".idcanal, cuenta.codigo AS codigocuenta FROM asiento, "+tabla+", cuenta WHERE asiento.idasiento="+tabla+".idasiento AND "+tabla+".idcuenta = cuenta.idcuenta AND "+tabla+".fecha >= '"+finicial+"' AND "+tabla+".fecha <= '" + ffinal + "' " + ccostes + " " + ccanales + " ORDER BY asiento.ordenasiento, " + tabla + ".orden";
00098 _depura("END DiarioPrintView::montaQuery", 0);
00099 return query;
00100 }
00101
00102
00104
00107 void DiarioPrintView::accept() {
00108 _depura("DiarioPrintView::accept", 0);
00110 if (radiotexto->isChecked()) {
00111 if (radionormal->isChecked()) {
00112 presentar("txt");
00113 } else if (radioaprendizaje->isChecked()) {
00114 presentar("txtapren");
00115 }
00116 } else if (radiohtml->isChecked()) {
00117 if (radionormal->isChecked()) {
00118 presentar("html");
00119 } else if (radioaprendizaje->isChecked()) {
00120 presentar("htmlapren");
00121 }
00122 }
00123 _depura("END DiarioPrintView::accept", 0);
00124 }
00125
00126
00128
00131 void DiarioPrintView::presentar(char *tipus) {
00132 _depura("DiarioPrintView::presentar", 0);
00133 DiarioView *diario = ((Empresa *)empresaBase())->diarioempresa();
00134 int txt, html, txtapren, htmlapren;
00135 float debe, haber;
00136 int idcuenta;
00137 int idasiento;
00138 char data[15];
00139 string fecha;
00140 string fechaasiento;
00141 string descripcion;
00142 string concepto;
00143 string codigocuenta;
00144 string cad;
00145 cursor2 *cursoraux;
00146
00148 txt =! strcmp(tipus, "txt");
00149 html =! strcmp(tipus, "html");
00150 txtapren =! strcmp(tipus, "txtapren");
00151 htmlapren =! strcmp(tipus, "htmlapren");
00152
00154 QString finicial = diario->mui_fechainicial->text();
00155 QString ffinal = diario->mui_fechafinal->text();
00156
00157 if (txt | html) {
00159 ofstream fitxersortidatxt("diario.txt");
00160 ofstream fitxersortidahtml("diario.html");
00161
00162 if (!fitxersortidatxt) {
00164 txt = 0;
00165 }
00166 if (!fitxersortidahtml) {
00167 html = 0;
00168 }
00169
00170 if (txt | html) {
00172 if (txt) {
00174 fitxersortidatxt.setf(ios::fixed);
00175 fitxersortidatxt.precision(2);
00176 fitxersortidatxt << " LLIBRE DIARI \n" ;
00177 fitxersortidatxt << "Data Inicial: " << finicial.toAscii().constData() << " Data Final: " << ffinal.toAscii().constData() << endl;
00178 fitxersortidatxt << "ASIENTO FECHA SUBCUENTA DESCRIPCION DEBE HABER \n" ;
00179 fitxersortidatxt << "_______________________________________________________________________________________________\n";
00180 }
00181 if (html) {
00183 fitxersortidahtml.setf(ios::fixed);
00184 fitxersortidahtml.precision(2);
00185 fitxersortidahtml << "<html>\n";
00186 fitxersortidahtml << "<head>\n";
00187 fitxersortidahtml << " <!DOCTYPE / public \"-//w3c//dtd xhtml 1.0 transitional//en\"\n";
00188 fitxersortidahtml << " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
00189 fitxersortidahtml << " <LINK REL=StyleSheet HREF=\"" << confpr->valor(CONF_PLANTILLA).toAscii().constData() <<"\" TYPE=\"text/css\" MEDIA=screen>\n";
00190 fitxersortidahtml << " <title> Llibre Diari </title>\n";
00191 fitxersortidahtml << "</head>\n";
00192 fitxersortidahtml << "<body>\n";
00193 fitxersortidahtml << "<table><tr><td colspan=\"6\" class=titoldiari> Llibre diari <hr></td></tr>\n\n";
00194 fitxersortidahtml << "<tr><td colspan=\"6\" class=periodediari> Data Inicial: " << finicial.toAscii().constData() << " - Data Final: " << ffinal.toAscii().constData() << "<hr></td></tr>\n\n";
00195 fitxersortidahtml << "<tr><td class=titolcolumnadiari>Assentament</td><td class=titolcolumnadiari>Data</td><td class=titolcolumnadiari>Subcompte</td><td class=titolcolumnadiari>Descripció</td><td class=titolcolumnadiari>Deure</td><td class=titolcolumnadiari>Haver</td></tr>\n";
00196 }
00197 QString query = montaQuery();
00198 empresaBase()->begin();
00199 cursoraux = empresaBase()->cargacursor(query, "elquerydb");
00200 empresaBase()->commit();
00201
00202 for (; !cursoraux->eof(); cursoraux->siguienteregistro()) {
00203 fechaasiento = cursoraux->valor("fechaasiento").toAscii().constData();
00204 idasiento = atoi(cursoraux->valor("ordenasiento").toAscii());
00205 fecha = cursoraux->valor("fecha").toAscii().constData();
00206 descripcion = cursoraux->valor("descripcion").toAscii().constData();
00207 concepto = cursoraux->valor("conceptocontable").toAscii().constData();
00208 debe = atof(cursoraux->valor("debe").toAscii());
00209 haber = atof(cursoraux->valor("haber").toAscii());
00210 idcuenta = atoi(cursoraux->valor("idcuenta").toAscii());
00211 codigocuenta = cursoraux->valor("codigocuenta").toAscii().constData();
00212 strncpy(data,fecha.c_str(), 10);
00213 data[10] = '\0';
00214 if (txt) {
00216 fitxersortidatxt << setw(5) << idasiento << " " << setw(10) << data << " " << setw(10) << codigocuenta.c_str() << " " << setw(40) << setiosflags(ios::left) << descripcion.c_str() << resetiosflags(ios::left)<< " " << setw(10) << debe << " " << setw(10) << haber << endl;
00217 }
00218 if (html) {
00220 fitxersortidahtml << "<tr><td class=assentamentdiari>" << idasiento << "</td><td class=datadiari>" << data << "</td><td class=codicomptediari>" << codigocuenta.c_str() << "</td><td class=descripciodiari>" << descripcion.c_str() << "</td><td class=dosdecimals>" << debe << "</td><td class=dosdecimals>" << haber << "</td></tr>\n";
00221 }
00222 }
00223 delete cursoraux;
00224 if (html) {
00226 fitxersortidahtml << "</table>\n<hr>\n</body>\n</html>\n";
00227 fitxersortidahtml.close();
00228 }
00229 if (txt) {
00230 fitxersortidatxt << "_______________________________________________________________________________________________\n";
00231 fitxersortidatxt.close();
00232 }
00233 }
00234 if (txt) {
00236 QString cadaux = confpr->valor(CONF_EDITOR) + " diairo.txt";
00237 system(cadaux.toAscii());
00238 }
00239 if (html) {
00241 QString cadaux = confpr->valor(CONF_NAVEGADOR) + " diario.html";
00242 system(cadaux.toAscii());
00243 }
00244 }
00245 if (txtapren | htmlapren ) {
00246 char *argstxt[] = {"diariaprenentatge.txt", "diariaprenentatge.txt", NULL};
00247 char *argshtml[] = {"diariaprenentatge.html", "diariaprenentatge.html", NULL};
00249 ofstream fitxersortidatxt(argstxt[0]);
00250 ofstream fitxersortidahtml(argshtml[0]);
00251
00252 if (!fitxersortidatxt) {
00254 txtapren = 0;
00255 }
00256 if (!fitxersortidahtml) {
00258 htmlapren = 0;
00259 }
00260 if (txtapren | htmlapren) {
00262 if (txtapren) {
00264 fitxersortidatxt.setf(ios::fixed)
00265 ;
00266 fitxersortidatxt.precision(2);
00267 fitxersortidatxt << " LLIBRE DIARI \n" ;
00268 fitxersortidatxt << "Data Inicial: " << finicial.toAscii().constData() << " Data Final: " << ffinal.toAscii().constData() << endl;
00269 fitxersortidatxt << "___________________________________________________________________________________________________________________________________\n";
00270 }
00271 if (htmlapren) {
00273 fitxersortidahtml.setf(ios::fixed)
00274 ;
00275 fitxersortidahtml.precision(2);
00276 fitxersortidahtml << "<html>\n";
00277 fitxersortidahtml << "<head>\n";
00278 fitxersortidahtml << " <!DOCTYPE / public \"-//w3c//dtd xhtml 1.0 transitional//en\"\n";
00279 fitxersortidahtml << " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
00280 fitxersortidahtml << " <LINK REL=StyleSheet HREF=\"estils.css\" TYPE=\"text/css\" MEDIA=screen>\n";
00281 fitxersortidahtml << " <title> Llibre Diari </title>\n";
00282 fitxersortidahtml << "</head>\n";
00283 fitxersortidahtml << "<body>\n";
00284 fitxersortidahtml << "<table><tr><td colspan=\"7\" class=titoldiariapren> Llibre diari <hr></td></tr>\n\n";
00285 fitxersortidahtml << "<tr><td colspan=\"7\" class=periodediariapren> Data Inicial: " << finicial.toAscii().constData() << " - Data Final: " << ffinal.toAscii().constData() << "<hr></td></tr>\n\n";
00286 }
00287 empresaBase()->begin();
00288 cursoraux = empresaBase()->cargaasientosfecha((char *)finicial.toAscii().constData(), (char *)ffinal.toAscii().constData());
00289
00290 for (; !cursoraux->eof(); cursoraux->siguienteregistro()) {
00291 int idasiento = atoi(cursoraux->valor("idasiento").toAscii());
00292 if (txtapren) {
00294 fitxersortidatxt << "_________________________________________________________ " << idasiento << " ___________________________________________________________________\n";
00295 }
00296 if (htmlapren) {
00298 fitxersortidahtml << "\n<tr><td colspan=\"7\" class=liniadiariapren>____________________________________________________ " << idasiento << " _____________________________________________________</td></tr>\n" ;
00299 }
00300 char consulta[400];
00301 char codicompte[20];
00302 sprintf(consulta,"SELECT cuenta.codigo, cuenta.descripcion AS nomcuenta, apunte.debe AS debe, apunte.haber AS haber FROM apunte, cuenta WHERE apunte.idasiento=%d AND apunte.haber=0 AND cuenta.idcuenta=apunte.idcuenta",idasiento);
00303 empresaBase()->begin();
00304 cursor2 *cursasiento = empresaBase()->cargacursor(consulta,"asiento");
00305 empresaBase()->commit();
00306
00307 while (!cursasiento->eof()) {
00308 if (txtapren) {
00310 sprintf(codicompte,"( %s )",cursasiento->valor("codigo").toAscii().constData());
00311 fitxersortidatxt << setw(12) << atof(cursasiento->valor("debe").toAscii()) << " " << setw(10) << codicompte << " " << cursasiento->valor("nomcuenta").toAscii().constData() << endl;
00312 }
00313 if (htmlapren) {
00315 fitxersortidahtml << " <tr><td class=deurediariapren> " << atof(cursasiento->valor("debe").toAscii()) << " </td><td class=codidiariapren> ( " << cursasiento->valor("codigo").toAscii().constData() << " ) </td><td class=nomcomptediariapren> " << cursasiento->valor("nomcuenta").toAscii().constData() << " </td><td> </td><td> </td><td> </td><td> </td></tr>\n";
00316 }
00317 cursasiento->siguienteregistro();
00318 }
00319
00320 delete cursasiento;
00321 sprintf(consulta, "SELECT cuenta.codigo, cuenta.descripcion AS nomcuenta, apunte.debe AS debe, apunte.haber AS haber FROM apunte, cuenta WHERE apunte.idasiento = %d AND apunte.debe = 0 AND cuenta.idcuenta = apunte.idcuenta", idasiento);
00322 empresaBase()->begin();
00323 cursasiento = empresaBase()->cargacursor(consulta, "asiento");
00324 empresaBase()->commit();
00325
00326 while (!cursasiento->eof()) {
00327 if (txtapren) {
00329 sprintf(codicompte, "( %s )", cursasiento->valor("codigo").toAscii().constData());
00330 fitxersortidatxt << " a " << setw(30) << cursasiento->valor("nomcuenta").toAscii().constData() << " " << setw(10) << codicompte << " " << setw(12) << atof(cursasiento->valor("haber").toAscii()) <<endl;
00331 }
00332 if (htmlapren) {
00334 fitxersortidahtml << " <tr><td> </td><td> </td><td> </td><td class=adiariapren> a </td><td class=nomcomptediariapren> " << cursasiento->valor("nomcuenta").toAscii().constData() << " </td><td class=codidiariapren> ( " << cursasiento->valor("codigo").toAscii().constData() << " ) </td><td class=haverdiariapren> " << atof(cursasiento->valor("haber").toAscii()) << " </td></tr>\n";
00335 }
00336 cursasiento->siguienteregistro();
00337 }
00338 delete cursasiento;
00339 }
00340
00341 delete cursoraux;
00342 empresaBase()->commit();
00343
00344 if (txtapren) {
00345 fitxersortidatxt << "____________________________________________________________________________________________________________________________________\n" ;
00346 fitxersortidatxt.close();
00347 }
00348 if (htmlapren) {
00349 fitxersortidahtml << "<tr><td colspan=\"7\" class=liniadiariapren>\n_____________________________________________________________________________________________________________\n<hr></td></tr>\n</table>\n</body></html>\n";
00350 fitxersortidahtml.close();
00351 }
00352 if (txtapren) {
00354 QString cadaux = confpr->valor(CONF_EDITOR) + " diario.txt";
00355 system(cadaux.toAscii());
00356 }
00357 if (htmlapren) {
00359 QString cadaux = confpr->valor(CONF_NAVEGADOR) + " diario.txt";
00360 system(cadaux.toAscii());
00361 }
00362 }
00363 }
00364 _depura("END DiarioPrintView::presentar", 0);
00365 }
00366