diff --git a/docs/index.md b/docs/index.md index dbb02c71..fa001bc1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,5 @@ +<<<<<<< HEAD # AutomaTEC ![logo-finatec](assets/../planejamento/assets/logo.png) @@ -6,6 +7,15 @@ - **Descrição:** Automação de prestação de contas da FINATEC - **Resultados esperados:** Sistema de preenchimento de planilhas automático para o processo de prestação de contas +======= +# Pipeline Finatec +![logo-finatec](https://www.finatec.org.br/wp-content/themes/finatec/images/empty.png) + +## Sobre +- **Descrição:** Pipeline de prestação de contas da FINATEC + +- **Resultados esperados:** Sistema para visualização do fluxo de prestação de contas +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) - **Habilidades necessárias/preferenciais:** Lógica de programação @@ -21,32 +31,61 @@ Foto Nome/Github +<<<<<<< HEAD +======= + E-mail +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) Papel hemanoel Hemanoel Brito +<<<<<<< HEAD Scrum Master
Garantir os rituais como sprint, review e a daily.
Todo mundo commitando no git, etc.

Líder Backend
Garantir a organização e entrega das atividades da equipe backend. +======= + hemanoel003@gmail.com + Devops/Arquitetura
Estudando e garantindo que a automação do projeto esta adequada. +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) isaac Isaac Lucas +<<<<<<< HEAD Líder Técnico
Estudo prévio para passar o conhecimento (garimpando tutoriais, treinamentos, documentando decisões técnicas)

Líder Frontend
Garantir a organização e entrega das atividades da equipe frontend.
+======= + isaaclucas.bezerra@gmail.com + Líder Técnico
Estudo prévio para passar o conhecimento (garimpando tutoriais, treinamentos, documentando decisões técnicas)
+>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) jennifer Jennifer Costa +<<<<<<< HEAD Community Manager
Garantir a comunicação com externa do projeto - Gitpage, front...

Membro Frontend
Ajudar na organização, produção e entrega das atividades da equipe frontend. +======= + cansancaojennifer@gmail.com + Scrum Master
Garantir os rituais como sprint, review e a daily.
Todo mundo commitando no git, etc. +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) pedro Pedro Barbosa +<<<<<<< HEAD Devops/Arquitetura
Estudando e garantindo que a automação do projeto esta adequada.

Líder Design
Garantir a organização e entrega das atividades da equipe de design (protótipo, guia de estilo...).

Membro Backend
Ajudar na organização, produção e entrega das atividades da equipe frontend. +======= + pedrobarbosaocb@gmail.com + Product Manager
Detalhamento do Roadmap - Garantir a ligação com as issues, organização...
Marcar reuniões com os stakeholders +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) raquel Raquel Eucaria +<<<<<<< HEAD Product Manager
Detalhamento do Roadmap - Garantir a ligação com as issues, organização...
Marcar reuniões com os stakeholders.

Líder Banco de Dados
Estudando e garantindo a estrutura, modelagem, requisição adequada e demais necessidades envolvendo o BD juntamente com o backend.

Membro Design
Ajudar na organização, produção e entrega das atividades da equipe de design (protótipo, guia de estilo...).

