示例#1
0
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
示例#3
0
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
示例#6
0
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
示例#7
0
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