Skip to content

Commit

Permalink
Merge branch 'release/0.1.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
erikvw committed Jul 21, 2018
2 parents 0592005 + 1427558 commit fe618e1
Show file tree
Hide file tree
Showing 33 changed files with 236 additions and 259 deletions.
29 changes: 29 additions & 0 deletions .travis.yml
@@ -0,0 +1,29 @@
language: python

python:
- 3.6
- 3.7

dist: xenial

sudo: true


addons:
apt_packages:
- libcups2-dev
services:
- mysql
install:
- pip install --upgrade pip
- pip install flake8
- pip install coveralls
- pip install -e .
- pip install -q -r requirements.txt
before_script:
- flake8 edc_subject_dashboard
- mysql -e 'create database edc character set utf8;'
script:
- coverage run --source=edc_subject_dashboard manage.py test
after_success:
- coveralls
2 changes: 1 addition & 1 deletion MANIFEST.in
@@ -1,2 +1,2 @@
include AUTHORS CHANGES README.md LICENCE
include AUTHORS CHANGES README LICENCE VERSION
recursive-include edc_subject_dashboard/templates *
3 changes: 0 additions & 3 deletions README.md

This file was deleted.

17 changes: 17 additions & 0 deletions README.rst
@@ -0,0 +1,17 @@
|pypi| |travis| |coverage|


edc-subject-dashboard
---------------------

Subject dashboard view classes and templates


.. |pypi| image:: https://img.shields.io/pypi/v/edc-subject-dashboard.svg
:target: https://pypi.python.org/pypi/edc-subject-dashboard

.. |travis| image:: https://travis-ci.org/clinicedc/edc-subject-dashboard.svg?branch=develop
:target: https://travis-ci.org/clinicedc/edc-subject-dashboard

.. |coverage| image:: https://coveralls.io/repos/github/clinicedc/edc-subject-dashboard/badge.svg?branch=develop
:target: https://coveralls.io/github/clinicedc/edc-subject-dashboard?branch=develop
1 change: 1 addition & 0 deletions VERSION
@@ -0,0 +1 @@
0.1.4
6 changes: 4 additions & 2 deletions edc_subject_dashboard/middleware.py
Expand Up @@ -32,8 +32,10 @@ def __call__(self, request):

def process_view(self, request, *args):
url_name_data = {
'requisition_print_actions_url': 'edc_subject_dashboard:requisition_print_actions_url',
'requisition_verify_actions_url': 'edc_subject_dashboard:requisition_verify_actions_url',
'requisition_print_actions_url':
'edc_subject_dashboard:requisition_print_actions_url',
'requisition_verify_actions_url':
'edc_subject_dashboard:requisition_verify_actions_url',
}
try:
settings.DASHBOARD_URL_NAMES
Expand Down
5 changes: 5 additions & 0 deletions edc_subject_dashboard/requisition_report.py
Expand Up @@ -14,6 +14,7 @@
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm, cm
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
from django.contrib import messages


class RequisitionReport(Report):
Expand All @@ -22,6 +23,7 @@ def __init__(self, appointment=None, selected_panel_names=None,
consignee=None, request=None, **kwargs):
super().__init__(**kwargs)
self._requisitions = []
self.request = request
self.selected_panel_names = selected_panel_names
self.site = request.site
self.appointment = appointment
Expand Down Expand Up @@ -243,6 +245,9 @@ def render(self, **kwargs):
pdf = buffer.getvalue()
buffer.close()
response.write(pdf)
messages.success(
self.request,
f'Report exported as a PDF. See downloads. Filename {filename}.')
return response

def append_requisition_items_story(self, story):
Expand Down
8 changes: 8 additions & 0 deletions edc_subject_dashboard/settings.py
Expand Up @@ -25,6 +25,7 @@

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
SITE_ID = '10'

ALLOWED_HOSTS = []

Expand All @@ -38,10 +39,17 @@
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_crypto_fields.apps.AppConfig',
'django_revision.apps.AppConfig',
'simple_history',
'edc_action_item.apps.AppConfig',
'edc_device.apps.AppConfig',
'edc_lab.apps.AppConfig',
'edc_locator.apps.AppConfig',
'edc_metadata.apps.AppConfig',
'edc_protocol.apps.AppConfig',
'edc_registration.apps.AppConfig',
'edc_identifier.apps.AppConfig',
'edc_subject_dashboard.apps.EdcAppointmentAppConfig',
'edc_subject_dashboard.apps.EdcTimepointAppConfig',
Expand Down
@@ -1,3 +1,3 @@
{% if visit_code %}
<i class="fa fa-spinner fa-fw" aria-hidden="true" data-toggle="tooltip" title="Appointment {{ visit_code }} is currently in progress"></i> {{ visit_code }}
<i class="fas fa-spinner fa-fw" aria-hidden="true" data-toggle="tooltip" title="Appointment {{ visit_code }} is currently in progress"></i> {{ visit_code }}
{% endif %}
@@ -1,5 +1,5 @@
{% extends dashboard_base_template %}
{% load staticfiles %}
{% load static %}
{% load edc_visit_schedule_extras %}
{% load edc_subject_dashboard_extras %}

