00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 }
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 }
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 }
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 }
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 }
00190 cursorapt->siguienteregistro();
00191 }
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 }
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
00268
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 }
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 }
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 }
00316 delete cur;
00317
00319 if (txt) {
00320 fitxersortidatxt.close();
00322 if ((pid=fork()) < 0) {
00323 perror ("Fork failed");
00324 exit(errno);
00325 }
00326 if (!pid) {
00327 error = execvp(confpr->valor(CONF_EDITOR).toAscii(), argstxt);
00328 }
00329 }
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 }
00338 if (!pid) {
00339 error = execvp(confpr->valor(CONF_NAVEGADOR).toAscii(),argshtml);
00340 }
00341 }
00342 }
00343 }
00344
00345 #endif
00346 _depura("END regivaprintview::presentar", 0);
00347 }
00348