Componentes: Yago Lourenço da Rosa, Matheus Oliveira Xavier e Olyver Alves
Objetivos: Em nosso trabalho, utilizamos como base o caso real da empresa Ecoland Solution, uma consultoria ambiental localizada em Blumenau. O objetivo foi desenvolver um programa capaz de realizar procedimentos básicos necessários para a empresa. Para isso, planejamos um menu de opções que permite ao gestor selecionar e executar diferentes funções do sistema. Dessa forma, buscamos oferecer uma solução que facilite a organização e otimização de processos internos, contribuindo para a produtividade e a gestão das atividades da empresa.
Metodologia de desenvolvimento: Durante o desenvolvimento do código, procuramos dividir as tarefas de maneira justa, porém, com o passar do tempo, acabamos trabalhando juntos em praticamente todas as etapas. Isso aconteceu porque, frequentemente, precisávamos da colaboração e do suporte mútuo para solucionar problemas e avançar no projeto. Também fizemos pesquisas, e fontes como o GitHub foram essenciais para encontrar informações que nos ajudaram a melhorar o trabalho.
Utilizamos do Colab como plataforma para programarmos por conta da facilidade de compartilhamento do código.
import random
import json
import os
import getpass # Importando o módulo para ocultar a senha
def limpatela():
if os.name == 'nt':
os.system('cls')
else:
os.system('clear')
class Empresa:
def __init__(self, nome, cnpj):
self.__nome = nome
self.__cnpj = cnpj
self.__processos = []
def get_nome(self):
return self.__nome
def set_nome(self, nome):
self.__nome = nome
def get_cnpj(self):
return self.__cnpj
def set_cnpj(self, cnpj):
self.__cnpj = cnpj
def get_processos(self):
return self.__processos
def addprocesso(self, processo):
self.__processos.append(processo)
def to_dict(self):
processos_dict = []
for processo in self.__processos:
processos_dict.append(processo.to_dict())
return {
"nome": self.__nome,
"cnpj": self.__cnpj,
"processos": processos_dict
}
@classmethod
def from_dict(cls, data):
empresa = cls(data["nome"], data["cnpj"])
for p in data["processos"]:
empresa.addprocesso(Processo.from_dict(p))
return empresa
class Processo:
def __init__(self, numero, tipo):
self.num = numero
self.tipo = tipo
self.andamento = "A iniciar"
def modAndamento(self, modi):
self.andamento = modi
def to_dict(self):
return {
"num": self.num,
"tipo": self.tipo,
"andamento": self.andamento
}
@classmethod
def from_dict(cls, data):
processo = cls(data["num"], data["tipo"])
processo.andamento = data["andamento"]
return processo
class Consultoria(Processo):
def __init__(self, numero):
super().__init__(numero, "Consultoria")
class Licenciamento(Processo):
def __init__(self, numero):
super().__init__(numero, "Licenciamento")
class Sistema:
def __init__(self):
self.empresas = []
self.load_data()
self.Tprocessos = 100 # Meta: 100 processos cadastrados
def addEmpresa(self, nome, cnpj):
for empresa in self.empresas:
if empresa.get_cnpj() == cnpj:
print("Empresa já cadastrada!")
return
novaEmp = Empresa(nome, cnpj)
self.empresas.append(novaEmp)
print("Empresa cadastrada com sucesso!")
def addProcesso(self, cnpj, tipo):
empresa = None
for e in self.empresas:
if e.get_cnpj() == cnpj:
empresa = e
break
if not empresa:
print("Empresa não encontrada!")
return
if tipo == "Licenca":
pre = "L"
elif tipo == "Consultoria":
pre = "C"
else:
print("Tipo de processo inválido!")
return
codigo = pre
for _ in range(6):
codigo += str(random.randint(0, 9))
if tipo == "Licenca":
novoprocesso = Licenciamento(codigo)
else:
novoprocesso = Consultoria(codigo)
empresa.addprocesso(novoprocesso)
# Calculando progresso
cadastrados = 0
for emp in self.empresas:
cadastrados += len(emp.get_processos())
progresso = (cadastrados / self.Tprocessos) * 100
print("Processo cadastrado com sucesso! Código:", codigo)
print("Progresso: %.2f%% dos processos cadastrados." % progresso)
return codigo
def listar(self):
for empresa in self.empresas:
print("Empresa: %s, CNPJ: %s" % (empresa.get_nome(), empresa.get_cnpj()))
for processo in empresa.get_processos():
print(" Processo %s: %s - %s %% " % (processo.num, processo.tipo, processo.andamento))
def save_data(self):
data = []
for empresa in self.empresas:
data.append(empresa.to_dict())
with open("dados.json", "w") as file:
json.dump(data, file)
def load_data(self):
if os.path.exists("dados.json"):
with open("dados.json", "r") as file:
data = json.load(file)
self.empresas = []
for empresa in data:
self.empresas.append(Empresa.from_dict(empresa))
def admin(self):
"""Método para autenticar o login de admin"""
login = "admin"
senha = "1234"
tentativas = 3
while tentativas > 0:
usuario = input("Digite o login: ")
senha_input = getpass.getpass("Digite a senha: ") # Usando getpass para ocultar a senha
if usuario == login and senha_input == senha:
print("Login realizado com sucesso!")
return True
else:
tentativas -= 1
print("Credenciais inválidas! Você tem %f tentativas restantes." % tentativas)
print("Número de tentativas excedido. Acesso negado.")
return False
def menu():
sistema = Sistema()
while True:
limpatela()
print(" \nSEJA BEM VINDO AO SISTEMA DE CONSULTORIA DA ECOLAND SOLUTION! ")
print("-------------------------------------------------------")
print("\n MENU PRINCIPAL\n")
print("1 - Cadastrar empresa.")
print("2 - Cadastrar processo.")
print("3 - Listar empresas.")
print("4 - Cadastrar andamento de processo.")
print("5 - Encerrar.")
print("-------------------------------------------------------")
escolha = int(input("\nDigite o número da operação de sua escolha: "))
if escolha == 1:
limpatela()
if sistema.admin():
nome = input("Digite o nome da empresa: ")
cnpj = input("Digite o CNPJ da empresa: ")
sistema.addEmpresa(nome, cnpj)
sistema.save_data()
input("Pressione Enter para voltar ao menu...")
elif escolha == 2:
limpatela()
if sistema.admin():
cnpj = input("Digite o CNPJ da empresa para o cadastro do processo: ")
tipo = input("Digite o tipo do processo (Licenca/Consultoria): ")
sistema.addProcesso(cnpj, tipo)
sistema.save_data()
input("Pressione Enter para voltar ao menu...")
elif escolha == 3:
limpatela()
sistema.listar()
input("\nPressione Enter para continuar...")
elif escolha == 4:
limpatela()
if sistema.admin():
numPro = input("Digite o número do processo: ")
novo = input("Digite o novo andamento: ")
for empresa in sistema.empresas:
for processo in empresa.get_processos():
if processo.num == numPro:
processo.modAndamento(novo)
print("Andamento atualizado com sucesso!")
sistema.save_data()
break
else:
continue
break
input("Pressione Enter para voltar ao menu...")
elif escolha == 5:
sistema.save_data()
print("Encerrando o sistema...")
break
menu()