Skip to content
Snippets Groups Projects
Commit 86303696 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch 'master' into 84-performance-of-subject-list

parents ca0bdb22 be6747df
No related branches found
No related tags found
1 merge request!34Performance of subject list
Pipeline #
Showing
with 133 additions and 17 deletions
......@@ -17,8 +17,7 @@ appointment-import/tmp.sql
out
.idea
#coverage tool
.coverage
smash/htmlcov/*
smash/htmlcov/
run-coverage.bat
......@@ -17,6 +17,6 @@ test:
script:
- cp "local_settings_ci.py" "smash/smash/local_settings.py"
- cd smash
- python manage.py makemigrations && python manage.py migrate
- python manage.py makemigrations web && python manage.py migrate
- coverage run --source web manage.py test
- coverage report -m
......@@ -31,3 +31,5 @@ STATIC_ROOT = '/tmp/static' # Warning! `/tmp` directory can be flushed in any m
MEDIA_ROOT = '/tmp/media' # Warning! `/tmp` directory can be flushed in any moment; use a persistent one, e.g. ~/tmp/media
ALLOWED_HOSTS = ["127.0.0.1", "localhost"]
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
......@@ -15,7 +15,6 @@ import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
......@@ -87,6 +86,8 @@ INTERNAL_IPS = [
'127.0.0.1'
]
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
# Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/
......@@ -100,7 +101,6 @@ USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
......
from django.contrib import admin
from models import Subject, Item, Room, AppointmentType, Language, Location, Worker, FlyingTeam, Avaibility, Holiday, \
from models import Subject, Item, Room, AppointmentType, Language, Location, Worker, FlyingTeam, Availability, Holiday, \
Visit, Appointment
......@@ -18,6 +18,6 @@ admin.site.register(Language, LanguageAdmin)
admin.site.register(Location)
admin.site.register(Worker)
admin.site.register(FlyingTeam)
admin.site.register(Avaibility)
admin.site.register(Availability)
admin.site.register(Holiday)
admin.site.register(Appointment)
from datetime import datetime
import datetime
from django import forms
from django.forms import ModelForm, Form
from django.utils.dates import MONTHS
from models import Subject, Worker, Appointment, Visit, AppointmentType
from models import Subject, Worker, Appointment, Visit, AppointmentType, ContactAttempt
from models.constants import SUBJECT_TYPE_CHOICES
"""
Possible redundancy, but if need arises, contents of forms can be easily customized
"""
CURRENT_YEAR = datetime.now().year
CURRENT_YEAR = datetime.datetime.now().year
YEAR_CHOICES = tuple(range(CURRENT_YEAR, CURRENT_YEAR - 120, -1))
FUTURE_YEAR_CHOICES = tuple(range(CURRENT_YEAR, CURRENT_YEAR + 5, 1))
DATEPICKER_DATE_ATTRS = {
......@@ -79,6 +79,7 @@ class SubjectAddForm(ModelForm):
validate_subject_nd_number(self)
def get_new_screening_number(screening_number_prefix):
result_number = 0
subjects = Subject.objects.filter(screening_number__contains=screening_number_prefix)
......@@ -95,12 +96,14 @@ def get_new_screening_number(screening_number_prefix):
return screening_number_prefix + str(result_number + 1).zfill(3)
def get_prefix_screening_number(user):
prefix_screening_number = ''
if (user is not None) and (user.screening_number_prefix is not None) and (user.screening_number_prefix != ""):
prefix_screening_number = user.screening_number_prefix + "-"
return prefix_screening_number
class SubjectDetailForm(ModelForm):
class Meta:
model = Subject
......@@ -268,6 +271,29 @@ class VisitAddForm(ModelForm):
self.add_error('datetime_end', "End date must be after start date")
class ContactAttemptForm(ModelForm):
datetime_when = forms.DateTimeField(label='Contact on (YYYY-MM-DD HH:MM)',
widget=forms.DateTimeInput(DATETIMEPICKER_DATE_ATTRS)
)
class Meta:
model = ContactAttempt
fields = '__all__'
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
if user is None:
raise TypeError("User not defined")
self.user = Worker.get_by_user(user)
if self.user is None:
raise TypeError("Worker not defined for: " + user.username)
subject = kwargs.pop('subject', None)
super(ContactAttemptForm, self).__init__(*args, **kwargs)
self.fields['subject'].initial = subject.id
self.fields['subject'].disabled = True
self.fields['worker'].initial = self.user
class KitRequestForm(Form):
start_date = forms.DateField(label="From date",
widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
......@@ -286,7 +312,7 @@ class StatisticsForm(Form):
visit_choices = kwargs['visit_choices']
month = kwargs['month']
year = kwargs['year']
now = datetime.now()
now = datetime.datetime.now()
year_now = now.year
number_of_years_for_statistics = year_now - START_YEAR_STATISTICS + 2
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2017-04-04 08:47
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('web', '0022_auto_20170403_0904'),
]
operations = [
migrations.CreateModel(
name='Availability',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('day_number', models.IntegerField(verbose_name=b'Day of the week')),
('available_from', models.TimeField(verbose_name=b'Available since')),
('available_till', models.TimeField(verbose_name=b'Available until')),
('is_current', models.BooleanField(default=True, verbose_name=b'Is current?')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Worker', verbose_name=b'Worker')),
],
),
migrations.CreateModel(
name='ContactAttempt',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('type', models.CharField(choices=[(b'E', b'Email'), (b'F', b'Face to face'), (b'X', b'Fax'), (b'P', b'Phone'), (b'S', b'SMS')], default=b'P', max_length=2)),
('datetime_when', models.DateTimeField(help_text=b'When did the contact occurred?', verbose_name=b'Contact on')),
('success', models.BooleanField(default=False)),
('comment', models.TextField(blank=True, max_length=1024, null=True)),
('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Subject', verbose_name=b'Subject')),
('worker', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='web.Worker', verbose_name=b'Worker')),
],
),
migrations.RemoveField(
model_name='avaibility',
name='person',
),
migrations.DeleteModel(
name='Avaibility',
),
]
......@@ -12,16 +12,17 @@ from visit import Visit
from worker import Worker
from appointment import Appointment
from appointment_type import AppointmentType
from avaibility import Avaibility
from availability import Availability
from holiday import Holiday
from item import Item
from language import Language
from subject import Subject
from contact_attempt import ContactAttempt
def get_current_year():
return datetime.datetime.now().year
__all__ = [FlyingTeam, Appointment, AppointmentType, Avaibility, Holiday, Item, Language, Location, Room, Subject,
Visit, Worker]
__all__ = [FlyingTeam, Appointment, AppointmentType, Availability, Holiday, Item, Language, Location, Room, Subject,
Visit, Worker, ContactAttempt]
......@@ -2,7 +2,7 @@
from django.db import models
class Avaibility(models.Model):
class Availability(models.Model):
class Meta:
app_label = 'web'
......@@ -13,10 +13,10 @@ class Avaibility(models.Model):
verbose_name='Day of the week'
)
available_from = models.TimeField(
verbose_name='Avaible since'
verbose_name='Available since'
)
available_till = models.TimeField(
verbose_name='Avaible until'
verbose_name='Available until'
)
is_current = models.BooleanField(
verbose_name='Is current?',
......
......@@ -13,3 +13,17 @@ SUBJECT_TYPE_CHOICES = {
}
APPOINTMENT_TYPE_DEFAULT_COLOR = '#cfc600'
APPOINTMENT_TYPE_DEFAULT_FONT_COLOR = '#00000'
CONTACT_TYPES_EMAIL = 'E'
CONTACT_TYPES_PHONE = 'P'
CONTACT_TYPES_SMS = 'S'
CONTACT_TYPES_FAX = 'X'
CONTACT_TYPES_FACE2FACE = 'F'
CONTACT_TYPES_CHOICES = (
(CONTACT_TYPES_EMAIL, 'Email'),
(CONTACT_TYPES_FACE2FACE, 'Face to face'),
(CONTACT_TYPES_FAX, 'Fax'),
(CONTACT_TYPES_PHONE, 'Phone'),
(CONTACT_TYPES_SMS, 'SMS'),
)
# coding=utf-8
from django.db import models
from constants import CONTACT_TYPES_CHOICES, CONTACT_TYPES_PHONE
__author__ = 'Valentin Grouès'
class ContactAttempt(models.Model):
subject = models.ForeignKey("web.Subject",
verbose_name='Subject'
)
worker = models.ForeignKey("web.Worker", null=True,
verbose_name='Worker'
)
type = models.CharField(max_length=2, default=CONTACT_TYPES_PHONE, choices=CONTACT_TYPES_CHOICES)
datetime_when = models.DateTimeField(verbose_name="Contact on", help_text='When did the contact occurred?')
success = models.BooleanField(default=False)
comment = models.TextField(max_length=1024, null=True, blank=True)
def __str__(self):
return "%s %s" % (self.subject, self.worker)
def __unicode__(self):
return "%s %s" % (self.subject, self.worker)
smash/web/static/AdminLTE/img/avatar.png

7.93 KiB

smash/web/static/AdminLTE/img/avatar04.png

13.2 KiB

smash/web/static/AdminLTE/img/avatar2.png

8.07 KiB

smash/web/static/AdminLTE/img/avatar3.png

9.02 KiB

smash/web/static/AdminLTE/img/avatar5.png

7.4 KiB

smash/web/static/AdminLTE/img/boxed-bg.jpg

121 KiB

smash/web/static/AdminLTE/img/boxed-bg.png

42.7 KiB

smash/web/static/AdminLTE/img/credit/american-express.png

2.11 KiB

smash/web/static/AdminLTE/img/credit/cirrus.png

1.54 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment