00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "plugintotal.h"
00025 #include "funcaux.h"
00026 #include "empresatpv.h"
00027 #include "total.h"
00028 #include "plugins.h"
00029 #include "ticket.h"
00030 #include "qapplication2.h"
00031
00034 typedef QMap<QString, Fixed> base;
00035
00036
00037 Total *g_tot;
00038 QDockWidget *g_doc1;
00040
00043 int entryPoint(BulmaTPV *tpv) {
00044 _depura("entryPoint", 0);
00045
00047 g_doc1 = new QDockWidget("Total", tpv);
00048 g_doc1->setFeatures(QDockWidget::AllDockWidgetFeatures);
00049
00050 g_doc1->setGeometry(100, 100, 100, 500);
00051 g_doc1->resize(330, 400);
00052 tpv->addDockWidget(Qt::LeftDockWidgetArea, g_doc1);
00053 g_doc1->show();
00054
00055 _depura("END entryPoint", 0);
00056 return 0;
00057 }
00058
00059 int EmpresaTPV_createMainWindows_Post(EmpresaTPV *etpv) {
00060 g_tot = new Total(etpv, g_doc1);
00061
00062 g_doc1->setWidget(g_tot);
00063
00064
00065 return 0;
00066 }
00067
00068 int Ticket_pintar(Ticket *tick) {
00069
00070 base basesimp;
00071 base basesimpreqeq;
00072 DBRecord *linea;
00073
00074 EmpresaTPV *emp = (EmpresaTPV *)tick->empresaBase();
00075
00077 QString l;
00078 Fixed irpf("0");
00079
00080 cursor2 *cur = emp->cargacursor("SELECT * FROM configuracion WHERE nombre = 'IRPF'");
00081 if (cur) {
00082 if (!cur->eof()) {
00083 irpf = Fixed(cur->valor("valor"));
00084 }
00085 delete cur;
00086 }
00087
00088
00089 Fixed descuentolinea("0.00");
00090 for (int i = 0; i < tick->listaLineas()->size(); ++i) {
00091 linea = tick->listaLineas()->at(i);
00092 Fixed cant(linea->DBvalue("cantlalbaran"));
00093 Fixed pvpund(linea->DBvalue("pvplalbaran"));
00094 Fixed desc1(linea->DBvalue("descuentolalbaran"));
00095 Fixed cantpvp = cant * pvpund;
00096 Fixed base = cantpvp - cantpvp * desc1 / 100;
00097 descuentolinea = descuentolinea + (cantpvp * desc1 / 100);
00098 basesimp[linea->DBvalue("ivalalbaran")] = basesimp[linea->DBvalue("ivalalbaran")] + base;
00099 basesimpreqeq[linea->DBvalue("reqeqlalbaran")] = basesimpreqeq[linea->DBvalue("reqeqlalbaran")] + base;
00100 }
00101
00102 Fixed basei("0.00");
00103 base::Iterator it;
00104 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00105 basei = basei + it.value();
00106 }
00107
00110 Fixed porcentt("0.00");
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00123 Fixed totbaseimp("0.00");
00124 Fixed parbaseimp("0.00");
00125 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00126 if (porcentt > Fixed("0.00")) {
00127 parbaseimp = it.value() - it.value() * porcentt / 100;
00128 } else {
00129 parbaseimp = it.value();
00130 }
00131 totbaseimp = totbaseimp + parbaseimp;
00132 }
00133
00135 Fixed totiva("0.00");
00136 Fixed pariva("0.00");
00137 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00138 Fixed piva(it.key().toAscii().constData());
00139 if (porcentt > Fixed("0.00")) {
00140 pariva = (it.value() - it.value() * porcentt / 100) * piva / 100;
00141 } else {
00142 pariva = it.value() * piva / 100;
00143 }
00144 totiva = totiva + pariva;
00145 }
00146
00148 Fixed totreqeq("0.00");
00149 Fixed parreqeq("0.00");
00150 for (it = basesimpreqeq.begin(); it != basesimpreqeq.end(); ++it) {
00151 Fixed preqeq(it.key().toAscii().constData());
00152 if (porcentt > Fixed("0.00")) {
00153 parreqeq = (it.value() - it.value() * porcentt / 100) * preqeq / 100;
00154 } else {
00155 parreqeq = it.value() * preqeq / 100;
00156 }
00157 totreqeq = totreqeq + parreqeq;
00158 }
00159
00160
00161
00162 Fixed totirpf = totbaseimp * irpf / 100;
00163
00164 Fixed total = totiva + totbaseimp + totreqeq - totirpf;
00165
00166
00168 g_tot->mui_display->display(total.toQString());
00169 }
00170
00171