Membro Backend
Ajudar na organização, produção e entrega das atividades da equipe Backend. +======= + raqueleucaria@gmail.com + Community Manager
Garantir a comunicação com externa do projeto - Gitpage, front... +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) @@ -60,6 +99,9 @@ | ---- | ------ | ----------| ------- | --------- | | 10/07/2023 | 1.0 | Criação do documento | [Raquel](https://github.com/raqueleucaria) | [Pedro](https://github.com/pedrobarbosaocb) | | 02/08/2023 | 2.0 | Papéis dos membros | [Raquel](https://github.com/raqueleucaria) | [Pedro](https://github.com/pedrobarbosaocb) | +<<<<<<< HEAD | 23/08/2023 | 3.0 | Atualização do nome do projeto e papéis dos membros | [Raquel](https://github.com/raqueleucaria) | [Pedro](https://github.com/pedrobarbosaocb) | +======= +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) diff --git a/docs/planejamento/escopo.md b/docs/planejamento/escopo.md index b285fb65..ad487cac 100644 --- a/docs/planejamento/escopo.md +++ b/docs/planejamento/escopo.md @@ -40,7 +40,11 @@ A definir com a FINATEC dia 09/08 A definir com a FINATEC dia 09/08 +<<<<<<< HEAD # Fluxograma +======= +## Fluxograma +>>>>>>> parent of fba4d38 (refact: limpando ambiente de desenvolvimento) ![fluxograma](assets/fluxograma.png) ## Histórico de Versão diff --git a/docs/planejamento/heatmap.md b/docs/planejamento/heatmap.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/planejamento/metodologia.md b/docs/planejamento/metodologia.md new file mode 100644 index 00000000..e69de29b diff --git a/project/app/__init__.py b/project/app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/project/app/__pycache__/__init__.cpython-310.pyc b/project/app/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..485edf8e Binary files /dev/null and b/project/app/__pycache__/__init__.cpython-310.pyc differ diff --git a/project/app/__pycache__/__init__.cpython-311.pyc b/project/app/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..1b2ff895 Binary files /dev/null and b/project/app/__pycache__/__init__.cpython-311.pyc differ diff --git a/project/app/__pycache__/admin.cpython-310.pyc b/project/app/__pycache__/admin.cpython-310.pyc new file mode 100644 index 00000000..91891dcf Binary files /dev/null and b/project/app/__pycache__/admin.cpython-310.pyc differ diff --git a/project/app/__pycache__/admin.cpython-311.pyc b/project/app/__pycache__/admin.cpython-311.pyc new file mode 100644 index 00000000..0a7faa3a Binary files /dev/null and b/project/app/__pycache__/admin.cpython-311.pyc differ diff --git a/project/app/__pycache__/apps.cpython-310.pyc b/project/app/__pycache__/apps.cpython-310.pyc new file mode 100644 index 00000000..aabcd389 Binary files /dev/null and b/project/app/__pycache__/apps.cpython-310.pyc differ diff --git a/project/app/__pycache__/apps.cpython-311.pyc b/project/app/__pycache__/apps.cpython-311.pyc new file mode 100644 index 00000000..26e6a0f6 Binary files /dev/null and b/project/app/__pycache__/apps.cpython-311.pyc differ diff --git a/project/app/__pycache__/models.cpython-310.pyc b/project/app/__pycache__/models.cpython-310.pyc new file mode 100644 index 00000000..9a780135 Binary files /dev/null and b/project/app/__pycache__/models.cpython-310.pyc differ diff --git a/project/app/__pycache__/models.cpython-311.pyc b/project/app/__pycache__/models.cpython-311.pyc new file mode 100644 index 00000000..6eada88f Binary files /dev/null and b/project/app/__pycache__/models.cpython-311.pyc differ diff --git a/project/app/__pycache__/urls.cpython-310.pyc b/project/app/__pycache__/urls.cpython-310.pyc new file mode 100644 index 00000000..83d53aad Binary files /dev/null and b/project/app/__pycache__/urls.cpython-310.pyc differ diff --git a/project/app/__pycache__/urls.cpython-311.pyc b/project/app/__pycache__/urls.cpython-311.pyc new file mode 100644 index 00000000..4a8e7ef6 Binary files /dev/null and b/project/app/__pycache__/urls.cpython-311.pyc differ diff --git a/project/app/__pycache__/views.cpython-310.pyc b/project/app/__pycache__/views.cpython-310.pyc new file mode 100644 index 00000000..76c36902 Binary files /dev/null and b/project/app/__pycache__/views.cpython-310.pyc differ diff --git a/project/app/__pycache__/views.cpython-311.pyc b/project/app/__pycache__/views.cpython-311.pyc new file mode 100644 index 00000000..42d3305c Binary files /dev/null and b/project/app/__pycache__/views.cpython-311.pyc differ diff --git a/project/app/admin.py b/project/app/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/project/app/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/project/app/apps.py b/project/app/apps.py new file mode 100644 index 00000000..ed327d22 --- /dev/null +++ b/project/app/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'app' diff --git a/project/app/migrations/__init__.py b/project/app/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/project/app/migrations/__pycache__/__init__.cpython-310.pyc b/project/app/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..b421a4db Binary files /dev/null and b/project/app/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/project/app/migrations/__pycache__/__init__.cpython-311.pyc b/project/app/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..1e5eca08 Binary files /dev/null and b/project/app/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/project/app/models.py b/project/app/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/project/app/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/project/app/static/css/style.css b/project/app/static/css/style.css new file mode 100644 index 00000000..38aac279 --- /dev/null +++ b/project/app/static/css/style.css @@ -0,0 +1,154 @@ +* { + font-family: "Montserrat", sans-serif; +} + +body { + background-color: #021842; + flex-direction: column; + display: flex; + margin: 0; + height: 100vh; + width: 100vw; +} +header { + display: flex; + align-items: center; + justify-content: space-around; + background-color: #ffffff; + color: #004661; + height: 100px; +} + +img { + width: 203px; + height: 58px; +} + +.logo { + width: 100px; + height: 100px; +} + +h1 { + font-size: 18px; +} + +/* estilizacao */ + +.content { + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.footer { + padding: 20px 0px; + color: #8a8989; + align-self: center; +} + +.container { + display: flex; + align-items: center; + padding: 24px 72px; + width: 280px; + flex-direction: column; + flex-shrink: 0; + border-radius: 20px; + border: 1px solid #bcbcbc; + color: #ffffff; + gap: 1em; +} + +.form { + display: flex; + flex-direction: column; + gap: 4em; + width: 100%; +} + +.inputGroup { + display: flex; + flex-direction: column; + gap: 1em; +} + +.input { + display: flex; + flex-direction: column; + gap: 0.5em; + width: 100%; +} + +.button-submit { + color: #004661; + background: #ffffff; + border: none; + border-radius: 20px; + padding: 10px 20px; + width: 100%; + font-weight: 600; + transition: 0.3s; + cursor: pointer; +} + +.button-submit:hover { + background: #bcbcbc; +} + +.placeholder { + flex-shrink: 0; + border-radius: 20px; + border: 1px solid #bcbcbc; + background: rgba(0, 0, 0, 0); + padding: 10px 20px; + color: #ffffff; +} + +.name { + font-size: 12px; + font-weight: 600; +} + +.placeholder::placeholder { + color: #ffffff; +} + +.link { + color: #bcbcbc; +} + +.otherLogin { + font-size: 12px; +} + +.placeholder option { + color: black; +} + +.button-logout{ + color: #004661; + background: #ffffff; + border: none; + border-radius: 20px; + padding: 10px 20px; + width: 10%; + font-weight: 600; + transition: 0.3s; + cursor: pointer; + position: absolute; + right: 150px; + display: flex; + align-items: center; + justify-content: center; + margin-top: 30px; +} + +.button-logout:hover { + background: #FF3838; + color: #FFF; +} + diff --git a/project/app/static/imagem/finateclogo.png b/project/app/static/imagem/finateclogo.png new file mode 100644 index 00000000..004347d6 Binary files /dev/null and b/project/app/static/imagem/finateclogo.png differ diff --git a/project/app/static/imagem/logoFinatec.png b/project/app/static/imagem/logoFinatec.png new file mode 100644 index 00000000..9a488715 Binary files /dev/null and b/project/app/static/imagem/logoFinatec.png differ diff --git a/project/app/templates/base.html b/project/app/templates/base.html new file mode 100644 index 00000000..58d9a66e --- /dev/null +++ b/project/app/templates/base.html @@ -0,0 +1,26 @@ +{% load static %} + + + + AutomaTEC + + + + + + + + + + + +
+ finatec +

Sistema de prestação automático

+
+ {% block conteudo %} + + {% endblock %} + + + \ No newline at end of file diff --git a/project/app/templates/cadastro.html b/project/app/templates/cadastro.html new file mode 100644 index 00000000..001adbff --- /dev/null +++ b/project/app/templates/cadastro.html @@ -0,0 +1,89 @@ +{% extends 'base.html' %} +{% block conteudo %} +{% load static %} + + + + + + +
+ +

Cadastrar

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ {% if error_messages %} + + {% endif %} +

Possui uma conta? Logar

+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/project/app/templates/cadastro_legado.html b/project/app/templates/cadastro_legado.html new file mode 100644 index 00000000..3cc2e497 --- /dev/null +++ b/project/app/templates/cadastro_legado.html @@ -0,0 +1,99 @@ +{% load static %} + + + + AutomaTEC + + + + + + + + + + + + +
+ finatec +

Sistema de prestação automático

+
+ +
+ +

Cadastrar

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ +
+ {% if error_messages %} + + {% endif %} +

Possui uma conta? Logar

+
+
+ + + + \ No newline at end of file diff --git a/project/app/templates/login.html b/project/app/templates/login.html new file mode 100644 index 00000000..637d2d29 --- /dev/null +++ b/project/app/templates/login.html @@ -0,0 +1,77 @@ +{% extends 'base.html' %} +{% block conteudo %} +{% load static %} + + + +
+ +

Login

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ +
+ {% if error_message %} +

{{ error_message }}

+ {% endif %} +

Não possui uma conta? criar

+
+
+ +{% endblock %} \ No newline at end of file diff --git a/project/app/templates/login_legado.html b/project/app/templates/login_legado.html new file mode 100644 index 00000000..a157f4a9 --- /dev/null +++ b/project/app/templates/login_legado.html @@ -0,0 +1,95 @@ +{% load static %} + + + + AutomaTEC + + + + + + + + + + + + +
+ finatec +

Sistema de prestação automático

+
+ + +
+ +

Login

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ +
+ {% if error_message %} +

{{ error_message }}

+ {% endif %} +

Não possui uma conta? criar

+
+
+ + + \ No newline at end of file diff --git a/project/app/templates/projeto.html b/project/app/templates/projeto.html new file mode 100644 index 00000000..35d3ea33 --- /dev/null +++ b/project/app/templates/projeto.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} +{% block conteudo %} +{% load static %} + +
+ {% csrf_token %} + +
+ + + +
+ +

