Ir para o conteúdo

Lab 5: Código final

Após o desenvolvimento e integração com o Orquestrador BotCity Maestro, o código final ficará semelhante a esse:

Projeto: Cadastro de produto no sistema Fakturama

def main():
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    print(f"Task ID is: {execution.task_id}")
    print(f"Task Parameters are: {execution.parameters}")

    # Lista de produtos
    products = [
        {
            "Item Number": 1,
            "Name": "Laptop",
            "Category": "Eletrônico",
            "GTIN": "1234567890123",
            "Supplier Code": "SUP001",
            "Description": "Alto desempenho com as últimas especificações.",
            "Price": 999.99,
            "Cost Price": 799.99,
            "Allowance": 50,
            "Stock": 100
        },
        {
            "Item Number": 2,
            "Name": "Smartphone",
            "Category": "Eletrônico",
            "GTIN": "9876543210987",
            "Supplier Code": "SUP002",
            "Description": "Smartphone com recursos avançados de câmera e display.",
            "Price": 699.99,
            "Cost Price": 549.99,
            "Allowance": 30,
            "Stock": 150
        },
        {
            "Item Number": 3,
            "Name": "Tenis de corrida",
            "Category": "Esporte",
            "GTIN": "7654321098765",
            "Supplier Code": "SUP003",
            "Description": "Confortável e resistente, ideal para corridas.",
            "Price": 89.99,
            "Cost Price": 69.99,
            "Allowance": 20,
            "Stock": 200
        }
    ]

    bot = DesktopBot()

    # Implement here your logic...
    # Caminho onde está o executável Fakturama
    path_fakturama = r"C:\Program Files\Fakturama2\Fakturama.exe"

    if not os.path.exists(path_fakturama):
        raise FileNotFoundError(f"O caminho {path_fakturama} não existe.")

    # Variável para contar os produtos cadastrados com sucesso
    success = 0

    try:
        # Abre o aplicativo do Fakturama
        bot.execute(path_fakturama)

        # Repetição para cada produto
        for product in products:
            # Preenche form com dados dos produtos
            fill_product_form(bot, product, success)

        status = AutomationTaskFinishStatus.SUCCESS
        message = f"Produtos cadastrados com sucesso!"

    except Exception as e:
        print(f"Erro inesperado: {e}")
        status = AutomationTaskFinishStatus.FAILED
        message = f"Erro inesperado: {e}"

    finally:
        # Fecha o aplicativo do Fakturama
        bot.alt_f4()

        # Descomente para marcar esta tarefa como finalizada no BotMaestro
        maestro.finish_task(
            task_id=execution.task_id,
            status=status,
            message=message,
            total_items= len(produtos),
            processed_items= success
        )


def fill_product_form(bot: DesktopBot, product: Dict[str, any], success: int) -> None:
    try:
        # Identifica e clica no botão "New product"
        if not bot.find("new_product", matching=0.97, waiting_time=10000):
            not_found("new_product")
        bot.click()

        # Preenche o campo "Item Number"
        if not bot.find("item_number", matching=0.97, waiting_time=10000):
            not_found("item_number")
        bot.click_relative(137, 8)
        bot.type_keys(str(product["Item Number"]))

        # Avança e preenche o nome do produto
        bot.tab()
        bot.type_keys(product["Name"])

        # Avança e preenche a categoria
        bot.tab()
        bot.type_keys(product["Category"])

        # Avança e preenche o GTIN
        bot.tab()
        bot.type_keys(product["GTIN"])

        # Avança e preenche o Supplier Code
        bot.tab()
        bot.type_keys(product["Supplier Code"])

        # Avança e preenche a descrição
        bot.tab()
        bot.type_keys(product["Description"])

        # Avança, seleciona tudo e preenche o campo Price
        bot.tab()
        bot.control_a()
        bot.type_keys(str(product["Price"]))

        # Avança, seleciona tudo e preenche o custo
        bot.tab()
        bot.control_a()
        bot.type_keys(str(product["Cost Price"]))

        # Avança e preenche a margem
        bot.tab()
        bot.type_keys(str(product["Allowance"]))

        # Avança 2 vezes, seleciona tudo e preenche o estoque
        bot.tab()
        bot.tab()
        bot.control_a()
        bot.type_keys(str(product["Stock"]))

        # Clica no botão "Save"
        if not bot.find("botao_save", matching=0.97, waiting_time=10000):
            not_found("botao_save")
        bot.click()

        # Fecha a aba do produto
        bot.control_w()

        # Incrementa a variável de sucesso
        success += 1
    except Exception as e:
            print(f"Erro ao cadastrar produto: {product["Item Number"]} {product["Name"]}: {e}")


def not_found(label):
    print(f"Element not found: {label}")


if __name__ == '__main__':
    main()