- Models.py
-
- from django.db import models
- from django.utils import timezone
- from django.urls import reverse_lazy, reverse
-
- # Create your models here.
-
- class Requisition(models.Model):
- # constants
- FROZEN = 'Frozen'
- CHILLED = 'Chilled/Cold Pack'
- DRYICE = 'Dry Ice'
- ROOMTEMP = 'Room Temperature'
- TRANSPORT_CHOICE = [(FROZEN,FROZEN),(CHILLED,CHILLED),(DRYICE,DRYICE),(ROOMTEMP,ROOMTEMP)]
-
- EMAIL = 'email'
- HARDCOPY = 'Hardcopy Pickup'
- BOTH = 'Email & Hardcopy Pickup'
- RECEIPT_CHOICE = [(EMAIL,EMAIL), (HARDCOPY,HARDCOPY), (BOTH,BOTH)]
-
-
- ACUTE = 'Acute'
- CHRONIC = 'Chronic'
- SYMPTOMS_CHOICE = [(ACUTE,ACUTE,), (CHRONIC,CHRONIC)]
-
- #columns
- accession_number = models.CharField(max_length=254, unique=True, help_text='format: VSLXXX-XXX')
- customer = models.ForeignKey('general.Customer', on_delete=models.CASCADE, related_name='requisition')
-
- # Veterinary Officer Info
- veterinary_officer = models.CharField(max_length=50, blank=True)
- address = models.CharField(max_length=50, blank=True)
- contact_number = models.CharField(max_length=13, blank=True, help_text="number format example: +592 XXX XXXX")
- email_address = models.EmailField(max_length=50, blank=True)
-
- # General sample info
-
- collected_by = models.CharField(max_length=50)
- time_of_collection = models.DateTimeField()
-
-
- method_of_transport = models.CharField(max_length=50, choices=TRANSPORT_CHOICE)
- result_transmission = models.CharField(max_length=50, choices=RECEIPT_CHOICE)
-
- #pathology
- reason_for_request = models.ManyToManyField('ReasonForRequest',related_name='requisition', blank=True)
- illness_date = models.DateField('Date of onset of illness', blank=True, null=True)
- illness_duration = models.CharField('Duration of illness', max_length=254, blank=True)
- symptoms = models.CharField(max_length=50, choices=SYMPTOMS_CHOICE, blank=True)
- fever = models.BooleanField('Presence of Fever', blank=True, null=True)
- body_temp = models.PositiveSmallIntegerField('Max body Temperature (C)', blank=True, null=True)
- fever_duration = models.CharField('Duration of Fever',max_length=50, blank=True)
- signs = models.ManyToManyField('Signs', related_name='requisition', blank=True)
- vaccination_status = models.CharField(max_length=50, blank=True)
- vaccination_date = models.DateField('Date of Vaccination', blank=True, null=True)
- treatments = models.TextField('Previous/Current Treatments', blank=True)
- exposed = models.ManyToManyField('Exposed', related_name='requisition', through='ExposureHistory', blank=True)
-
- comments = models.TextField(blank=True)
- recieved_by = models.ForeignKey('auth.User', on_delete=models.CASCADE)
- submitted_by = models.CharField(max_length=254, help_text='if multiple persons separate names using "&" exampe: John Doe & Jane Doe')
- date_of_submission = models.DateTimeField(auto_now_add=True)
-
- def __str__(self):
- return self.accession_number
-
- def get_absolute_url(self):
- return reverse("laboratory:requisition_details", kwargs={'pk':self.pk})
-
- forms.py
-
- from django.forms import ModelForm
- from general.models import Customer
- from laboratory.models import Requisition
- from bootstrap_datepicker_plus import DatePickerInput, DateTimePickerInput
-
- class RequisitionForm(ModelForm):
- class Meta:
- model = Requisition
- fields = '__all__'
- widgets = {
- 'illness_date': DatePickerInput,
- 'vaccination_date': DatePickerInput,
- 'date_of_submission': DateTimePickerInput,
- }
- views.py
- from django.contrib.auth.mixins import LoginRequiredMixin
- from django.urls import reverse_lazy, reverse
- from django.shortcuts import render
- from django.views.generic import TemplateView, CreateView, DetailView, ListView, UpdateView, DeleteView
- from general.models import Customer
- from laboratory.models import Requisition, Sample
- from laboratory.forms import RequisitionForm
- # Create your views here.
-
- class RequisitionListView(LoginRequiredMixin, ListView):
- model = Requisition
- context_object_name = 'requisition_list'
- template_name ='laboratory/requisition_list.html'
-
- class RequisitionDetailView(DetailView):
- model = Requisition
- context_object_name = 'requisition_details'
- template_name='laboratory/requisition_details.html'
-
- class RequisitionCreateView(LoginRequiredMixin, CreateView):
- model = Requisition
- form_class= RequisitionForm
- template_name = 'laboratory/requisition_create.html'
-
- requisition_create.html
- {% extends "user_home.html" %}
- {% load static %}
- {% load widget_tweaks %}
- {% load bootstrap4 %}
- {% bootstrap_css %}
- {% bootstrap_javascript jquery='full' %}
- {{ form.media }}
-
- {% block form %}
- <div class="main jumbotron">
- <h1>Complete Requisition form below</h1>
- <p></p>
- <form method="POST">
- {% csrf_token %}
- <div class='row'>
- <div class='col'>
- <div class="card">
- <div class="card-header">
- General Information
- </div>
- <div class="card-body fieldwrapper form-group">
- {{ form.accession_number.errors }}
- {{ form.accession_number.label_tag }}
- {{ form.accession_number|add_class:"form-control" }}
- <p></p>
- {{ form.customers.errors }}
- {{ form.customer.label_tag }}
- {{ form.customer|add_class:"form-control" }}
- <p></p>
- {{ form.collected_by.errors }}
- {{ form.collected_by.label_tag }}
- {{ form.collected_by|add_class:"form-control" }}
- <p></p>
- {{ form.recieved_by.errors }}
- {{ form.recieved_by.label_tag }}
- {{ form.recieved_by|add_class:"form-control" }}
- <p></p>
- {{ form.submitted_by.errors }}
- {{ form.submitted_by.label_tag }}
- {{ form.submitted_by|add_class:"form-control" }}
- <p></p>
- {{ form.date_of_submission.errors }}
- {{ form.date_of_submission.label_tag }}
- {{ form.date_of_submission|add_class:"form-control" }}
-
- </div>
- </div>
- </div>
-
- <p></p>
- <div class="col">
- <div class="card">
- <div class='card-header'>
- Veterinarian/Leo/Lea Information
- </div>
- <div class="card-body">
- {{ form.veterinary_officer.errors }}
- {{ form.veterinary_officer.label_tag }}
- {{ form.veterinary_officer|add_class:"form-control" }}
- <p></p>
- {{ form.address.errors }}
- {{ form.address.label_tag }}
- {{ form.address|add_class:"form-control" }}
- <p></p>
- {{ form.contact_number.errors }}
- {{ form.contact_number.label_tag }}
- {{ form.contact_number|add_class:"form-control" }}
- <p></p>
- {{ form.email_address.errors }}
- {{ form.email_address.label_tag }}
- {{ form.email_address|add_class:"form-control" }}
- </div>
- </div>
- </div>
-
- </div>
-
- <p></p>
-
- <div class="card">
- <div class='card-header'>
- Transmission Information
- </div>
- <div class="card-body">
- {{ form.method_of_transport.errors }}
- {{ form.method_of_transport.label_tag }}
- {{ form.method_of_transport|add_class:"form-control" }}
- <p></p>
- {{ form.result_transmission.errors }}
- {{ form.result_transmission.label_tag }}
- {{ form.result_transmission|add_class:"form-control" }}
-
- </div>
- </div>
- <p></p>
- <div class="card">
- <div class='card-header'>
- Pathology Information
- </div>
- <div class="card-body row">
- <div class='col'>
- {{ form.reason_for_request.errors }}
- {{ form.reason_for_request.label_tag }}
- {{ form.reason_for_request|add_class:"form-control" }}
- <p></p>
- {{ form.illness_date.errors }}
- {{ form.illness_date.label_tag }}
- {{ form.illness_date|add_class:"form-control" }}
- <p></p>
- {{ form.symptoms.errors }}
- {{ form.symptoms.label_tag }}
- {{ form.symptoms|add_class:"form-control" }}
- <p></p>
- {{ form.fever.errors }}
- {{ form.fever.label_tag }}
- {{ form.fever|add_class:"form-control" }}
- <p></p>
- {{ form.body_temp.errors }}
- {{ form.body_temp.label_tag }}
- {{ form.body_temp|add_class:"form-control" }}
- <p></p>
- {{ form.fever_duration.errors }}
- {{ form.fever_duration.label_tag }}
- {{ form.fever_duration|add_class:"form-control" }}
- <p></p>
- </div>
-
- <div class='col'>
- {{ form.signs.errors }}
- {{ form.signs.label_tag }}
- {{ form.signs|add_class:"form-control" }}<p></p>
- <p></p>
- {{ form.vaccination_status.errors }}
- {{ form.vaccination_status.label_tag }}
- {{ form.vaccination_status|add_class:"form-control" }}
- <p></p>
- {{ form.vaccination_date.errors }}
- {{ form.vaccination_date.label_tag }}
- {{ form.vaccination_date|add_class:"form-control" }}
- <p></p>
- {{ form.treatments.errors }}
- {{ form.treatments.label_tag }}
- {{ form.treatments|add_class:"form-control" }}
- <p></p>
- {{ form.exposed.errors }}
- {{ form.exposed.label_tag }}
- {{ form.exposed|add_class:"form-control" }}
- </div>
- </div>
- </div>
- <p></p>
- {{ form.comments.errors }}
- {{ form.comments.label_tag }}
- {{ form.comments|add_class:"form-control" }}
- <p></p>
-
- <input type="submit" class='btn btn-primary' value='Submit'>
-
-
- </form>
- </div>
-
- {% endblock form %}