Incorrect data being entered in the list widget

Asked

Viewed 19 times

-1

After a lot of trying, I managed to make my program that is a box simulator (commercial automation) the possibility to multiply the items (instead of the box register one by one, when it is of the same product). Only that there is an error, it inserts too much data as shown in the picture.

There are two forms of user input, with pure code to register a single item or if it needs to multiply it is necessary to do, for example, 10 * 1 (where 10 is the quantity to be multiplied and 1 is the product code Dipirona). As shown in the figure, it also recognizes 10 * 1 (as being 10 the Diovan product code and 1 the multiplication factor).

In the example of the figure, he is recording both 10 * 1 and 10 being the quantity to be multiplied, and 10 being code. Could someone help me? I’m not being able to solve.

NOTE: I always put a greeting, "hello friends" at the beginning of my questions, but they don’t come out in the message, I don’t know why.


The code


from PyQt5 import uic, QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QTreeView
import mysql.connector

mydb = mysql.connector.connect(host="localhost", user="root", database="db_farmacia", password="")
cursor = mydb.cursor()

def funcao_1():    # função/método responsável por buscar código correspondente no banco de dados e retornar dados na tela
    cursor = mydb.cursor()
    codigo = pdv.inserir_codigo.text()
    entrada = codigo.strip().split('*')
    pdv.inserir_codigo.setText(" ")
    cursor.execute(f"SELECT nome_produto, preço from tb_produtos WHERE codigo = '{entrada[0]}';")
    for item in cursor.fetchall():
        descricao = item[0]
        preco = item[1]
        quantidade = 1
        pdv.label_descricao.setText(f'  {descricao}')  # label da descrição
        pdv.label_preco_unit.setText(f'  {preco}')  # label do valor unitário
        pdv.label_quantidade.setText(f' {quantidade}')  # label da quantidade
        pdv.label_total.setText(f'{preco}')  # label total = valor unitário x quantidade

        cursor.execute(f"INSERT INTO tb_registrados(produto, preco, quantidade, total) Values('{descricao}', '{preco}', '{quantidade}', '{preco}');")
        cursor.execute(f"SELECT SUM(total) FROM tb_registrados;")

        for p in cursor.fetchall():
            pdv.label_subtotal.setText(f"{p[0]:>7.2f}")  # label do subtotal

        contador = pdv.listWidget_2.count()  # contando quantos itens aparecem na lista (listWidget)
        contador = contador + 1
        pdv.listWidget_2.insertItem(1000, f" {contador:0>3}...{codigo}... {descricao} \n {quantidade} x {preco:.>10.2f}...............R${preco:>7.2f}")


    if '*' in codigo:
        entrada = codigo.strip().split('*')
        cursor.execute(f"SELECT nome_produto, preço from tb_produtos WHERE codigo = '{entrada[1]}';")
        for item in cursor.fetchall():
            print(entrada)
            descricao = item[0]
            preco = item[1]
            quantidade = int(entrada[0])
            total = preco * quantidade

            pdv.label_descricao.setText(f'  {descricao}')  # label da descrição
            pdv.label_preco_unit.setText(f'  {preco}')  # label do valor unitário
            pdv.label_quantidade.setText(f' {quantidade}')  # label da quantidade
            pdv.label_total.setText(f'{total:>7.2f}') # label total = valor unitário x quantidade

        cursor.execute(f"INSERT INTO tb_registrados(produto, preco, quantidade, total) Values('{descricao}', '{preco}', '{quantidade}', '{total}');")
        cursor.execute(f"SELECT SUM(total) FROM tb_registrados;")

        for p in cursor.fetchall():
            pdv.label_subtotal.setText(f"{p[0]:>7.2f}")  # label do subtotal

        contador = pdv.listWidget_2.count()  # contando quantos itens aparecem na lista (listWidget)
        contador = contador + 1
        pdv.listWidget_2.insertItem(1000, f" {contador:0>3}...{codigo.split('*')[1]}... {descricao} \n {quantidade} x {preco:.>10.2f}...............R${total:>7.2f}")

inserir a descrição da imagem aqui

1 answer

0

Problem solved after I changed the code to the following form/syntax:

def funcao_1():    # função/método responsável por buscar código correspondente no banco de dados e retornar dados na tela
    cursor = mydb.cursor()
    codigo = pdv.inserir_codigo.text()
    pdv.inserir_codigo.clear()
    if '*' in codigo:
        entrada = codigo.strip().split('*')
        cursor.execute(f"SELECT nome_produto, preço from tb_produtos WHERE codigo = '{entrada[1]}';")
        for item in cursor.fetchall():
            print(entrada)
            descricao = item[0]
            preco = item[1]
            quantidade = int(entrada[0])
            total = preco * quantidade

            pdv.label_descricao.setText(f'  {descricao}')  # label da descrição
            pdv.label_preco_unit.setText(f'  {preco}')  # label do valor unitário
            pdv.label_quantidade.setText(f' {quantidade}')  # label da quantidade
            pdv.label_total.setText(f'{total:>7.2f}')  # label total = valor unitário x quantidade

            cursor.execute(
                f"INSERT INTO tb_registrados(produto, preco, quantidade, total) Values('{descricao}', '{preco}', '{quantidade}', '{total}');")

            cursor.execute(f"SELECT SUM(total) FROM tb_registrados;")
            for p in cursor.fetchall():
                print(p)
                pdv.label_subtotal.setText(f"{p[0]:>7.2f}")

            contador = pdv.listWidget_2.count()  # contando quantos itens aparecem na lista (listWidget)
            contador = contador + 1
            pdv.listWidget_2.insertItem(1000, f" {contador:0>3}...{codigo.split('*')[0]}... {descricao} \n {quantidade} x {preco:.>10.2f}...............R${total:>7.2f}")


    else:
        cursor.execute(f"SELECT nome_produto, preço from tb_produtos WHERE codigo = '{codigo}';")
        for item in cursor.fetchall():
            descricao = item[0]
            preco = item[1]
            quantidade = 1


            pdv.label_descricao.setText(f'  {descricao}')  # label da descrição
            pdv.label_preco_unit.setText(f'  {preco}')  # label do valor unitário
            pdv.label_quantidade.setText(f' {quantidade}')  # label da quantidade
            pdv.label_total.setText(f'{preco:>7.2f}')  # label total = valor unitário x quantidade

            cursor.execute(
                f"INSERT INTO tb_registrados(produto, preco, quantidade, total) Values('{descricao}', '{preco}', '{quantidade}', '{preco}');")

            cursor.execute(f"SELECT SUM(total) FROM tb_registrados;")
            for p in cursor.fetchall():
                print(p)
                pdv.label_subtotal.setText(f"{p[0]:>7.2f}")

            contador = pdv.listWidget_2.count()  # contando quantos itens aparecem na lista (listWidget)
            contador = contador + 1
            pdv.listWidget_2.insertItem(1000, f" {contador:0>3}...{codigo}... {descricao} \n 1 x {preco:.>10.2f}...............R${preco:>7.2f}")

Browser other questions tagged

You are not signed in. Login or sign up in order to post.