Selecione o projeto

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/project/app/templates/projeto_legado.html b/project/app/templates/projeto_legado.html new file mode 100644 index 00000000..26cfb632 --- /dev/null +++ b/project/app/templates/projeto_legado.html @@ -0,0 +1,101 @@ +{% load static %} + + + + AutomaTEC + + + + + + + + + + +
+ finatec +

Sistema de prestação automático

+
+ +
+ {% csrf_token %} + +
+ + + +
+ +

Selecione o projeto

+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + \ No newline at end of file diff --git a/project/app/tests.py b/project/app/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/project/app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/project/app/urls.py b/project/app/urls.py new file mode 100644 index 00000000..da413891 --- /dev/null +++ b/project/app/urls.py @@ -0,0 +1,13 @@ +from django.urls import path +from . import views +from django.contrib.auth import views as auth_views + +urlpatterns = [ + path("cadastro/", views.cadastro, name="cadastro"), + path('', views.login, name='login' ), + path('projeto/', views.projeto, name='projeto'), + path('logout/', views.custom_logout, name='logout'), + # path('login_teste/', views.login_teste, name='login_teste'), + # path('cadastro_teste/', views.cadastro_teste, name='cadastro_teste'), + # path('projeto_teste/', views.projeto_teste, name='projeto_teste'), +] \ No newline at end of file diff --git a/project/app/views.py b/project/app/views.py new file mode 100644 index 00000000..0483ff1e --- /dev/null +++ b/project/app/views.py @@ -0,0 +1,106 @@ +from django.shortcuts import render +from django.contrib.auth.models import User +from django.contrib.auth import authenticate +from django.contrib.auth import login as login_a +from django.contrib.auth.decorators import login_required +from django.http import HttpResponseRedirect +from django.shortcuts import redirect +from django.contrib.auth import logout +from django.contrib.auth.password_validation import validate_password + +def cadastro(request): + if request.method == "GET": + return render(request, 'cadastro.html') + else: + usuario = request.POST.get('usuario') + senha = request.POST.get('senha') + email = request.POST.get('email') + + try: + validate_password(senha, user=User) + except Exception as e: + error_messages = e.messages + return render(request, 'cadastro.html', {'error_messages': error_messages}) + + user = User.objects.filter(username=usuario).first() + + if user: + error_messages = ['Usuário já existe'] + return render(request, 'cadastro.html', {'error_messages': error_messages}) + + user = User.objects.create_user(username=usuario, password=senha, email=email) + user.save() + + return HttpResponseRedirect('/') + +def login(request): + if request.method =="GET": + return render(request, 'login.html') + else: + usuario = request.POST.get('usuario') + senha = request.POST.get('senha') + + user = authenticate(username=usuario, password=senha) + + if user: + login_a(request, user) + return HttpResponseRedirect ('projeto/') + else: + error_message = 'Usuário ou senha inválido.' + return render(request, 'login.html', {'error_message': error_message}) + +@login_required(login_url="/") +def projeto(request): + # if request.user.is_authenticated: + # return HttpResponse('Projetos') + # else: + return render(request, 'projeto.html') + +def custom_logout(request): + logout(request) + return redirect('/') + +# def login_teste(request): +# if request.method =="GET": +# return render(request, 'login_teste.html') +# else: +# usuario = request.POST.get('usuario') +# senha = request.POST.get('senha') + +# user = authenticate(username=usuario, password=senha) + +# if user: +# login_a(request, user) +# return HttpResponseRedirect ('http://127.0.0.1:8000/projeto/') +# else: +# error_message = 'Usuário ou senha inválido.' +# return render(request, 'login_teste.html', {'error_message': error_message}) + +# def cadastro_teste(request): +# if request.method == "GET": +# return render(request, 'cadastro_teste.html') +# else: +# usuario = request.POST.get('usuario') +# senha = request.POST.get('senha') + +# try: +# validate_password(senha, user=User) +# except Exception as e: +# error_messages = e.messages +# return render(request, 'cadastro_teste.html', {'error_messages': error_messages}) + +# user = User.objects.filter(username=usuario).first() + +# if user: +# error_messages = ['Usuário já existe'] +# return render(request, 'cadastro_teste.html', {'error_messages': error_messages}) + +# user = User.objects.create_user(username=usuario, password=senha) +# user.save() + +# @login_required(login_url="/") +# def projeto_teste(request): +# # if request.user.is_authenticated: +# # return HttpResponse('Projetos') +# # else: +# return render(request, 'projeto_teste.html') \ No newline at end of file diff --git a/project/db.sqlite3 b/project/db.sqlite3 new file mode 100644 index 00000000..7494f163 Binary files /dev/null and b/project/db.sqlite3 differ diff --git a/project/manage.py b/project/manage.py new file mode 100755 index 00000000..2c49f3ac --- /dev/null +++ b/project/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/project/project/__init__.py b/project/project/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/project/project/__pycache__/__init__.cpython-310.pyc b/project/project/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..89773d19 Binary files /dev/null and b/project/project/__pycache__/__init__.cpython-310.pyc differ diff --git a/project/project/__pycache__/__init__.cpython-311.pyc b/project/project/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 00000000..73fdbfae Binary files /dev/null and b/project/project/__pycache__/__init__.cpython-311.pyc differ diff --git a/project/project/__pycache__/settings.cpython-310.pyc b/project/project/__pycache__/settings.cpython-310.pyc new file mode 100644 index 00000000..b544b004 Binary files /dev/null and b/project/project/__pycache__/settings.cpython-310.pyc differ diff --git a/project/project/__pycache__/settings.cpython-311.pyc b/project/project/__pycache__/settings.cpython-311.pyc new file mode 100644 index 00000000..8ca67426 Binary files /dev/null and b/project/project/__pycache__/settings.cpython-311.pyc differ diff --git a/project/project/__pycache__/urls.cpython-310.pyc b/project/project/__pycache__/urls.cpython-310.pyc new file mode 100644 index 00000000..9b9f9900 Binary files /dev/null and b/project/project/__pycache__/urls.cpython-310.pyc differ diff --git a/project/project/__pycache__/urls.cpython-311.pyc b/project/project/__pycache__/urls.cpython-311.pyc new file mode 100644 index 00000000..80c9abe2 Binary files /dev/null and b/project/project/__pycache__/urls.cpython-311.pyc differ diff --git a/project/project/__pycache__/wsgi.cpython-310.pyc b/project/project/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 00000000..2b15a062 Binary files /dev/null and b/project/project/__pycache__/wsgi.cpython-310.pyc differ diff --git a/project/project/__pycache__/wsgi.cpython-311.pyc b/project/project/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 00000000..1366548e Binary files /dev/null and b/project/project/__pycache__/wsgi.cpython-311.pyc differ diff --git a/project/project/asgi.py b/project/project/asgi.py new file mode 100644 index 00000000..c9e4e67f --- /dev/null +++ b/project/project/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for project project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') + +application = get_asgi_application() diff --git a/project/project/settings.py b/project/project/settings.py new file mode 100644 index 00000000..e6d07cc2 --- /dev/null +++ b/project/project/settings.py @@ -0,0 +1,147 @@ +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-tn_bk%@%rt@570m)e14wxmm4u2x_z&lvb8uh3--6ay7@h2olcs' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'app', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'project.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'project.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + +# DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql', +# 'NAME': 'myproject', +# 'USER': 'myprojectuser', +# 'PASSWORD': 'password', +# 'HOST': 'localhost', +# 'PORT': '', +# }, +# 'finatec': { +# 'ENGINE': 'sql_server.pyodbc', +# 'HOST': '(LocalDB)\ProjectLocalDB', +# 'PORT': '', +# 'NAME': 'my_db', +# 'USER': 'my_user', +# 'PASSWORD': 'my_password', +# } +# } + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + # 'OPTIONS': { + # 'message': "A senha é similar as informações do usuário.", + # }, + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + # 'OPTIONS': { + # 'min_length': 8, + # 'message': "A senha deve ter pelo menos %(min_length)d caracteres.", + # }, + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + # 'OPTIONS': { + # 'message': "A senha é muito simples.", + # }, + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + # 'OPTIONS': { + # 'message': "A senha não pode conter apenas números.", + # }, + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = 'pt-br' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = 'assets/' +STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles") +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static") +] +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/project/project/urls.py b/project/project/urls.py new file mode 100644 index 00000000..a3a89530 --- /dev/null +++ b/project/project/urls.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from django.urls import include, path + + +urlpatterns = [ + path('', include('app.urls')), + path('admin/', admin.site.urls), +] diff --git a/project/project/wsgi.py b/project/project/wsgi.py new file mode 100644 index 00000000..6f61a78e --- /dev/null +++ b/project/project/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for project project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') + +application = get_wsgi_application() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..80b35f82 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +Django==4.2.4 +openpyxl==3.0.10 +pytest==7.1.2 diff --git a/src/codigo-inicial/FUNDEP.xlsx b/src/codigo-inicial/FUNDEP.xlsx new file mode 100644 index 00000000..40bd2143 Binary files /dev/null and b/src/codigo-inicial/FUNDEP.xlsx differ diff --git a/src/codigo-inicial/antigo_dev.py b/src/codigo-inicial/antigo_dev.py new file mode 100644 index 00000000..df5d6a34 --- /dev/null +++ b/src/codigo-inicial/antigo_dev.py @@ -0,0 +1,211 @@ +import openpyxl as op +import datetime +import os + +def pegar_caminho(nome_arquivo): + + # Obter o caminho absoluto do arquivo Python em execução + caminho_script = os.path.abspath(__file__) + + # Obter o diretório da pasta onde o script está localizado + pasta_script = os.path.dirname(caminho_script) + + # Combinar o caminho da pasta com o nome do arquivo Excel + caminho = os.path.join(pasta_script, nome_arquivo) + + return caminho + +def preenche_planilha(planilha, dicionario): + + # color = op.styles.PatternFill("solid", start_color="5cb800") # <--- teste com cores + + caminho = pegar_caminho(planilha) + + # carrega a planilha de acordo com o caminho + workbook = op.load_workbook(caminho) + + # planilha_preenchida = pegar_caminho('preenchido-' + planilha) + + for nomePlanilha, entradaDados in dicionario.items(): + planilhaAtual = workbook[nomePlanilha] + + for intervaloCelula, entradaCelula in entradaDados: + if ":" in intervaloCelula: + inicioCelula, fimCelula = intervaloCelula.split(":") + planilhaAtual = workbook[nomePlanilha] + planilhaAtual[inicioCelula] = entradaCelula + # planilhaAtual[inicioCelula].fill = color <--- teste com cores + else: + planilhaAtual[intervaloCelula] = entradaCelula + # planilhaAtual[intervaloCelula].fill = color <--- teste com cores + + workbook.save("modified_ModeloFub.xlsx") + + print('arquivo salvo como ' + "modified_ModeloFub.xlsx") + + + +# workbook = op.load_workbook('Modelo_Fub.xlsm') +# number = 3108 + +# value = datetime.datetime.strptime("2014-06-23", "%Y-%m-%d") + +planilha_local_dados = { + "Receita x Despesa": [ + ("A3:J3", "Título do Projeto:String 1 A3:J3"), + ("A4:J4", "Executora: String 2 A4:J4"), + ("A5:J5", "Partícipe: String 3 A5:J5"), + ("A6:J6", "Período de Execução Físico-Financeiro: String 4 A6:J6"), + ("A7:J7", "Período que abrange esta prestação: String 5 A7:J7"), + ("A16:A25",datetime.datetime.strptime("2014-06-23", "%Y-%m-%d")), + ("B16:B25","STRINGB16B25"),# intervalo nao interfere + ("C16:C25","STRINGC16C25"),#intervalo nao interfere + ("E16:E25",200), + #("I16:I21",223), + ("I16", 23), + ("I17", 213), + ("I18", 223), + ("I19", 233), + ("I20", 243), + ("I21", 253), + ("I24", 263), + ("I26", 23787), + ("I27", 10), + ("I32", 100), + ("I33", 1000), + ("I38", 10000), + ("H45", "COORDENADORA_TESTE") + ], + "Exec. Receita e Despesa":[ + ("B16",200), + ("B17",201), + ("B18",202), + ("B19",203), + ("B20",204), + ("B21",205), + ("B22",206), + ("B23",207), + ("C16",205), + ("C17",206), + ("C18",207), + ("C19",208), + ("C20",209), + ("C21",210), + ("C22",211), + ("C23",212), + ("C24",213), + ("C25",214), + ("F16",2051), + ("F17",2061), + ("F18",2071), + ("F19",2081), + ("F20",2091), + ("F21",2101), + ("F22",2111), + ("F23",2121), + ("G16",20351), + ("G17",20361), + ("G18",20371), + ("G19",20381), + ("G20",20391), + ("G21",21301), + ("G22",21311), + ("G23",21321), + ("I26",2011), + ("I28",2001), + ("I29",2001), + ("B26",3011), + ("B28",3001), + ("B29",3001), + ("B31",3011), + ("C26",4011), + ("C29",4011), + ("C31",4011), + ("F26",5011), + ("F28",5001), + ("F29",5001), + ("F31",5011), + ("G26",6011), + ("G28",6001), + ("G29",6001), + ("G31",6011) + ], + "Pessoa Jurídica":[ + ("B11","TESTE_NOME"), + ("C11","TESTE_CPF"), + ("D11","TESTE_ESPECIFICACAO"), + ("E11","TESTE_DESCRICAO"), + ("F11","TESTE_DESCRICAO"), + ("F11","TESTE_RECIBO"), + ("G11",110101), + ("H11","TESTE_CHEQUE"), + ("I11",98765431), + ("J11",3000) + + ], + "Conciliação Bancária":[ + ("F10",5000), + ("F11",5000), + ("A15",120623), + ("A15",120623), + ("B15",9777), + ("C15","DOCUMENTO_TESTE"), + ("D15","DESCRIÇÃO_TESTE"), + ("B38",9777), + ("B39",7878), + ("C38","TESTESTRALEATORIOC38"), + ("C39",'TESTESTRALEATORIOC39'), + ("D38","TESTESTRALEATORIOD38"), + ("D39",'TESTESTRALEATORIOD39') + + ], + "Rendimento de Aplicação":[ + ("B12",2023), + ("C12",2024), + ("D12",2025), + ("E12",2026), + ("F12",2027), + ("G12",2028), + ("H12",2029) + ] + + +} + +modelo_fundep = { + "Relação e despesas" : [ + # campos cadastrais + ("C3", "Instituição Gestora"), + ("F3", "0000*XX"), + ("I3", "n_acordo"), + ("C4", "Titulo_Projeto"), + ("C5", "Nome_Coordenador"), + + # item beneficiarios + ("I5", "Dt_PeriodoPrestacao"), + ("C7", "Nome_Beneficiario"), + ("D7", "CNPJ-CPF-Baneficiario"), + ("E7", "Rubrica-Beneficiario"), + ("F7", "CH-OB-Beneficiario"), + ("G7", "dt-inicial-Beneficiario"), + ("H7", "NF-DOC.FISCAL-Beneficiario"), + ("I7", "dt-final-Beneficiario"), + ("J7", "valor-Beneficiario"), + ] +} + +# for nomePlanilha, entradaDados in planilha_local_dados.items(): +# planilhaAtual = workbook[nomePlanilha] + +# for intervaloCelula, entradaCelula in entradaDados: +# if ":" in intervaloCelula: +# inicioCelula, fimCelula = intervaloCelula.split(":") +# planilhaAtual = workbook[nomePlanilha] +# planilhaAtual[inicioCelula] = entradaCelula +# else: +# planilhaAtual[intervaloCelula] = entradaCelula + + +# workbook.save("modified_ModeloFub.xlsx") + +preenche_planilha('Modelo_Fub.xlsm', planilha_local_dados) diff --git a/src/codigo-inicial/app.py b/src/codigo-inicial/app.py new file mode 100644 index 00000000..ec42521a --- /dev/null +++ b/src/codigo-inicial/app.py @@ -0,0 +1,78 @@ +import os +import openpyxl as op + +# Adicionando o nome da gestora do projeto para FINATEC + +# ------------------------------------------------------------- + +# workbook = op.load_workbook('teste-template/FUNDEP.xlsx') + +# sheet = workbook.active + +# gestora = sheet['C3'] +# gestora.value = "Finatec" + + +# nome_projeto = sheet['C4'] +# nome_projeto.value = "Projeto X" + +# coordenador = sheet['C5'] +# coordenador.value = "Suellen" + +# referencia = sheet['F3'] +# referencia.value = "Suellen" + +# DÚVIDA: +# Nº Acordo de Parceria +# Nº Acordo + +# print(cell.value) + +# workbook.save('FUNDEP-preenchido.xlsx') + +# ------------------------------------------------------------- + +def pegar_caminho(nome_arquivo): + + # Obter o caminho absoluto do arquivo Python em execução + caminho_script = os.path.abspath(__file__) + + # Obter o diretório da pasta onde o script está localizado + pasta_script = os.path.dirname(caminho_script) + + # Combinar o caminho da pasta com o nome do arquivo Excel + caminho = os.path.join(pasta_script, nome_arquivo) + + return caminho + +def preenche_planilha(planilha, celulas): + + caminho = pegar_caminho(planilha) + + # carrega a planilha de acordo com o caminho + workbook = op.load_workbook(caminho) + + sheet = workbook.active + + for celula, text in celulas: + cell = sheet[celula] + cell.value = f'{text}' + + planilha_preenchida = pegar_caminho('preenchido-' + planilha) + + workbook.save(planilha_preenchida) + + print('arquivo salvo em ' + planilha_preenchida) + + + +celulas_preenchidas = [['C3', 'Fundep'], ['C4', 'Projeto X'], ['C5', 'Suellen'], ['F3', 'Suellen'], ['C7', 'Testando Item']] + +preenche_planilha('FUNDEP.xlsx', celulas_preenchidas) + + + + + + + diff --git a/src/codigo-inicial/index.py b/src/codigo-inicial/index.py new file mode 100644 index 00000000..ec944264 --- /dev/null +++ b/src/codigo-inicial/index.py @@ -0,0 +1,70 @@ +import oracledb + +#connection string in the format +#/@:/ + +conStr = '' + +def getNomeColunas(): + + #inicializando o objeto que ira conectar no db + conn = None + #criando o objeto de conexão das + conn = oracledb.connect(conStr) + #criar um objeto cursor necessario para fazer as consultas + cur = conn.cursor() + cur.execute("SELECT * FROM IDEA.STG_PROJETOS_CONVENIAR") + + return cur + +def consultaPorID(IDPROJETO): + try: + connection = oracledb.connect(conStr) + cursor = connection.cursor() + print("Connected to database") + + # idProjeto = 6411 + sqlite_select_query = f"SELECT * FROM IDEA.STG_PROJETOS_CONVENIAR WHERE CODIGO='{IDPROJETO}'" + + cursor.execute(sqlite_select_query) + + records = cursor.fetchall() + + collums = getNomeColunas() + # print(records) + + # print(len(collums.description)) + # print(len(records[0])) + + consulta = {} + + for i in range(len(collums.description)): + # print(f"{collums.description[i][0]}: {records[0][i]}") + consulta[collums.description[i][0]] = records[0][i] + + print(consulta) + + # print(f"\n \n {consulta['OBJETIVOS']} \n") + consulta['OBJETIVOS'] = str(consulta['OBJETIVOS']) + + cursor.close() + + except oracledb.Error as error: + print("Failed to read data from table", error) + finally: + if connection: + connection.close() + print("The connection is closed") + + # return records + return consulta + +# executando +a = input("Digite o id do projeto: ") +print("\n\n") +resultado = consultaPorID(a) + +print(f"\n {resultado} \n") + + + diff --git a/src/codigo-inicial/inicial.py b/src/codigo-inicial/inicial.py new file mode 100644 index 00000000..e9a00401 --- /dev/null +++ b/src/codigo-inicial/inicial.py @@ -0,0 +1,50 @@ +import os +import openpyxl as op + +# Adicionando o nome da gestora do projeto para FINATEC +# Ajustando caminho -------------------------------------- + + # Obter o caminho absoluto do arquivo Python em execução +caminho_script = os.path.abspath(__file__) + + # Obter o diretório da pasta onde o script está localizado +pasta_script = os.path.dirname(caminho_script) + + # Nome do arquivo Excel +nome_arquivo_excel = 'FUNDEP.xlsx' + + # Combinar o caminho da pasta com o nome do arquivo Excel +caminho_arquivo_excel = os.path.join(pasta_script, nome_arquivo_excel) + + # Carregar o arquivo Excel + + + + +# Código inicial------------------------------------------ + +workbook = op.load_workbook(caminho_arquivo_excel) + +sheet = workbook.active + +gestora = sheet['C3'] +gestora.value = "Finatec" + + +nome_projeto = sheet['C4'] +nome_projeto.value = "Projeto X" + +coordenador = sheet['C5'] +coordenador.value = "Suellen" + +referencia = sheet['F3'] +referencia.value = "27193*14" + +# DÚVIDA: +# Nº Acordo de Parceria +# Nº Acordo + +# Salvando arquivo na mesma pasta +nome_novo_excel = 'FUNDEP-inicial.xlsx' +caminho_novo_excel = os.path.join(pasta_script, nome_novo_excel) +workbook.save(caminho_novo_excel) \ No newline at end of file diff --git a/src/scripts/modeloTemplates.py b/src/scripts/modeloTemplates.py new file mode 100644 index 00000000..74dfd7b3 --- /dev/null +++ b/src/scripts/modeloTemplates.py @@ -0,0 +1,318 @@ +import datetime + +class ModeloTemplate(): + def fundep(self): + modelo_fundep = { + "Relação e despesas" : [ + # campos cadastrais + ("C3", f"{records.NOME_INSTITUICAO_EXECUTORA}"), + ("F3", "0000*XX"), + ("I3", "n_acordo"), + ("C4", f"{records.NOME_PROJETO}"), + ("C5", f"{records.NOME_COORDENADOR}"), + + # item beneficiarios + ("I5", "Dt_PeriodoPrestacao"), + ("C7", "Nome_Beneficiario"), + ("D7", "CNPJ-CPF-Baneficiario"), + ("E7", "Rubrica-Beneficiario"), + ("F7", "CH-OB-Beneficiario"), + ("G7", "dt-inicial-Beneficiario"), + ("H7", "NF-DOC.FISCAL-Beneficiario"), + ("I7", "dt-final-Beneficiario"), + ("J7", "valor-Beneficiario"), + ] + } + return modelo_fundep + + def fub(self): + modelo_fub = { + "Receita x Despesa": [ + ("A3:J3", f"Título do Projeto: {records.NOME}"), #AJEITAR + ("A4:J4", f"Executora: {NOME_INSTITUICAO_EXECUTORA}"), + ("A5:J5", f"Partícipe: {NOME_INSTITUICAO}"), # o que eh participe? + ("A6:J6", f"Período de Execução Físico-Financeiro: {DATA_ASSINATURA} a {DATA_VIGENCIA}"), + ("A7:J7", f"Período que abrange esta prestação: {DATA_VIGE}"), #VAZIO + ("A16:A25", datetime.datetime.strptime("2014-06-23", "%Y-%m-%d")), + ("B16:B25", "STRINGB16B25"),# intervalo nao interfere + ("C16:C25", "STRINGC16C25"),#intervalo nao interfere + ("E16:E25", 200), + #("I16:I21",223), + ("I16", 23), + ("I17", 213), + ("I18", 223), + ("I19", 233), + ("I20", 243), + ("I21", 253), + ("I24", 263), + ("I26", 23787), + ("I27", 10), + ("I32", 100), + ("I33", 1000), + ("I38", 10000), + ("H45", f"NOME_COORDENADOR") + ], + "Exec. Receita e Despesa":[ + ("B16",200), + ("B17",201), + ("B18",202), + ("B19",203), + ("B20",204), + ("B21",205), + ("B22",206), + ("B23",207), + ("C16",205), + ("C17",206), + ("C18",207), + ("C19",208), + ("C20",209), + ("C21",210), + ("C22",211), + ("C23",212), + ("C24",213), + ("C25",214), + ("F16",2051), + ("F17",2061), + ("F18",2071), + ("F19",2081), + ("F20",2091), + ("F21",2101), + ("F22",2111), + ("F23",2121), + ("G16",20351), + ("G17",20361), + ("G18",20371), + ("G19",20381), + ("G20",20391), + ("G21",21301), + ("G22",21311), + ("G23",21321), + ("I26",2011), + ("I28",2001), + ("I29",2001), + ("B26",3011), + ("B28",3001), + ("B29",3001), + ("B31",3011), + ("C26",4011), + ("C29",4011), + ("C31",4011), + ("F26",5011), + ("F28",5001), + ("F29",5001), + ("F31",5011), + ("G26",6011), + ("G28",6001), + ("G29",6001), + ("G31",6011) + ], + "Pessoa Jurídica":[ + ("B11","TESTE_NOME"), + ("C11","TESTE_CPF"), + ("D11","TESTE_ESPECIFICACAO"), + ("E11","TESTE_DESCRICAO"), + ("F11","TESTE_DESCRICAO"), + ("F11","TESTE_RECIBO"), + ("G11",110101), + ("H11","TESTE_CHEQUE"), + ("I11",98765431), + ("J11",3000) + + ], + "Conciliação Bancária":[ + ("F10",5000), + ("F11",5000), + ("A15",120623), + ("A15",120623), + ("B15",9777), + ("C15","DOCUMENTO_TESTE"), + ("D15","DESCRIÇÃO_TESTE"), + ("B38",9777), + ("B39",7878), + ("C38","TESTESTRALEATORIOC38"), + ("C39",'TESTESTRALEATORIOC39'), + ("D38","TESTESTRALEATORIOD38"), + ("D39",'TESTESTRALEATORIOD39') + + ], + "Rendimento de Aplicação":[ + ("B12",2023), + ("C12",2024), + ("D12",2025), + ("E12",2026), + ("F12",2027), + ("G12",2028), + ("H12",2029) + ] + } + + return modelo_fub + + def opas(self): + modelo_opas = { + "Relatório Consolidado" : [ + # campos cadastrais + ("C4","numero_loa"), + ("C5","nome_beneficiario"), + ("C6","nome_representante_legal"), + ("C7","titulo_loa"), + ("C8","periodo_despesas"), + ("C9","montante_recebido"), + ("C10","balanco_pagtos_anteriores"), + + # atividade 1 + ("A15","atividade_1"), + + # montante previsto/executado atividade 1 + ("D15","passagens_diarias_previsto"), + ("E15","passagens_diarias_executado"), + + ("D16","equipamentos_previsto"), + ("E16","equipamentos_executado"), + + ("D17", "construcao_previsto"), + ("E17", "construcao_executado"), + + ("D18", "pessoa_fisica_previsto"), + ("E18", "pessoa_fisica_executado"), + + ("D19", "servicoes_materiais_previsto"), + ("E19", "servicoes_materiais_executado"), + + ("D20", "treinamento_capacitacao_previsto"), + ("E20", "treinamento_capacitacao_executado"), + + # atividade 2 + ("A21","atividade_2"), + + # montante previsto/executado atividade 2 + ("D21","passagens_diarias_previsto"), + ("E21","passagens_diarias_executado"), + + ("D22","equipamentos_previsto"), + ("E22","equipamentos_executado"), + + ("D23", "construcao_previsto"), + ("E23", "construcao_executado"), + + ("D24", "pessoa_fisica_previsto"), + ("E24", "pessoa_fisica_executado"), + + ("D25", "servicoes_materiais_previsto"), + ("E25", "servicoes_materiais_executado"), + + ("D26", "treinamento_capacitacao_previsto"), + ("E26", "treinamento_capacitacao_executado"), + + # atividade 3 + ("A27","atividade_3"), + + # montante previsto/executado atividade 3 + ("D27","passagens_diarias_previsto"), + ("E27","passagens_diarias_executado"), + + ("D28","equipamentos_previsto"), + ("E28","equipamentos_executado"), + + ("D29", "construcao_previsto"), + ("E29", "construcao_executado"), + + ("D30", "pessoa_fisica_previsto"), + ("E30", "pessoa_fisica_executado"), + + ("D31", "servicoes_materiais_previsto"), + ("E31", "servicoes_materiais_executado"), + + ("D32", "treinamento_capacitacao_previsto"), + ("E32", "treinamento_capacitacao_executado"), + + # atividade 4 + ("A33","atividade_4"), + + # montante previsto/executado atividade 4 + ("D33","passagens_diarias_previsto"), + ("E33","passagens_diarias_executado"), + + ("D34","equipamentos_previsto"), + ("E34","equipamentos_executado"), + + ("D35", "construcao_previsto"), + ("E35", "construcao_executado"), + + ("D36", "pessoa_fisica_previsto"), + ("E36", "pessoa_fisica_executado"), + + ("D37", "servicoes_materiais_previsto"), + ("E37", "servicoes_materiais_executado"), + + ("D38", "treinamento_capacitacao_previsto"), + ("E38", "treinamento_capacitacao_executado"), + + ], + + "Relatório Detalhado" : [ + # campos cadastrais + ("C4","numero_loa"), + ("C5","nome_beneficiario"), + ("C6","nome_representante_legal"), + ("C7","titulo_loa"), + ("C8","periodo_despesas"), + + # despesas + ("B13:B42", "nome_fornecedor"), + ("C13:C42", "categoria_despesa"), + ("D13:D42", "data_despesa"), + ("E13:E42", "montante_despesa"), + + ] + } + return modelo_opas + + def fap(self): + modelo_fap = { + "" : [], + } + return modelo_fap + + def fup(self): + modelo_fup = { + "" : [], + } + return modelo_fup + + def ceb(self): + modelo_ceb = { + "" : [], + } + return modelo_ceb + + def finep(self): + modelo_finep = { + "" : [], + } + return modelo_finep + + def ibitic(self): + modelo_ibitic = { + "Capa Finatec" : [], + "Receita x Despesa" : [], + "Exec. Receita e Despesa" : [], + "Diárias" : [], + "Passagens e Desp. Locomoção" : [], + "Material de Consumo" : [], + "Serviços de Terceiros PF" : [], + "Obrig Tribut e Contributivas" : [], + "Bolsas de Pesquisa" : [], + "Outros Serviços de Terceiros PJ" : [], + "Equip. Material Permanente" : [], + "Relação de Bens" : [], + "Rendimento de Aplicação" : [], + "Conciliação Bancária" : [], + } + return modelo_ibitic + + def anp(self): + modelo_anp = { + "" : [], + } + return modelo_anp