def remover_produto(arquivo_estoque): """ Essa funcao remove produtos do estoque e salva o arquivo atualizado :param arquivo_estoque: string com o nome do arquivo ".txt" com os cadastros do usuario. O arquivo deve conter uma lista de dicionarios com chaves = Produto, Preco, Em estoque :return: estoque atualizado """ # Sequencia para cadastrar produtos while True: # Recupera o estoque mais atualizado print() estoque = recupera_estoque(arquivo_estoque) # Se o estoque esta vazio volta para o menu anterior if len(estoque) == 0: return estoque # Imprime o estoque na tela aux.ver_estoque_ou_carrinho(estoque) num_produto = input( '\nDigite o numero do produto a ser removido: (0 (zero) para cancelar) ' ) produto_valido, num_produto = aux.valida_produto(num_produto, estoque) if produto_valido: # Zero para cancelar a remocao if num_produto == 0: return estoque else: print( f'\nConfirma a remocao de {estoque[num_produto - 1]["Produto"]} do estoque?' ) if aux.confirmacao(): # Removendo o produto. (Como o indice comeca em zero, tem que retirar um de "produto") dic_produto = estoque.pop(num_produto - 1) print( f'\nO produto ({dic_produto["Produto"]}) foi removido com sucesso.' ) # Atualizando o arquivo de estoque aux.atualiza_arquivo(arquivo_estoque, estoque) # Pergunta se o usuario deseja repetir a operacao print('\nDeseja repetir a operacao?') if not aux.confirmacao(): break return estoque
def remover_produto_carrinho(carrinho): """ Funcao para remover produtos do carrinho :param carrinho: lista de carrinho de compras :return: lista de carrinho de compras sem os produtos removidos """ repetir = True while repetir: if not aux.checa_vazio(carrinho): aux.ver_estoque_ou_carrinho(carrinho, 'Carrinho') num_produto_remover = input( 'Digite o numero do produto a ser ' 'removido do carrinho (0 (zero) para cancelar): ') produto_valido, num_produto = aux.valida_produto( num_produto_remover, carrinho) if produto_valido: if num_produto == 0: # Cancelar operacao print('Operacao cancelada') return carrinho else: # Tem que remover 1 de num_produto pois o indice de lista comeca em zero produto_removido = carrinho.pop(num_produto - 1) # Pergunta se o usuario deseja repetir a operacao print(f'O produto {produto_removido["Produto"]} foi removido.') print('\nDeseja repetir a operacao?') repetir = aux.confirmacao() else: print('O carrinho estah vazio') break return carrinho
def remover_adm(arquivo_com_cadastros): """ Essa funcao vai remover um adm cadastrado e atualizar o arquivo de cadastro :return: dicionario de adms atualizado e o usuario removido """ # Buscando a lista de adms atualizada adms_cadastrados = dados_registrados(arquivo_com_cadastros) # Listando os adms cadastrados ver_adms(adms_cadastrados) # Removendo um adm cadastrado usuario = False usuario_removido = False while not usuario: # Pede o usuario usuario = input('Digite o nome do usuario (0 (zero) para cancelar): ') if usuario == '0': print() print('Operacao cancelada') return adms_cadastrados, usuario_removido # Se nao acha o usuario dado, pede para tentar de novo elif usuario not in adms_cadastrados: print('Usuario nao identificado. Por favor, digite de novo.') print() usuario = False else: print( f'\nConfirma a remocao de {usuario} dos administradores cadastrados?' ) # Se o adm confirmar if aux.confirmacao(): # remove o usuario adms_cadastrados.pop(usuario) usuario_removido = usuario # Salva no arquivo (SOBRESCREVE) with open(arquivo_com_cadastros, 'w') as arq: arq.write(str(adms_cadastrados)) # E retorna a lista atualizada print() print('Usuario removido com sucesso') return adms_cadastrados, usuario_removido else: print() print('Operacao cancelada') return adms_cadastrados, usuario_removido
def adicionar_produto_carrinho(estoque, carrinho): """ Adiciona um produto do estoque ao carrinho (se nao estiver adicionado ainda) :param estoque: lista com o estoque mais atualizado :param carrinho: lista com carrinho de compras mais atualizado :return: carrinho """ repetir = True while repetir: aux.ver_estoque_ou_carrinho(estoque) if not aux.checa_vazio(carrinho): print() aux.ver_estoque_ou_carrinho(carrinho, 'Carrinho') produtos_no_carrinho = [produto['Produto'] for produto in carrinho] num_produto_para_add = input( 'Digite o numero do produto a ser ' 'adicionado ao carrinho (0 (zero) para cancelar): ') produto_valido, num_produto = aux.valida_produto( num_produto_para_add, estoque) if produto_valido: if num_produto == 0: # Cancelar operacao print('Operacao cancelada') return carrinho else: # Tem que remover 1 de num_produto pois o indice de lista comeca em zero if estoque[num_produto - 1]["Produto"] in produtos_no_carrinho: print('Este produto ja estah no carrinho.') else: carrinho.append(estoque[num_produto - 1].copy()) carrinho = alterar_quantidade_carrinho( estoque, carrinho, True) carrinho.sort( key=lambda dict_produto: dict_produto['Produto']) # Pergunta se o usuario deseja repetir a operacao print('\nDeseja repetir a operacao?') repetir = aux.confirmacao() return carrinho
def alterar_quantidade_carrinho(estoque, carrinho, adicionando=False): # Se o produto estah sendo adicionado ao carrinho, nao eh necessario pedir o numero do produto # O numero sera -1 (ultimo da lista, que depois sera ordenada) e sera um produto valido indice_produto = -1 produto_valido = True repetir = True while repetir: # Se nao estah adicionando (estah so alterando) um produto, eh preciso pedir o numero do produto e validar if not adicionando: aux.ver_estoque_ou_carrinho(estoque) aux.ver_estoque_ou_carrinho(carrinho, 'Carrinho') num_produto_para_alterar = input( 'Digite o numero do produto a ser ' 'alterado no carrinho (0 (zero) para cancelar): ') produto_valido, indice_produto = aux.valida_produto( num_produto_para_alterar, carrinho) # Se zero, o usuario deseja cancelar if indice_produto == 0: print('Operacao cancelada.') return carrinho indice_produto -= 1 # O indice da lista comeca em zero if produto_valido: while True: quantidade = input( f'Digite a quantidade de {carrinho[indice_produto]["Produto"]} ' f'que deseja manter no carrinho: ') try: # Transforma em float para conseguir validar se a informacao do usuario eh int ou float quantidade = float(quantidade) if quantidade < 0 or quantidade > carrinho[indice_produto][ "Em estoque"]: raise ValueError elif int(quantidade) != float(quantidade): raise ValueError except ValueError: print( f'Digite um numero valido (inteiro entre 0 e {carrinho[indice_produto]["Em estoque"]}).' ) else: quantidade = int(quantidade) carrinho[indice_produto]['Carrinho'] = quantidade carrinho[indice_produto]['Total'] = carrinho[indice_produto]['Preco'] * \ carrinho[indice_produto]['Carrinho'] break # Se o produto esta sendo adicionado ao carrinho, o loop deve ser executado so uma vez if adicionando: break else: # Pergunta se o usuario deseja repetir a operacao print('\nDeseja repetir a operacao?') repetir = aux.confirmacao() # Loop para retirar produtos com quantidade = 0 carrinho = [item for item in carrinho if item['Carrinho'] != 0] return carrinho
def alterar_preco_ou_quantidade(arquivo_estoque, preco_ou_quantidade='quantidade'): """ Essa funcao altera o preco ou a quantidade em estoque de um produto e salva o arquivo atualizado :param arquivo_estoque: string com o nome do arquivo ".txt" com os cadastros do usuario. O arquivo deve conter uma lista de dicionarios com chaves = Produto, Preco, Em estoque :param preco_ou_quantidade: String 'quantidade' ou 'preco' para indical qual variavel sera alterada :return: estoque atualizado """ repetir = True while repetir: # Recupera o estoque mais atualizado print() estoque = recupera_estoque(arquivo_estoque) aux.ver_estoque_ou_carrinho(estoque) # Se o estoque esta vazio volta para o menu anterior if len(estoque) == 0: return estoque if preco_ou_quantidade == 'quantidade': num_produto = input( '\nDigite o numero do produto para alterar a quantidade (0 (zero) para cancelar): ' ) else: # Preco num_produto = input( '\nDigite o numero do produto para alterar o preco (0 (zero) para cancelar): ' ) produto_valido, num_produto = aux.valida_produto(num_produto, estoque) if produto_valido: # Zero para cancelar a remocao if num_produto == 0: return estoque # Pedindo o novo preco ou nova quantidade else: while True: if preco_ou_quantidade == 'quantidade': nova_variavel = input( f'Digite a nova quantidade do produto ' f'({estoque[num_produto - 1]["Produto"]}): ') else: nova_variavel = input( f'Digite o novo preco ' f'do produto ({estoque[num_produto - 1]["Produto"]}): ' ) try: if preco_ou_quantidade == 'quantidade': nova_variavel = float(nova_variavel) # A quantidade deve ser um numero inteiro if not float(nova_variavel) == int(nova_variavel): raise ValueError else: nova_variavel = int(nova_variavel) else: # Preco nova_variavel = float(nova_variavel) # Zero deixado intencionalmente if nova_variavel < 0: raise ValueError except ValueError: if preco_ou_quantidade == 'quantidade': print( f'Digite um numero valido (inteiro nao-negativo).' ) else: print(f'Digite um numero valido (nao-negativo).') else: break # Alterando o preco (tem que remover 1 pois o indice de lista comeca em zero) if preco_ou_quantidade == 'quantidade': estoque[num_produto - 1]['Em estoque'] = nova_variavel else: estoque[num_produto - 1]['Preco'] = nova_variavel # Salvando as alteracoes no arquivo aux.atualiza_arquivo(arquivo_estoque, estoque) # Pergunta se o usuario deseja repetir a operacao print('\nDeseja repetir a operacao?') repetir = aux.confirmacao() return estoque
def cadastrar_produto(arquivo_estoque): """ Essa funcao cadastra novos produtos no estoque e salva o arquivo atualizado :param arquivo_estoque: string com o nome do arquivo ".txt" com os cadastros do usuario. O arquivo deve conter uma lista de dicionarios com chaves = Produto, Preco, Em estoque :return: estoque atualizado """ # Recupera o estoque mais atualizado estoque = recupera_estoque(arquivo_estoque) aux.ver_estoque_ou_carrinho(estoque) # Produtos ja cadastrados para evitar repeticao produtos_cadastrados = [ dic_produto['Produto'].capitalize() for dic_produto in estoque ] # Sequencia para cadastrar produtos repetir = True while repetir: produto = input( '\nDigite o produto a ser adicionado (0 (zero) para cancelar): ') # Se usuario digitou para sair, volta ao menu if produto == "0": return estoque else: produto = produto.capitalize() # Se o produto ja esta cadastrado, nao cadastra de novo if produto in produtos_cadastrados: print('Esse produto ja esta cadastrado.') print( f'Os produtos cadastrados sao: {", ".join(produtos_cadastrados)}' ) else: # Se nao tem esse produto, pede preco e quantidade para adicionar while True: preco = input('Digite o preco, em reais, do produto: ') # Checa se o preco passado eh numero try: preco = float(preco) # O preco nao deve ser negativo (zero foi deixado intencionalmente) if preco < 0: raise ValueError except ValueError: print('O preco informado deve ser um numero positivo.') # Se deu tudo certo, sai do loop do preco else: break # Adicionando a quantidade while True: quantidade = input( f'Digite a quantidade de {produto} em estoque: ') # Checa se a quantidade passada eh numero inteiro try: quantidade = float(quantidade) # A quantidade nao deve ser negativa if quantidade < 0: raise ValueError elif int(quantidade) != float(quantidade): raise ValueError except ValueError: print( 'A quantidade informada deve ser um numero inteiro igual ou maior que zero.' ) # Se deu tudo certo, sai do loop da quantidade else: quantidade = int(quantidade) break # Adicionando ao estoque dic_produto = { 'Produto': produto, 'Preco': preco, 'Em estoque': quantidade } estoque.append(dic_produto) estoque.sort(key=lambda dic_produto: dic_produto['Produto']) # Salvando no arquivo aux.atualiza_arquivo(arquivo_estoque, estoque) # Pergunta se o usuario deseja repetir a operacao print('\nDeseja repetir a operacao?') repetir = aux.confirmacao() # Quando o usuario nao quiser mais adicionar produtos, deve retornar o estoque final return estoque