Source code for apps.report.models

# -*- coding: utf-8 -*-
"""
Module which defines the Report model.

:subtitle:`Class definitions:`
"""
from django.db import models
from django.utils.translation import ugettext as _
from core.models import EncryptedTextField, AuditBaseModel
from apps.healthperson.healthprofessional.models import HealthProfessional
from apps.questionnaire.models import QuestionnaireRequest


[docs]class Report(AuditBaseModel): ''' Model for saving reports of filled in questionnaires. Standard templates are used to generate the report which can be edited by the healthprofessional. The report is encrypted with use of the personal key of the created_by healthprofessional ''' questionnaire_request = models.ForeignKey(QuestionnaireRequest) created_by = models.ForeignKey(HealthProfessional) created_on = models.DateField(auto_now_add=True) finished_on = models.DateField(null=True, blank=True) # Report is invalid invalid = models.BooleanField(default=False) # Sent to doctor? sent_to_doctor = models.BooleanField( default=False, verbose_name=_('Na opslaan naar huisarts sturen')) # Healthprofessional thinks that patient needs appointment. patient_needs_appointment = models.BooleanField( default=False, verbose_name=_('Patient alsnog oproepen voor afspraak polikliniek'), help_text=_( 'De patient heeft aangegeven zelf geen polikliniek' + ' afspraak nodig te vinden. Wilt u op basis van de antwoorden' + ' en eventuele laboratoriumuitslagen de patient alsnog oproepen?')) # Report that is saved with healthprofessional data key report = EncryptedTextField( help_text=_('Nb. selecteer eerst de optie(s) hierboven' + ' voordat u de tekst wijzigt.'), encryption_key='encryption_key') @property def filled_in(self): # pragma: no cover """ Returns: True if finished_on is set """ return self.finished_on is not None @property def audit_encryption_key_id(self): """ Get the EncryptionKey id so it can be coupled to the log item in the audit. Returns: The id of the EncryptionKey that is used to encrypt the model instance. """ created_by = HealthProfessional.objects.select_related( 'user').get(id=self.created_by_id) return created_by.user.personal_encryption_key_id @property def encryption_key(self): # This makes getting the key faster from apps.account.models import EncryptionKey encrypted_key = EncryptionKey.get_with_healthperson_id( self.created_by_id) return EncryptionKey(key=encrypted_key).key