diff --git a/.travis.yml b/.travis.yml
index 6cd64982..b05aa604 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,10 +8,6 @@ addons:
- 159.203.182.32
env:
global:
- - SITE_URL: https://fga-gpp-mds.github.io/2018.1-Dr-Down/
- - GH_USER_NAME: "Robot Down"
- - GH_USER_EMAIL: equipe.drdown@gmail.com
- - GH_REF: github.com/fga-gpp-mds/2018.1-Dr-Down.git
- secure: "wrb7hIKvhTmybgkW/kAubZmmdnIeKlXG6vczz8ct2ZbvVBvPflOQCDLQuqoRWDHDPs8PdLHwLZ6J3zlFCtkxBX0AKrSC1fCedkZSoTYEzrI3hj3k+IhTthWPao1GYuIyE+/GUIY82+4b8AHuE3weTSjl0JlOVpxIFfOXL9T2oRhZxjxdGJmUkJgWLXZIsDjvX1bmBZ/SbdMgGGer1YSu8UoiAAr94IrEU5dyJ9Yc8sX6HTZnCdkGgMckPMyZkVwbW9sw9DcjSCB0W/h3aYIP86zocBUk1xGD0tzbnd1mEYaScXRU1rxVBYoe0XnTmFAhyAae1NTtw+6Pqrz1RDudbfTxJBLvkkaBse1w5XN3oBUeuOFLGyoagItnxqzbprt3QN6Tno23LLrefhShVAvzemRceB/Ie6NWRmyhDbsEJpLgAhUpdAGY+Phh2iFRjAsfCnsHT1AKJIoNBoJoi8d79dSOHTK1XxgdBJi9zfhIXB3jjFPhKIx0UHd4aNsIzfuTQWWC8cm05UcdWiTAxunWumoh94jQ6flkIk7RdNyeM+dytJW9mqTvw2lxCRAuyYo7eGs5jqTMqokSAuSDzRFPMUDlP+t/lewAsuwLsxXVOjrMn8TnT28yimay4bK4ZocYP6M3EJPg1DsJ/QOyCqFIFqEMs8lAqJDNky/cJ/79ZIY="
- CC_TEST_REPORTER_ID=bf64f4cd10722061b8cad12ca638ebfa7d3c1494df117613b2acd357bfd7aeb0
notifications:
@@ -21,11 +17,20 @@ notifications:
services:
- docker
before_install:
+ - sudo apt-get remove docker docker-engine docker.io
- sudo apt-get update
- - sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-ce
- - docker-compose --version
+ - sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
+ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ - sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
+ - sudo chmod +x /usr/local/bin/docker-compose
+ - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+ - sudo apt-get update
+ - sudo apt-get install docker-ce
+ - docker-compose version
+ - docker version
- sudo apt-get install texlive-latex-base texlive-fonts-recommended -y
- sudo apt-get install texlive-fonts-extra texlive-latex-extra -y
+ - sudo apt-get install python-sphinx -y
- python3 -m pip install pip -U
- python3 -m pip install mkdocs
before_script:
@@ -36,23 +41,25 @@ before_script:
- docker-compose -f local.yml pull
- docker-compose -f local.yml up --build -d
script:
+ - echo $DOCKER_ID_USER_PASSWORD | docker login -u $DOCKER_ID_USER --password-stdin
- docker-compose -f local.yml run --rm django py.test
- docker-compose -f local.yml run --rm django coverage run -m py.test
- docker-compose -f local.yml run --rm django coverage xml
-after_sucess:
- - make -C docs/ latexpdf
- - mv docs/_build/latex/drdown.pdf docs/drdown.pdf
- - if [[ $DEPLOY_DOCS == "true" ]]; then echo "Preparing to build and deploy documentation" ; ./mkdocs-build.sh ; echo "Completed deploying documentation" ; fi
deploy:
# deploy develop to the staging environment
- provider: script
script: bash staging-deploy.sh
+ skip_cleanup: true
on:
branch: develop
# deploy master to production
- provider: script
script: bash production-deploy.sh
+ skip_cleanup: true
on:
branch: master
after_script:
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT -t coverage.py
+ - make -C docs/ latexpdf
+ - mv docs/_build/latex/drdown.pdf docs/drdown.pdf
+ - if [[ $DEPLOY_DOCS == "true" ]]; then echo "Preparing to build and deploy documentation" ; ./mkdocs-build.sh ; echo "Completed deploying documentation" ; fi
diff --git a/config/settings/base.py b/config/settings/base.py
index a233b463..fc8aca3d 100644
--- a/config/settings/base.py
+++ b/config/settings/base.py
@@ -85,6 +85,7 @@
'drdown.core.apps.CoreConfig',
'drdown.careline.apps.CarelineConfig',
'drdown.medicalrecords.apps.MedicalRecordsConfig',
+ 'drdown.appointments.apps.AppointmentsConfig',
]
# https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS
diff --git a/config/urls.py b/config/urls.py
index f8e9f700..d314a9f7 100644
--- a/config/urls.py
+++ b/config/urls.py
@@ -17,10 +17,8 @@
# Your stuff: custom urls includes go here
url(r'^forum/', include('drdown.forum.urls', namespace='forum')),
url(r'^careline/', include('drdown.careline.urls', namespace='careline')),
-
- # Medical Records urls
- url(r'^medicalrecords/', include('drdown.medicalrecords.urls', namespace='medicalrecords'))
-
+ url(r'^medicalrecords/', include('drdown.medicalrecords.urls', namespace='medicalrecords')),
+ url(r'^appointments/', include('drdown.appointments.urls', namespace='appointments')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
diff --git a/docs/eps/EVM_AGILE.md b/docs/eps/EVM_AGILE.md
index 7f63d212..b049c313 100644
--- a/docs/eps/EVM_AGILE.md
+++ b/docs/eps/EVM_AGILE.md
@@ -4,6 +4,7 @@
| Data | Versão | Descrição | Autores |
| --- | --- | --- | --- |
| 28/03/2018 | 0.0.1 | Criação do documento | João Pedro Sconetto |
+| 29/04/2019 | 0.1.0 | Adição da EVM da segunda _release_ | João Pedro Sconetto e Mariana de Souza Mendes |
## EVM Agile
@@ -13,6 +14,8 @@ O __EVM__ (_Earned Value Management_ ou Gerenciamento de Valor agregado) se trat
- e etc.
### Dados Fixos
+
+#### _Release 1_
| Identificador | Descrição | Valor |
| --- | --- | --- |
| BAC | Orçamento disponível para a primeira _release_ | R$ 34.039,38 |
@@ -21,9 +24,18 @@ O __EVM__ (_Earned Value Management_ ou Gerenciamento de Valor agregado) se trat
| SD | Data de início | 05/03/2018 |
| PRP | Pontos planejados para a primeira _release_ | 172 |
+#### _Release 2_
+| Identificador | Descrição | Valor |
+| --- | --- | --- |
+| BAC | Orçamento disponível para a segunda _release_ | R$ 34.039,38 |
+| L | Tamanho da sprint em dias | 7 |
+| PS | Total de sprints planejadas | 8 |
+| SD | Data de início | 14/04/2018 |
+| PRP | Pontos planejados para a segunda _release_ | 200 |
+
### Legenda:
| Identificador | Descrição |
-| --- | --- |
+| --- | --- |
| PRP | O PRP foi modificado para ser a soma de todos os pontos reavaliados das histórias. |
| RPC | De forma análoga, o RPC é avaliado como o somatório dos pontos concluídos até a sprint atual. |
| PPC | Esse valor é o somatório da razão entre a duração da sprint atual sobre o número de sprints da _release_ até a sprint atual. |
@@ -44,6 +56,19 @@ O __EVM__ (_Earned Value Management_ ou Gerenciamento de Valor agregado) se trat
### Planilha EVM
Link para a planilha EVM no [Google Docs](https://docs.google.com/spreadsheets/d/1ZHlVvq_5Sjnyp-sH-7Zfn_KFYzFxoZwtOBWQ92yfd3M/edit?usp=sharing).
+### Imagem da EVM
+#### _Release_ 1
+Abaixo segue a imagem da EVM para a primeira _release_, esta que já foi concluída.
+As informações podem ser melhor vistas no link disponibilizado acima.
+
+![EVM-Release 01](https://i.imgur.com/eBpsQLy.png)
+
+#### _Release_ 2
+Abaixo segue a imagem da EVM da segunda _release_, que ainda está em execução, logo não está completamente preenchida.
+As informações podem ser melhor vistas no link disponibilizado acima.
+
+![EVM-Release 02](https://i.imgur.com/xOnnli4.png)
+
## Referências
HiFlex Consultoria. Gerenciamento de valor agregado (EVM) em projetos agéis. Vitor Massari. Acesso em:
codetiburon. Earned Value Management (EVM) for Agile Software Projects. Olga Yatskevich. Acesso em:
diff --git a/docs/eps/MINDMAP.md b/docs/eps/MINDMAP.md
new file mode 100644
index 00000000..c6fa9c51
--- /dev/null
+++ b/docs/eps/MINDMAP.md
@@ -0,0 +1,14 @@
+# MINDMAP
+
+| Data | Versão | Descrição | Autor |
+|----|------|---------|-----|
+|10/05/2018|0.0.1|Primeira Versão do mindmap|Mariana De Souza Mendes e João Pedro Sconetto|
+
+
+## v.0.1. MINDMAP
+
+![MINDMAP.png](https://uploaddeimagens.com.br/images/001/411/446/original/Captura_de_tela_de_2018-05-10_15-12-22.png?1525975986)
+
+[Clique aqui para ampliar a imagem](https://uploaddeimagens.com.br/images/001/411/446/original/Captura_de_tela_de_2018-05-10_15-12-22.png?1525975986)
+
+[Ou aqui para acessar a imagem no próprio mindmap](https://www.mindmeister.com/1091544081/login?fullscreen=1)
\ No newline at end of file
diff --git a/docs/eps/PIPELINE.md b/docs/eps/PIPELINE.md
new file mode 100644
index 00000000..e3414b01
--- /dev/null
+++ b/docs/eps/PIPELINE.md
@@ -0,0 +1,122 @@
+# Pipeline CI/CD
+
+## Histórico de Revisões
+|Data|Versão|Descrição|Autor|
+| --- | --- | --- | --- |
+|06/05/2018|0.0.1|Versão inicial do documento do pipeline|João Pedro Sconetto e Mariana Mendes|
+
+## Processos de DevOps
+O presente documento visa esclarecer e registrar todos os processos, a cultura implementada e os padrões que foram utilizados no projeto __Dr. Down__ no viés das práticas de DevOps, a fim de unificar o desenvolvimento e as operações inerentes do projeto supracitado.
+
+O documento se divide em duas partes:
+
+* Integração Contínua (CI - _Continuous Integration_)
+
+* Deploy Contínuo (CD - _Continuous Deploy_)
+
+No qual a primeira parte irá mostrar as técnicas e itens aplicados ao projeto no propósito de, como o nome da técnica diz, integrar continuamente o trabalho desenvolvido pela equipe. A segunda parte irá mostrar as técnicas e itens aplicados ao projeto com o objetivo de fazer a implantação contínua do projeto na infraestrutura utilizada pela equipe, de forma automatizada.
+
+### Integração Contínua:
+
+#### Padrão de _Commit_
+
+##### Por questões de padronização documentamos o seguinte estilo de _commit_:
+
+* Os _commits_ devem ser todos em __inglês__;
+
+* Ele deve conter um título curto e objetivo do que foi feito naquele _commit_;
+
+* Após esse título, deve-se descrever, com um pouco mais de detalhes, todas as atividades executadas.
+
+* Caso esteja trabalhando com algum associado assine nos seus _commits_ os seus parceiros
+
+__Exemplo:__
+
+ Creating project community files (Título curto e objetivo)
+
+ Adds project license (Descrição de uma das atividades)
+
+ Adds project code of conduct file
+
+ Adds project contributing file
+
+ Adds project issue template file
+
+ Adds projects pull request file
+
+ Co-authored-by: John Doe (Assinatura de parceria)
+
+#### Política de _Branchs_
+
+Tendo como meta manter a integralidade e confiabilidade do código do projeto, foi proposta a utilização de política de branches.
+Essa Política de Branches deverá guiar os desenvolvedores na forma de organização de suas contribuições ao projeto.
+
+__OBS__: A política de _branchs_ foi idealizada para trabalhar em conjunto com a ferramenta do _git flow_, sua documentação e mais informações podem ser acessadas [aqui](https://github.com/nvie/gitflow).
+
+* __master__ - Branch principal do repositório, onde será permitida somente a integração de software consolidado e testado. Essa branch será exclusiva para a entrega de Releases, ou seja, um conjunto maior de funcionalidades que integram o software. Aqui estará a versão _**stable**_ do software.
+
+* __develop__ - Branch para integração de novas funcionalidades, onde será permitido a entrega das features desenvolvidas e que estão em um estágio avançado de completude. Será a branch base para o início do desenvolvimento das features e da correção de bugs. Aqui também serão _mergeadas_ as releases.
+
+* __feature/__ - Branch utilizada para o desenvolvimento de novas features do _backlog_. Caso a feature tenha sida proposta por uma _issue_ do repositório e aceita no _backlog_ o nome deverá conter o número da _issue_.
+Ex: feature/1- (Considerando que a feature tenha sido solicitada na _issue_ #1)
+
+* __bugfix/__ - Branch utilizada para corrigir bugs de baixa/média urgência e que não estão presentes na branch __master__. Caso o bug tenha sido reportado por uma _issue_ do repositório o nome deverá conter o número da _issue_.
+ Ex: bugfix/1- (Considerando que o bug tenha sido reportado na _issue_ #1)
+
+* __hotfix/__ - Branch utilizada para corrigir bugs de alta urgência e que estão presentes na branch __master__. Caso o bug tenha sido reportado por uma _issue_ do repositório o nome deverá conter o número da _issue_.
+ Ex: bugfix/1- (Considerando que o bug tenha sido reportado na _issue_ #1)
+
+* __release/__ - Branch onde será feito os ajustes finais/build antes da entrega de uma versão do produto de software. Constará no nome da branch a versão da release a ser entregue.
+
+* __support/__ - Branch onde serão executadas tarefas de suporte relacionadas ao software, como elaboração de documentações, correções de natureza de gerência de configuração e etc.
+
+#### Testes e Estilo de Código
+
+Com o objetivo de garantir a qualidade de código, assim como a sua manutenibilidade, a equipe definiu técnicas e padrões a serem seguidos, quanto ao estilo de código foi definido uma folha de estilo que é considerada a padrão por programadores Python, se trata da [PEP8](https://www.python.org/dev/peps/pep-0008/). Com isto é possível verificar, com o auxílio da ferramenta Code Climate o quão manutenível é o código que está sendo feito.
+
+Em complemento ao estilo do código a equipe acordou em manter todo o código testado, pois com a união das duas técnicas é possível assegurar uma maior qualidade de código. Para isso foram usados técnicas padrões de teste do Python/Django, com o auxílio do [Coverage.py](https://coverage.readthedocs.io/en/coverage-4.5.1/) e do [pytest](https://docs.pytest.org/en/latest/), estes que, também, servem de _input_ para o Code Climate analisar a manutenibilidade do software.
+
+Ficou acordado entre os membros da equipe que a cobertura de teste deveria ser igual ou superior a 90% em todos os momentos do projeto.
+
+#### _Pull Requests_
+
+Ao término da execução da codificação é necessário a abertura de um _Pull Request_ no repositório oficial do software para que possa ser apreciado o código solução. Com isso as ferramentas de CI/CD automático irão executar a fase de _build_ e teste para verificar se etapa de teste e estilo de código foram implementadas corretamente. Caso não tenha dívidas nessa fase, cabe a dois membros da equipe de EPS (com foco no P.O. na análise) analisar o produto para verificar se atende os critérios de aceitação e se está de acordo com o que foi definido para ser entregue. Com todas as técnicas e fases entregues em conformidade, cabe aos membros aprovarem o _pull request_ para que o mesmo possa ser _mergeado_ em branchs de entregue de _feature_.
+
+#### _Build_ e Testes
+
+Com o auxílio de ferramentas de automatização essa fase é executada, via [Travis-CI](https://travis-ci.org/), a fim de garantir a fase de Teste e Estilo de Código. Com isso a ferramenta vai verificar o código, executar todos os testes para procurar erros na lógica do software e após tentar construir (_build_) os _containers_ da aplicação. Caso qualquer passo dessa fase tenha algum problema a ferramenta irá informar (via e-mail e via repositório) que algo está errado e é preciso correções antes de avançar no pipeline.
+
+### Deploy Contínuo:
+
+Com a execução de todos os passos da integração contínua a ferramenta de automatização irá executar os passos de deploy, caso não tenho encontrado nenhum erro, que seguem com o deploy/entrega da aplicação no ambiente de homologação e produção. Os passos executados são:
+
+* Publica a última versão integrada na _branch_ no docker hub da aplicação;
+
+* Acessa as máquinas de deploy (Hosts no Digital Ocean);
+
+* Baixa a última versão do docker hub no host;
+
+* Executa atualizações necessárias com as novas funcionalidades (migrações, modificações no banco, traduções e etc);
+
+* Caso tenha algum problema a máquina envia um log para a ferramenta de logs (sentry.io). Caso contrário, o sistema mantém o funcionamento contínuamente.
+
+### Pipeline v0.0.1
+
+![pipeline](https://i.imgur.com/v3m6lQr.png)
+
+#### Legenda
+
+Primeiro Estágio:
+* No primeiro estágio estão as culturas de política de _branches_, padrão de _commits_, estilo de código e testes, onde durante o desenvolvimento a equipe segue as culturas propostas até a publicação do código com as novas adições.
+
+Segundo Estágio:
+* Aqui o código publicado com as adições, chamada de versão, é alcançada pela ferramenta de CI, executado os testes (todos os implementados e os novos adicionados) e é feito a build, caso haja erro nesse estágio retorna-se ao primeiro fazendo as adições necessárias.
+
+Terceiro Estágio:
+* Aqui a nova versão está em um estágio estável do seu ciclo de vida, se todas as adições esperadas para esta versão estiverem prontas a equipe espera uma abertura de um novo _pull request_ solicitando a junção dessa versão com a versão atual do software. Nesta fase é feito a verificação manual da concordância das adições, tanto com os estágios anteriores quanto com as especificações de produto levantado pelo _Product Owner_, caso positivo o pipeline avança, do contrário retorna a estágios anteriores.
+
+Quarto Estágio:
+* Aqui com a nova versão aprovada e consolidada ela é direcionada para o ambiente o qual deve integrar (homologação ou produção) e a ferramenta de CI/CD faz o deploy e entrega automática dessas novas adições.
+
+
+__OBS__: Os principais artefatos que estão inclusos no, e participam do, pipeline são: ```.travis.yml```, ```codeclimate.yml```, ```mkdocs-build.sh```, ```production-deploy.sh``` e ```staging-deploy.sh```, todos estão disponíveis no repositório da aplicação no [GitHub](https://github.com/fga-gpp-mds/2018.1-Dr-Down).
diff --git a/docs/eps/RISKS.md b/docs/eps/RISKS.md
index 87c21f44..984fd87e 100644
--- a/docs/eps/RISKS.md
+++ b/docs/eps/RISKS.md
@@ -50,6 +50,22 @@
|:--------------:|:-------------------|:-------------------|
| Atraso na implementação da arquitetura do projeto | - apresentar as features com antecedência para o arquiteto do software para que ele possa planejar como implementá-las com antecedência; - checar o andamento do planejamento e implementação da arquitetura constantemente com o arquiteto | - analisar o que houve de errado na implementação para remediar; - incluir no planejamento das sprints seguintes histórias para tirar o atraso da implementação da arquitetura
+## Sprint 6
+
+### Score: 51
+
+## Sprint 7
+
+### Score: 45
+
+| **Risco** | **Ações para prevení-lo** | **Ações para mitigá-lo** |
+|:--------------:|:-------------------|:-------------------|
+| Aceitação do software pelo cliente | - levantar o que o cliente o que ele acha do planejamento das features a serem implementadas, antes de elas serem incluídas em uma sprint; -arrumar o que for necessário a partir do feedback do cliente | - levantar com o cliente o que está errado no que foi feito; - elencar possíveis soluções para os problemas apontados e apresentá-las ao cliente, até que ele esteja de acordo; - corrigir os erros nas sprints seguintes, o mais rápido possível
+
+## Sprint 8
+
+### Score: 45
+
## Burndown de Riscos
Essa escala deve ser usada para pontuar o impacto (usando como referência uma estimativa do número de dias necessários para mitigar os efeitos da ocorrência do risco):
diff --git a/docs/mds/ARCHITECTURE_DOCUMENT.md b/docs/mds/ARCHITECTURE_DOCUMENT.md
index 315d1ba3..7d6e5eae 100644
--- a/docs/mds/ARCHITECTURE_DOCUMENT.md
+++ b/docs/mds/ARCHITECTURE_DOCUMENT.md
@@ -23,6 +23,7 @@
| 15/04/2018 | 1.4.0 | Modificando imagem da arquitetura | Victor Arnaud e Geovana Ramos |
| 22/04/2018 | 2.0.0 | Versão 2.0 do Arquitetura e componentes da sprint 07 | Victor Arnaud, Geovana Ramos e Gabriela Medeiros |
| 26/04/2018 | 2.1.0 | Inserindo componentes da sprint 08 | Victor Arnaud |
+| 01/05/2018 | 2.2.0 | Inserindo componentes para as sprints 09 a 12 | Victor Arnaud |
## 1: Introdução
@@ -107,7 +108,7 @@ Critérios de aceitação de um componente:
5. **Extensibilidade**: Um componente pode ser estendido a partir de outro componente para fornecer um novo comportamento.
6. **Encapsulamento**: O componente deve expor uma interface para os invocadores utilizarem suas funcionalidades e não revelar detalhes do seu processo interno, das variáveis internas e de seu estado.
7. **Externo ao projeto**: O componente deve estar disponibilizado no **pypi**.
-8. **Qualidade**: O componente deve estar testado e ter build funcionando, além de ser completo e estar em uma versão estável.
+8. **Qualidade**: O componente deve estar testado e ter build funcionando, além de ser completo e estar em uma versão estável, ou seja, o componente deve funcionar na nova versão 2.0 do Django.
A cada sprint do projeto será definido a utilização ou não de cada componente disponibilizado nas tabelas abaixo. Os microsserviços e APIs consumidas também serão listados nas tabelas abaixo. As tabelas abaixo está mapeada com a EAP do projeto.
@@ -134,12 +135,8 @@ A cada sprint do projeto será definido a utilização ou não de cada component
|Aplicação|Descrição da aplicação|Foi utilizado?|Motivo da utilização ou não|
|---------|----------------------|:------------:|---------------------------|
|[pinax-calendars](https://github.com/pinax/pinax-calendars/)|Aplicação django para publicar eventos como um calendario|A decidir|A aplicação ainda está sendo avaliada pela equipe.|
-|[django-calendarium](https://github.com/bitlabstudio/django-calendarium)|Um aplicativo Django reutilizável para gerenciar e exibir um calendário em seus modelos.|A decidir|A aplicação ainda está sendo avaliada pela equipe.|
|[django-scheduler](https://github.com/llazzaro/django-scheduler)|Uma aplicação de calendario do django|A decidir|A aplicação ainda está sendo avaliada pela equipe.|
-|[django-schedule-thauber](https://github.com/thauber/django-schedule)|Uma aplicação de calendario do django|A decidir|A aplicação ainda está sendo avaliada|
|[pinax-notifications](https://github.com/pinax/pinax-notifications/)|Gerenciamento de notificação de usuário para o framework web Django|A decidir|A aplicação ainda está sendo avaliada|
-|[django-frontend-notification](https://github.com/areski/django-frontend-notification)|Aplicativo Django para exibir no frontend a lista de notificações e executar algumas ações básicas como "visualizar todas as notificações", "excluir notificações", ele também fornece ajudantes para exibir notificações|A decidir|A aplicação ainda está sendo avaliada|
-|[django-webline-notifications](https://github.com/alireza-molaee/django-webline-notifications)|É uma biblioteca python, que permite notificar tudo para o(s) usuário(s)|A decidir|A aplicação ainda está sendo avaliada|
#### Ficha de acompanhamento e Relatórios
@@ -147,14 +144,16 @@ A cada sprint do projeto será definido a utilização ou não de cada component
|---------|----------------------|:------------:|---------------------------|
|[django-pagedown](https://github.com/timmyomahony/django-pagedown)|Um aplicativo django que permite a fácil adição do editor de marcação "PageDown" do Stack Overflow a um campo de formulário django, seja em um aplicativo personalizado ou no Django Admin.|Sim|O componente está sendo usado no prontuário|
|[django-markdown-deux](https://github.com/trentm/django-markdown-deux)|Componente para evitar a inserção de código malicioso no markdown|Sim|O componente está sendo usado no prontuário|
-|[pdf-report](https://github.com/Edinburgh-Genome-Foundry/pdf_reports)|Biblioteca Python e tema CSS para gerar relatórios em PDF a partir de HTML/Pug|A decidir|A aplicação está sendo avaliada pela equipe|
-|[django-easy-pdf](https://github.com/nigma/django-easy-pdf)|Visualização de PDF de uma maneira fácil|A decidir|A aplicação está sendo avaliada pela equipe|
+|[pdf-report](https://github.com/Edinburgh-Genome-Foundry/pdf_reports)|Biblioteca Python e tema CSS para gerar relatórios em PDF a partir de HTML/Pug|Não|A documentação do Django aconselha utilizar o ReportLab, logo iremos utilizat esse component.|
+|[reportlab](https://pypi.org/project/reportlab/)|O Toolkit do ReportLab. Uma biblioteca Python de código aberto para gerar PDFs e gráficos.|Sim|Recomendação da documentação do [django](https://docs.djangoproject.com/pt-br/2.0/howto/outputting-pdf/), será utilizado para gerar os PDFs e gráficos do projeto|
+|[django-easy-pdf](https://github.com/nigma/django-easy-pdf)|Visualização de PDF de uma maneira fácil|Não|A documentação do Django aconselha utilizar o ReportLab, logo iremos utilizar esse component.|
#### Localização
|Aplicação|Descrição da aplicação|Foi utilizado?|Motivo da utilização ou não|
|---------|----------------------|:------------:|---------------------------|
-|[GoogleMapsAPI](https://developers.google.com/places/web-service/?hl=pt-br)|API do Google Maps com informações sobre milhões de locais|A decidir|A API ainda está sendo avaliada pela equipe.|
+|[GoogleMapsAPI](https://developers.google.com/places/web-service/?hl=pt-br)|API do Google Maps com informações sobre milhões de locais| Sim |Facil aplicação e atende as necessidades.|
+|[google-maps-services-python](https://github.com/googlemaps/google-maps-services-python)|Componente python para utilização da API do google maps| Não | Não será ultilizado porque a API do google atendeu nossas necessidades e foi recomendada pela Gerência de projetos.|
#### Outros
@@ -162,17 +161,9 @@ A cada sprint do projeto será definido a utilização ou não de cada component
|---------|----------------------|:------------:|---------------------------|
|[django-role-permissions](https://github.com/vintasoftware/django-role-permissions)|É um aplicativo de Django para permissões baseadas em função. Ele é construído sobre as funcionalidades Group e Permission do usuário do Django contrib.auth e não adiciona nenhum outro modelo ao seu projeto, ou seja, é totalmente independente.|Sim|Ele será utilizado no projeto para a criação de permissões de cada tipo de usuário do sistema e as permissões de acesso a determinadas páginas|
|[django-crispy-forms](http://django-crispy-forms.readthedocs.io/en/latest/)|É um aplicativo do Django que permite a construção, customização e reutilização de formulários facilmente, podendo usar qualquer framework CSS, sem escrever código de template e sem ter que cuidar de outros tipos de detalhes.|Sim|Foi utilizado para facilitar a criação de formulários|
-|[django-simple-search](https://github.com/gregplaysguitar/django-simple-search)|A busca simples do Django fornece a mesma funcionalidade e conveniência que o search fields faz no admin do django.|A decidir|A aplicação ainda está sendo avaliada|
+|[django-simple-search](https://github.com/gregplaysguitar/django-simple-search)|A busca simples do Django fornece a mesma funcionalidade e conveniência que o search fields faz no admin do django.|Não|Foi decidido a utilização do django-search-view pelo fato de utilizar CBV.|
|[django-search-view](https://github.com/inmagik/django-search-views)|Componente para pesquisa e filtros usando Class Based Views|Sim|O componentes está sendo usando em algumas partes do software que precisa pesquisar algo.|
-
-#### Comunicação entre usuários (Removido do escopo)
-
-|Aplicação|Descrição da aplicação|Foi utilizado?|Motivo da utilização ou não|
-|---------|----------------------|:------------:|---------------------------|
-|[Rocket.Chat](https://github.com/jadolg/rocketchat_API)|É um microserviço de chat open source baseado no Slack e construído em Meteor|Não|O chat foi removido do escopo do projeto.|
-|[Receita-Mais](https://github.com/fga-gpp-mds/2017.2-Receita-Mais)|Software responsável por auxiliar na prescrição de medicamentos|Não|Não passou em quase todos os critérios definidos acima, a aplicação chat do projeto está bastante acoplada, ou seja, teria dificuldade de desacoplar e empacotar o mesmo, gastando tempo e esforço|
-|[django-private-chat](https://github.com/Bearle/django-private-chat)|Chat assíncrono baseado em WebSocket|Não|O chat foi removido do escopo do projeto.|
-|[django-tawkto](https://github.com/CleitonDeLima/django-tawkto)|Projeto simples integrado com o chat [tawk.to](https://www.tawk.to/)|Não|O chat foi removido do escopo do projeto.|
+|[django-anymail](https://github.com/anymail/django-anymail)|Backends e webhooks de e-mail do Django para Amazon SES, Mailgun, Mailjet, Carimbo Postal, SendGrid, SendinBlue, SparkPost e mais|A decidir|A equipe está avaliando a possibilidade de utiliza-lo.|
### 2.3 Banco de dados PostgreSQL
diff --git a/docs/sprints/07/planning.md b/docs/sprints/07/planning.md
new file mode 100644
index 00000000..32121fe2
--- /dev/null
+++ b/docs/sprints/07/planning.md
@@ -0,0 +1,67 @@
+# Planejamento da Sprint 7
+
+## 1. Resumo da Sprint
+
+__Número da sprint:__ 7
+
+__Data de início:__ 21/04/2018
+
+__Data de Término:__ 27/04/2018
+
+__Duração__: 6 dias
+
+__Pontos Planejados:__ 23 pontos
+
+__Membros presentes:__ Todos
+
+## 2. Papéis
+
+- Scrum Master:
+ - Diego França
+
+- Product Owner:
+ - Mariana Mendes
+
+- DevOps:
+ - João Sconetto
+
+- Arquiteto:
+ - Victor Arnaud
+
+- Time de Desenvolvimento:
+ - Daniel Maike
+ - Elias Bernardo
+ - Gabriela Medeiros
+ - Geovana Ramos
+ - Guilherme Guy
+ - Joberth Rodrigues
+
+## 3. Pareamento
+
+- Daniel e Guilherme
+
+- Elias e Joberth
+
+- Gabriela e Geovana
+
+## 4. Planejamento da Sprint
+
+Nessa sprint, serão iniciadas as histórias relacionadas à ficha de acompanhamento dos pacientes. As primeiras funcionalidades a serem feitas serão o prontuário eletrônico dos pacientes (que levará em conta as especificidades do paciente com Síndrome de Down) e também o checklist de cuidados e recomendações a serem feitos com pessoas com a Síndrome.
+
+Nela também será revisado tanto a integração contínua do projeto quanto a sua arquitetura.
+
+## 5. Mudanças
+
+Mudanças foram feitas nesta sprint relacionadas à arquitetura. A partir da Sprint 7, o arquiteto selecionará diversos componentes que poderão ser utilizados nas histórias, e caberá às duplas responsáveis por elas definir quais adotarão.
+
+## 6. Backlog da Sprint
+
+- [TS69 - Refatorar arquitetura do projeto e seu respectivo documento](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/160)
+- [US70 - Prontuário](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/161)
+- [US71 - Checklist](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/162)
+- [TS72 - Refatorar equipe de saúde](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/163)
+- [TS73 - Revisar a Integração Contínua](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/164)
+- [TS74 - Documentar a Sprint 6](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/166)
+
+## 7. Risk Burndown
+![Burndown de risco da Sprint 7](https://uploaddeimagens.com.br/images/001/398/142/full/riscos_S7.png?1525202634)
diff --git a/docs/sprints/07/results.md b/docs/sprints/07/results.md
new file mode 100644
index 00000000..7023e697
--- /dev/null
+++ b/docs/sprints/07/results.md
@@ -0,0 +1,48 @@
+# Fechamento da sprint
+
+## 1. Resumo da Sprint
+
+__Pontos Planejados__: 23 pontos
+
+__Pontos concluídos__: 23 pontos
+
+__Dívidas técnicas__: 0 pontos
+
+__Histórias entregues:__
+
+- [TS69 - Refatorar arquitetura do projeto e seu respectivo documento](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/160)
+- [US70 - Prontuário](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/161)
+- [US71 - Checklist](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/162)
+- [TS72 - Refatorar equipe de saúde](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/163)
+- [TS73 - Revisar a Integração Contínua](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/164)
+- [TS74 - Documentar a Sprint 6](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/166)
+
+## 2. Retrospectiva da Sprint
+
+| Pontos Positivos | Pontos Negativos | Sugestão de Melhoria |
+| ----- | ----- | ---- |
+| Os pontos positivos das sprints passada se mantiveram | Pareamento não deu tão certo pra uma dupla | Tomar mais cuidado na hora de pontuar as histórias |
+| Foi criado um canal de bug no Slack e ele está ajudando todos | Issues depentes do término de outras | Maior preocupação em manter a uniformidade e padronização do frontend |
+| - | Um dos clientes estava viajando, dificultando a comunicação com ele | - |
+
+## 3. Quadro de Conhecimento
+
+![Quadro de conhecimento da Sprint 7](https://uploaddeimagens.com.br/images/001/398/170/full/quadro_conhecimento_S7.png?1525204302)
+
+## 5. Gráfico do Burndown
+
+![Gráfico do burndown da Sprint 7](https://uploaddeimagens.com.br/images/001/398/174/full/burndown_S7.png?1525204456)
+
+## 6. Velocity
+
+![Gráfico do velocity da Sprint 7](https://uploaddeimagens.com.br/images/001/398/181/full/velocity_S7.png?1525204706)
+
+## 7. Gráfico de Commits
+
+![Gráfico de commits da Sprint 7](https://uploaddeimagens.com.br/images/001/398/189/full/commits_S7.png?1525204960)
+
+## 9. Análise do Scrum Master
+
+Nessa sprint, 2 das histórias tiveram pontuações abaixo do esforço necessário, de acordo com as duplas responsáveis por elas. Para evitar que isso se repita, já no planejamento da Sprint 8 a equipe terá um maior cuidado para pontuar as histórias.
+
+De resto, a sprint ocorreu com tranquilidade e sem dívidas, já que o problema apresentado com relação ao pareamento de uma das duplas foi devido à greve da universidade, que atrapalhou a programação deles trabalharem juntos mas não a entrega da história.
diff --git a/docs/sprints/08/planning.md b/docs/sprints/08/planning.md
new file mode 100644
index 00000000..4c7928ed
--- /dev/null
+++ b/docs/sprints/08/planning.md
@@ -0,0 +1,68 @@
+# Planejamento da Sprint 8
+
+## 1. Resumo da Sprint
+
+__Número da sprint:__ 8
+
+__Data de início:__ 28/04/2018
+
+__Data de Término:__ 04/05/2018
+
+__Duração__: 6 dias
+
+__Pontos Planejados:__ 22 pontos
+
+__Membros ausentes:__
+- Daniel Mike
+
+## 2. Papéis
+
+- Scrum Master:
+ - Diego França
+
+- Product Owner:
+ - Mariana Mendes
+
+- DevOps:
+ - João Sconetto
+
+- Arquiteto:
+ - Victor Arnaud
+
+- Time de Desenvolvimento:
+ - Daniel Maike
+ - Elias Bernardo
+ - Gabriela Medeiros
+ - Geovana Ramos
+ - Guilherme Guy
+ - Joberth Rodrigues
+
+## 3. Pareamento
+
+- Daniel e Elias
+
+- Gabriela e Geovana
+
+- Guilherme e Joberth
+
+## 4. Planejamento da Sprint
+
+A Sprint 8 foi planejada para dar continuidade às histórias relacionadas à ficha de acompanhamento do paciente do Cris Down, que é uma importante feature do projeto. Além disso, há histórias dedicadas a atualizar planejamentos e documentos para esta segunda etapa do projeto e para a correção de bugs do aplicativo.
+
+## 5. Mudanças
+
+Para esta sprint, devido ao problema que houve na passada relacionado à pontuação de histórias não correspondendo ao esforço para entregá-las, na reunião de planejamento tivemos um maior cuidado com isso. Desta forma, cada história foi discutida por mais tempo, e as possíveis questões técnicas relacionadas à elas foram mais esmiuçadas antes que começássemos pontuação.
+
+## 6. Backlog da Sprint
+
+- [TS75 - Atualizar a documentação dos riscos para a Sprint 7](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/167)
+- [TS77 - Elaborar a segunda versão da EVM](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/185)
+- [US78 - Consulta](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/186)
+- [TS79 - Correção de bugs](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/187)
+- [US80 - Ficha de acompanhamento](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/188)
+- [US81 - Calendário de vacina](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/189)
+- [TS82 - Documentar a Sprint 7](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/191)
+
+## 7. Risk Burndown
+
+![Risk Burndown da Sprint 8](https://uploaddeimagens.com.br/images/001/409/241/full/riscos_S8.png?1525865981)
diff --git a/docs/sprints/08/results.md b/docs/sprints/08/results.md
new file mode 100644
index 00000000..2976f034
--- /dev/null
+++ b/docs/sprints/08/results.md
@@ -0,0 +1,62 @@
+# Fechamento da Sprint 8
+
+## 1. Resumo da Sprint
+
+__Pontos Planejados__: 22 pontos
+
+__Pontos concluídos__: 21 pontos
+
+__Dívidas técnicas__: 1 pontos
+
+__Histórias entregues:__
+
+- [TS77 - Elaborar a segunda versão da EVM](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/185)
+- [US78 - Consulta](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/186)
+- [TS79 - Correção de bugs](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/187)
+- [US80 - Ficha de acompanhamento](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/188)
+- [US81 - Calendário de vacina](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/189)
+- [TS82 - Documentar a Sprint 7](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/191)
+
+__Histórias que viraram débitos:__
+
+- [TS75 - Atualizar a documentação dos riscos para a Sprint 7](https://github.com/fga-gpp-mds/2018.1-Dr-Down/issues/167)
+
+## 2. Retrospectiva da Sprint
+
+| Pontos Positivos | Pontos Negativos | Sugestão de Melhoria |
+| ----- | ----- | ---- |
+| Tudo foi entregue | Trabalhos de outros matérias | Nas dailys não presenciais, tentar responder o mais cedo possível |
+| A troca de conhecimento está funcionando. | A história de marcar consulta foi cansativa, mas a dupla conseguiu entregar | Tentar criar um horário de trabalho |
+| As pontuações de histórias foram coerentes | Membro sem notebook temporariamente | - |
+| O time de MDS está cada vez mais nivelado | - | - |
+
+
+## 3. Quadro de Conhecimento
+
+![Quadro de conhecimento da Sprint 8](https://uploaddeimagens.com.br/images/001/409/436/full/quadro_conhecimento_S8.png?1525874883)
+
+## 5. Gráfico do Burndown
+
+![Gráfico do burndown da Sprint 8](https://uploaddeimagens.com.br/images/001/403/383/full/burndown_S8.png?1525482311)
+
+## 6. Velocity
+
+![Gráfico do velocity da Sprint 8](https://uploaddeimagens.com.br/images/001/403/385/full/velocity_S8.png?1525482341)
+
+## 7. Gráfico de Commits
+
+![Gráfico de commits da Sprint 8](https://uploaddeimagens.com.br/images/001/403/387/full/commits_S8.png?1525482367)
+
+## 8. EVM
+
+![Gráfico da EVM da Sprint 8](https://uploaddeimagens.com.br/images/001/403/395/full/evm_S8.png?1525482754)
+
+## 9. Análise do Scrum Master
+
+Nesta sprint, continuamos mantendo nossas entregas, com apenas uma dívida técnica. Apesar da semana complicada por causa de outras matérias, os membros de MDS mantiveram as entregas deles dentro do prazo.
+
+Como os membros de MDS adiantaram que a semana da Sprint 10 será complicada (mais do que foi a dessa sprint), teremos que nos planejar para que essa sprint tenha histórias menos complexas. Por isso, provavelmente para a próxima semana adiantaremos histórias que consideramos mais complexas e que possam já serem feitas.
+
+Quanto ao problema de um dos membros do grupo não ter um laptop temporariamente, isso já está sendo resolvido, já que ele comprou outro que deverá chegar na próxima semana.
+
+Por fim, a questão da história cansativa foi algo que nós todos não tínhamos previsto de antemão. Mas em outras sprints aproveitaremos a experiência adquirida nessa para evitar esse tipo de questão tomando providências como, por exemplo, quebrando a história em mais de uma.
diff --git a/drdown/appointments/__init__.py b/drdown/appointments/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/drdown/appointments/admin.py b/drdown/appointments/admin.py
new file mode 100644
index 00000000..d73342a1
--- /dev/null
+++ b/drdown/appointments/admin.py
@@ -0,0 +1,7 @@
+from django.contrib import admin
+from .models.model_appointment import Appointment
+from .models.model_request import AppointmentRequest
+
+# Register your models here.
+admin.site.register(Appointment)
+admin.site.register(AppointmentRequest)
diff --git a/drdown/appointments/apps.py b/drdown/appointments/apps.py
new file mode 100644
index 00000000..bfcf1faf
--- /dev/null
+++ b/drdown/appointments/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class AppointmentsConfig(AppConfig):
+ name = 'drdown.appointments'
+ verbose_name = 'Appointments'
diff --git a/drdown/appointments/forms/appointments_form.py b/drdown/appointments/forms/appointments_form.py
new file mode 100644
index 00000000..d7607cc5
--- /dev/null
+++ b/drdown/appointments/forms/appointments_form.py
@@ -0,0 +1,35 @@
+from drdown.appointments.models.model_appointment import Appointment
+from django import forms
+from drdown.users.models.model_health_team import HealthTeam
+from drdown.users.models.model_patient import Patient
+from django.utils.translation import ugettext_lazy as _
+
+
+class AppointmentSearchForm(forms.Form):
+ search_speciality = forms.CharField(
+ required=False,
+ label=_('Speciality'),
+ widget=forms.TextInput(
+ attrs={'placeholder': _('Speciality')}
+ )
+ )
+
+ search_date = forms.DateField(
+ required=False,
+ label=_('Date'),
+ widget=forms.TextInput(
+ attrs={'placeholder': _('(Year)-(Month)-(Day)')}
+ )
+ )
+
+ search_doctor = forms.ModelChoiceField(
+ queryset=HealthTeam.objects.all(),
+ required=False,
+ label=_('Doctor')
+ )
+
+ search_patient = forms.ModelChoiceField(
+ queryset=Patient.objects.all(),
+ required=False,
+ label=_('Patient')
+ )
diff --git a/drdown/appointments/forms/requests_form.py b/drdown/appointments/forms/requests_form.py
new file mode 100644
index 00000000..b018c41e
--- /dev/null
+++ b/drdown/appointments/forms/requests_form.py
@@ -0,0 +1,34 @@
+from django import forms
+from drdown.users.models.model_health_team import HealthTeam
+from drdown.users.models.model_patient import Patient
+from django.utils.translation import ugettext_lazy as _
+
+
+class RequestSearchForm(forms.Form):
+ search_speciality = forms.CharField(
+ required=False,
+ label=_('Speciality'),
+ widget=forms.TextInput(
+ attrs={'placeholder': _('Speciality')}
+ )
+ )
+
+ search_status = forms.CharField(
+ required=False,
+ label=_('Status'),
+ widget=forms.TextInput(
+ attrs={'placeholder': _('Status')}
+ )
+ )
+
+ search_doctor = forms.ModelChoiceField(
+ queryset=HealthTeam.objects.all(),
+ required=False,
+ label=_('Doctor')
+ )
+
+ search_patient = forms.ModelChoiceField(
+ queryset=Patient.objects.all(),
+ required=False,
+ label=_('Patient')
+ )
diff --git a/drdown/appointments/locale/pt_BR/LC_MESSAGES/django.po b/drdown/appointments/locale/pt_BR/LC_MESSAGES/django.po
new file mode 100644
index 00000000..99fc1801
--- /dev/null
+++ b/drdown/appointments/locale/pt_BR/LC_MESSAGES/django.po
@@ -0,0 +1,478 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-05-10 03:16+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: drdown/appointments/forms/appointments_form.py:11
+#: drdown/appointments/forms/appointments_form.py:13
+#: drdown/appointments/forms/requests_form.py:10
+#: drdown/appointments/forms/requests_form.py:12
+#: drdown/appointments/models/model_appointment.py:40
+#: drdown/appointments/models/model_request.py:82
+#: drdown/appointments/templates/appointments/appointment_form.html:24
+#: drdown/appointments/templates/appointments/appointment_request_form.html:14
+msgid "Speciality"
+msgstr "Especialidade"
+
+#: drdown/appointments/forms/appointments_form.py:19
+#: drdown/appointments/models/model_appointment.py:10
+#: drdown/appointments/templates/appointments/appointment_form.html:86
+#: drdown/appointments/templates/appointments/appointment_list.html:48
+#: drdown/appointments/templates/appointments/appointment_request_form.html:77
+msgid "Date"
+msgstr "Data"
+
+#: drdown/appointments/forms/appointments_form.py:21
+msgid "(Year)-(Month)-(Day)"
+msgstr "(Ano)-(Mês)-(Dia)"
+
+#: drdown/appointments/forms/appointments_form.py:28
+#: drdown/appointments/forms/requests_form.py:27
+#: drdown/appointments/models/model_appointment.py:49
+#: drdown/appointments/models/model_request.py:91
+#: drdown/appointments/templates/appointments/appointment_form.html:49
+#: drdown/appointments/templates/appointments/appointment_list.html:46
+#: drdown/appointments/templates/appointments/appointment_request_form.html:39
+#: drdown/appointments/templates/appointments/request_list.html:32
+msgid "Doctor"
+msgstr "Médico"
+
+#: drdown/appointments/forms/appointments_form.py:34
+#: drdown/appointments/forms/requests_form.py:33
+#: drdown/appointments/models/model_appointment.py:56
+#: drdown/appointments/models/model_request.py:99
+#: drdown/appointments/templates/appointments/appointment_form.html:68
+#: drdown/appointments/templates/appointments/appointment_list.html:45
+#: drdown/appointments/templates/appointments/appointment_request_form.html:58
+#: drdown/appointments/templates/appointments/request_list.html:31
+msgid "Patient"
+msgstr "Paciente"
+
+#: drdown/appointments/forms/requests_form.py:18
+#: drdown/appointments/forms/requests_form.py:20
+#: drdown/appointments/models/model_appointment.py:69
+#: drdown/appointments/models/model_request.py:113
+#: drdown/appointments/templates/appointments/appointment_list.html:51
+#: drdown/appointments/templates/appointments/appointment_list.html:53
+#: drdown/appointments/templates/appointments/appointment_list.html:55
+#: drdown/appointments/templates/appointments/request_list.html:39
+msgid "Status"
+msgstr "Status"
+
+#: drdown/appointments/models/model_appointment.py:11
+msgid "Date of appointment"
+msgstr "Dia da consulta"
+
+#: drdown/appointments/models/model_appointment.py:16
+#: drdown/appointments/templates/appointments/appointment_form.html:98
+#: drdown/appointments/templates/appointments/appointment_list.html:49
+#: drdown/appointments/templates/appointments/appointment_request_form.html:88
+msgid "Time"
+msgstr "Horário"
+
+#: drdown/appointments/models/model_appointment.py:17
+msgid "Time of appointment"
+msgstr "Hora da consulta"
+
+#: drdown/appointments/models/model_appointment.py:30
+#: drdown/appointments/models/model_request.py:72
+#: drdown/appointments/templates/appointments/appointment_form.html:28
+#: drdown/appointments/templates/appointments/appointment_form.html:37
+#: drdown/appointments/templates/appointments/appointment_request_form.html:18
+#: drdown/appointments/templates/appointments/appointment_request_form.html:27
+msgid "Speech Therapy"
+msgstr "Fonoaudiologia"
+
+#: drdown/appointments/models/model_appointment.py:31
+#: drdown/appointments/models/model_request.py:73
+#: drdown/appointments/templates/appointments/appointment_form.html:29
+#: drdown/appointments/templates/appointments/appointment_form.html:38
+#: drdown/appointments/templates/appointments/appointment_request_form.html:19
+#: drdown/appointments/templates/appointments/appointment_request_form.html:28
+msgid "Psychology"
+msgstr "Psicologia"
+
+#: drdown/appointments/models/model_appointment.py:32
+#: drdown/appointments/models/model_request.py:74
+#: drdown/appointments/templates/appointments/appointment_form.html:30
+#: drdown/appointments/templates/appointments/appointment_form.html:39
+#: drdown/appointments/templates/appointments/appointment_request_form.html:20
+#: drdown/appointments/templates/appointments/appointment_request_form.html:29
+msgid "Physiotherapy"
+msgstr "Fisioterapia"
+
+#: drdown/appointments/models/model_appointment.py:33
+#: drdown/appointments/models/model_request.py:75
+#: drdown/appointments/templates/appointments/appointment_form.html:31
+#: drdown/appointments/templates/appointments/appointment_form.html:40
+#: drdown/appointments/templates/appointments/appointment_request_form.html:21
+#: drdown/appointments/templates/appointments/appointment_request_form.html:30
+msgid "Occupational Therapy"
+msgstr "Terapia Ocupacional"
+
+#: drdown/appointments/models/model_appointment.py:34
+#: drdown/appointments/models/model_request.py:76
+#: drdown/appointments/templates/appointments/appointment_form.html:32
+#: drdown/appointments/templates/appointments/appointment_form.html:41
+#: drdown/appointments/templates/appointments/appointment_request_form.html:22
+#: drdown/appointments/templates/appointments/appointment_request_form.html:31
+msgid "Cardiology"
+msgstr "Cardiologia"
+
+#: drdown/appointments/models/model_appointment.py:35
+#: drdown/appointments/models/model_request.py:77
+#: drdown/appointments/templates/appointments/appointment_form.html:33
+#: drdown/appointments/templates/appointments/appointment_form.html:42
+#: drdown/appointments/templates/appointments/appointment_request_form.html:23
+#: drdown/appointments/templates/appointments/appointment_request_form.html:32
+msgid "Neurology"
+msgstr "Neurologia"
+
+#: drdown/appointments/models/model_appointment.py:36
+#: drdown/appointments/models/model_request.py:78
+#: drdown/appointments/templates/appointments/appointment_form.html:34
+#: drdown/appointments/templates/appointments/appointment_form.html:43
+#: drdown/appointments/templates/appointments/appointment_request_form.html:24
+#: drdown/appointments/templates/appointments/appointment_request_form.html:33
+msgid "Pediatrics"
+msgstr "Pediatria"
+
+#: drdown/appointments/models/model_appointment.py:42
+#: drdown/appointments/models/model_request.py:84
+msgid "Speciality of appointment"
+msgstr "Especialidade da consulta"
+
+#: drdown/appointments/models/model_appointment.py:64
+#: drdown/appointments/models/model_request.py:108
+msgid "Scheduled"
+msgstr "Marcado"
+
+#: drdown/appointments/models/model_appointment.py:65
+msgid "Canceled"
+msgstr "Cancelado"
+
+#: drdown/appointments/models/model_appointment.py:71
+msgid "Is this appointment still scheduled?"
+msgstr "Esta consulta ainda está marcada?"
+
+#: drdown/appointments/models/model_appointment.py:78
+#: drdown/appointments/tests/test_model_appointment.py:125
+msgid "Appointment of "
+msgstr "Consulta de "
+
+#: drdown/appointments/models/model_appointment.py:81
+msgid "Appointment"
+msgstr "Consulta"
+
+#: drdown/appointments/models/model_appointment.py:82
+#: drdown/appointments/templates/appointments/appointment_confirm_cancel.html:3
+#: drdown/appointments/templates/appointments/appointment_list.html:9
+#: drdown/appointments/templates/appointments/appointment_list.html:19
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:3
+msgid "Appointments"
+msgstr "Consultas"
+
+#: drdown/appointments/models/model_request.py:13
+msgid "Morning"
+msgstr "Manhã"
+
+#: drdown/appointments/models/model_request.py:14
+msgid "Afternoon"
+msgstr "Tarde"
+
+#: drdown/appointments/models/model_request.py:18
+#: drdown/appointments/templates/appointments/request_list.html:34
+msgid "Shift"
+msgstr "Turno"
+
+#: drdown/appointments/models/model_request.py:20
+msgid "Shift of appointment"
+msgstr "Turno da consulta"
+
+#: drdown/appointments/models/model_request.py:33
+msgid "Sunday"
+msgstr "Domingo"
+
+#: drdown/appointments/models/model_request.py:34
+msgid "Monday"
+msgstr "Segunda-feira"
+
+#: drdown/appointments/models/model_request.py:35
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+#: drdown/appointments/models/model_request.py:36
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+#: drdown/appointments/models/model_request.py:37
+msgid "Thursday"
+msgstr "Quinta-feira"
+
+#: drdown/appointments/models/model_request.py:38
+msgid "Friday"
+msgstr "Sexta-feira"
+
+#: drdown/appointments/models/model_request.py:39
+msgid "Saturday"
+msgstr "Sábado"
+
+#: drdown/appointments/models/model_request.py:43
+#: drdown/appointments/models/model_request.py:45
+#: drdown/appointments/templates/appointments/request_list.html:35
+msgid "Day of the week"
+msgstr "Dia da semana"
+
+#: drdown/appointments/models/model_request.py:50
+#: drdown/appointments/templates/appointments/request_list.html:37
+msgid "Motive"
+msgstr "Motivo"
+
+#: drdown/appointments/models/model_request.py:51
+msgid "Why are you requesting an appointment?"
+msgstr "Porquê você está marcando esta consulta?"
+
+#: drdown/appointments/models/model_request.py:57
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:12
+#: drdown/appointments/templates/appointments/request_list.html:41
+msgid "Observation"
+msgstr "Observação"
+
+#: drdown/appointments/models/model_request.py:58
+msgid "Why was it scheduled/declined?"
+msgstr "Por que foi agendado/recusado?"
+
+#: drdown/appointments/models/model_request.py:109
+msgid "Declined"
+msgstr "Recusado"
+
+#: drdown/appointments/models/model_request.py:114
+msgid "Was the request accepted?"
+msgstr "O pedido foi aceito?"
+
+#: drdown/appointments/models/model_request.py:122
+#: drdown/appointments/tests/test_model_request.py:131
+msgid "Appointment request of "
+msgstr "Pedido de consulta de"
+
+#: drdown/appointments/models/model_request.py:125
+msgid "Request"
+msgstr "Pedido"
+
+#: drdown/appointments/models/model_request.py:126
+#: drdown/appointments/templates/appointments/appointment_list.html:15
+#: drdown/appointments/templates/appointments/appointment_list.html:17
+#: drdown/appointments/templates/appointments/request_list.html:9
+#: drdown/appointments/templates/appointments/request_list.html:16
+msgid "Requests"
+msgstr "Pedidos"
+
+#: drdown/appointments/templates/appointments/appointment_confirm_cancel.html:6
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:6
+msgid "Cancel Appointment"
+msgstr "Cancelar Consulta"
+
+#: drdown/appointments/templates/appointments/appointment_confirm_cancel.html:10
+msgid "Are you sure you want to cancel this appointment?"
+msgstr "Tem certeza que deseja cancelar esta consulta?"
+
+#: drdown/appointments/templates/appointments/appointment_confirm_cancel.html:11
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:16
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:15
+msgid "Yes"
+msgstr "Sim"
+
+#: drdown/appointments/templates/appointments/appointment_confirm_cancel.html:12
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:17
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:16
+msgid "No"
+msgstr "Não"
+
+#: drdown/appointments/templates/appointments/appointment_form.html:7
+#: drdown/appointments/templates/appointments/appointment_form.html:17
+#: drdown/appointments/templates/appointments/appointment_list.html:14
+#: drdown/appointments/templates/appointments/appointment_request_form.html:5
+#: drdown/appointments/templates/appointments/appointment_request_form.html:10
+msgid "New Appointment"
+msgstr "Nova Consulta"
+
+#: drdown/appointments/templates/appointments/appointment_form.html:9
+#: drdown/appointments/templates/appointments/appointment_form.html:19
+msgid "Edit Appointment"
+msgstr "Editar Consulta"
+
+#: drdown/appointments/templates/appointments/appointment_form.html:107
+#: drdown/appointments/templates/appointments/appointment_request_form.html:96
+msgid "Schedule"
+msgstr "Marcar"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:26
+msgid "Search"
+msgstr "Pesquisar"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:41
+#: drdown/appointments/templates/appointments/request_confirm_delete.html:14
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:42
+#: drdown/appointments/templates/appointments/request_list.html:23
+msgid "Edit"
+msgstr "Editar"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:47
+#: drdown/appointments/templates/appointments/request_list.html:33
+msgid "Especiality"
+msgstr "Especialidade"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:55
+msgid "Done"
+msgstr "Concluído"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:60
+msgid "There are no appointments scheduled"
+msgstr "Não há consultas marcadas"
+
+#: drdown/appointments/templates/appointments/appointment_list.html:66
+msgid "Search All"
+msgstr "Pesquisar tudo"
+
+#: drdown/appointments/templates/appointments/appointment_request_form.html:78
+msgid "Requested day of the week"
+msgstr "Dia solicitado da semana"
+
+#: drdown/appointments/templates/appointments/appointment_request_form.html:89
+msgid "Requested shift"
+msgstr "Turno solicitado"
+
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:5
+#: drdown/appointments/templates/appointments/request_confirm_delete.html:5
+msgid "Delete Request"
+msgstr "Apagar pedido"
+
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:8
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:13
+msgid "Your request was"
+msgstr "Seu pedido foi"
+
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:13
+msgid "Are you aware"
+msgstr "Você está ciente"
+
+#: drdown/appointments/templates/appointments/request_after_result_confirm_delete.html:14
+msgid "This request will be deleted"
+msgstr "Este pedido será deletado"
+
+#: drdown/appointments/templates/appointments/request_confirm_cancel.html:10
+msgid "Are you sure you want to cancel this request?"
+msgstr "Tem certeza que deseja cancelar esta consulta?"
+
+#: drdown/appointments/templates/appointments/request_confirm_delete.html:8
+#: drdown/appointments/templates/appointments/request_confirm_delete.html:13
+#: drdown/appointments/templates/appointments/request_list.html:22
+msgid "Delete"
+msgstr "Excluir"
+
+#: drdown/appointments/templates/appointments/request_confirm_delete.html:12
+msgid "Are you sure you want to delete this request?"
+msgstr "Tem certeza que deseja cancelar esta consulta?"
+
+#: drdown/appointments/templates/appointments/request_form.html:7
+#: drdown/appointments/templates/appointments/request_form.html:18
+#: drdown/appointments/templates/appointments/request_list.html:14
+msgid "New Request"
+msgstr "Novo pedido"
+
+#: drdown/appointments/templates/appointments/request_form.html:9
+#: drdown/appointments/templates/appointments/request_form.html:20
+msgid "Edit Request"
+msgstr "Editar pedido"
+
+#: drdown/appointments/templates/appointments/request_form.html:35
+msgid "Submit"
+msgstr "Enviar"
+
+#: drdown/appointments/templates/appointments/request_list.html:25
+msgid "OK"
+msgstr "OK"
+
+#: drdown/appointments/templates/appointments/request_list.html:28
+msgid "Accept"
+msgstr "Aceitar"
+
+#: drdown/appointments/templates/appointments/request_list.html:29
+msgid "Decline"
+msgstr "Recusar"
+
+#: drdown/appointments/templates/appointments/request_list.html:46
+msgid "There are no requests"
+msgstr "Não há pedidos"
+
+#: drdown/appointments/views/view_appointment.py:45
+msgid "January"
+msgstr "Janeiro"
+
+#: drdown/appointments/views/view_appointment.py:46
+msgid "February"
+msgstr "Fevereiro"
+
+#: drdown/appointments/views/view_appointment.py:47
+msgid "March"
+msgstr "Março"
+
+#: drdown/appointments/views/view_appointment.py:48
+msgid "April"
+msgstr "Abril"
+
+#: drdown/appointments/views/view_appointment.py:49
+msgid "May"
+msgstr "Maio"
+
+#: drdown/appointments/views/view_appointment.py:50
+msgid "June"
+msgstr "Junho"
+
+#: drdown/appointments/views/view_appointment.py:51
+msgid "July"
+msgstr "Julho"
+
+#: drdown/appointments/views/view_appointment.py:52
+msgid "August"
+msgstr "Agosto"
+
+#: drdown/appointments/views/view_appointment.py:53
+msgid "September"
+msgstr "Setembro"
+
+#: drdown/appointments/views/view_appointment.py:54
+msgid "October"
+msgstr "Outubro"
+
+#: drdown/appointments/views/view_appointment.py:55
+msgid "November"
+msgstr "Novembro"
+
+#: drdown/appointments/views/view_appointment.py:56
+msgid "December"
+msgstr "Dezembro"
+
+#~ msgid "Nursing"
+#~ msgstr "Enfermaria"
diff --git a/drdown/appointments/migrations/0001_initial.py b/drdown/appointments/migrations/0001_initial.py
new file mode 100644
index 00000000..c767675a
--- /dev/null
+++ b/drdown/appointments/migrations/0001_initial.py
@@ -0,0 +1,50 @@
+# Generated by Django 2.0.3 on 2018-05-10 11:41
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('users', '0016_auto_20180506_2043'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Appointment',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('date', models.DateField(help_text='Date of appointment', max_length=50, verbose_name='Date')),
+ ('time', models.TimeField(help_text='Time of appointment', max_length=50, verbose_name='Time')),
+ ('speciality', models.CharField(choices=[('Speech Therapy', 'Speech Therapy'), ('Psychology', 'Psychology'), ('Physiotherapy', 'Physiotherapy'), ('Occupational Therapy', 'Occupational Therapy'), ('Cardiology', 'Cardiology'), ('Neurology', 'Neurology'), ('Pediatrics', 'Pediatrics')], help_text='Speciality of appointment', max_length=30, verbose_name='Speciality')),
+ ('status', models.CharField(choices=[('Scheduled', 'Scheduled'), ('Canceled', 'Canceled')], default='Scheduled', editable=False, help_text='Is this appointment still scheduled?', max_length=20, verbose_name='Status')),
+ ('doctor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='appointments', to='users.HealthTeam', verbose_name='Doctor')),
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='appointments', to='users.Patient', verbose_name='Patient')),
+ ],
+ options={
+ 'verbose_name': 'Appointment',
+ 'verbose_name_plural': 'Appointments',
+ },
+ ),
+ migrations.CreateModel(
+ name='AppointmentRequest',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('shift', models.CharField(choices=[('M', 'Morning'), ('A', 'Afternoon')], help_text='Shift of appointment', max_length=10, verbose_name='Shift')),
+ ('day', models.CharField(choices=[('Sunday', 'Sunday'), ('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday')], help_text='Day of the week', max_length=10, verbose_name='Day of the week')),
+ ('motive', models.TextField(blank=True, help_text='Why are you requesting an appointment?', max_length=500, verbose_name='Motive')),
+ ('observation', models.TextField(blank=True, help_text='Why was it scheduled/declined?', max_length=500, verbose_name='Observation')),
+ ('speciality', models.CharField(choices=[('Speech Therapy', 'Speech Therapy'), ('Psychology', 'Psychology'), ('Physiotherapy', 'Physiotherapy'), ('Occupational Therapy', 'Occupational Therapy'), ('Cardiology', 'Cardiology'), ('Neurology', 'Neurology'), ('Pediatrics', 'Pediatrics')], help_text='Speciality of appointment', max_length=30, verbose_name='Speciality')),
+ ('status', models.CharField(choices=[('Scheduled', 'Scheduled'), ('Declined', 'Declined')], default='Pending', editable=False, help_text='Was the request accepted?', max_length=20, verbose_name='Status')),
+ ('doctor', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='requests', to='users.HealthTeam', verbose_name='Doctor')),
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='requests', to='users.Patient', verbose_name='Patient')),
+ ],
+ options={
+ 'verbose_name': 'Request',
+ 'verbose_name_plural': 'Requests',
+ },
+ ),
+ ]
diff --git a/drdown/appointments/migrations/__init__.py b/drdown/appointments/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/drdown/appointments/models/__init__.py b/drdown/appointments/models/__init__.py
new file mode 100644
index 00000000..b6df070f
--- /dev/null
+++ b/drdown/appointments/models/__init__.py
@@ -0,0 +1,2 @@
+from .model_appointment import Appointment
+from .model_request import AppointmentRequest
diff --git a/drdown/appointments/models/model_appointment.py b/drdown/appointments/models/model_appointment.py
new file mode 100644
index 00000000..e485d59e
--- /dev/null
+++ b/drdown/appointments/models/model_appointment.py
@@ -0,0 +1,82 @@
+from django.db import models
+from drdown.users.models.model_health_team import HealthTeam
+from drdown.users.models.model_patient import Patient
+from django.utils.translation import ugettext_lazy as _
+
+
+class Appointment(models.Model):
+
+ date = models.DateField(
+ _('Date'),
+ help_text=_('Date of appointment'),
+ max_length=50
+ )
+
+ time = models.TimeField(
+ _('Time'),
+ help_text=_('Time of appointment'),
+ max_length=50
+ )
+
+ SPEECH_THERAPHY = "Speech Therapy"
+ PSYCHOLOGY = "Psychology"
+ PHYSIOTHERAPY = "Physiotherapy"
+ OCCUPATIONAL_THERAPY = "Occupational Therapy"
+ CARDIOLOGY = "Cardiology"
+ NEUROLOGY = "Neurology"
+ PEDIATRICS = "Pediatrics"
+
+ SPECIALITY_APPOINTMENT_CHOICES = (
+ (SPEECH_THERAPHY, _('Speech Therapy')),
+ (PSYCHOLOGY, _('Psychology')),
+ (PHYSIOTHERAPY, _('Physiotherapy')),
+ (OCCUPATIONAL_THERAPY, _('Occupational Therapy')),
+ (CARDIOLOGY, _('Cardiology')),
+ (NEUROLOGY, _('Neurology')),
+ (PEDIATRICS, _('Pediatrics')),
+ )
+
+ speciality = models.CharField(
+ _('Speciality'),
+ choices=SPECIALITY_APPOINTMENT_CHOICES,
+ help_text=_("Speciality of appointment"),
+ max_length=30
+ )
+
+ doctor = models.ForeignKey(
+ HealthTeam,
+ on_delete=models.CASCADE,
+ verbose_name=_('Doctor'),
+ related_name='appointments',
+ )
+
+ patient = models.ForeignKey(
+ Patient,
+ on_delete=models.CASCADE,
+ verbose_name=_('Patient'),
+ related_name='appointments',
+ )
+
+ SCHEDULED = 'Scheduled'
+ CANCELED = 'Canceled'
+
+ STATUS_CHOICES = (
+ (SCHEDULED, _('Scheduled')),
+ (CANCELED, _('Canceled')),
+ )
+
+ status = models.CharField(
+ _('Status'),
+ choices=STATUS_CHOICES,
+ help_text=_("Is this appointment still scheduled?"),
+ default=SCHEDULED,
+ max_length=20,
+ editable=False,
+ )
+
+ def __str__(self):
+ return _('Appointment of ') + self.patient.user.name
+
+ class Meta:
+ verbose_name = _("Appointment")
+ verbose_name_plural = _("Appointments")
diff --git a/drdown/appointments/models/model_request.py b/drdown/appointments/models/model_request.py
new file mode 100644
index 00000000..243c560a
--- /dev/null
+++ b/drdown/appointments/models/model_request.py
@@ -0,0 +1,126 @@
+from django.db import models
+from drdown.users.models.model_health_team import HealthTeam
+from drdown.users.models.model_patient import Patient
+from django.utils.translation import ugettext_lazy as _
+
+
+class AppointmentRequest(models.Model):
+
+ MORNING = 'M'
+ AFTERNOON = 'A'
+
+ SHIFT_CHOICES = (
+ (MORNING, _('Morning')),
+ (AFTERNOON, _('Afternoon')),
+ )
+
+ shift = models.CharField(
+ _('Shift'),
+ choices=SHIFT_CHOICES,
+ help_text=_('Shift of appointment'),
+ max_length=10
+ )
+
+ SUNDAY = 'Sunday'
+ MONDAY = 'Monday'
+ TUESDAY = 'Tuesday'
+ WEDNESDAY = 'Wednesday'
+ THURSDAY = 'Thursday'
+ FRIDAY = 'Friday'
+ SATURDAY = 'Saturday'
+
+ DAYS_CHOICES = (
+ (SUNDAY, _('Sunday')),
+ (MONDAY, _('Monday')),
+ (TUESDAY, _('Tuesday')),
+ (WEDNESDAY, _('Wednesday')),
+ (THURSDAY, _('Thursday')),
+ (FRIDAY, _('Friday')),
+ (SATURDAY, _('Saturday')),
+ )
+
+ day = models.CharField(
+ _('Day of the week'),
+ choices=DAYS_CHOICES,
+ help_text=_('Day of the week'),
+ max_length=10
+ )
+
+ motive = models.TextField(
+ _('Motive'),
+ help_text=_('Why are you requesting an appointment?'),
+ max_length=500,
+ blank=True,
+ )
+
+ observation = models.TextField(
+ _('Observation'),
+ help_text=_('Why was it scheduled/declined?'),
+ max_length=500,
+ blank=True,
+ )
+
+ SPEECH_THERAPHY = "Speech Therapy"
+ PSYCHOLOGY = "Psychology"
+ PHYSIOTHERAPY = "Physiotherapy"
+ OCCUPATIONAL_THERAPY = "Occupational Therapy"
+ CARDIOLOGY = "Cardiology"
+ NEUROLOGY = "Neurology"
+ PEDIATRICS = "Pediatrics"
+
+ SPECIALITY_REQUEST_CHOICES = (
+ (SPEECH_THERAPHY, _('Speech Therapy')),
+ (PSYCHOLOGY, _('Psychology')),
+ (PHYSIOTHERAPY, _('Physiotherapy')),
+ (OCCUPATIONAL_THERAPY, _('Occupational Therapy')),
+ (CARDIOLOGY, _('Cardiology')),
+ (NEUROLOGY, _('Neurology')),
+ (PEDIATRICS, _('Pediatrics')),
+ )
+
+ speciality = models.CharField(
+ _('Speciality'),
+ choices=SPECIALITY_REQUEST_CHOICES,
+ help_text=_("Speciality of appointment"),
+ max_length=30
+ )
+
+ doctor = models.ForeignKey(
+ HealthTeam,
+ on_delete=models.CASCADE,
+ verbose_name=_('Doctor'),
+ related_name='requests',
+ blank=True,
+ )
+
+ patient = models.ForeignKey(
+ Patient,
+ on_delete=models.CASCADE,
+ verbose_name=_('Patient'),
+ related_name='requests',
+ )
+
+ SCHEDULED = 'Scheduled'
+ PENDING = 'Pending'
+ DECLINED = 'Declined'
+
+ STATUS_CHOICES = (
+ (SCHEDULED, _('Scheduled')),
+ (DECLINED, _('Declined')),
+ )
+
+ status = models.CharField(
+ _('Status'),
+ help_text=_("Was the request accepted?"),
+ choices=STATUS_CHOICES,
+ default=PENDING,
+ max_length=20,
+ editable=False,
+ )
+
+ def __str__(self):
+ return _('Appointment request of ') + self.patient.user.name
+
+ class Meta:
+ verbose_name = _("Request")
+ verbose_name_plural = _("Requests")
diff --git a/drdown/appointments/static/appointments/css/appointment.css b/drdown/appointments/static/appointments/css/appointment.css
new file mode 100644
index 00000000..54c92206
--- /dev/null
+++ b/drdown/appointments/static/appointments/css/appointment.css
@@ -0,0 +1,42 @@
+.panel-heading.collapsed .fa-chevron-down,
+.panel-heading .fa-chevron-right {
+ display: none;
+}
+
+.panel-heading.collapsed .fa-chevron-right,
+.panel-heading .fa-chevron-down {
+ display: inline-block;
+}
+
+i.fa {
+ cursor: pointer;
+ margin-right: 5px;
+}
+
+.collapsed ~ .panel-body {
+ padding: 0;
+}
+
+.h-100{
+ height: 100%;
+}
+
+.w-100{
+ width: 100%;
+}
+
+.w-82{
+ width: 82%;
+}
+
+.w-70{
+ width: 70%;
+}
+
+.w-18{
+ width: 18%;
+}
+
+.clear-right{
+ clear:right;
+}
diff --git a/drdown/appointments/templates/appointments/appointment_confirm_cancel.html b/drdown/appointments/templates/appointments/appointment_confirm_cancel.html
new file mode 100644
index 00000000..1661fe99
--- /dev/null
+++ b/drdown/appointments/templates/appointments/appointment_confirm_cancel.html
@@ -0,0 +1,16 @@
+{% extends "account/base.html" %}
+{% load i18n %}
+{% block head_title %}{% trans "Appointments" %}{% endblock %}
+
+{% block inner %}
+
{% trans 'SES: ' %} {{ checklist.pati
6 = 6...10 = 6_10Y
-->
- {%for procedure in checklist.procedure_set.all%}
+ {% for procedure in checklist.procedure_set.all %}
-
{{procedure.description}}
+ {% if age < 0.5 %}
+ {% if procedure.proc_id != 11 and procedure.proc_id != 8 and procedure.proc_id != 13 %}
+
{{procedure.description}}
+ {% for check_item in procedure.get_checkitens_ordered %}
+ {% if age >= 0 and forloop.counter0 == 0 %}
+ {% if check_item.required %}
+
+ {% if check_item.check %}
+
- {% for check_item in procedure.get_checkitens_ordered %}
+ {% endif %}
+ {% elif age >= 3 or age is 4 and forloop.counter0 == 4 %}
- {% if age >= 0 and forloop.counter0 == 0 %}
- {% if check_item.required %}
+ {% if check_item.required %}
- {% if check_item.check %}
-
+ {% for check_item in procedure.get_checkitens_ordered %}
+
+
+ {% if age >= 0 and forloop.counter0 == 0 %}
+ {% if check_item.required %}
+
+ {% if check_item.check %}
+
+ {% for check_item in procedure.get_checkitens_ordered %}
+
+
+ {% if age >= 0 and forloop.counter0 == 0 %}
+ {% if check_item.required %}
+
+ {% if check_item.check %}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
{% trans 'Vaccinate people who contacted leprosy'%}
+
+
+
{% trans 'Hepatitis B'%}
+
{% trans 'Three or four doses from birth'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
+
+
{% trans 'Rotavirus'%}
+
+
+
{% trans 'Two or three doses. Initiate vaccination before 15 weeks of age'%}
+
{% trans 'CONTRAINDICATED'%}
+
+
+
{% trans 'Bacterial triple (DTPw, DTPa, ou dTpa)'%}
+
+
+
{% trans 'Four doses of DTPa or DTPw starting at 2 months of age'%}
+
+
{% trans 'Reinforcement with DTPa, DTPw or dTpa'%}
+
+
+
+
{% trans 'Haemophilus influenzae type b'%}
+
+
+
{% trans 'Four doses starting at 2 months of age'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Poliomyelitis (inactivated virus)'%}
+
+
+
{% trans 'Five doses starting at 2 months of age'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Pneumococcal conjugate'%}
+
+
+
{% trans 'Four doses starting at 2 months of age - VPC10 or VPC13'%}
+
{% trans 'VPC10 or VPC13 - Vaccinate the previously unvaccinated'%}
+
{% trans 'PCV13: vaccinating people in special risk situations'%}
+
+
+
{% trans 'Meningococcal conjugate C or ACWY'%}
+
+
+
+
{% trans 'With menACWY: three doses beginning at 3 months of age. Or with menC: two doses beginning at 3 months of age'%}
+
{% trans 'REINFORCEMENT'%}
+
+
{% trans 'REINFORCEMENT'%}
+
+
+
{% trans 'Meningococcal B'%}
+
+
+
+
{% trans 'Three doses beginning at 3 months of age'%}
+
{% trans 'REINFORCEMENT'%}
+
{% trans 'For those not previously vaccinated: two doses'%}
+
+
+
{% trans 'Oral poliomyelitis (live attenuated virus)'%}
+
+
+
+
+
+
+
+
{% trans 'NATIONAL VACCINATION CAMPAIGNS'%}
+
+
+
+
{% trans 'Influenza (flu)'%}
+
+
+
+
+
+
+
{% trans 'ANNUAL VACCINATION'%}
+
+
+
{% trans 'Yellow fever'%}
+
+
+
+
+
+
+
+
+
+
{% trans 'IN REGIONS WITH RECOMMENDATION OF VACCINATION (ACCORDING TO CLASSIFICATION OF MS) - single dose at 9 months of age. Not previously vaccinated: single dose'%}
+
+
+
{% trans 'Viral triple (measles, mumps and rubella)'%}
+
+
+
+
+
+
+
+
+
+
+
{% trans 'Two doses after 12 months'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
+
+
{% trans 'Varicella (chickenpox)'%}
+
+
+
+
+
+
+
+
+
+
+
{% trans 'Two doses after 12 months'%}
+
{% trans 'Vaccinate previously unvaccinated susceptibles'%}
+
+
+
{% trans 'Hepatitis A'%}
+
+
+
+
+
+
+
+
+
+
+
{% trans 'Two doses after 12 months'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
+
+
{% trans 'Pneumococcal 23 courageous'%}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Dengue'%}
+
{% trans 'CONTRAINDICATED'%}
+
+
+
+
+
{% trans 'Vaccines'%}
+
{% trans 'At Birth'%}
+
{% trans '1 Month'%}
+
{% trans '2 Months'%}
+
{% trans '3 Months'%}
+
{% trans '4 Months'%}
+
{% trans '5 Months'%}
+
{% trans '6 Months'%}
+
{% trans '7 Months'%}
+
{% trans '8 Months'%}
+
{% trans '9 Months'%}
+
{% trans '12 Months'%}
+
{% trans '15 Months'%}
+
{% trans '18 Months'%}
+
{% trans '24 Months'%}
+
{% trans '4 Years'%}
+
{% trans '5 Years'%}
+
{% trans '6 Years'%}
+
+
+
{% trans 'OF BIRTH TO THE 6 YEARS OF AGE'%}
+
+
+
+
{% trans 'Subtitle: '%}
+
+
{% trans 'Routine'%}
+
+
{% trans 'Vaccinate Unvaccinated'%}
+
+
{% trans 'Special Situations'%}
+
+
{% trans 'Contraindicated'%}
+
+
+
+
+
+
+
+
+
+
{% trans 'Vaccines'%}
+
{% trans '9 TO 10 YEARS OLD'%}
+
{% trans 'ADOLESCENT'%}
+
{% trans 'ADULT'%}
+
{% trans 'OLD MAN'%}
+
+
+
+
{% trans '9 Years'%}
+
{% trans '10 Years'%}
+
{% trans '11-19 Years'%}
+
{% trans '20-59 Years'%}
+
{% trans '60+ Years'%}
+
+
+
+
+
{% trans 'BCG ID'%}
+
{% trans 'Vaccinate people who contacted leprosy'%}
+
+
+
{% trans 'Hepatitis B'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
+
+
{% trans 'Rotavirus'%}
+
{% trans 'CONTRAINDICATED'%}
+
+
+
{% trans 'Bacterial triple (DTPw, DTPa, ou dTpa)'%}
+
+
{% trans 'Reinforcement with dTpa from 9 years of age and every 10 years (or, in the case of dTpa, do dT)'%}
+
{% trans 'Reinforcement with dTpa from 9 years of age and every 10 years (or, in the case of dTpa, do dT)'%}
+
+
+
{% trans 'Haemophilus influenzae type b'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Poliomyelitis (inactivated virus)'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Pneumococcal conjugate'%}
+
{% trans 'PCV13: vaccinating people in special risk situations'%}
+
{% trans 'VPC13: one dose'%}
+
+
+
{% trans 'Meningococcal conjugate C or ACWY'%}
+
+
{% trans 'REINFORCED at age 11. For those not previously vaccinated: two doses'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Meningococcal B'%}
+
{% trans 'For those not previously vaccinated: two doses'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Influenza (flu)'%}
+
{% trans 'ANNUAL VACCINATION'%}
+
+
+
{% trans 'Yellow fever'%}
+
{% trans 'IN REGIONS WITH RECOMMENDATION OF VACCINATION (ACCORDING TO CLASSIFICATION OF MS) - single dose at 9 months of age. Not previously vaccinated: single dose'%}
+
+
+
{% trans 'Viral triple (measles, mumps and rubella)'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'Varicella (chickenpox)'%}
+
{% trans 'Vaccinate previously unvaccinated susceptibles'%}
+
+
+
+
{% trans 'Hepatitis A'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
+
+
{% trans 'HPV'%}
+
{% trans 'Three doses for girls and boys'%}
+
{% trans 'Vaccinate the previously unvaccinated'%}
+
{% trans 'Vaccinate the non-vaccinated formerly: at the discretion of the physician'%}
+
+
+
+
{% trans 'Pneumococcal 23 courageous'%}
+
{% trans 'Vaccinate people in special risk situations'%}
+
{% trans 'Two doses at five-year intervals'%}
+
+
+
{% trans 'Herpes zoster'%}
+
+
+
+
{% trans 'From 50 to 59 years old: at medical discretion'%}
+
{% trans 'One dose'%}
+
+
+
{% trans 'Dengue'%}
+
{% trans 'To vaccinate people aged 9 to 45 years previously infected with the virus (seropositive) with three doses: 0 - 6 - 12 months'%}
+
{% trans 'CONTRAINDICATED'%}
+
+
+
+
+
{% trans 'Vaccines'%}
+
{% trans '9 Years'%}
+
{% trans '10 Years'%}
+
{% trans '11-19 Years'%}
+
{% trans '20-59 Years'%}
+
{% trans '60+ Years'%}
+
+
+
{% trans '9 TO 10 YEARS OLD'%}
+
{% trans 'ADOLESCENT'%}
+
{% trans 'ADULT'%}
+
{% trans 'OLD MAN'%}
+
+
+
+
+
+
+{% endblock content %}
diff --git a/drdown/core/urls.py b/drdown/core/urls.py
index cf64f569..d928cd20 100644
--- a/drdown/core/urls.py
+++ b/drdown/core/urls.py
@@ -14,4 +14,17 @@
view=TemplateView.as_view(template_name='core/info.html'),
name='about'
),
+ url(
+ regex=r'^vaccine/$',
+ view=TemplateView.as_view(template_name='core/vaccine_schedule.html'),
+ name='vaccine'
+ ),
+ url(
+ regex=r'^vaccine/location$',
+ view=TemplateView.as_view(
+ template_name='core/vaccination_locations.html'
+ ),
+ name='locations'
+ ),
+
]
diff --git a/drdown/forum/form/__init__.py b/drdown/forum/form/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/drdown/forum/form/forum_forms.py b/drdown/forum/form/forum_forms.py
new file mode 100644
index 00000000..fac77a6e
--- /dev/null
+++ b/drdown/forum/form/forum_forms.py
@@ -0,0 +1,22 @@
+from django import forms
+from drdown.forum.models.model_commentary import Commentary
+from drdown.forum.models.model_post import Post
+from pagedown.widgets import PagedownWidget
+
+
+class ComentaryForm(forms.ModelForm):
+
+ message = forms.CharField(widget=PagedownWidget())
+
+ class Meta:
+ model = Commentary
+ fields = ["message"]
+
+
+class PostForm(forms.ModelForm):
+
+ message = forms.CharField(widget=PagedownWidget())
+
+ class Meta:
+ model = Post
+ fields = ["title", "message"]
diff --git a/drdown/forum/locale/pt_BR/LC_MESSAGES/django.po b/drdown/forum/locale/pt_BR/LC_MESSAGES/django.po
index 2ec81bf8..84d24fdc 100644
--- a/drdown/forum/locale/pt_BR/LC_MESSAGES/django.po
+++ b/drdown/forum/locale/pt_BR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-04-24 01:32+0000\n"
+"POT-Creation-Date: 2018-05-04 10:24+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -45,7 +45,6 @@ msgid "Category"
msgstr "Categoria"
#: drdown/forum/models/model_category.py:28
-#: drdown/forum/templates/forum/category_list.html:3
#: drdown/forum/templates/forum/category_list.html:7
#: drdown/forum/templates/forum/commentary_list.html:16
#: drdown/forum/templates/forum/form_commentary.html:9
@@ -128,6 +127,10 @@ msgstr "Mensagem do post"
msgid "Posts"
msgstr "Posts"
+#: drdown/forum/templates/forum/category_list.html:3
+msgid "Care ine"
+msgstr ""
+
#: drdown/forum/templates/forum/category_list.html:16
msgid "There are no categories."
msgstr "Não há categorias"
@@ -194,16 +197,6 @@ msgstr "Novo Comentário"
msgid "New Post"
msgstr "Nova Postagem"
-#: drdown/forum/templates/forum/pagination.html:8
-#: drdown/forum/templates/forum/pagination.html:12
-msgid "Previous"
-msgstr "Anterior"
-
-#: drdown/forum/templates/forum/pagination.html:30
-#: drdown/forum/templates/forum/pagination.html:34
-msgid "Next"
-msgstr "Próximo"
-
#: drdown/forum/templates/forum/post_confirm_delete.html:12
msgid "Are you sure you want to delete "
msgstr "Você tem certeza que deseja deletar "
@@ -228,3 +221,9 @@ msgstr "Não há posts nessa categoria"
#: drdown/forum/tests/test_view_post.py:94
msgid "This field is required."
msgstr "Esse campo é obrigatório."
+
+#~ msgid "Previous"
+#~ msgstr "Anterior"
+
+#~ msgid "Next"
+#~ msgstr "Próximo"
diff --git a/drdown/forum/templates/forum/category_list.html b/drdown/forum/templates/forum/category_list.html
index 403f63a2..60ea288a 100644
--- a/drdown/forum/templates/forum/category_list.html
+++ b/drdown/forum/templates/forum/category_list.html
@@ -1,11 +1,18 @@
{% extends "core/base.html" %}
{% load static i18n %}
-{% block title %}{% trans "Care ine" %}{% endblock %}
+{% block title %}{% trans "Categories" %}{% endblock %}
{% block content %}