Expand All @@ -13,11 +13,11 @@

{% if not visit_schedules %}
<div class="alert alert-warning">
<i class="fa fa-warning fa-lg fa-fw"></i> Subject is not enrolled to any schedules.
<i class="far fa-hand-paper fa-lg fa-fw"></i> Subject is not enrolled to any schedules.
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h6 class="panel-title"><i class="fa fa-calendar fa-lg fa-fw"></i>
<h6 class="panel-title"><i class="far fa-calendar fa-lg fa-fw"></i>
<a href="#">Schedules</a>
</h6>
</div>
Expand All @@ -28,16 +28,16 @@ <h6 class="panel-title"><i class="fa fa-calendar fa-lg fa-fw"></i>
<div id="subject_dashboard_for_{{ current_visit_schedule.name|slugify }}-{{ current_schedule.name|slugify }}"
class="panel panel-{% if anonymous %}danger{% else %}info{% endif %}">
<div class="panel-heading clearfix">
<i class="fa fa-calendar fa-lg fa-fw"></i>
<i class="far fa-calendar fa-lg fa-fw"></i>
<a data-toggle="collapse" data-parent="#accordion_{{ current_visit_schedule.name|slugify }}-{{ current_schedule.name|slugify }}" aria-hidden="true"
href="#subject_dashboard_forms_for_{{ current_visit_schedule.name|slugify }}-{{ current_schedule.name|slugify }}">
{{ current_visit_schedule.verbose_name }} <i class="fa fa-caret-right"></i> {{ current_schedule.verbose_name }} <i class="fa fa-caret-right"></i> {{ appointment.visit_code }}.{{ appointment.visit_code_sequence }} {{ appointment.title|lower|title }} <span class="caret"></span>
{{ current_visit_schedule.verbose_name }} <i class="fas fa-caret-right"></i> {{ current_schedule.verbose_name }} <i class="fas fa-caret-right"></i> {{ appointment.visit_code }}.{{ appointment.visit_code_sequence }} {{ appointment.title|lower|title }} <span class="caret"></span>
</a>
{% block schedule_button %}
<span class="pull-right"><span class="text test-muted">
<a href="{% url subject_dashboard_url subject_identifier=subject_identifier %}"
role="button" class="btn btn-sm btn-primary">
<i class="fa fa-reply fa-fw" aria-hidden="true"></i> <i class="fa fa-calendar fa-fw"></i> Schedule
<i class="fas fa-reply fa-fw" aria-hidden="true"></i> <i class="far fa-calendar fa-fw"></i> Schedule
</a>
</span></span>
{% endblock schedule_button %}
Expand All @@ -60,10 +60,10 @@ <h6 class="panel-title"><i class="fa fa-calendar fa-lg fa-fw"></i>
<div id="subject_dashboard_for_{{ visit_schedule.name|slugify }}-{{ schedule.name|slugify }}"
class="panel panel-{% if anonymous %}danger{% else %}info{% endif %}">
<div class="panel-heading">
<i class="fa fa-calendar fa-lg fa-fw"></i>
<i class="far fa-calendar fa-lg fa-fw"></i>
<a data-toggle="collapse" data-parent="#accordion_{{ visit_schedule.name|slugify }}-{{ schedule.name|slugify }}" aria-hidden="true"
href="#subject_dashboard_appointments_for_{{ visit_schedule.name|slugify }}-{{ schedule.name|slugify }}">
{{ visit_schedule.verbose_name }} <i class="fa fa-caret-right"></i> {{ schedule.verbose_name }} <span class="caret"></span>
{{ visit_schedule.verbose_name }} <i class="fas fa-caret-right"></i> {{ schedule.verbose_name }} <span class="caret"></span>
</a>

