-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}")