regivaprintview.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Tomeu Borras                                    *
00003  *   tborras@conetxia.com                                                  *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 
00021 #include "regivaprintview.h"
00022 #include "empresa.h"
00023 
00024 #include "modelo300.h"
00025 #ifndef WIN32
00026 #include <unistd.h>
00027 #endif
00028 #include <fstream>
00029 #include "fixed.h"
00030 
00031 using namespace std;
00032 
00033 extern Mod300ps *modelo;
00034 
00035 
00037 
00041 regivaprintview::regivaprintview(Empresa *emp, QWidget *parent)
00042         : QDialog(parent), PEmpresaBase(emp) {
00043     _depura("regivaprintview::regivaprintview", 0);
00044     setupUi(this);
00045     fichero = NULL;
00046     _depura("END regivaprintview::regivaprintview", 0);
00047 }
00048 
00049 
00051 
00053 regivaprintview::~regivaprintview() {
00054     _depura("regivaprintview::~regivaprintview", 0);
00055     _depura("END regivaprintview::~regivaprintview", 0);
00056 }
00057 
00058 
00060 
00062 void regivaprintview::accept() {
00063     _depura("regivaprintview::accept", 0);
00064     if (radiotexto->isChecked())
00065         presentar("txt");
00066     if (radiohtml->isChecked())
00067         presentar("html");
00068     if (radioPS->isChecked()) {
00073     } // end if
00074     _depura("END regivaprintview::accept", 0);
00075 }
00076 
00077 
00079 
00083 void regivaprintview::inicializa1(QString finicial1, QString ffinal1) {
00084     _depura("regivaprintview::inicializa1", 0);
00085     fechainicial1->setText(finicial1);
00086     fechafinal1->setText(ffinal1);
00087     _depura("END regivaprintview::inicializa1", 0);
00088 }
00089 
00090 
00092 
00095 void regivaprintview::presentar(char *tipus) {
00096     _depura("regivaprintview::presentar", 0);
00097 #ifndef WIN32
00098     int txt, html, txtapren, htmlapren;
00099     int error;
00100     int pid;
00101     QString data;
00102     QString datahora;
00103 
00104     QString query;
00105 
00107     txt =! strcmp(tipus, "txt");
00108     html =! strcmp(tipus, "html");
00109     txtapren =! strcmp(tipus, "txtapren");
00110     htmlapren =! strcmp(tipus, "htmlapren");
00111 
00113     QString finicial = fechainicial1->text();
00114     QString ffinal = fechafinal1->text();
00115 
00116     if (txt | html) {
00117         char *argstxt[] = {"iva.txt", "iva.txt", NULL}; 
00118         char *argshtml[]={"iva.html","iva.html",NULL}; 
00119 
00120         ofstream fitxersortidatxt(argstxt[0]); 
00121         ofstream fitxersortidahtml(argshtml[0]);
00122 
00123         if (!fitxersortidatxt)
00124             txt = 0; 
00125         if (!fitxersortidahtml)
00126             html = 0;  
00127         if (txt | html) { 
00128             int num1;
00129             cursor2 *cursorapt;
00130             empresaBase()->begin();
00131             query.sprintf("SELECT * FROM registroiva, cuenta, borrador, asiento  where cuenta.idcuenta = borrador.idcuenta AND borrador.idborrador = registroiva.idborrador AND asiento.idasiento = borrador.idasiento AND (cuenta.codigo LIKE '43%%' OR cuenta.codigo LIKE '600%%') AND borrador.fecha >= '%s' AND borrador.fecha <= '%s' ORDER BY asiento.ordenasiento", fechainicial1->text().toAscii().constData(), fechafinal1->text().toAscii().constData());
00132             fprintf(stderr, "%s\n", query.toAscii().constData());
00133             cursorapt = empresaBase()->cargacursor(query, "mycursor");
00134             empresaBase()->commit();
00136             num1 = cursorapt->numregistros();
00137             int hoja = 0;
00138 
00139             if (txt) {
00141                 fitxersortidatxt.setf(ios::fixed)
00142                     ;
00143                 fitxersortidatxt.precision(2);
00144                 fitxersortidatxt << "                                        IVA Repercutido \n" ;
00145                 fitxersortidatxt << "Fecha Inicial: " << finicial.toAscii().constData() <<
00146                 "   Fecha Final: " << ffinal.toAscii().constData() << endl;
00147                 fitxersortidatxt << "Asiento  Fecha   Cuenta   Descripción                        Base imponible    Factura \n" ;
00148                 fitxersortidatxt << "__________________________________________________________________________________________________________\n";
00149             } // end if
00150             if (html) {
00152                 fitxersortidahtml.setf(ios::fixed)
00153                     ;
00154                 fitxersortidahtml.precision(2);
00155                 fitxersortidahtml << "<html>\n";
00156                 fitxersortidahtml << "<head>\n";
00157                 fitxersortidahtml << "  <!DOCTYPE / public \"-//w3c//dtd xhtml 1.0 transitional//en\"\n";
00158                 fitxersortidahtml << "    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
00159                 fitxersortidahtml << "  <LINK REL=StyleSheet HREF=\"estils.css\" TYPE=\"text/css\" MEDIA=screen>\n";
00160                 fitxersortidahtml << "  <title> IVA Repercutit </title>\n";
00161                 fitxersortidahtml << "</head>\n";
00162                 fitxersortidahtml << "<body>\n";
00163                 fitxersortidahtml << "<table><tr><td colspan=\"10\" class=titoliva> IVA Repercutido <hr></td></tr>\n\n";
00164                 fitxersortidahtml << "<tr><td colspan=\"10\" class periodeiva> Data Inicial: " << finicial.toAscii().constData() << " -  Data Final: " << ffinal.toAscii().constData() << "<hr></td></tr>\n\n";
00165                 fitxersortidahtml << "<tr><td class=titolcolumnaiva> Asiento </td><td class=titolcolumnaiva> Data </td><td class=titolcolumnaiva> Cuenta </td><td class=titolcolumnaiva> Descripción</td><td class=titolcolumnaiva> Base Imponible </td><td class=titolcolumnaiva> % IVA </td><td class=titolcolumnaiva> Quota IVA </td><td class=titolcolumnaiva> Factura </td><td class=titolcolumnaiva> CIF </td><td class=titolcolumnaiva> Cuenta IVA </td></tr>\n";
00166             } // end if
00167             while (!cursorapt->eof()) {
00168                 datahora = cursorapt->valor("fecha");
00169                 data = datahora.mid(0, 10);
00170                 int baseimp = cursorapt->valor("baseimp").replace(".", "").toInt();
00171                 int total = baseimp *cursorapt->valor("baseimp").replace(".", "").toInt() / 10000;
00172                 QString numberstr = QString::number(total);
00173                 numberstr = numberstr.left(numberstr.length() - 2) + "." + numberstr.right(2);
00174                 if (txt) {
00176                     fitxersortidatxt << setw(10) << cursorapt->valor("ordenasiento").toAscii().data() << " " <<
00177                     data.toAscii().constData() << " " <<
00178                     cursorapt->valor("contrapartida").toAscii().constData() << " " << cursorapt->valor("descripcion").toAscii().constData() << " " << cursorapt->valor("baseimp").toAscii().constData() << " " <<
00179                     cursorapt->valor("iva").toAscii().constData() << " " <<
00180                     numberstr.toAscii().constData() <<" " <<
00181                     cursorapt->valor("factura").toAscii().constData() << " " <<
00182                     cursorapt->valor("cif").toAscii().constData() << " " <<
00183                     endl;
00184                 } // end if
00185                 if (html) {
00187                     fitxersortidahtml << "<tr><td class=assentamentiva>" << cursorapt->valor("idasiento").toAscii().constData() << "</td><td class=dataiva>" << data.toAscii().constData() << "</td><td class=contrapartidaiva>" << cursorapt->valor("contrapartida").toAscii().constData() << "</td><td class=descripcioiva>" << cursorapt->valor("descripcion").toAscii().constData() << "</td><td class=baseimponibleiva>" << cursorapt->valor("baseimp").toAscii().constData() << "</td><td class=tipusiva>" << cursorapt->valor("iva").toAscii().constData() << "</td><td class=quotaiva>" << numberstr.toAscii().constData() << "</td><td class=facturaiva>" << cursorapt->valor("factura").toAscii().constData() << "</td><td class=cifiva>" << cursorapt->valor("cif").toAscii().constData() << "</td></tr> \n";
00188                 } // end if
00190                 cursorapt->siguienteregistro();
00191             } // end while
00193             delete cursorapt;
00194 
00196             QString SQLQuery = "SELECT * FROM cuenta, tipoiva LEFT JOIN (SELECT idtipoiva, SUM(baseiva) AS tbaseiva FROM iva iva.idregistroiva IN (SELECT idregistroiva FROM registroiva WHERE ffactura >='"+fechainicial1->text()+"' AND ffactura <='"+fechafinal1->text()+"' ) GROUP BY idtipoiva) AS dd ON dd.idtipoiva=tipoiva.idtipoiva WHERE tipoiva.idcuenta = cuenta.idcuenta AND cuenta.codigo LIKE '477%'";
00197             empresaBase()->begin();
00198             cursor2* cur = empresaBase()->cargacursor(SQLQuery, "elcursor");
00199             empresaBase()->commit();
00200             int j = 0;
00201             Fixed tivar("0");
00202             Fixed tbaseimpr("0");
00203             while (!cur->eof()) {
00204                 Fixed baseiva(cur->valor("tbaseiva").replace(".", "").toAscii().constData());
00205                 Fixed porcent(cur->valor("porcentajetipoiva").replace(".", "").toAscii().constData());
00206                 Fixed baseimp = baseiva * 1000000 / porcent;
00207                 QString numberstr = baseimp.toQString();
00208 
00211                 QString iva = QString::number(cursorapt->valor("tbaseiva").toDouble(), 'f', 2);
00212                 QString bi = QString::number(numberstr.toDouble(), 'f', 2);
00213 
00214                 fitxersortidatxt << setiosflags( ios::left ) << setw(16) << cur->valor("nombretipoiva").toAscii().constData() << " IVA: ";
00215                 fitxersortidatxt << resetiosflags( ios::left ) << setw(12) << iva.toAscii().constData() << " BI: ";
00216                 fitxersortidatxt << setw(10) << bi.toAscii().constData() << endl;
00217 
00218                 tivar = tivar+baseiva;
00219                 tbaseimpr = tbaseimpr+baseimp;
00220                 cur->siguienteregistro();
00221                 j++;
00222             } // end while
00223             delete cur;
00224 
00225             empresaBase()->begin();
00226             query.sprintf("SELECT *, (baseimp + iva) AS total, (iva / baseimp * 100)::INTEGER AS cuota FROM registroiva, cuenta, borrador, asiento  WHERE cuenta.idcuenta=borrador.idcuenta AND borrador.idborrador=registroiva.idborrador AND asiento.idasiento=borrador.idasiento AND (cuenta.codigo NOT LIKE '43%%' AND cuenta.codigo NOT LIKE '600%%') AND borrador.fecha >= '%s' AND borrador.fecha <= '%s' ORDER BY cuota, borrador.fecha", fechainicial1->text().toAscii().constData(), fechafinal1->text().toAscii().constData());
00227             fprintf(stderr, "%s\n", query.toAscii().constData());
00228             cursorapt = empresaBase()->cargacursor(query, "mycursor");
00229             empresaBase()->commit();
00231             num1 = cursorapt->numregistros();
00232             hoja = 0;
00233             if (txt) {
00235                 fitxersortidatxt.setf(ios::fixed)
00236                     ;
00237                 fitxersortidatxt.precision(2);
00238                 fitxersortidatxt << "                                        IVA Soportado \n" ;
00239                 fitxersortidatxt << "Asiento   Fecha     Cuenta   Descripción                        Subtotal Cuota   IVA       Total   Factura    CIF\n" ;
00240                 fitxersortidatxt << "_______________________________________________________________________________________________________________________\n";
00241             }
00242             if (html) {
00244                 fitxersortidahtml.setf(ios::fixed)
00245                     ;
00246                 fitxersortidahtml.precision(2);
00247                 fitxersortidahtml << "<html>\n";
00248                 fitxersortidahtml << "<head>\n";
00249                 fitxersortidahtml << "  <!DOCTYPE / public \"-//w3c//dtd xhtml 1.0 transitional//en\"\n";
00250                 fitxersortidahtml << "    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
00251                 fitxersortidahtml << "  <LINK REL=StyleSheet HREF=\"estils.css\" TYPE=\"text/css\" MEDIA=screen>\n";
00252                 fitxersortidahtml << "  <title> IVA Soportat </title>\n";
00253                 fitxersortidahtml << "</head>\n";
00254                 fitxersortidahtml << "<body>\n";
00255                 fitxersortidahtml << "<tr><td colspan=\"10\" class=titoliva> IVA Soportado <hr></td></tr>\n\n";
00256                 fitxersortidahtml << "<tr><td class=titolcolumnaiva> Asiento </td><td class=titolcolumnaiva> Fecha </td><td class=titolcolumnaiva> Cuenta </td><td class=titolcolumnaiva> Descripcion</td><td class=titolcolumnaiva> Base Imponible </td><td class=titolcolumnaiva> % IVA </td><td class=titolcolumnaiva> Quota IVA </td><td class=titolcolumnaiva> Factura </td><td class=titolcolumnaiva> CIF </td><td class=titolcolumnaiva> Cuenta IVA </td></tr>\n";
00257             }
00258             while (!cursorapt->eof()) {
00259                 datahora = cursorapt->valor("fecha");
00260                 data = datahora.mid(0, 10);
00262                 QString bi = QString::number(cursorapt->valor("baseimp").toDouble(), 'f', 2);
00263                 QString iva = QString::number(cursorapt->valor("iva").toDouble(), 'f', 2);
00264                 QString total = QString::number(cursorapt->valor("total").toDouble(), 'f', 2);
00267                 // int calculo = round(cursorapt->valor("iva").toDouble()/cursorapt->valor("baseimp").toDouble()*100);
00268                 // QString cuota = QString::number(calculo);
00269                 QString cuota = QString::number(cursorapt->valor("cuota").toInt());
00271                 if (txt) {
00273                     fitxersortidatxt << setiosflags(ios::left) << setw(8) << cursorapt->valor("ordenasiento").toAscii().constData() << setw(12) << data.toAscii().constData() << setw(9) << cursorapt->valor("codigo").toAscii().constData() << setw(30) << cursorapt->valor("descripcion").left(30).toAscii().constData() << " " << resetiosflags( ios::left ) << setw(12) << bi.toAscii().constData() << " " << setw(3) << cuota.toAscii().constData() << "%" << setw(9) << iva.toAscii().constData() << setw(12) << total.toAscii().constData() << setiosflags( ios::left ) << "  " << setw(10) << cursorapt->valor("factura").right(8).toAscii().constData() <<  setw(10) << cursorapt->valor("cif").toAscii().constData() << endl;
00274                 }
00275                 if (html) {
00277                     fitxersortidahtml << "<tr><td class=assentamentiva>" << cursorapt->valor("ordenasiento").toAscii().constData() << "</td><td class=dataiva>" << data.toAscii().constData() << "</td><td class=contrapartidaiva>" << cursorapt->valor("contrapartida").toAscii().constData() << "</td><td class=descripcioiva>" << cursorapt->valor("descripcion").toAscii().constData() << "</td><td class=baseimponibleiva>" << cursorapt->valor("baseimp").toAscii().constData() << "</td><td class=tipusiva>" << cursorapt->valor("iva").toAscii().constData() << "</td><td class=quotaiva>" << total.toAscii().constData() << "</td><td class=facturaiva>" << cursorapt->valor("factura").toAscii().constData() << "</td><td class=cifiva>" << cursorapt->valor("cif").toAscii().constData() << "</td></tr> \n";
00278                 }
00280                 cursorapt->siguienteregistro();
00281             } // end while
00283             delete cursorapt;
00284 
00286             SQLQuery = "SELECT * FROM cuenta, tipoiva LEFT JOIN (SELECT idtipoiva, SUM(baseiva) AS tbaseiva FROM iva  WHERE iva.idregistroiva IN (SELECT idregistroiva FROM registroiva WHERE ffactura >='"+fechainicial1->text()+"' AND ffactura <='"+fechafinal1->text()+"' ) GROUP BY idtipoiva) AS dd ON dd.idtipoiva=tipoiva.idtipoiva WHERE tipoiva.idcuenta = cuenta.idcuenta AND cuenta.codigo LIKE '472%'";
00287             empresaBase()->begin();
00288             cur = empresaBase()->cargacursor(SQLQuery, "elcursor");
00289             empresaBase()->commit();
00290             j = 0;
00291             Fixed tivas("0");
00292             Fixed tbaseimps("0");
00293             while (!cur->eof()) {
00294                 Fixed baseiva(cur->valor("tbaseiva").toAscii().constData());
00295                 Fixed porcent(cur->valor("porcentajetipoiva").toAscii().constData());
00296                 Fixed ivacalculado = baseiva * porcent / 100;
00297                 QString numberstr = ivacalculado.toQString();
00298 
00301                 QString bi = QString::number(cur->valor("tbaseiva").toDouble(), 'f', 2);
00302                 QString iva = QString::number(numberstr.toDouble(), 'f', 2);
00303 
00304                 if (j == 0) {
00305                     fitxersortidatxt << endl;
00306                 } // end if
00307                 fitxersortidatxt << setiosflags(ios::left) << setw(16) << cur->valor("nombretipoiva").toAscii().constData() << " BI: ";
00308                 fitxersortidatxt << resetiosflags( ios::left ) << setw(12) << bi.toAscii().constData() << " IVA: ";
00309                 fitxersortidatxt << setw(10) << iva.toAscii().constData() << endl;
00310 
00311                 tivas = tivas + ivacalculado;
00312                 tbaseimps = tbaseimps + baseiva;
00313                 cur->siguienteregistro();
00314                 j++;
00315             } // end while
00316             delete cur;
00317 
00319             if (txt) {
00320                 fitxersortidatxt.close();
00322                 if ((pid=fork()) < 0) {
00323                     perror ("Fork failed");
00324                     exit(errno);
00325                 } // end if
00326                 if (!pid) {
00327                     error = execvp(confpr->valor(CONF_EDITOR).toAscii(), argstxt);
00328                 } // end if
00329             } // end if
00330             if (html) {
00331                 fitxersortidahtml << "\n</table>\n</body>\n</html>\n";
00332                 fitxersortidahtml.close();
00334                 if ((pid = fork()) < 0) {
00335                     perror("Fork failed");
00336                     exit(errno);
00337                 } // end if
00338                 if (!pid) {
00339                     error = execvp(confpr->valor(CONF_NAVEGADOR).toAscii(),argshtml);
00340                 } // end if
00341             } // end if
00342         }
00343     }
00344 
00345 #endif
00346     _depura("END regivaprintview::presentar", 0);
00347 }
00348 

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