<span class="text text-default pull-right"><small>
Expand Down
Expand Up @@ -7,29 +7,29 @@
{% for wrapped in appointments %}
{% if wrapped.visit_schedule_name == visit_schedule.name and wrapped.schedule_name == schedule.name %}
<tr>
<td><i class="fa fa-calendar-o fa-sm fa-fw"></i> {{wrapped.visit_code}}{% if wrapped.visit_code_sequence %}.{{wrapped.visit_code_sequence}}{% endif %}</td>
<td><i class="far fa-calendar fa-sm fa-fw"></i> {{wrapped.visit_code}}{% if wrapped.visit_code_sequence %}.{{wrapped.visit_code_sequence}}{% endif %}</td>
<td>
{% if wrapped.appt_status == NEW_APPT %}
<i class="fa fa-star-o fa-fw" aria-hidden="true" data-toggle="tooltip" title="New"></i>
<i class="far fa-star fa-fw" aria-hidden="true" data-toggle="tooltip" title="New"></i>
{% elif wrapped.appt_status == IN_PROGRESS_APPT%}
<i class="fa fa-spinner fa-fw" aria-hidden="true" data-toggle="tooltip" title="In progress"></i>
<i class="fas fa-spinner fa-fw" aria-hidden="true" data-toggle="tooltip" title="In progress"></i>
{% elif wrapped.appt_status == INCOMPLETE_APPT %}
<i class="fa fa-star-half-o fa-fw" aria-hidden="true" data-toggle="tooltip" title="Incomplete"></i>
<i class="fas fa-star-half fa-fw" aria-hidden="true" data-toggle="tooltip" title="Incomplete"></i>
{% elif wrapped.appt_status == COMPLETE_APPT %}
<i class="fa fa-star fa-fw" aria-hidden="true" data-toggle="tooltip" title="Complete"></i>
<i class="fas fa-star fa-fw" aria-hidden="true" data-toggle="tooltip" title="Complete"></i>
{% endif %}
{% if wrapped.appt_status != COMPLETE_APPT %}
<a id="appointment_btn_{{ wrapped.visit_code }}_{{ wrapped.visit_code_sequence }}" role="button" class="btn btn-sm btn-default {% if wrapped.appt_status != IN_PROGRESS_APPT %}disabled{% endif %}"
href="{{ wrapped.href }}">
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i> Appt
<i class="fas fa-pencil-alt fa-fw" aria-hidden="true"></i> Appt
</a>
{% endif %}

<!--begin unscheduled appointment -->
{% if not wrapped.disabled and wrapped.object.visit_code_sequence == 0 %}
{% if wrapped.appt_status == INCOMPLETE_APPT or wrapped.appt_status == COMPLETE_APPT %}
<a id="uscheduled_appt_btn_{{ wrapped.visit_code }}_{{ wrapped.visit_code_sequence }}" role="button" class="btn btn-sm btn-default" href="{{ wrapped.unscheduled_appointment_url }}">
<i class="fa fa-address-book-o fa-lg" data-toggle="tooltip" title="Add continuation / unscheduled appointment" aria-hidden="true"></i>
<i class="far fa-address-book fa-lg" data-toggle="tooltip" title="Add continuation / unscheduled appointment" aria-hidden="true"></i>
</a>
{% endif %}
{% endif %}
Expand All @@ -40,7 +40,7 @@
{% with wrapped.wrapped_visit as visit %}
{% if visit.id %}
<a id="visit_report_btn_{{ wrapped.visit_code }}_{{ wrapped.visit_code_sequence }}" role="button" class="btn btn-sm btn-default" href="{{ visit.href }}">
<i class="fa fa-pencil fa-sm" aria-hidden="true"></i> Visit Report
<i class="fas fa-pencil-alt fa-sm" aria-hidden="true"></i> Visit Report
</a>
{% endif %}

Expand All @@ -63,7 +63,7 @@
{% elif wrapped.appt_status == INCOMPLETE_APPT %}
Continue
{% elif wrapped.appt_status == COMPLETE_APPT %}
<i class="fa fa-check fa-fw"></i>Done
<i class="fas fa-check fa-fw"></i>Done
{% endif %}
</a>
{% else %}
Expand All @@ -76,14 +76,14 @@
{% elif wrapped.appt_status == INCOMPLETE_APPT %}
Continue
{% elif wrapped.appt_status == COMPLETE_APPT %}
<i class="fa fa-check fa-fw"></i>Done
<i class="fas fa-check fa-fw"></i>Done
{% endif %}
</a>
{% endif %}
{% endif %}
{% if wrapped.appt_status == COMPLETE_APPT %}
<a id="review_btn_{{ wrapped.visit_code }}_{{ wrapped.visit_code_sequence }}" role="button" class="btn btn-sm btn-default" href="{{ wrapped.wrapped_visit.href }}">
<i class="fa fa-pencil fa-sm" aria-hidden="true"></i> Review
<i class="fas fa-pencil-alt fa-sm" aria-hidden="true"></i> Review
</a>
{% endif %}

Expand Down
Expand Up @@ -3,7 +3,7 @@

<div class="panel-heading">
<span class="text text-muted">
<i class="fa fa-list-alt fa-fw" aria-hidden="true"></i> CRFs</span>
<i class="fas fa-list-alt fa-fw" aria-hidden="true"></i> CRFs</span>
<label class="small pull-right" title="visit report datetime">{{ appointment.object.visit.report_datetime|localtime|date:"SHORT_DATETIME_FORMAT" }}</label>
</div>

