diff --git a/readme.md b/readme.md index 617e9c35b82b1dc807c74bf31f686ef0115bb0ea..ab3368923577a4a93a7aedd86161e9aa8c2a898b 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ # SMart SCHeduling ## Required software (on ubuntu's OS family): - - `sudo apt-get install libpq-dev python-dev postgresql postgresql-contrib python virtualenv python-virtualenv` + - `sudo apt-get install libpq-dev python-dev postgresql postgresql-contrib python virtualenv python-virtualenv gcc` ## Postgres installation - If you don't have postgres installed, complete step seven from [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-django-with-postgres-nginx-and-gunicorn](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-django-with-postgres-nginx-and-gunicorn) (remember to save all the credentials, they will be necessary to run the application). diff --git a/smash/web/forms.py b/smash/web/forms.py index 2bed967f5025e3282afd3b6db666b905c8a9cd0c..408692484881f932e22a2fc4c9b6680c4aec7780 100644 --- a/smash/web/forms.py +++ b/smash/web/forms.py @@ -50,9 +50,9 @@ class AppointmentDetailForm(ModelForm): class VisitDetailForm(ModelForm): class Meta: model = Visit - exclude = ['visitFinished'] + exclude = ['is_finished'] class VisitAddForm(ModelForm): class Meta: model = Visit - exclude = ['visitFinished'] + exclude = ['is_finished'] diff --git a/smash/web/models.py b/smash/web/models.py index 0b93aea2f8189777eb52ad407184f00bb182ce07..1e16a369fc77d5db2685cb26b2f087ce04973393 100644 --- a/smash/web/models.py +++ b/smash/web/models.py @@ -6,7 +6,7 @@ from django.contrib.auth.models import User, AnonymousUser import datetime -def get_current_year(): +def get_is_current_year(): return datetime.datetime.now().year class Language (models.Model): @@ -30,32 +30,51 @@ class Subject(models.Model): ('M','Male'), ('F','Female'), ) + + STATUS_CHOICES = ( + ('NCO', 'Not contacted'), + ('TST', 'Test group'), + ('LEA', 'Level A'), + ('LEB', 'Level B'), + ('OPT', 'Opted out'), + ('REJ', 'Rejected'), + ('DEA', 'Dead') + ) + + def mark_as_dead(self): + self.status = 'DEA' + self.save() + + def mark_as_rejected(self): + self.status = 'REJ' + self.save() + sex = models.CharField(max_length=1, choices=SEX_CHOICES, verbose_name='Sex' ) - firstName = models.CharField(max_length=50, + first_name = models.CharField(max_length=50, verbose_name='First name' ) - lastName = models.CharField(max_length=50, + last_name = models.CharField(max_length=50, verbose_name='Last name' ) languages = models.ManyToManyField(Language, verbose_name='Known languages' ) - phoneNo = models.CharField(max_length=20, + phone_number = models.CharField(max_length=20, verbose_name='Phone number' ) email = models.EmailField( verbose_name='E-mail' ) - born = models.DateField( - verbose_name='Date born' + date_born = models.DateField( + verbose_name='Date date_born' ) address = models.CharField(max_length=255, verbose_name='Address' ) - postalCode = models.CharField(max_length=6, + postal_code = models.CharField(max_length=6, verbose_name='Postal code' ) city = models.CharField(max_length=50, @@ -64,37 +83,29 @@ class Subject(models.Model): country = models.CharField(max_length=50, verbose_name='Country' ) - screeningNo = models.CharField(max_length=50, + screening_number = models.CharField(max_length=50, verbose_name='Screening number' ) - ndno = models.CharField(max_length=6, + nd_number = models.CharField(max_length=6, verbose_name='ND number' ) - visitNumber = models.IntegerField( + visit_count = models.IntegerField( verbose_name='Number of visits' ) - mpowerId = models.CharField(max_length=20, + mpower_id = models.CharField(max_length=20, verbose_name='MPower ID' ) - STATUS_CHOICES = ( - ('NCO', 'Not contacted'), - ('TST', 'Test group'), - ('LEA', 'Level A'), - ('LEB', 'Level B'), - ('OPT', 'Opted out'), - ('DEA', 'Dead') - ) - subjectStatus = models.CharField(max_length=3, choices=STATUS_CHOICES, + status = models.CharField(max_length=3, choices=STATUS_CHOICES, verbose_name='Status', default='NCO' ) - mainPseudonym = models.CharField(max_length=45, + main_pseudonym = models.CharField(max_length=45, verbose_name='Pseudonym' ) comments = models.CharField(max_length=2000, verbose_name='Comments' ) - dateAdded = models.DateField(verbose_name='Added on', + date_added = models.DateField(verbose_name='Added on', auto_now=True ) referral = models.CharField(max_length=128, @@ -112,20 +123,20 @@ class Subject(models.Model): ) def __str__(self): - return "%s %s" % (self.firstName, self.lastName) + return "%s %s" % (self.first_name, self.last_name) def __unicode__(self): - return "%s %s" % (self.firstName, self.lastName) + return "%s %s" % (self.first_name, self.last_name) class Visit(models.Model): subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name='Subject' ) - visitBegin = models.DateTimeField( + datetime_begin = models.DateTimeField( verbose_name='Visit starts at' ) - visitEnd = models.DateTimeField( + datetime_end = models.DateTimeField( verbose_name='Visit ends at' ) # Deadline before which all appointments need to be scheduled TYPE_CHOICES = ( @@ -133,21 +144,21 @@ class Visit(models.Model): ('B', 'Level B visit'), ('O', 'Other') ) - visitType = models.CharField(max_length=1, choices=TYPE_CHOICES, + visit_type = models.CharField(max_length=1, choices=TYPE_CHOICES, verbose_name='Visit type', default='O' ) - visitFinished = models.BooleanField( + is_finished = models.BooleanField( verbose_name='Has ended', default=False ) def __str__(self): - return "%s %s %d" % (self.subject.firstName, self.subject.lastName, self.assesmentNo) + return "%s %s %d" % (self.subject.first_name, self.subject.last_name, self.assesmentNo) class Item (models.Model): - isFixed = models.BooleanField( + is_fixed = models.BooleanField( default=False, verbose_name='Is the item fixed?' ) @@ -159,9 +170,8 @@ class Item (models.Model): return self.name - class Room (models.Model): - possEquipment = models.ManyToManyField(Item, + equipment = models.ManyToManyField(Item, verbose_name='On-site equipment', blank=True ) @@ -174,21 +184,22 @@ class Room (models.Model): city = models.CharField(max_length=50, verbose_name='City' ) - roomNo = models.IntegerField( + room_number = models.IntegerField( verbose_name='Room number' ) floor = models.IntegerField( verbose_name='Floor' ) - isVehicle = models.BooleanField( + is_vehicle = models.BooleanField( verbose_name='Is a vehicle?' ) def __str__(self): - return "%d %s %s" % (self.roomNo, self.address, self.city) + return "%d %s %s" % (self.room_number, self.address, self.city) + class AppointmentType (models.Model): - requiredEquipment = models.ManyToManyField(Item, + required_equipment = models.ManyToManyField(Item, verbose_name='Required equipment' ) code = models.CharField(max_length=20, @@ -197,16 +208,17 @@ class AppointmentType (models.Model): description = models.CharField(max_length=2000, verbose_name='Appointment description' ) - defaultTime = models.IntegerField( - verbose_name='Default time' + default_duration = models.IntegerField( + verbose_name='Default duration (in minutes)' ) - restTime = models.IntegerField( + rest_time = models.IntegerField( verbose_name='Suggested rest time' ) def __str__(self): return self.apCode + class Worker (models.Model): languages = models.ManyToManyField(Language, verbose_name='Known languages' @@ -217,13 +229,13 @@ class Worker (models.Model): user = models.OneToOneField(User, blank=True, null=True, verbose_name='Username' ) - firstName = models.CharField(max_length=50, + first_name = models.CharField(max_length=50, verbose_name='First name' ) - lastName = models.CharField(max_length=50, + last_name = models.CharField(max_length=50, verbose_name='Last name' ) - phoneNo = models.CharField(max_length=20, + phone_number = models.CharField(max_length=20, verbose_name='Phone number' ) unit = models.CharField(max_length=50, @@ -246,14 +258,14 @@ class Worker (models.Model): verbose_name='Specialization' ) - def isOnLeave(self): - if len(self.holiday_set.filter(holidayEnd__gt=datetime.datetime.now(), - holidayStart__lt=datetime.datetime.now())): + def is_on_leave(self): + if len(self.holiday_set.filter(datetime_end__gt=datetime.datetime.now(), + datetime_start__lt=datetime.datetime.now())): return True return False def __str__(self): - return "%s %s" % (self.firstName, self.lastName) + return "%s %s" % (self.first_name, self.last_name) @staticmethod def get_details(the_user): @@ -280,61 +292,64 @@ class FlyingTeam(models.Model): psychologist = models.ForeignKey(Worker, related_name='FlyingTeamPsychologist', verbose_name='Psychologist' ) - dateTimeCalled = models.DateTimeField( + datetime_called = models.DateTimeField( verbose_name='Created on' ) - dateTimeUntil = models.DateTimeField( + datetime_until = models.DateTimeField( verbose_name='Disbanded on' ) def __str__(self): - return "%s %s %s" % (self.doctor.lastName, self.nurse.lastName, self.psychologist.lastName) + return "%s %s %s" % (self.doctor.last_name, self.nurse.last_name, self.psychologist.last_name) + class Avaibility(models.Model): person = models.ForeignKey(Worker, on_delete=models.CASCADE, verbose_name='Worker' ) - dayNo = models.IntegerField( + day_number = models.IntegerField( verbose_name='Day of the week' ) - availFro = models.TimeField( + available_from = models.TimeField( verbose_name='Avaible since' ) - availTil = models.TimeField( + available_till = models.TimeField( verbose_name='Avaible until' ) - current = models.BooleanField( + is_current = models.BooleanField( verbose_name='Is current?', default=True ) def __str__(self): - return "%d %s %s" % (self.dayNo, self.person.lastName, self.person.firstName) + return "%d %s %s" % (self.day_number, self.person.last_name, self.person.first_name) + class Holiday(models.Model): person = models.ForeignKey(Worker, on_delete=models.CASCADE, verbose_name='Worker' ) - holidayStart = models.DateTimeField( + datetime_start = models.DateTimeField( verbose_name='On leave since' ) - holidayEnd = models.DateTimeField( + datetime_end = models.DateTimeField( verbose_name='On leave until' ) def __str__(self): - return "%s %s" % (self.person.firstName, self.person.lastName) + return "%s %s" % (self.person.first_name, self.person.last_name) + class Appointment(models.Model): - flyingTeam = models.ForeignKey(FlyingTeam, + flying_team = models.ForeignKey(FlyingTeam, verbose_name='Flying team (if applicable)', null=True, blank=True ) - workerAssigned = models.ForeignKey(Worker, + worker_assigned = models.ForeignKey(Worker, verbose_name='Worker conducting the assessment (if applicable)', null=True, blank=True ) - appointmentType = models.ForeignKey(AppointmentType, + appointment_type = models.ForeignKey(AppointmentType, verbose_name='Appointment type', null=True, blank=True ) @@ -344,13 +359,13 @@ class Appointment(models.Model): visit = models.ForeignKey(Visit, verbose_name='Visit ID' ) - appDateTime = models.DateTimeField( + datetime_when = models.DateTimeField( verbose_name='Appointment on' ) - appLength = models.IntegerField( - verbose_name='Appointment length' + length = models.IntegerField( + verbose_name='Appointment length (in minutes)' )#Potentially redundant; but can be used to manually adjust appointment's length - appFinished = models.BooleanField( + is_finished = models.BooleanField( verbose_name='Has the appointment ended?', default=False ) diff --git a/smash/web/templates/_base.html b/smash/web/templates/_base.html index abfb6b4d233f790f557b2f267e783a3e4d848da1..cbb02ca63851695f3feeadf72e97720b9fb904dd 100644 --- a/smash/web/templates/_base.html +++ b/smash/web/templates/_base.html @@ -88,7 +88,8 @@ desired effect </a> <ul class="dropdown-menu"> <li class="header"> - You have 0 letters to send + You have 0 letters to send<hr /> + (Not implemented yet) </li> <li> </li> @@ -133,6 +134,8 @@ desired effect <ul class="dropdown-menu"> <li class="header"> You have 0 notifications + <hr /> + (Not implemented yet) </li> {% comment "TODO: Implement notifications" %} <li> @@ -191,9 +194,9 @@ desired effect </li> <!-- Menu Footer--> <li class="user-footer"> - <div class="pull-left"> + <!--<div class="pull-left"> <a href="#" class="btn btn-default btn-flat"><i class="fa fa-user"></i> Profile</a> - </div> + </div>--> <div class="pull-right"> <a href="{% url 'web.views.logout' %}" class="btn btn-default btn-flat"><i class="fa fa-sign-out"></i> Sign out</a> </div> diff --git a/smash/web/templates/assignments/index.html b/smash/web/templates/assignments/index.html index f1a450f45b261c41d305b4c652f930554fe4d841..e7cf4ca28f711b6f5892d281f2e92fd56346dcbb 100644 --- a/smash/web/templates/assignments/index.html +++ b/smash/web/templates/assignments/index.html @@ -39,12 +39,12 @@ <tbody> {% for planned in planning_list %} <tr> - <td>{{ planned.visit.subject.firstName }} {{ planned.visit.subject.lastName }}</td> + <td>{{ planned.visit.subject.first_name }} {{ planned.visit.subject.last_name }}</td> <td> <button type="button" class="btn btn-block btn-default btn-xs">See full information</button> </td> <td> - {{ planned.appDateTime }} + {{ planned.datetime_when }} </td> <td> <button type="button" class="btn btn-block btn-default">Details</button> @@ -78,13 +78,13 @@ {% for approach in approaching_list %} <tr> <td> - {{ approach.visit.subject.firstName }} {{ approach.visit.subject.lastName }} + {{ approach.visit.subject.first_name }} {{ approach.visit.subject.last_name }} </td> <td> <a href="{% url 'web.views.subject_details' approach.visit.subject.id %}" type="button" class="btn btn-block btn-default">Subject's details</a> </td> - <td>{{ approach.appDateTime | date:"d-M-Y" }}</td> - <td>{{ approach.appDateTime | time:"H:i" }}</td> + <td>{{ approach.datetime_when | date:"d-M-Y" }}</td> + <td>{{ approach.datetime_when | time:"H:i" }}</td> <td> <a href="{% url 'web.views.assignment_details' approach.id %}" type="button" class="btn btn-block btn-default">Details</a> </td> @@ -137,8 +137,8 @@ events: [ {% for approach in approaching_list %} { - title: '{{ approach.visit.subject.firstName }} {{ approach.visit.subject.lastName }}', - start: '{{ approach.appDateTime | date:"c" }}', + title: '{{ approach.visit.subject.first_name }} {{ approach.visit.subject.last_name }}', + start: '{{ approach.datetime_when | date:"c" }}', color: '#cfc600', subject_id: '{{ approach.visit.subject.id }}', id: '{{ approach.id }}' diff --git a/smash/web/templates/doctors/availability_delete.html b/smash/web/templates/doctors/availability_delete.html index 1a5cb9db5db3d288a5b4483f619f1778277fc0df..84dc5846068426e97a75e3148e59a6e0e89719b4 100644 --- a/smash/web/templates/doctors/availability_delete.html +++ b/smash/web/templates/doctors/availability_delete.html @@ -34,8 +34,8 @@ {% for record in avmon %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -68,8 +68,8 @@ {% for record in avtue %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -102,8 +102,8 @@ {% for record in avwed %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -136,8 +136,8 @@ {% for record in avthu %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -170,8 +170,8 @@ {% for record in avfri %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -204,8 +204,8 @@ {% for record in avsat %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} diff --git a/smash/web/templates/doctors/availability_index.html b/smash/web/templates/doctors/availability_index.html index b8046fd1f52766a22377b488b739b409b8b5a904..151db64f981dd2f5d11af4191e5afcd3f13d2f8f 100644 --- a/smash/web/templates/doctors/availability_index.html +++ b/smash/web/templates/doctors/availability_index.html @@ -39,7 +39,7 @@ <h3>Monday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -58,8 +58,8 @@ {% for record in avmon %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -77,7 +77,7 @@ <h3>Tuesday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -96,8 +96,8 @@ {% for record in avtue %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -115,7 +115,7 @@ <h3>Wednesday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -134,8 +134,8 @@ {% for record in avwed %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -153,7 +153,7 @@ <h3>Thursday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -172,8 +172,8 @@ {% for record in avthu %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -191,7 +191,7 @@ <h3>Friday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -210,8 +210,8 @@ {% for record in avfri %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} @@ -229,7 +229,7 @@ <h3>Saturday</h3> <div class="new-availability"> - <a href="{% url 'web.views.doctor_add' %}" class="btn btn-app"> + <a href="#" class="btn btn-app"> <i class="fa fa-plus"></i> Add new avaibility</a> </div> @@ -248,8 +248,8 @@ {% for record in avsat %} <tr> <td> {{forloop.counter}} </td> - <td> {{record.availFro}} </td> - <td> {{record.availTil}} </td> + <td> {{record.available_from}} </td> + <td> {{record.available_till}} </td> <td><a href="{% url 'web.views.doctor_availability_delete' id record.id %}" type="button" class="btn btn-block btn-default">Delete</a></td> </tr> {% endfor %} diff --git a/smash/web/templates/doctors/index.html b/smash/web/templates/doctors/index.html index 5d6ecc8a16e7236bd48e78f900400315aa262b8d..8e78740bbc509d3fbaf8b4b21d7166b9650213c5 100644 --- a/smash/web/templates/doctors/index.html +++ b/smash/web/templates/doctors/index.html @@ -43,8 +43,8 @@ {% for worker in doctors_list %} <tr> <td>{{ forloop.counter }}</td> - <td>{{ worker.firstName }}</td> - <td>{{ worker.lastName }}</td> + <td>{{ worker.first_name }}</td> + <td>{{ worker.last_name }}</td> <td> {% autoescape off %} {% for language in worker.languages.all %} @@ -57,7 +57,7 @@ <td><a href="{% url 'web.views.doctor_edit' worker.id %}" type="button" class="btn btn-block btn-default">Edit</a></td> <td><a href="{% url 'web.views.doctor_availability' worker.id %}" type="button" class="btn btn-block btn-default">Modify availability</a></td> <td> - {% if worker.isOnLeave %}<button type="button" class="btn btn-block btn-danger">YES</button> + {% if worker.is_on_leave %}<button type="button" class="btn btn-block btn-danger">YES</button> {% else %}<button type="button" class="btn btn-block btn-success">NO</button> {% endif %} </td> diff --git a/smash/web/templates/subjects/edit.html b/smash/web/templates/subjects/edit.html index 973d1af1c726690471427930fad381f81c17f373..eb705a01804513b5b4f4839e8b2bf627834c9d1e 100644 --- a/smash/web/templates/subjects/edit.html +++ b/smash/web/templates/subjects/edit.html @@ -33,7 +33,8 @@ <form method="post" action="" class="form-horizontal"> {% csrf_token %} - <div class="box-body"> + <div class="box-body"> + <div class="col-md-12"> {% for field in form %} <div class="col-md-6 form-group {% if field.errors %}has-error{% endif %}"> <label for="{# TODO #}" class="col-sm-4 control-label"> @@ -51,6 +52,13 @@ {% endif %} </div> {% endfor %} + + <div class="col-md-6"> + <a href="{% url 'web.views.subject_mark' id 0 %}" class="btn btn-warning btn-block">Mark as rejected</a> + <a href="{% url 'web.views.subject_mark' id 1 %}" class="btn btn-danger btn-block">Mark as dead</a><br /> + </div> + </div> + </div><!-- /.box-body --> <div class="box-footer"> diff --git a/smash/web/templates/subjects/index.html b/smash/web/templates/subjects/index.html index 23bb63697e63f10bab5c70615b2bc45f5e3da296..62d62fa0006743045ac9974f63440707f4d9b456 100644 --- a/smash/web/templates/subjects/index.html +++ b/smash/web/templates/subjects/index.html @@ -49,10 +49,10 @@ <tbody> {% for subject in subjects_list %} <tr> - <td>{{ subject.ndno }}</td> - <td>{{ subject.screeningNo }}</td> - <td>{{ subject.firstName }}</td> - <td>{{ subject.lastName }}</td> + <td>{{ subject.nd_number }}</td> + <td>{{ subject.screening_number }}</td> + <td>{{ subject.first_name }}</td> + <td>{{ subject.last_name }}</td> <td>{{ subject.country }}</td> <td> {% autoescape off %} @@ -61,7 +61,7 @@ {% endfor %} {% endautoescape %} </td> - <td>{{ subject.get_subjectStatus_display }}</td> + <td>{{ subject.get_status_display }}</td> <td>12-10-2016</td> <td><a href="{% url 'web.views.subject_details' subject.id %}" type="button" class="btn btn-block btn-default">Details</a></td> <td><a href="{% url 'web.views.subject_edit' subject.id %}" type="button" class="btn btn-block btn-default">Edit</a></td> diff --git a/smash/web/templates/visits/details.html b/smash/web/templates/visits/details.html index 0a609e97ed9c0e856aeaddcad8bc5017a5353bff..1329a37a73ed7823a7699865e7cb87102605a11d 100644 --- a/smash/web/templates/visits/details.html +++ b/smash/web/templates/visits/details.html @@ -99,7 +99,7 @@ <td>{{ app.appDateTime | time:"H:i" }}</td> <td>{{ app.appLength }}</td> <td> - {% if app.flyingTeam %}{{ app.workerAssigned.firstName }} {{app.workerAssigned.lastName}} + {% if app.flyingTeam %}{{ app.workerAssigned.first_name }} {{app.workerAssigned.last_name}} {% else %} {{ app.flyingTeam }} {% endif %} </td> diff --git a/smash/web/templates/visits/index.html b/smash/web/templates/visits/index.html index de355f6124102f6c957c3df850cad99283fb3759..e60d1d8c86224f58188d157f2378b531d1694d20 100644 --- a/smash/web/templates/visits/index.html +++ b/smash/web/templates/visits/index.html @@ -48,21 +48,21 @@ <tbody> {% for visit in visit_list %} <tr> - <td>{{ visit.subject.firstName }} {{ visit.subject.lastName }}</td> + <td>{{ visit.subject.first_name }} {{ visit.subject.last_name }}</td> <td> <a href="{% url 'web.views.visit_details' visit.id %}" type="button" class="btn btn-block btn-default">Details</a> </td> <td> - {{ visit.visitBegin }} + {{ visit.datetime_begin }} </td> <td> - {{ visit.visitEnd }} + {{ visit.datetime_end }} </td> <td> - {{ visit.get_visitType_display }} + {{ visit.get_visit_type_display }} </td> <td> - {% if visit.visitFinished %}<button type="button" class="btn btn-block btn-danger">YES</button> + {% if visit.is_finished %}<button type="button" class="btn btn-block btn-danger">YES</button> {% else %}<button type="button" class="btn btn-block btn-success">NO</button> {% endif %} </td> diff --git a/smash/web/urls.py b/smash/web/urls.py index 0540b586e0c4a791555a11c52a59031b1d4ff51d..33bec41175ab23a39b0ee7c776aad60717adfb26 100644 --- a/smash/web/urls.py +++ b/smash/web/urls.py @@ -29,6 +29,7 @@ urlpatterns = [ url(r'subjects/details/(?P<id>\d+)$', views.subject_details, name='web.views.subject_details'), url(r'subjects/edit/(?P<id>\d+)$', views.subject_edit, name='web.views.subject_edit'), url(r'subjects/delete/(?P<id>\d+)$', views.subject_delete, name='web.views.subject_delete'), + url(r'subjects/mark/(?P<id>\d+)/(?P<as_what>\d+)$', views.subject_mark, name='web.views.subject_mark'), url(r'doctors$', views.doctors, name='web.views.doctors'), url(r'doctors/add$', views.doctor_add, name='web.views.doctor_add'), diff --git a/smash/web/views.py b/smash/web/views.py index 10e25b7ee51f1e0fe515a74590e8733abae0d7a6..30b06e6e6cf586b7386c2df72fdb6c1d7bb6f5e5 100644 --- a/smash/web/views.py +++ b/smash/web/views.py @@ -54,7 +54,7 @@ def logout(request): def visits(request): - visit_list = Visit.objects.order_by('-visitBegin') + visit_list = Visit.objects.order_by('-datetime_begin') context = { 'visit_list': visit_list } @@ -64,7 +64,7 @@ def visits(request): def visit_details(request, id): displayedVisit = Visit.objects.get(id=id) - visFinished = displayedVisit.visitFinished + visFinished = displayedVisit.is_finished displayedSubject = displayedVisit.subject listOfAppointments = displayedVisit.appointment_set.all() vform = VisitDetailForm(instance=displayedVisit) @@ -86,7 +86,7 @@ def visit_add(request): def subjects(request): - subjects_list = Subject.objects.order_by('-lastName') + subjects_list = Subject.objects.order_by('-last_name') context = { 'subjects_list': subjects_list } @@ -120,7 +120,7 @@ def subject_edit(request, id): return redirect(subjects) else: form = SubjectEditForm(instance=Subject.objects.get(id=id)) - return wrap_response(request, 'subjects/edit.html', {'form': form}) + return wrap_response(request, 'subjects/edit.html', {'form': form, 'id':id}) def subject_delete(request, id): @@ -132,8 +132,17 @@ def subject_delete(request, id): return wrap_response(request, 'subjects/delete.html', {'form': form}) +def subject_mark(request, id, as_what): + who = Subject.objects.get(id=id) + if as_what == '1': + who.mark_as_dead() + elif as_what == '0': + who.mark_as_rejected() + return redirect(subject_edit, id=id) + + def doctors(request): - doctors_list = Worker.objects.order_by('-lastName') + doctors_list = Worker.objects.order_by('-last_name') context = { 'doctors_list': doctors_list } @@ -174,12 +183,12 @@ def doctor_details(request, doctor_id): def doctor_availability(request, doctor_id): avall = Avaibility.objects.filter(person=doctor_id) - avmon = avall.filter(dayNo=1) - avtue = avall.filter(dayNo=2) - avwed = avall.filter(dayNo=3) - avthu = avall.filter(dayNo=4) - avfri = avall.filter(dayNo=5) - avsat = avall.filter(dayNo=6) + avmon = avall.filter(day_number=1) + avtue = avall.filter(day_number=2) + avwed = avall.filter(day_number=3) + avthu = avall.filter(day_number=4) + avfri = avall.filter(day_number=5) + avsat = avall.filter(day_number=6) context = { 'avmon': avmon, @@ -219,7 +228,7 @@ def mail_templates(request): def assignments(request): planning_list = Appointment.objects.none() - approaching_list = Appointment.objects.filter(appDateTime__gt = datetime.datetime.now()) + approaching_list = Appointment.objects.filter(datetime_when__gt = datetime.datetime.now()) context = { 'planning_list': planning_list,