00001
00002 #include <QLabel>
00003 #include "mticket.h"
00004 #include "dbrecord.h"
00005 #include "bulmatpv.h"
00006 #include "subform2bt.h"
00007 #include <QTextBrowser>
00008
00009 extern QTextBrowser *g_browser;
00010
00013 typedef QMap<QString, Fixed> base;
00014
00015
00016 MTicket::MTicket(EmpresaTPV *emp, QWidget *parent) : BLWidget(emp, parent) {
00017 _depura("MTicket::MTicket", 0);
00018 setupUi(this);
00019 emp->pWorkspace()->addWindow(this);
00020 setWindowTitle("Ticket");
00021 _depura("END MTicket::MTicket", 0);
00022 }
00023
00024
00025 MTicket::~MTicket() {
00026 _depura("MTicket::~MTicket", 0);
00027 _depura("END MTicket::~MTicket", 0);
00028 }
00029
00030
00031 void MTicket::pintar() {
00032 _depura("MTicket::pintar", 0);
00033 Ticket *tick = ((EmpresaTPV *)empresaBase())->ticketActual();
00034
00035 QString html = "<p style=\"font-family:monospace; font-size: 12pt;\">";
00036 QString html1 = "<font size=\"1\">";
00037
00038 html1 += "Ticket: " + tick->DBvalue("nomticket") + "<BR>";
00039 html1 += "Trabajador: " + tick->DBvalue("idtrabajador") + "<BR>";
00040 QString query = "SELECT * FROM cliente WHERE idcliente = " + tick->DBvalue("idcliente");
00041 cursor2 *cur1 = empresaBase()->cargacursor(query);
00042 html1 += "Cliente: " + tick->DBvalue("idcliente") + " " + cur1->valor("nomcliente") + "<BR>";
00043 delete cur1;
00044
00045 html += "<TABLE border=\"0\">";
00046 DBRecord *item;
00047 for (int i = 0; i < tick->listaLineas()->size(); ++i) {
00048 item = tick->listaLineas()->at(i);
00049 QString bgcolor="#FFFFFF";
00050 if (item == tick->lineaActTicket()) bgcolor="#CCCCFF";
00051 html += "<TR>";
00052 html += "<TD bgcolor=\"" + bgcolor +"\" align=\"right\" width=\"50\">" + item->DBvalue("cantlalbaran") + "</TD>";
00053 html += "<TD bgcolor=\"" + bgcolor +"\">" + item->DBvalue("nomarticulo") + "</TD>";
00054 Fixed totalLinea("0.00");
00055 totalLinea = Fixed(item->DBvalue("cantlalbaran")) * Fixed(item->DBvalue("pvplalbaran"));
00056 html += "<TD bgcolor=\"" + bgcolor +"\" align=\"right\" width=\"50\">" + totalLinea.toQString(); + "</TD>";
00057 html += "</TR>";
00058 }
00059 html += "</TABLE>";
00060
00061
00062 html += "<BR><HR><BR>";
00063 base basesimp;
00064 base basesimpreqeq;
00065 DBRecord *linea;
00067 QString l;
00068 Fixed irpf("0");
00069
00070 cursor2 *cur = empresaBase()->cargacursor("SELECT * FROM configuracion WHERE nombre = 'IRPF'");
00071 if (cur) {
00072 if (!cur->eof()) {
00073 irpf = Fixed(cur->valor("valor"));
00074 }
00075 delete cur;
00076 }
00077
00078
00079 Fixed descuentolinea("0.00");
00080 for (int i = 0; i < tick->listaLineas()->size(); ++i) {
00081 linea = tick->listaLineas()->at(i);
00082 Fixed cant(linea->DBvalue("cantlalbaran"));
00083 Fixed pvpund(linea->DBvalue("pvplalbaran"));
00084 Fixed desc1(linea->DBvalue("descuentolalbaran"));
00085 Fixed cantpvp = cant * pvpund;
00086 Fixed base = cantpvp - cantpvp * desc1 / 100;
00087 descuentolinea = descuentolinea + (cantpvp * desc1 / 100);
00088 basesimp[linea->DBvalue("ivalalbaran")] = basesimp[linea->DBvalue("ivalalbaran")] + base;
00089 basesimpreqeq[linea->DBvalue("reqeqlalbaran")] = basesimpreqeq[linea->DBvalue("reqeqlalbaran")] + base;
00090 }
00091
00092 Fixed basei("0.00");
00093 base::Iterator it;
00094 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00095 basei = basei + it.value();
00096 }
00097
00100 Fixed porcentt("0.00");
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00113 Fixed totbaseimp("0.00");
00114 Fixed parbaseimp("0.00");
00115 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00116 if (porcentt > Fixed("0.00")) {
00117 parbaseimp = it.value() - it.value() * porcentt / 100;
00118 } else {
00119 parbaseimp = it.value();
00120 }
00121 html1 += "Base Imp " + it.key() + "% "+parbaseimp.toQString() + "<BR>";
00122 totbaseimp = totbaseimp + parbaseimp;
00123 }
00124
00126 Fixed totiva("0.00");
00127 Fixed pariva("0.00");
00128 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00129 Fixed piva(it.key().toAscii().constData());
00130 if (porcentt > Fixed("0.00")) {
00131 pariva = (it.value() - it.value() * porcentt / 100) * piva / 100;
00132 } else {
00133 pariva = it.value() * piva / 100;
00134 }
00135 html1 += "IVA " + it.key() + "% "+pariva.toQString() + "<BR>";
00136 totiva = totiva + pariva;
00137 }
00138
00140 Fixed totreqeq("0.00");
00141 Fixed parreqeq("0.00");
00142 for (it = basesimpreqeq.begin(); it != basesimpreqeq.end(); ++it) {
00143 Fixed preqeq(it.key().toAscii().constData());
00144 if (porcentt > Fixed("0.00")) {
00145 parreqeq = (it.value() - it.value() * porcentt / 100) * preqeq / 100;
00146 } else {
00147 parreqeq = it.value() * preqeq / 100;
00148 }
00149 html1 += "R.Eq " + it.key() + "% "+parreqeq.toQString() + "<BR>";
00150 totreqeq = totreqeq + parreqeq;
00151 }
00152
00153
00154
00155 Fixed totirpf = totbaseimp * irpf / 100;
00156
00157 html1 += "<B>Base Imp. " + totbaseimp.toQString() + "<BR>";
00158 html1 += "<B>IVA. " + totiva.toQString() + "<BR>";
00159 html1 += "<B>IRPF. " + totirpf.toQString() + "<BR>";
00160
00161 Fixed total = totiva + totbaseimp + totreqeq - totirpf;
00162 html1 += "<B>Total: " + total.toQString() + "<BR>";
00163
00164
00165
00166 html += "</p>";
00167 html1 += "</FONT>";
00168
00169
00171 mui_browser->setText(html);
00172 g_browser->setText(html1);
00173 _depura("END MTicket::pintar", 0);
00174 }
00175
00176
00177 void MTicket::on_mui_subir_clicked() {
00179 ((EmpresaTPV *)empresaBase())->pulsaTecla(Qt::Key_Up);
00180
00181 }
00182
00183
00184 void MTicket::on_mui_bajar_clicked() {
00186 ((EmpresaTPV *)empresaBase())->pulsaTecla(Qt::Key_Down);
00187 }
00188
00189
00190 void MTicket::on_mui_borrar_clicked() {
00191
00192 Ticket *tick = ((EmpresaTPV *)empresaBase())->ticketActual();
00193 tick->ponerCantidad("0");
00194
00195 pintar();
00196 }
00197
00199
00200
00201
00203
00205 myplugin::myplugin() {
00206 _depura("myplugin::myplugin", 0);
00207 _depura("END myplugin::myplugin", 0);
00208 }
00209
00210
00212
00214 myplugin::~myplugin() {
00215 _depura("myplugin::~myplugin", 0);
00216 _depura("END myplugin::~myplugin", 0);
00217 }
00218
00219
00221
00223 void myplugin::elslot(QTableWidgetItem *) {
00224 _depura("myplugin::elslot", 0);
00225 QString idarticulo = m_lan->DBvalue("idarticulo");
00226 m_tpv->empresaTPV()->ticketActual()->insertarArticulo(idarticulo, Fixed("1"));
00227 _depura("END myplugin::elslot", 0);
00228 }
00229
00230
00232
00235 void myplugin::inicializa(BulmaTPV *tpv) {
00236 _depura("myplugin::inicializa", 0);
00237 m_tpv = tpv;
00238
00239 m_lan = new SubForm2Bt(NULL);
00240 m_lan->setEmpresaBase(tpv->empresaTPV());
00241 m_lan->setDBTableName("articulo");
00242 m_lan->setDBCampoId("idarticulo");
00243 m_lan->addSHeader("idarticulo", DBCampo::DBint, DBCampo::DBNotNull | DBCampo::DBPrimaryKey, SHeader::DBNoView | SHeader::DBNoWrite, QApplication::translate("ticketbasico", "ID articulo"));
00244 m_lan->addSHeader("codigocompletoarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Codigo completo del articulo"));
00245 m_lan->addSHeader("nomarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Nombre del articulo"));
00246 m_lan->addSHeader("abrevarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Descripcion abreviada del articulo"));
00247 m_lan->addSHeader("obserarticulo", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Observaciones sobre el articulo"));
00248 m_lan->addSHeader("desctipo_articulo", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Descripcion del tipo de articulo"));
00249 m_lan->addSHeader("desctipo_iva", DBCampo::DBvarchar, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Descripcion tipo de I.V.A."));
00250 m_lan->addSHeader("pvparticulo", DBCampo::DBnumeric, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","P.V.P. articulo"));
00251 m_lan->addSHeader("stockarticulo", DBCampo::DBnumeric, DBCampo::DBNoSave, SHeader::DBNone | SHeader::DBNoWrite, QApplication::translate("ticketbasico","Disponible en stock"));
00252 m_lan->setinsercion(FALSE);
00253 m_lan->setDelete(FALSE);
00254 m_lan->setSortingEnabled(TRUE);
00255 tpv->workspace()->addWindow(m_lan);
00256 m_lan->showFullScreen();
00257 m_lan->cargar("SELECT * FROM articulo");
00258
00259 connect(m_lan, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(elslot(QTableWidgetItem *)));
00260 _depura("END myplugin::inicializa", 0);
00261 }