Expand Down Expand Up @@ -37,9 +37,9 @@
<a role="button" class="btn btn-sm {% if crf.object.id %}btn-success{% else %}{% if crf.entry_status == NOT_REQUIRED %} disabled btn-default{% else %}btn-warning{% endif %}{% endif %}"
href="{{ crf.object.href }}">
{% if crf.object.id %}
<span class="glyphicon glyphicon-pencil"></span> Change
<span class="fas fa-pen"></span> Change
{% else %}
<span class="glyphicon glyphicon-plus"></span> Add
<span class="fas fa-plus"></span> Add
{% endif %}
</a>
<a role="button" class="btn btn-sm btn-default"
Expand Down

This file was deleted.

Expand Up @@ -6,7 +6,7 @@

<div class="panel-group">
<div class="panel panel-success">
<div class="panel-heading clearfix"><i class="fa fa-flask fa-fw" aria-hidden="true"></i> Requisitions
<div class="panel-heading clearfix"><i class="fas fa-flask fa-fw" aria-hidden="true"></i> Requisitions
<label class="small pull-right" title="visit report datetime">{{ appointment.object.visit.report_datetime|localtime|date:"SHORT_DATETIME_FORMAT" }}</label>
</div>

Expand Down Expand Up @@ -44,17 +44,17 @@
{% if requisition.entry_status == KEYED %}
{% if requisition.object.is_drawn == YES and requisition.object.requisition_identifier %}
<span class="text text-success small">
<i class="fa fa-check fa-sm"></i>
{% if requisition.object.clinic_verified == YES %}<i class="fa fa-check fa-sm"></i>{% endif %}
<i class="fas fa-check fa-sm"></i>
{% if requisition.object.clinic_verified == YES %}<i class="fas fa-check fa-sm"></i>{% endif %}
</span> <span class="text text-default"><strong>{{ requisition.object.requisition_identifier|human }}</strong></span>
{% elif requisition.object.reason_not_drawn == NOT_REQUIRED %}
<span class="text text-info small"><i class="fa fa-info-circle"></i> no longer required</span>
<span class="text text-info small"><i class="fas fa-info-circle"></i> no longer required</span>
{% elif requisition.object.requisition_identifier and not requisition.object.is_drawn %}
<span class="text text-danger"><i class="fa fa-hand-stop-o fa-fw"></i> <strong>{{ requisition.object.requisition_identifier|human }}</strong></span>
<span class="text text-danger"><i class="fas fa-hand-stop-o fa-fw"></i> <strong>{{ requisition.object.requisition_identifier|human }}</strong></span>
{% elif requisition.object.is_drawn == NO %}
<span class="text text-info small">not drawn</span>
{% else %}
<span class="text text-danger small"><i class="fa fa-warning"></i> ERROR</span>
<span class="text text-danger small"><i class="fas fa-warning"></i> ERROR</span>
{% endif %}
{% endif %}

Expand All @@ -63,9 +63,9 @@
<a role="button" class="btn btn-sm {% if requisition.entry_status == KEYED %}btn-success{% else %}{% if requisition.entry_status == NOT_REQUIRED %} disabled btn-default{% else %}btn-warning{% endif %}{% endif %}"
href="{{ requisition.object.href }}">
{% if requisition.entry_status == KEYED %}
<span class="fa fa-pencil fa-fw"></span> Change
<span class="fas fa-pencil-alt fa-fw"></span> Change
{% else %}
<span class="fa fa-plus fa-fw"></span> Add
<span class="fas fa-plus fa-fw"></span> Add
{% endif %}
</a>
<a role="button" class="btn btn-sm btn-default"
Expand Down
@@ -1,11 +1,11 @@
{% load edc_base_extras %}

<div class="list-group">
<a class="list-group-item"><i class="fa fa-birthday-cake fa-fw"></i>
<a class="list-group-item"><i class="fas fa-birthday-cake fa-fw"></i>
{{ dob|date:"SHORT_DATE_FORMAT" }}
{% age_in_years dob %} yrs
</a>
<a class="list-group-item"><i class="fa fa-address-card-o fa-fw"></i>
{{ identity|default:'?? identity' }} <span data-toggle="tooltip" data-placement="right" title="{{ firstname }} {{ lastname }}" class="text text-default">{{ initials }}<sup><i class="fa fa-asterisk fa-fw"></i></sup></span>
<a class="list-group-item"><i class="far fa-address-card fa-fw"></i>
{{ identity|default:'?? identity' }} <span data-toggle="tooltip" data-placement="right" title="{{ firstname }} {{ lastname }}" class="text text-default">{{ initials }}<sup><i class="fas fa-asterisk fa-fw"></i></sup></span>
</a>
</div>

0 comments on commit fe618e1

Please sign in to comment.