void ArtGraficos::on_mui_list_cellClicked ( int row, int column ) { BL_FUNC_DEBUG QString artvarios = g_confpr->value( CONF_ARTICULOS_VARIOS ); QString codigo = m_articulos[row][column]; QString idArticulo = m_nodarticulos[row][column].firstChildElement("IDARTICULO").toElement().text(); BtTicket *tick = (( BtCompany * ) mainCompany() ) ->ticketActual(); /// Buscamos si ya hay una linea con el articulo que buscamos BlDbRecord *m_lineaActual = NULL; BlDbRecord *item; bool nuevaLinea = artvarios.contains ( codigo ); for ( int i = 0; i < tick->listaLineas() ->size(); ++i ) { item = tick->listaLineas() ->at ( i ); if ( item->dbValue ( "idarticulo" ) == idArticulo ) m_lineaActual = item; }// end for if ( m_lineaActual && nuevaLinea == false ) { /// Ya hay una linea con este articulo (es un agregado) BlFixed cantidadib ( m_lineaActual->dbValue ( "cantlalbaran" ) ); BlFixed cant1 = cantidadib + BlFixed("1"); m_lineaActual->setDbValue ( "cantlalbaran", cant1.toQString() ); } else { /// No hay ningun item con este articulo (es una insercion) m_lineaActual = tick->agregarLinea(); m_lineaActual->setDbValue ( "idarticulo", idArticulo ); QString a("1.00"); m_lineaActual->setDbValue ( "cantlalbaran", "1.00" ); m_lineaActual->setDbValue ( "pvpivainclalbaran", m_nodarticulos[row][column].firstChildElement("PVPIVAINCARTICULO").toElement().text()); m_lineaActual->setDbValue ( "pvplalbaran", m_nodarticulos[row][column].firstChildElement("PVPARTICULO").toElement().text()); m_lineaActual->setDbValue ( "codigocompletoarticulo", m_nodarticulos[row][column].firstChildElement("PVPIVAINCARTICULO").toElement().text()); m_lineaActual->setDbValue ( "nomarticulo", m_nodarticulos[row][column].firstChildElement("NOMARTICULO").toElement().text()); m_lineaActual->setDbValue ( "desclalbaran", m_nodarticulos[row][column].firstChildElement("NOMARTICULO").toElement().text()); m_lineaActual->setDbValue ( "ivalalbaran", m_nodarticulos[row][column].firstChildElement("IVAARTICULO").toElement().text()); } // end if /// Pintamos el ticket ya que se ha modificado. tick->pintar(); BlDebug::blDebug("END ArtGraficos::on_mui_list_cellClicked"); }
void ServerLight::processTicketDataXML(QString data) { BtCompany *emp = (BtCompany *) mainCompany(); BlDbRecord *rec; BtTicket *ticket; BtTicket *ticketActual; fprintf(stdout, "\n==========MENSAJE COMPLETO ===============\n"); fprintf(stdout, data.toAscii()); fprintf(stdout, "\n=========================\n"); ticketActual = emp->ticketActual(); QString *er = new QString(""); int *erline; int num = 0; erline = # QDomDocument doc ( "mydocument" ); if ( !doc.setContent ( data, true, er, erline ) ) { //fprintf(stderr, er->toAscii()); //fprintf(stderr, QString::number(*erline).toAscii()); fprintf(stderr, "Error en documento XML.\n"); return; } // end if QDomElement docElem = doc.documentElement(); QDomElement principal = docElem.firstChildElement ( "TICKET" ); /// Cogemos la coordenada X QDomNodeList nodos = principal.elementsByTagName ( "LINEATICKET" ); /// Crea un ticket. ticket = emp->newBtTicket(); ticket->setDbValue("nomticket", principal.firstChildElement("NOMTICKET").text() ); ticket->setDbValue("idtrabajador", "1"); int i = 0; while (i < nodos.count() ) { QDomNode ventana = nodos.item ( i++ ); QDomElement e1 = ventana.toElement(); /// try to convert the node to an element. if ( !e1.isNull() ) { /// the node was really an element. QString idarticulo = e1.firstChildElement("IDARTICULO").text(); QString cantarticulo = e1.firstChildElement("CANTARTICULO").text(); QString imagen = ""; QDomElement modificadores = e1.firstChildElement("MODIFICADORES"); if (!modificadores.isNull()) imagen = modificadores.firstChildElement("IMAGEN").text(); /// Inserta lineas. BlDbRecord *linea = ticket->agregarLinea(); linea->setDbValue("idarticulo", idarticulo); linea->setDbValue("cantlalbaran", cantarticulo); if (imagen != "") { QByteArray bytes1 = QByteArray::fromBase64(imagen.toAscii()); QByteArray bytes; QBuffer buffer(&bytes); QImage img; buffer.open(QIODevice::WriteOnly); img.loadFromData(bytes1, "BMP"); img.save("/tmp/imagen.bmp","BMP"); img.save(&buffer, "PNG"); QString text = bytes.toBase64(); linea->setDbValue ( "imglalbaran", text ); } else { linea->setDbValue ( "imglalbaran", "" ); } // end if /// El plugin de IVA incluido tiene que estar instalado. /// Buscamos los parametros en la base de datos. QString query = "SELECT pvparticulo, pvpivaincarticulo, codigocompletoarticulo, nomarticulo, porcentasa_iva FROM articulo LEFT JOIN (SELECT idtipo_iva, porcentasa_iva, fechatasa_iva FROM tasa_iva ) AS t1 ON articulo.idtipo_iva = t1.idtipo_iva WHERE idarticulo = " + idarticulo + " ORDER BY t1.fechatasa_iva LIMIT 1"; BlDbRecordSet *cur = mainCompany() ->loadQuery ( query ); if ( !cur->eof() ) { linea->setDbValue ( "pvplalbaran", cur->value( "pvparticulo" ) ); linea->setDbValue ( "pvpivainclalbaran", cur->value( "pvpivaincarticulo" ) ); linea->setDbValue ( "codigocompletoarticulo", cur->value( "codigocompletoarticulo" ) ); linea->setDbValue ( "nomarticulo", cur->value( "nomarticulo" ) ); linea->setDbValue ( "desclalbaran", cur->value( "nomarticulo" ) ); linea->setDbValue ( "ivalalbaran", cur->value( "porcentasa_iva") ); } // end if delete cur; } // end if } // end while /// Aparca el ticket. emp->listaTickets()->prepend(ticket); /// Hacemos una llamada a plugins para indicar que hay un ticket nuevo y que deben recoger los otros plugins. /// En este caso es una llamada extraña pq no se pasa la clase llamante sino que se pasa el ticket generado. g_plugins->run("ticket_aparcado_remotamente", ticket); }