| @@ -0,0 +1,54 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-02-01 02:18 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0003_historydata'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='InsuranceData', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('type', models.CharField(blank=True, max_length=9, null=True)), | ||
| ('provider', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('plan_name', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('policy_number', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('group_number', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_lname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_mname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_fname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_relationship', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_ss', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_dob', models.DateField(blank=True, db_column='subscriber_DOB', null=True)), | ||
| ('subscriber_street', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_postal_code', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_city', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_state', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_country', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_phone', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer_street', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer_postal_code', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer_state', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer_country', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('subscriber_employer_city', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('copay', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('date', models.DateField()), | ||
| ('pid', models.BigIntegerField()), | ||
| ('subscriber_sex', models.CharField(blank=True, max_length=25, null=True)), | ||
| ('accept_assignment', models.CharField(max_length=5)), | ||
| ('policy_type', models.CharField(max_length=25)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'insurance_data', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,128 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-02-09 18:26 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0004_insurancedata'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='FormEncounter', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('reason', models.TextField(blank=True, null=True)), | ||
| ('facility', models.TextField(blank=True, null=True)), | ||
| ('facility_id', models.IntegerField()), | ||
| ('pid', models.BigIntegerField(blank=True, null=True)), | ||
| ('encounter', models.BigIntegerField(blank=True, null=True)), | ||
| ('onset_date', models.DateTimeField(blank=True, null=True)), | ||
| ('sensitivity', models.CharField(blank=True, max_length=30, null=True)), | ||
| ('billing_note', models.TextField(blank=True, null=True)), | ||
| ('pc_catid', models.IntegerField()), | ||
| ('last_level_billed', models.IntegerField()), | ||
| ('last_level_closed', models.IntegerField()), | ||
| ('last_stmt_date', models.DateField(blank=True, null=True)), | ||
| ('stmt_count', models.IntegerField()), | ||
| ('provider_id', models.IntegerField(blank=True, null=True)), | ||
| ('supervisor_id', models.IntegerField(blank=True, null=True)), | ||
| ('invoice_refno', models.CharField(max_length=31)), | ||
| ('referral_source', models.CharField(max_length=31)), | ||
| ('billing_facility', models.IntegerField()), | ||
| ], | ||
| options={ | ||
| 'db_table': 'form_encounter', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='Forms', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('encounter', models.BigIntegerField(blank=True, null=True)), | ||
| ('form_name', models.TextField(blank=True, null=True)), | ||
| ('form_id', models.BigIntegerField(blank=True, null=True)), | ||
| ('pid', models.BigIntegerField(blank=True, null=True)), | ||
| ('user', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('groupname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('authorized', models.IntegerField(blank=True, null=True)), | ||
| ('deleted', models.IntegerField()), | ||
| ('formdir', models.TextField(blank=True, null=True)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'forms', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='IssueEncounter', | ||
| fields=[ | ||
| ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
| ('pid', models.IntegerField()), | ||
| ('list_id', models.IntegerField()), | ||
| ('encounter', models.IntegerField()), | ||
| ('resolved', models.IntegerField()), | ||
| ], | ||
| options={ | ||
| 'db_table': 'issue_encounter', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='Lists', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('type', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('title', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('begdate', models.DateField(blank=True, null=True)), | ||
| ('enddate', models.DateField(blank=True, null=True)), | ||
| ('returndate', models.DateField(blank=True, null=True)), | ||
| ('occurrence', models.IntegerField(blank=True, null=True)), | ||
| ('classification', models.IntegerField(blank=True, null=True)), | ||
| ('referredby', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('extrainfo', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('diagnosis', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('activity', models.IntegerField(blank=True, null=True)), | ||
| ('comments', models.TextField(blank=True, null=True)), | ||
| ('pid', models.BigIntegerField(blank=True, null=True)), | ||
| ('user', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('groupname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('outcome', models.IntegerField()), | ||
| ('destination', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('reinjury_id', models.BigIntegerField()), | ||
| ('injury_part', models.CharField(max_length=31)), | ||
| ('injury_type', models.CharField(max_length=31)), | ||
| ('injury_grade', models.CharField(max_length=31)), | ||
| ('reaction', models.CharField(max_length=255)), | ||
| ('external_allergyid', models.IntegerField(blank=True, null=True)), | ||
| ('erx_source', models.CharField(max_length=1)), | ||
| ('erx_uploaded', models.CharField(max_length=1)), | ||
| ('modifydate', models.DateTimeField()), | ||
| ], | ||
| options={ | ||
| 'db_table': 'lists', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='ListsTouch', | ||
| fields=[ | ||
| ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
| ('pid', models.BigIntegerField()), | ||
| ('type', models.CharField(max_length=255)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'lists_touch', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,98 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-02-18 23:42 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0005_formencounter_forms_issueencounter_lists_liststouch'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='Facility', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('name', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('phone', models.CharField(blank=True, max_length=30, null=True)), | ||
| ('fax', models.CharField(blank=True, max_length=30, null=True)), | ||
| ('email', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('street', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('city', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('state', models.CharField(blank=True, max_length=50, null=True)), | ||
| ('country_code', models.CharField(blank=True, max_length=10, null=True)), | ||
| ('facility_npi', models.CharField(blank=True, max_length=15, null=True)), | ||
| ('service_location', models.IntegerField()), | ||
| ('billing_location', models.IntegerField()), | ||
| ('color', models.CharField(max_length=7)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'facility', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='FormReviewofs', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('pid', models.BigIntegerField(blank=True, null=True)), | ||
| ('user', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('groupname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('authorized', models.IntegerField(blank=True, null=True)), | ||
| ('dry_mouth', models.CharField(blank=True, max_length=5, null=True)), | ||
| ('heart_attack', models.CharField(blank=True, max_length=5, null=True)), | ||
| ('high_blood_pressure', models.CharField(blank=True, max_length=5, null=True)), | ||
| ('insulin_dependent_diabetes', models.CharField(blank=True, max_length=5, null=True)), | ||
| ('noninsulin_dependent_diabetes', models.CharField(blank=True, max_length=5, null=True)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'form_reviewofs', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='FormRos', | ||
| fields=[ | ||
| ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
| ('pid', models.IntegerField()), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('heart_problem', models.CharField(blank=True, max_length=3, null=True)), | ||
| ('p', models.CharField(blank=True, max_length=3, null=True)), | ||
| ('n_numbness', models.CharField(blank=True, max_length=3, null=True)), | ||
| ('n_weakness', models.CharField(blank=True, max_length=3, null=True)), | ||
| ('diabetes', models.CharField(blank=True, max_length=3, null=True)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'form_ros', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| migrations.CreateModel( | ||
| name='FormVitals', | ||
| fields=[ | ||
| ('id', models.BigIntegerField(primary_key=True, serialize=False)), | ||
| ('date', models.DateTimeField(blank=True, null=True)), | ||
| ('pid', models.BigIntegerField(blank=True, null=True)), | ||
| ('user', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('groupname', models.CharField(blank=True, max_length=255, null=True)), | ||
| ('authorized', models.IntegerField(blank=True, null=True)), | ||
| ('pulse', models.FloatField(blank=True, null=True)), | ||
| ('bps', models.CharField(blank=True, max_length=40, null=True)), | ||
| ('bpd', models.CharField(blank=True, max_length=40, null=True)), | ||
| ('weight', models.FloatField(blank=True, null=True)), | ||
| ('height', models.FloatField(blank=True, null=True)), | ||
| ('bmi', models.FloatField(blank=True, db_column='BMI', null=True)), | ||
| ('waist_circ', models.FloatField(blank=True, null=True)), | ||
| ('activity', models.IntegerField(blank=True, null=True)), | ||
| ('temperature', models.FloatField(blank=True, null=True)), | ||
| ], | ||
| options={ | ||
| 'db_table': 'form_vitals', | ||
| 'managed': False, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,28 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 01:51 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
| import django.db.models.deletion | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0006_facility_formreviewofs_formros_formvitals'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='MedicalHistory', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('lat', models.FloatField(blank=True, null=True, verbose_name='Latitude')), | ||
| ('long', models.FloatField(blank=True, null=True, verbose_name='Longitude')), | ||
| ('history_data_ref', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='api.HistoryData')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,22 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 02:15 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0007_medicalhistory'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.RemoveField( | ||
| model_name='medicalhistory', | ||
| name='history_data_ref', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='MedicalHistory', | ||
| ), | ||
| ] |
| @@ -0,0 +1,36 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 02:16 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
| import django.db.models.deletion | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0008_auto_20160315_0215'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='HistoryData_test', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('pid', models.BigIntegerField()), | ||
| ('tobacco', models.TextField(blank=True, null=True)), | ||
| ], | ||
| ), | ||
| migrations.CreateModel( | ||
| name='MedicalHistory', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('lat', models.FloatField(blank=True, null=True, verbose_name='Latitude')), | ||
| ('long', models.FloatField(blank=True, null=True, verbose_name='Longitude')), | ||
| ('history_data', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.HistoryData_test')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,25 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 02:17 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0009_historydata_test_medicalhistory'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.RemoveField( | ||
| model_name='medicalhistory', | ||
| name='history_data', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='HistoryData_test', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='MedicalHistory', | ||
| ), | ||
| ] |
| @@ -0,0 +1,36 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 02:18 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
| import django.db.models.deletion | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0010_auto_20160315_0217'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='HistoryData_test', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('pid', models.BigIntegerField()), | ||
| ('tobacco', models.TextField(blank=True, null=True)), | ||
| ], | ||
| ), | ||
| migrations.CreateModel( | ||
| name='MedicalHistory', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('lat', models.FloatField(blank=True, null=True, verbose_name='Latitude')), | ||
| ('long', models.FloatField(blank=True, null=True, verbose_name='Longitude')), | ||
| ('history_data', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.HistoryData_test')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,25 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:32 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0011_historydata_test_medicalhistory'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.RemoveField( | ||
| model_name='medicalhistory', | ||
| name='history_data', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='HistoryData_test', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='MedicalHistory', | ||
| ), | ||
| ] |
| @@ -0,0 +1,26 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:38 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0012_auto_20160315_2232'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='MedicalHistory', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('lat', models.FloatField(blank=True, null=True, verbose_name='Latitude')), | ||
| ('long', models.FloatField(blank=True, null=True, verbose_name='Longitude')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,19 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:40 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0013_medicalhistory'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.AlterModelOptions( | ||
| name='patientdata', | ||
| options={'managed': True}, | ||
| ), | ||
| ] |
| @@ -0,0 +1,19 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:47 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0014_auto_20160315_2240'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.AlterModelOptions( | ||
| name='patientdata', | ||
| options={'managed': False}, | ||
| ), | ||
| ] |
| @@ -0,0 +1,19 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:47 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0015_auto_20160315_2247'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.AlterModelOptions( | ||
| name='patientdata', | ||
| options={'managed': True}, | ||
| ), | ||
| ] |
| @@ -0,0 +1,31 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:54 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
| import django.db.models.deletion | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0016_auto_20160315_2247'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='Test', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('med_his', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='foreign', to='api.MedicalHistory')), | ||
| ('med_his2', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='onetoone', to='api.MedicalHistory')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| migrations.AlterModelOptions( | ||
| name='patientdata', | ||
| options={'managed': False}, | ||
| ), | ||
| ] |
| @@ -0,0 +1,26 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:55 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0017_auto_20160315_2254'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.RemoveField( | ||
| model_name='test', | ||
| name='med_his', | ||
| ), | ||
| migrations.RemoveField( | ||
| model_name='test', | ||
| name='med_his2', | ||
| ), | ||
| migrations.DeleteModel( | ||
| name='Test', | ||
| ), | ||
| ] |
| @@ -0,0 +1,27 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-15 22:55 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations, models | ||
| import django.db.models.deletion | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0018_auto_20160315_2255'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.CreateModel( | ||
| name='Test', | ||
| fields=[ | ||
| ('id', models.AutoField(primary_key=True, serialize=False)), | ||
| ('med_his', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='foreign', to='api.MedicalHistory')), | ||
| ('med_his2', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='onetoone', to='api.MedicalHistory')), | ||
| ], | ||
| options={ | ||
| 'managed': True, | ||
| }, | ||
| ), | ||
| ] |
| @@ -0,0 +1,19 @@ | ||
| # -*- coding: utf-8 -*- | ||
| # Generated by Django 1.9.1 on 2016-03-16 00:01 | ||
| from __future__ import unicode_literals | ||
|
|
||
| from django.db import migrations | ||
|
|
||
|
|
||
| class Migration(migrations.Migration): | ||
|
|
||
| dependencies = [ | ||
| ('api', '0019_test'), | ||
| ] | ||
|
|
||
| operations = [ | ||
| migrations.RemoveField( | ||
| model_name='test', | ||
| name='med_his2', | ||
| ), | ||
| ] |
| @@ -0,0 +1,339 @@ | ||
| from __future__ import unicode_literals | ||
| from django.db import models | ||
| from django.utils import timezone | ||
|
|
||
| # Create your models here. | ||
|
|
||
| # TODO (Ryan 3/14) - Add in the additional fields for blood sugar into OpenEMR via admin GUI | ||
| # http://htmlpreview.github.io/?https://github.com/fndtn357/openemr/blob/master/assets/openemrER.html | ||
|
|
||
| """ | ||
| Store a list of all medical objects associated with a patient data object | ||
| """ | ||
|
|
||
|
|
||
| class MedicalHistory(models.Model): | ||
| id = models.AutoField(primary_key=True) | ||
| lat = models.FloatField(verbose_name='Latitude', blank=True, null=True) | ||
| long = models.FloatField(verbose_name='Longitude', blank=True, null=True) | ||
|
|
||
| class Meta: | ||
| managed = True | ||
|
|
||
|
|
||
| """ | ||
| This class will be used primarily for search functionality, as well as holding information that will typically not | ||
| change for each patient once they are created. | ||
| """ | ||
|
|
||
|
|
||
| class Test(models.Model): | ||
| id = models.AutoField(primary_key=True) | ||
| med_his = models.ForeignKey('MedicalHistory', related_name='foreign') | ||
|
|
||
| class Meta: | ||
| managed = True | ||
|
|
||
|
|
||
| class PatientData(models.Model): | ||
| pid = models.BigIntegerField(unique=True, primary_key=True) | ||
| pubpid = models.CharField(max_length=255) | ||
| ss = models.CharField(max_length=255) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| fname = models.CharField(max_length=255) | ||
| lname = models.CharField(max_length=255) | ||
| mname = models.CharField(max_length=255, null=True) | ||
| dob = models.DateField(db_column='DOB', blank=True, null=True) # Field name made lowercase. | ||
| sex = models.CharField(max_length=255) | ||
| status = models.CharField(max_length=255, null=True) | ||
| email = models.CharField(max_length=255) | ||
| street = models.CharField(max_length=255, null=True) | ||
| postal_code = models.CharField(max_length=255) | ||
| city = models.CharField(max_length=255, null=True) | ||
| state = models.CharField(max_length=255, null=True) | ||
| country_code = models.CharField(max_length=255, null=True) | ||
| phone_contact = models.CharField(max_length=255, null=True) | ||
| phone_cell = models.CharField(max_length=255, null=True) | ||
| med_his = models.OneToOneField('MedicalHistory', default=1, related_name='patient_data') | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + self.lname | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'patient_data' | ||
|
|
||
| """ | ||
| This is the original PatientData class. We might need to use it in the even that we need python to migrate our new | ||
| columns and indexes over | ||
| class PatientData(models.Model): | ||
| id = models.BigIntegerField() | ||
| title = models.CharField(max_length=255) | ||
| language = models.CharField(max_length=255) | ||
| financial = models.CharField(max_length=255) | ||
| fname = models.CharField(max_length=255) | ||
| lname = models.CharField(max_length=255) | ||
| mname = models.CharField(max_length=255) | ||
| dob = models.DateField(db_column='DOB', blank=True, null=True) # Field name made lowercase. | ||
| street = models.CharField(max_length=255) | ||
| postal_code = models.CharField(max_length=255) | ||
| city = models.CharField(max_length=255) | ||
| state = models.CharField(max_length=255) | ||
| country_code = models.CharField(max_length=255) | ||
| drivers_license = models.CharField(max_length=255) | ||
| ss = models.CharField(max_length=255) | ||
| occupation = models.TextField(blank=True, null=True) | ||
| phone_home = models.CharField(max_length=255) | ||
| phone_biz = models.CharField(max_length=255) | ||
| phone_contact = models.CharField(max_length=255) | ||
| phone_cell = models.CharField(max_length=255) | ||
| pharmacy_id = models.IntegerField() | ||
| status = models.CharField(max_length=255) | ||
| contact_relationship = models.CharField(max_length=255) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| sex = models.CharField(max_length=255) | ||
| referrer = models.CharField(max_length=255) | ||
| referrerid = models.CharField(db_column='referrerID', max_length=255) # Field name made lowercase. | ||
| providerid = models.IntegerField(db_column='providerID', blank=True, null=True) # Field name made lowercase. | ||
| ref_providerid = models.IntegerField(db_column='ref_providerID', blank=True, null=True) # Field name made lowercase. | ||
| email = models.CharField(max_length=255) | ||
| email_direct = models.CharField(max_length=255) | ||
| ethnoracial = models.CharField(max_length=255) | ||
| race = models.CharField(max_length=255) | ||
| ethnicity = models.CharField(max_length=255) | ||
| interpretter = models.CharField(max_length=255) | ||
| migrantseasonal = models.CharField(max_length=255) | ||
| family_size = models.CharField(max_length=255) | ||
| monthly_income = models.CharField(max_length=255) | ||
| homeless = models.CharField(max_length=255) | ||
| financial_review = models.DateTimeField(blank=True, null=True) | ||
| pubpid = models.CharField(max_length=255) | ||
| pid = models.BigIntegerField(unique=True) | ||
| genericname1 = models.CharField(max_length=255) | ||
| genericval1 = models.CharField(max_length=255) | ||
| genericname2 = models.CharField(max_length=255) | ||
| genericval2 = models.CharField(max_length=255) | ||
| hipaa_mail = models.CharField(max_length=3) | ||
| hipaa_voice = models.CharField(max_length=3) | ||
| hipaa_notice = models.CharField(max_length=3) | ||
| hipaa_message = models.CharField(max_length=20) | ||
| hipaa_allowsms = models.CharField(max_length=3) | ||
| hipaa_allowemail = models.CharField(max_length=3) | ||
| squad = models.CharField(max_length=32) | ||
| fitness = models.IntegerField() | ||
| referral_source = models.CharField(max_length=30) | ||
| usertext1 = models.CharField(max_length=255) | ||
| usertext2 = models.CharField(max_length=255) | ||
| usertext3 = models.CharField(max_length=255) | ||
| usertext4 = models.CharField(max_length=255) | ||
| usertext5 = models.CharField(max_length=255) | ||
| usertext6 = models.CharField(max_length=255) | ||
| usertext7 = models.CharField(max_length=255) | ||
| usertext8 = models.CharField(max_length=255) | ||
| userlist1 = models.CharField(max_length=255) | ||
| userlist2 = models.CharField(max_length=255) | ||
| userlist3 = models.CharField(max_length=255) | ||
| userlist4 = models.CharField(max_length=255) | ||
| userlist5 = models.CharField(max_length=255) | ||
| userlist6 = models.CharField(max_length=255) | ||
| userlist7 = models.CharField(max_length=255) | ||
| pricelevel = models.CharField(max_length=255) | ||
| regdate = models.DateField(blank=True, null=True) | ||
| contrastart = models.DateField(blank=True, null=True) | ||
| completed_ad = models.CharField(max_length=3) | ||
| ad_reviewed = models.DateField(blank=True, null=True) | ||
| vfc = models.CharField(max_length=255) | ||
| mothersname = models.CharField(max_length=255) | ||
| guardiansname = models.CharField(max_length=255) | ||
| allow_imm_reg_use = models.CharField(max_length=255) | ||
| allow_imm_info_share = models.CharField(max_length=255) | ||
| allow_health_info_ex = models.CharField(max_length=255) | ||
| allow_patient_portal = models.CharField(max_length=31) | ||
| deceased_date = models.DateTimeField(blank=True, null=True) | ||
| deceased_reason = models.CharField(max_length=255) | ||
| soap_import_status = models.IntegerField(blank=True, null=True) | ||
| cmsportal_login = models.CharField(max_length=60) | ||
| class Meta: | ||
| managed = False | ||
| db_table = 'patient_data' | ||
| """ | ||
|
|
||
| """ | ||
| These classes are used to store data from a patients visit, including vitals, location, and family history | ||
| """ | ||
|
|
||
|
|
||
| class HistoryData(models.Model): | ||
| id = models.AutoField(primary_key=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| pid = models.BigIntegerField(null=False) | ||
| tobacco = models.TextField(blank=True, null=True) | ||
| relatives_diabetes = models.TextField(blank=True, null=True) | ||
| relatives_high_blood_pressure = models.TextField(blank=True, null=True) | ||
| med_his = models.ForeignKey(MedicalHistory, default=3, related_name='history_data') | ||
|
|
||
| def __unicode__(self): | ||
| return '%d: %s' % (self.pid, self.date) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'history_data' | ||
| ordering = ['date'] | ||
|
|
||
| class FormEncounter(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| pid = models.BigIntegerField(blank=True, null=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| facility = models.TextField(blank=True, null=True) | ||
| facility_id = models.IntegerField() | ||
| encounter = models.BigIntegerField(blank=True, null=True) | ||
| provider_id = models.IntegerField(blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + str(self.encounter) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'form_encounter' | ||
|
|
||
| class IssueEncounter(models.Model): | ||
| # (ming) set primary_key to pid instead of the default autoincremented id | ||
| pid = models.IntegerField(primary_key=True) | ||
| list_id = models.IntegerField() | ||
| encounter = models.IntegerField() | ||
| resolved = models.IntegerField() | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + str(self.encounter) + ', ' + str(self.list_id) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'issue_encounter' | ||
| unique_together = (('pid', 'list_id', 'encounter'),) | ||
|
|
||
| class Forms(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| encounter = models.BigIntegerField(blank=True, null=True) | ||
| form_name = models.TextField(blank=True, null=True) | ||
| form_id = models.BigIntegerField(blank=True, null=True) | ||
| pid = models.BigIntegerField(blank=True, null=True) | ||
| user = models.CharField(max_length=255, blank=True, null=True) | ||
| deleted = models.IntegerField() | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + str(self.encounter) + ', ' + self.form_name | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'forms' | ||
|
|
||
| class Lists(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| pid = models.BigIntegerField(blank=True, null=True) | ||
| user = models.CharField(max_length=255, blank=True, null=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| type = models.CharField(max_length=255, blank=True, null=True) | ||
| title = models.CharField(max_length=255, blank=True, null=True) | ||
| begdate = models.DateField(blank=True, null=True) | ||
| enddate = models.DateField(blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + self.user + ', ' + self.type | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'lists' | ||
|
|
||
| class ListsTouch(models.Model): | ||
| # (ming) set primary_key to pid instead of the default autoincremented id | ||
| pid = models.BigIntegerField(primary_key=True) | ||
| type = models.CharField(max_length=255) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + self.type | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'lists_touch' | ||
| unique_together = (('pid', 'type'),) | ||
|
|
||
| class Facility(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| name = models.CharField(max_length=255, blank=True, null=True) | ||
| phone = models.CharField(max_length=30, blank=True, null=True) | ||
| fax = models.CharField(max_length=30, blank=True, null=True) | ||
| email = models.CharField(max_length=255, blank=True, null=True) | ||
| street = models.CharField(max_length=255, blank=True, null=True) | ||
| city = models.CharField(max_length=255, blank=True, null=True) | ||
| state = models.CharField(max_length=50, blank=True, null=True) | ||
| country_code = models.CharField(max_length=10, blank=True, null=True) | ||
| facility_npi = models.CharField(max_length=15, blank=True, null=True) | ||
| service_location = models.IntegerField() | ||
| billing_location = models.IntegerField() | ||
| color = models.CharField(max_length=7) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.id) + ', ' + self.name | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'facility' | ||
|
|
||
| class FormVitals(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| pid = models.BigIntegerField(blank=True, null=True) | ||
| user = models.CharField(max_length=255, blank=True, null=True) | ||
| groupname = models.CharField(max_length=255, blank=True, null=True) | ||
| pulse = models.FloatField(blank=True, null=True) | ||
| bps = models.CharField(max_length=40, blank=True, null=True) | ||
| bpd = models.CharField(max_length=40, blank=True, null=True) | ||
| weight = models.FloatField(blank=True, null=True) | ||
| height = models.FloatField(blank=True, null=True) | ||
| bmi = models.FloatField(db_column='BMI', blank=True, null=True) # Field name made lowercase. | ||
| waist_circ = models.FloatField(blank=True, null=True) | ||
| activity = models.IntegerField(blank=True, null=True) | ||
| temperature = models.FloatField(blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'form_vitals' | ||
|
|
||
| class FormReviewofs(models.Model): | ||
| id = models.BigIntegerField(primary_key=True) | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| pid = models.BigIntegerField(blank=True, null=True) | ||
| dry_mouth = models.CharField(max_length=5, blank=True, null=True) | ||
| high_blood_pressure = models.CharField(max_length=5, blank=True, null=True) | ||
| user = models.CharField(max_length=255, blank=True, null=True) | ||
| groupname = models.CharField(max_length=255, blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + str(self.date) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'form_reviewofs' | ||
|
|
||
|
|
||
| class FormRos(models.Model): | ||
| pid = models.IntegerField() | ||
| date = models.DateTimeField(blank=True, null=True) | ||
| p = models.CharField(max_length=3, blank=True, null=True) | ||
| n_numbness = models.CharField(max_length=3, blank=True, null=True) | ||
| n_weakness = models.CharField(max_length=3, blank=True, null=True) | ||
| diabetes = models.CharField(max_length=3, blank=True, null=True) | ||
|
|
||
| def __unicode__(self): | ||
| return str(self.pid) + ', ' + str(self.date) | ||
|
|
||
| class Meta: | ||
| managed = False | ||
| db_table = 'form_ros' |
| @@ -0,0 +1,73 @@ | ||
| from django.contrib.auth.models import User, Group | ||
| from rest_framework import serializers | ||
| from api.models import PatientData, HistoryData, MedicalHistory | ||
|
|
||
|
|
||
| class UserSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = User | ||
| fields = ('url', 'username', 'email', 'groups') | ||
|
|
||
|
|
||
| class GroupSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = Group | ||
| fields = ('url', 'name') | ||
|
|
||
|
|
||
| class HistoryDataSerializer(serializers.ModelSerializer): | ||
| class Meta: | ||
| model = HistoryData | ||
|
|
||
|
|
||
| class PatientDataSerializer(serializers.ModelSerializer): | ||
| pid = serializers.IntegerField() | ||
| pubpid = serializers.CharField() | ||
| ss = serializers.CharField() | ||
| date = serializers.DateTimeField() | ||
| fname = serializers.CharField() | ||
| lname = serializers.CharField() | ||
| mname = serializers.CharField() | ||
| dob = serializers.DateField() | ||
| sex = serializers.CharField() | ||
| status = serializers.CharField() | ||
| email = serializers.CharField() | ||
| street = serializers.CharField() | ||
| postal_code = serializers.CharField() | ||
| city = serializers.CharField() | ||
| state = serializers.CharField() | ||
| country_code = serializers.CharField() | ||
| phone_contact = serializers.CharField() | ||
| phone_cell = serializers.CharField() | ||
|
|
||
| class Meta: | ||
| model = PatientData | ||
|
|
||
|
|
||
| class MedicalHistorySerializer(serializers.ModelSerializer): | ||
| history_data = HistoryDataSerializer(many=True) | ||
| patient_data = PatientDataSerializer() | ||
| #history_data = HistoryDataSerializer | ||
| class Meta: | ||
| model = MedicalHistory | ||
|
|
||
| ''' | ||
| pid = serializers.IntegerField(source='patientdata.pid') | ||
| pubpid = serializers.CharField(source='patientdata.pubpid') | ||
| ss = serializers.CharField(source='patientdata.ss') | ||
| date = serializers.DateTimeField(source='patientdata.date') | ||
| fname = serializers.CharField(source='patientdata.fname') | ||
| lname = serializers.CharField(source='patientdata.lname') | ||
| mname = serializers.CharField(source='patientdata.mname') | ||
| dob = serializers.DateField(source='patientdata.dob') | ||
| sex = serializers.CharField(source='patientdata.sex') | ||
| status = serializers.CharField(source='patientdata.status') | ||
| email = serializers.CharField(source='patientdata.email') | ||
| street = serializers.CharField(source='patientdata.street') | ||
| postal_code = serializers.CharField(source='patientdata.postal_code') | ||
| city = serializers.CharField(source='patientdata.city') | ||
| state = serializers.CharField(source='patientdata.state') | ||
| country_code = serializers.CharField(source='patientdata.country_code') | ||
| phone_contact = serializers.CharField(source='patientdata.phone_contact') | ||
| phone_cell = serializers.CharField(source='patientdata.phone_cell') | ||
| ''' |
| @@ -0,0 +1,3 @@ | ||
| from django.test import TestCase | ||
|
|
||
| # Create your tests here. |
| @@ -0,0 +1,31 @@ | ||
| from django.conf.urls import url, include | ||
| from rest_framework.authtoken import views as rest_views | ||
| from api import views | ||
| from rest_framework import routers | ||
|
|
||
| router = routers.DefaultRouter() | ||
| router.register(r'users', views.UserViewSet) | ||
| router.register(r'groups', views.GroupViewSet) | ||
| #router.register(r'records/patient-data', views.PatientDataViewSet) | ||
| router.register(r'records/history-data', views.HistoryDataViewSet) | ||
| router.register(r'records/medical-history', views.MedicalHistoryViewSet) | ||
|
|
||
|
|
||
| """ | ||
| API Endpoints for authentication | ||
| """ | ||
| urlpatterns = [ | ||
| url(r'^', include(router.urls)), # API Routing | ||
| url(r'^token/$', rest_views.obtain_auth_token), # POST to get token | ||
| url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')), # Authenticate to API | ||
| ] | ||
|
|
||
| """ | ||
| API Endpoints for app functionality | ||
| """ | ||
|
|
||
|
|
||
| urlpatterns += [ | ||
| url(r'^records/(?P<pid>[0-9]+)/history-data', views.HistoryDataList.as_view()), # Return a list of visits based on pid | ||
| url(r'^records/patient-data', views.PatientDataList.as_view()) | ||
| ] |
| @@ -0,0 +1,60 @@ | ||
| from django.shortcuts import render | ||
| from django.contrib.auth.models import User, Group | ||
| from api.models import PatientData, HistoryData, MedicalHistory | ||
| from rest_framework import viewsets | ||
| from api.serializers import UserSerializer, GroupSerializer, PatientDataSerializer, HistoryDataSerializer, MedicalHistorySerializer | ||
| from django.template import RequestContext | ||
| from django.shortcuts import render_to_response | ||
| from rest_framework import filters, generics | ||
| from rest_framework import authentication, permissions | ||
|
|
||
|
|
||
| def index(request): | ||
| return render_to_response('bootstrap/index.html') | ||
|
|
||
|
|
||
| class UserViewSet(viewsets.ModelViewSet): | ||
| # API endpoint that allows users to be viewed or deleted | ||
| queryset = User.objects.all() | ||
| serializer_class = UserSerializer | ||
|
|
||
|
|
||
| class GroupViewSet(viewsets.ModelViewSet): | ||
| # API endpoint that allows groups to be viewed or edited | ||
| queryset = Group.objects.all() | ||
| serializer_class = GroupSerializer | ||
|
|
||
|
|
||
| class PatientDataViewSet(viewsets.ModelViewSet): | ||
| # API endpoint for patient data to be viewed or added to | ||
| queryset = PatientData.objects.all() | ||
| serializer_class = PatientDataSerializer | ||
| filter_backends = (filters.DjangoFilterBackend,) | ||
| filter_fields = ('fname', 'lname', '',) | ||
|
|
||
|
|
||
| class HistoryDataViewSet(viewsets.ModelViewSet): | ||
| # API endpoint for patient data to be viewed or added to | ||
| queryset = HistoryData.objects.all() | ||
| serializer_class = HistoryDataSerializer | ||
|
|
||
|
|
||
| class MedicalHistoryViewSet(viewsets.ModelViewSet): | ||
| queryset = MedicalHistory.objects.all() | ||
| serializer_class = MedicalHistorySerializer | ||
|
|
||
|
|
||
| class HistoryDataList(generics.ListAPIView): | ||
| serializer_class = HistoryDataSerializer | ||
| #authentication_classes = (authentication.TokenAuthentication) | ||
| #permission_classes = (permissions.IsAuthenticatedOrReadOnly) | ||
|
|
||
| def get_queryset(self): | ||
| pid = self.kwargs['pid'] | ||
| return HistoryData.objects.filter(pid=pid) | ||
|
|
||
| class PatientDataList(generics.ListAPIView): | ||
| serializer_class = PatientDataSerializer | ||
| queryset = PatientData.objects.all() | ||
| filter_backends = (filters.DjangoFilterBackend,) | ||
| filter_fields = ('fname', 'lname',) |
| @@ -1,3 +1,9 @@ | ||
| Django==1.9.1 | ||
| django-filter==0.13.0 | ||
| django-registration-redux==1.3 | ||
| django-smtp-ssl==1.0 | ||
| djangorestframework==3.3.2 | ||
| mysqlclient==1.3.7 | ||
| wheel==0.24.0 | ||
| gunicorn==19.4.3 | ||
| gevent==1.1a2 |
| @@ -0,0 +1,9 @@ | ||
| #!/bin/bash | ||
|
|
||
| # This script will start the Django server in the background on port 8000. | ||
|
|
||
| echo | ||
| echo starting... | ||
| python manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 & | ||
| echo Django server started in background | ||
| echo |
| @@ -0,0 +1,378 @@ | ||
| /*! | ||
| * Start Bootstrap - Grayscale Bootstrap Theme (http://startbootstrap.com) | ||
| * Code licensed under the Apache License v2.0. | ||
| * For details, see http://www.apache.org/licenses/LICENSE-2.0. | ||
| */ | ||
|
|
||
| body { | ||
| width: 100%; | ||
| height: 100%; | ||
| font-family: Lora,"Helvetica Neue",Helvetica,Arial,sans-serif; | ||
| color: #000; | ||
| background-color: #fff; | ||
| } | ||
|
|
||
| html { | ||
| width: 100%; | ||
| height: 100%; | ||
| } | ||
|
|
||
| h1, | ||
| h2, | ||
| h3, | ||
| h4, | ||
| h5, | ||
| h6 { | ||
| margin: 0 0 35px; | ||
| text-transform: uppercase; | ||
| font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; | ||
| font-weight: 700; | ||
| letter-spacing: 1px; | ||
| } | ||
|
|
||
| p { | ||
| margin: 0 0 25px; | ||
| font-size: 18px; | ||
| line-height: 1.5; | ||
| } | ||
|
|
||
| @media(min-width:768px) { | ||
| p { | ||
| margin: 0 0 35px; | ||
| font-size: 20px; | ||
| line-height: 1.6; | ||
| } | ||
| } | ||
|
|
||
| a { | ||
| color: #42dca3; | ||
| -webkit-transition: all .2s ease-in-out; | ||
| -moz-transition: all .2s ease-in-out; | ||
| transition: all .2s ease-in-out; | ||
| } | ||
|
|
||
| a:hover, | ||
| a:focus { | ||
| text-decoration: none; | ||
| color: #1d9b6c; | ||
| } | ||
|
|
||
| .light { | ||
| font-weight: 400; | ||
| } | ||
|
|
||
| .navbar-custom { | ||
| margin-bottom: 0; | ||
| border-bottom: 1px solid rgba(255,255,255,.3); | ||
| text-transform: uppercase; | ||
| font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; | ||
| background-color: #000; | ||
| } | ||
|
|
||
| .navbar-custom .navbar-brand { | ||
| font-weight: 700; | ||
| } | ||
|
|
||
| .navbar-custom .navbar-brand:focus { | ||
| outline: 0; | ||
| } | ||
|
|
||
| .navbar-custom .navbar-brand .navbar-toggle { | ||
| padding: 4px 6px; | ||
| font-size: 16px; | ||
| color: #fff; | ||
| } | ||
|
|
||
| .navbar-custom .navbar-brand .navbar-toggle:focus, | ||
| .navbar-custom .navbar-brand .navbar-toggle:active { | ||
| outline: 0; | ||
| } | ||
|
|
||
| .navbar-custom a { | ||
| color: #fff; | ||
| } | ||
|
|
||
| .navbar-custom .nav li a { | ||
| -webkit-transition: background .3s ease-in-out; | ||
| -moz-transition: background .3s ease-in-out; | ||
| transition: background .3s ease-in-out; | ||
| } | ||
|
|
||
| .navbar-custom .nav li a:hover { | ||
| outline: 0; | ||
| color: rgba(255,255,255,.8); | ||
| background-color: transparent; | ||
| } | ||
|
|
||
| .navbar-custom .nav li a:focus, | ||
| .navbar-custom .nav li a:active { | ||
| outline: 0; | ||
| background-color: transparent; | ||
| } | ||
|
|
||
| .navbar-custom .nav li.active { | ||
| outline: 0; | ||
| } | ||
|
|
||
| .navbar-custom .nav li.active a { | ||
| background-color: rgba(255,255,255,.3); | ||
| } | ||
|
|
||
| .navbar-custom .nav li.active a:hover { | ||
| color: #fff; | ||
| } | ||
|
|
||
| @media(min-width:768px) { | ||
| .navbar-custom { | ||
| padding: 20px 0; | ||
| border-bottom: 0; | ||
| letter-spacing: 1px; | ||
| background: 0 0; | ||
| -webkit-transition: background .5s ease-in-out,padding .5s ease-in-out; | ||
| -moz-transition: background .5s ease-in-out,padding .5s ease-in-out; | ||
| transition: background .5s ease-in-out,padding .5s ease-in-out; | ||
| } | ||
|
|
||
| .navbar-custom.top-nav-collapse { | ||
| padding: 0; | ||
| border-bottom: 1px solid rgba(255,255,255,.3); | ||
| background: #000; | ||
| } | ||
| } | ||
|
|
||
| .intro { | ||
| display: table; | ||
| width: 100%; | ||
| height: auto; | ||
| padding: 100px 0; | ||
| text-align: center; | ||
| color: #fff; | ||
| background: url(../img/intro-bg.jpg) no-repeat bottom center scroll; | ||
| background-color: #000; | ||
| -webkit-background-size: cover; | ||
| -moz-background-size: cover; | ||
| background-size: cover; | ||
| -o-background-size: cover; | ||
| } | ||
|
|
||
| .intro .intro-body { | ||
| display: table-cell; | ||
| vertical-align: middle; | ||
| } | ||
|
|
||
| .intro .intro-body .brand-heading { | ||
| font-size: 40px; | ||
| } | ||
|
|
||
| .intro .intro-body .intro-text { | ||
| font-size: 18px; | ||
| } | ||
|
|
||
| @media(min-width:768px) { | ||
| .intro { | ||
| height: 100%; | ||
| padding: 0; | ||
| } | ||
|
|
||
| .intro .intro-body .brand-heading { | ||
| font-size: 100px; | ||
| } | ||
|
|
||
| .intro .intro-body .intro-text { | ||
| font-size: 26px; | ||
| } | ||
| } | ||
|
|
||
| .btn-circle { | ||
| width: 70px; | ||
| height: 70px; | ||
| margin-top: 15px; | ||
| padding: 7px 16px; | ||
| border: 2px solid #fff; | ||
| border-radius: 100%!important; | ||
| font-size: 40px; | ||
| color: #fff; | ||
| background: 0 0; | ||
| -webkit-transition: background .3s ease-in-out; | ||
| -moz-transition: background .3s ease-in-out; | ||
| transition: background .3s ease-in-out; | ||
| } | ||
|
|
||
| .btn-circle:hover, | ||
| .btn-circle:focus { | ||
| outline: 0; | ||
| color: #fff; | ||
| background: rgba(255,255,255,.1); | ||
| } | ||
|
|
||
| .btn-circle i.animated { | ||
| -webkit-transition-property: -webkit-transform; | ||
| -webkit-transition-duration: 1s; | ||
| -moz-transition-property: -moz-transform; | ||
| -moz-transition-duration: 1s; | ||
| } | ||
|
|
||
| .btn-circle:hover i.animated { | ||
| -webkit-animation-name: pulse; | ||
| -moz-animation-name: pulse; | ||
| -webkit-animation-duration: 1.5s; | ||
| -moz-animation-duration: 1.5s; | ||
| -webkit-animation-iteration-count: infinite; | ||
| -moz-animation-iteration-count: infinite; | ||
| -webkit-animation-timing-function: linear; | ||
| -moz-animation-timing-function: linear; | ||
| } | ||
|
|
||
| @-webkit-keyframes pulse { | ||
| 0% { | ||
| -webkit-transform: scale(1); | ||
| transform: scale(1); | ||
| } | ||
|
|
||
| 50% { | ||
| -webkit-transform: scale(1.2); | ||
| transform: scale(1.2); | ||
| } | ||
|
|
||
| 100% { | ||
| -webkit-transform: scale(1); | ||
| transform: scale(1); | ||
| } | ||
| } | ||
|
|
||
| @-moz-keyframes pulse { | ||
| 0% { | ||
| -moz-transform: scale(1); | ||
| transform: scale(1); | ||
| } | ||
|
|
||
| 50% { | ||
| -moz-transform: scale(1.2); | ||
| transform: scale(1.2); | ||
| } | ||
|
|
||
| 100% { | ||
| -moz-transform: scale(1); | ||
| transform: scale(1); | ||
| } | ||
| } | ||
|
|
||
| .content-section { | ||
| padding-top: 100px; | ||
| padding-bottom: 50px; | ||
| } | ||
|
|
||
| .download-section { | ||
| width: 100%; | ||
| padding: 50px 0; | ||
| color: #fff; | ||
| background: url(../img/downloads-bg.jpg) no-repeat center center scroll; | ||
| background-color: #000; | ||
| -webkit-background-size: cover; | ||
| -moz-background-size: cover; | ||
| background-size: cover; | ||
| -o-background-size: cover; | ||
| } | ||
|
|
||
| #map { | ||
| width: 100%; | ||
| height: 200px; | ||
| margin-top: 100px; | ||
| } | ||
|
|
||
| @media(min-width:767px) { | ||
| .content-section { | ||
| padding-top: 250px; | ||
| } | ||
|
|
||
| .download-section { | ||
| padding: 100px 0; | ||
| } | ||
|
|
||
| #map { | ||
| height: 400px; | ||
| margin-top: 250px; | ||
| } | ||
| } | ||
|
|
||
| .btn { | ||
| border-radius: 0; | ||
| text-transform: uppercase; | ||
| font-family: Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif; | ||
| font-weight: 400; | ||
| -webkit-transition: all .3s ease-in-out; | ||
| -moz-transition: all .3s ease-in-out; | ||
| transition: all .3s ease-in-out; | ||
| } | ||
|
|
||
| .btn-default { | ||
| border: 1px solid #fdea79; | ||
| color: #000; | ||
| background-color: #fdea79; | ||
| } | ||
|
|
||
| .btn-default:hover, | ||
| .btn-default:focus { | ||
| border: 1px solid #fdea79; | ||
| outline: 0; | ||
| color: #000; | ||
| background-color: #fdea79; | ||
| } | ||
|
|
||
| ul.banner-social-buttons { | ||
| margin-top: 0; | ||
| } | ||
|
|
||
| @media(max-width:1199px) { | ||
| ul.banner-social-buttons { | ||
| margin-top: 15px; | ||
| } | ||
| } | ||
|
|
||
| @media(max-width:767px) { | ||
| ul.banner-social-buttons li { | ||
| display: block; | ||
| margin-bottom: 20px; | ||
| padding: 0; | ||
| } | ||
|
|
||
| ul.banner-social-buttons li:last-child { | ||
| margin-bottom: 0; | ||
| } | ||
| } | ||
|
|
||
| footer { | ||
| clear: both; | ||
| position: relative; | ||
| padding: 50px 0; | ||
| color: #fff; | ||
| background: #19336f; | ||
| } | ||
|
|
||
| footer p { | ||
| margin: 0; | ||
| } | ||
|
|
||
| ::-moz-selection { | ||
| text-shadow: none; | ||
| background: #fcfcfc; | ||
| background: rgba(255,255,255,.2); | ||
| } | ||
|
|
||
| ::selection { | ||
| text-shadow: none; | ||
| background: #fcfcfc; | ||
| background: rgba(255,255,255,.2); | ||
| } | ||
|
|
||
| img::selection { | ||
| background: 0 0; | ||
| } | ||
|
|
||
| img::-moz-selection { | ||
| background: 0 0; | ||
| } | ||
|
|
||
| body { | ||
| webkit-tap-highlight-color: rgba(255,255,255,.2); | ||
| } |
| @@ -0,0 +1,16 @@ | ||
| // Bordered & Pulled | ||
| // ------------------------- | ||
|
|
||
| .@{fa-css-prefix}-border { | ||
| padding: .2em .25em .15em; | ||
| border: solid .08em @fa-border-color; | ||
| border-radius: .1em; | ||
| } | ||
|
|
||
| .pull-right { float: right; } | ||
| .pull-left { float: left; } | ||
|
|
||
| .@{fa-css-prefix} { | ||
| &.pull-left { margin-right: .3em; } | ||
| &.pull-right { margin-left: .3em; } | ||
| } |
| @@ -0,0 +1,11 @@ | ||
| // Base Class Definition | ||
| // ------------------------- | ||
|
|
||
| .@{fa-css-prefix} { | ||
| display: inline-block; | ||
| font: normal normal normal 14px/1 FontAwesome; // shortening font declaration | ||
| font-size: inherit; // can't have font-size inherit on line above, so need to override | ||
| text-rendering: auto; // optimizelegibility throws things off #1094 | ||
| -webkit-font-smoothing: antialiased; | ||
| -moz-osx-font-smoothing: grayscale; | ||
| } |
| @@ -0,0 +1,6 @@ | ||
| // Fixed Width Icons | ||
| // ------------------------- | ||
| .@{fa-css-prefix}-fw { | ||
| width: (18em / 14); | ||
| text-align: center; | ||
| } |
| @@ -0,0 +1,17 @@ | ||
| /*! | ||
| * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome | ||
| * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) | ||
| */ | ||
|
|
||
| @import "variables.less"; | ||
| @import "mixins.less"; | ||
| @import "path.less"; | ||
| @import "core.less"; | ||
| @import "larger.less"; | ||
| @import "fixed-width.less"; | ||
| @import "list.less"; | ||
| @import "bordered-pulled.less"; | ||
| @import "spinning.less"; | ||
| @import "rotated-flipped.less"; | ||
| @import "stacked.less"; | ||
| @import "icons.less"; |
| @@ -0,0 +1,13 @@ | ||
| // Icon Sizes | ||
| // ------------------------- | ||
|
|
||
| /* makes the font 33% larger relative to the icon container */ | ||
| .@{fa-css-prefix}-lg { | ||
| font-size: (4em / 3); | ||
| line-height: (3em / 4); | ||
| vertical-align: -15%; | ||
| } | ||
| .@{fa-css-prefix}-2x { font-size: 2em; } | ||
| .@{fa-css-prefix}-3x { font-size: 3em; } | ||
| .@{fa-css-prefix}-4x { font-size: 4em; } | ||
| .@{fa-css-prefix}-5x { font-size: 5em; } |
| @@ -0,0 +1,19 @@ | ||
| // List Icons | ||
| // ------------------------- | ||
|
|
||
| .@{fa-css-prefix}-ul { | ||
| padding-left: 0; | ||
| margin-left: @fa-li-width; | ||
| list-style-type: none; | ||
| > li { position: relative; } | ||
| } | ||
| .@{fa-css-prefix}-li { | ||
| position: absolute; | ||
| left: -@fa-li-width; | ||
| width: @fa-li-width; | ||
| top: (2em / 14); | ||
| text-align: center; | ||
| &.@{fa-css-prefix}-lg { | ||
| left: (-@fa-li-width + (4em / 14)); | ||
| } | ||
| } |
| @@ -0,0 +1,25 @@ | ||
| // Mixins | ||
| // -------------------------- | ||
|
|
||
| .fa-icon() { | ||
| display: inline-block; | ||
| font: normal normal normal 14px/1 FontAwesome; // shortening font declaration | ||
| font-size: inherit; // can't have font-size inherit on line above, so need to override | ||
| text-rendering: auto; // optimizelegibility throws things off #1094 | ||
| -webkit-font-smoothing: antialiased; | ||
| -moz-osx-font-smoothing: grayscale; | ||
| } | ||
|
|
||
| .fa-icon-rotate(@degrees, @rotation) { | ||
| filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); | ||
| -webkit-transform: rotate(@degrees); | ||
| -ms-transform: rotate(@degrees); | ||
| transform: rotate(@degrees); | ||
| } | ||
|
|
||
| .fa-icon-flip(@horiz, @vert, @rotation) { | ||
| filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); | ||
| -webkit-transform: scale(@horiz, @vert); | ||
| -ms-transform: scale(@horiz, @vert); | ||
| transform: scale(@horiz, @vert); | ||
| } |
| @@ -0,0 +1,14 @@ | ||
| /* FONT PATH | ||
| * -------------------------- */ | ||
|
|
||
| @font-face { | ||
| font-family: 'FontAwesome'; | ||
| src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); | ||
| src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), | ||
| url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), | ||
| url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), | ||
| url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); | ||
| // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts | ||
| font-weight: normal; | ||
| font-style: normal; | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| // Rotated & Flipped Icons | ||
| // ------------------------- | ||
|
|
||
| .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } | ||
| .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } | ||
| .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } | ||
|
|
||
| .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } | ||
| .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } | ||
|
|
||
| // Hook for IE8-9 | ||
| // ------------------------- | ||
|
|
||
| :root .@{fa-css-prefix}-rotate-90, | ||
| :root .@{fa-css-prefix}-rotate-180, | ||
| :root .@{fa-css-prefix}-rotate-270, | ||
| :root .@{fa-css-prefix}-flip-horizontal, | ||
| :root .@{fa-css-prefix}-flip-vertical { | ||
| filter: none; | ||
| } |
| @@ -0,0 +1,29 @@ | ||
| // Spinning Icons | ||
| // -------------------------- | ||
|
|
||
| .@{fa-css-prefix}-spin { | ||
| -webkit-animation: fa-spin 2s infinite linear; | ||
| animation: fa-spin 2s infinite linear; | ||
| } | ||
|
|
||
| @-webkit-keyframes fa-spin { | ||
| 0% { | ||
| -webkit-transform: rotate(0deg); | ||
| transform: rotate(0deg); | ||
| } | ||
| 100% { | ||
| -webkit-transform: rotate(359deg); | ||
| transform: rotate(359deg); | ||
| } | ||
| } | ||
|
|
||
| @keyframes fa-spin { | ||
| 0% { | ||
| -webkit-transform: rotate(0deg); | ||
| transform: rotate(0deg); | ||
| } | ||
| 100% { | ||
| -webkit-transform: rotate(359deg); | ||
| transform: rotate(359deg); | ||
| } | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| // Stacked Icons | ||
| // ------------------------- | ||
|
|
||
| .@{fa-css-prefix}-stack { | ||
| position: relative; | ||
| display: inline-block; | ||
| width: 2em; | ||
| height: 2em; | ||
| line-height: 2em; | ||
| vertical-align: middle; | ||
| } | ||
| .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { | ||
| position: absolute; | ||
| left: 0; | ||
| width: 100%; | ||
| text-align: center; | ||
| } | ||
| .@{fa-css-prefix}-stack-1x { line-height: inherit; } | ||
| .@{fa-css-prefix}-stack-2x { font-size: 2em; } | ||
| .@{fa-css-prefix}-inverse { color: @fa-inverse; } |
| @@ -0,0 +1,16 @@ | ||
| // Bordered & Pulled | ||
| // ------------------------- | ||
|
|
||
| .#{$fa-css-prefix}-border { | ||
| padding: .2em .25em .15em; | ||
| border: solid .08em $fa-border-color; | ||
| border-radius: .1em; | ||
| } | ||
|
|
||
| .pull-right { float: right; } | ||
| .pull-left { float: left; } | ||
|
|
||
| .#{$fa-css-prefix} { | ||
| &.pull-left { margin-right: .3em; } | ||
| &.pull-right { margin-left: .3em; } | ||
| } |
| @@ -0,0 +1,11 @@ | ||
| // Base Class Definition | ||
| // ------------------------- | ||
|
|
||
| .#{$fa-css-prefix} { | ||
| display: inline-block; | ||
| font: normal normal normal 14px/1 FontAwesome; // shortening font declaration | ||
| font-size: inherit; // can't have font-size inherit on line above, so need to override | ||
| text-rendering: auto; // optimizelegibility throws things off #1094 | ||
| -webkit-font-smoothing: antialiased; | ||
| -moz-osx-font-smoothing: grayscale; | ||
| } |
| @@ -0,0 +1,6 @@ | ||
| // Fixed Width Icons | ||
| // ------------------------- | ||
| .#{$fa-css-prefix}-fw { | ||
| width: (18em / 14); | ||
| text-align: center; | ||
| } |
| @@ -0,0 +1,13 @@ | ||
| // Icon Sizes | ||
| // ------------------------- | ||
|
|
||
| /* makes the font 33% larger relative to the icon container */ | ||
| .#{$fa-css-prefix}-lg { | ||
| font-size: (4em / 3); | ||
| line-height: (3em / 4); | ||
| vertical-align: -15%; | ||
| } | ||
| .#{$fa-css-prefix}-2x { font-size: 2em; } | ||
| .#{$fa-css-prefix}-3x { font-size: 3em; } | ||
| .#{$fa-css-prefix}-4x { font-size: 4em; } | ||
| .#{$fa-css-prefix}-5x { font-size: 5em; } |
| @@ -0,0 +1,19 @@ | ||
| // List Icons | ||
| // ------------------------- | ||
|
|
||
| .#{$fa-css-prefix}-ul { | ||
| padding-left: 0; | ||
| margin-left: $fa-li-width; | ||
| list-style-type: none; | ||
| > li { position: relative; } | ||
| } | ||
| .#{$fa-css-prefix}-li { | ||
| position: absolute; | ||
| left: -$fa-li-width; | ||
| width: $fa-li-width; | ||
| top: (2em / 14); | ||
| text-align: center; | ||
| &.#{$fa-css-prefix}-lg { | ||
| left: -$fa-li-width + (4em / 14); | ||
| } | ||
| } |
| @@ -0,0 +1,25 @@ | ||
| // Mixins | ||
| // -------------------------- | ||
|
|
||
| @mixin fa-icon() { | ||
| display: inline-block; | ||
| font: normal normal normal 14px/1 FontAwesome; // shortening font declaration | ||
| font-size: inherit; // can't have font-size inherit on line above, so need to override | ||
| text-rendering: auto; // optimizelegibility throws things off #1094 | ||
| -webkit-font-smoothing: antialiased; | ||
| -moz-osx-font-smoothing: grayscale; | ||
| } | ||
|
|
||
| @mixin fa-icon-rotate($degrees, $rotation) { | ||
| filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); | ||
| -webkit-transform: rotate($degrees); | ||
| -ms-transform: rotate($degrees); | ||
| transform: rotate($degrees); | ||
| } | ||
|
|
||
| @mixin fa-icon-flip($horiz, $vert, $rotation) { | ||
| filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); | ||
| -webkit-transform: scale($horiz, $vert); | ||
| -ms-transform: scale($horiz, $vert); | ||
| transform: scale($horiz, $vert); | ||
| } |
| @@ -0,0 +1,14 @@ | ||
| /* FONT PATH | ||
| * -------------------------- */ | ||
|
|
||
| @font-face { | ||
| font-family: 'FontAwesome'; | ||
| src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); | ||
| src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), | ||
| url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), | ||
| url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), | ||
| url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); | ||
| //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts | ||
| font-weight: normal; | ||
| font-style: normal; | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| // Rotated & Flipped Icons | ||
| // ------------------------- | ||
|
|
||
| .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } | ||
| .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } | ||
| .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } | ||
|
|
||
| .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } | ||
| .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } | ||
|
|
||
| // Hook for IE8-9 | ||
| // ------------------------- | ||
|
|
||
| :root .#{$fa-css-prefix}-rotate-90, | ||
| :root .#{$fa-css-prefix}-rotate-180, | ||
| :root .#{$fa-css-prefix}-rotate-270, | ||
| :root .#{$fa-css-prefix}-flip-horizontal, | ||
| :root .#{$fa-css-prefix}-flip-vertical { | ||
| filter: none; | ||
| } |
| @@ -0,0 +1,29 @@ | ||
| // Spinning Icons | ||
| // -------------------------- | ||
|
|
||
| .#{$fa-css-prefix}-spin { | ||
| -webkit-animation: fa-spin 2s infinite linear; | ||
| animation: fa-spin 2s infinite linear; | ||
| } | ||
|
|
||
| @-webkit-keyframes fa-spin { | ||
| 0% { | ||
| -webkit-transform: rotate(0deg); | ||
| transform: rotate(0deg); | ||
| } | ||
| 100% { | ||
| -webkit-transform: rotate(359deg); | ||
| transform: rotate(359deg); | ||
| } | ||
| } | ||
|
|
||
| @keyframes fa-spin { | ||
| 0% { | ||
| -webkit-transform: rotate(0deg); | ||
| transform: rotate(0deg); | ||
| } | ||
| 100% { | ||
| -webkit-transform: rotate(359deg); | ||
| transform: rotate(359deg); | ||
| } | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| // Stacked Icons | ||
| // ------------------------- | ||
|
|
||
| .#{$fa-css-prefix}-stack { | ||
| position: relative; | ||
| display: inline-block; | ||
| width: 2em; | ||
| height: 2em; | ||
| line-height: 2em; | ||
| vertical-align: middle; | ||
| } | ||
| .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { | ||
| position: absolute; | ||
| left: 0; | ||
| width: 100%; | ||
| text-align: center; | ||
| } | ||
| .#{$fa-css-prefix}-stack-1x { line-height: inherit; } | ||
| .#{$fa-css-prefix}-stack-2x { font-size: 2em; } | ||
| .#{$fa-css-prefix}-inverse { color: $fa-inverse; } |
| @@ -0,0 +1,17 @@ | ||
| /*! | ||
| * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome | ||
| * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) | ||
| */ | ||
|
|
||
| @import "variables"; | ||
| @import "mixins"; | ||
| @import "path"; | ||
| @import "core"; | ||
| @import "larger"; | ||
| @import "fixed-width"; | ||
| @import "list"; | ||
| @import "bordered-pulled"; | ||
| @import "spinning"; | ||
| @import "rotated-flipped"; | ||
| @import "stacked"; | ||
| @import "icons"; |
| @@ -0,0 +1,35 @@ | ||
| /*! | ||
| * Start Bootstrap - Grayscale Bootstrap Theme (http://startbootstrap.com) | ||
| * Code licensed under the Apache License v2.0. | ||
| * For details, see http://www.apache.org/licenses/LICENSE-2.0. | ||
| */ | ||
|
|
||
| // jQuery to collapse the navbar on scroll | ||
| function collapseNavbar() { | ||
| if ($(".navbar").offset().top > 50) { | ||
| $(".navbar-fixed-top").addClass("top-nav-collapse"); | ||
| } else { | ||
| $(".navbar-fixed-top").removeClass("top-nav-collapse"); | ||
| } | ||
| } | ||
|
|
||
| $(window).scroll(collapseNavbar); | ||
| $(document).ready(collapseNavbar); | ||
|
|
||
| // jQuery for page scrolling feature - requires jQuery Easing plugin | ||
| $(function() { | ||
| $('a.page-scroll').bind('click', function(event) { | ||
| var $anchor = $(this); | ||
| $('html, body').stop().animate({ | ||
| scrollTop: $($anchor.attr('href')).offset().top | ||
| }, 1500, 'easeInOutExpo'); | ||
| event.preventDefault(); | ||
| }); | ||
| }); | ||
|
|
||
| // Closes the Responsive Menu on Menu Item Click | ||
| $('.navbar-collapse ul li a').click(function() { | ||
| if ($(this).attr('class') != 'dropdown-toggle active' && $(this).attr('class') != 'dropdown-toggle') { | ||
| $('.navbar-toggle:visible').click(); | ||
| } | ||
| }); |
| @@ -0,0 +1,66 @@ | ||
| {% load i18n %} | ||
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
|
|
||
| <head> | ||
|
|
||
| <meta charset="utf-8"> | ||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
|
|
||
| {% block meta %} | ||
| <meta name="description" content=""> | ||
| <meta name="author" content=""> | ||
| {% endblock %} | ||
|
|
||
| <title>RemoteHCS{% block title %}{% endblock %}</title> | ||
|
|
||
| <!-- Bootstrap Core CSS --> | ||
| <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | ||
|
|
||
| {% block head %}{% endblock %} | ||
|
|
||
| <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||
| <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||
| <!--[if lt IE 9]> | ||
| <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||
| <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||
| <![endif]--> | ||
|
|
||
| </head> | ||
|
|
||
|
|
||
| <div id="content"> | ||
|
|
||
| <!-- Header --> | ||
| {% block header %} | ||
| <a href="{% url 'index' %}">{% trans "Home" %}</a> | | ||
|
|
||
| {% if user.is_authenticated %} | ||
| {% trans "Logged in" %}: {{ user.username }} | ||
| (<a href="{% url 'auth_logout' %}">{% trans "Log out" %}</a> | | ||
| <a href="{% url 'auth_password_change' %}">{% trans "Change password" %}</a>) | ||
| {% else %} | ||
| <a href="{% url 'auth_login' %}">{% trans "Log in" %}</a> | ||
| {% endif %} | ||
| <hr /> | ||
| {% endblock %} | ||
|
|
||
|
|
||
| <!-- Body Content --> | ||
| {% block content %} | ||
|
|
||
| {% endblock %} | ||
|
|
||
|
|
||
| <!-- Footer --> | ||
| {% block footer %} | ||
| <footer> | ||
| <div class="container text-center"> | ||
| <p>Copyright © RemoteHCS 2014</p> | ||
| </div> | ||
| </footer> | ||
| {% endblock %} | ||
|
|
||
| </div> | ||
| </html> |
| @@ -0,0 +1,145 @@ | ||
| {% extends 'base.html' %} | ||
|
|
||
|
|
||
| <!-- Within Head tag --> | ||
| {% block head %} | ||
| <!-- Custom CSS --> | ||
| <link href="/static/bootstrap/css/grayscale.css" rel="stylesheet"> | ||
| <!-- Custom Fonts --> | ||
| <link href="/static/bootstrap/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | ||
| <link href="http://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css"> | ||
| <link href="http://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css"> | ||
| {% endblock %} | ||
|
|
||
|
|
||
|
|
||
|
|
||
| <body id="page-top" data-spy="scroll" data-target=".navbar-fixed-top"> | ||
|
|
||
| {% block header %} | ||
| <!-- Navigation --> | ||
| <nav class="navbar navbar-custom navbar-fixed-top" role="navigation"> | ||
| <div class="container"> | ||
| <div class="navbar-header"> | ||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-main-collapse"> | ||
| <i class="fa fa-bars" style="color:#fff;"></i> | ||
| </button> | ||
| <a class="navbar-brand page-scroll" href="#page-top"> | ||
| <span class="light">Remote </span><i class="fa fa-plus-circle"></i> HCS | ||
| </a> | ||
| </div> | ||
|
|
||
| <!-- Collect the nav links, forms, and other content for toggling --> | ||
| <div class="collapse navbar-collapse navbar-right navbar-main-collapse"> | ||
| <ul class="nav navbar-nav"> | ||
| <!-- Hidden li included to remove active class from about link when scrolled up past about section --> | ||
| <li class="hidden"> | ||
| <a href="#page-top"></a> | ||
| </li> | ||
| <li> | ||
| <a class="page-scroll" href="#about">About</a> | ||
| </li> | ||
| <!-- No downloads | ||
| <li> | ||
| <a class="page-scroll" href="#download">Download</a> | ||
| </li> | ||
| --> | ||
| <li> | ||
| <a class="page-scroll" href="#contact">Contact</a> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
| <!-- /.navbar-collapse --> | ||
| </div> | ||
| <!-- /.container --> | ||
| </nav> | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <!-- Intro Header --> | ||
| <header class="intro"> | ||
| <div class="intro-body"> | ||
| <div class="container"> | ||
| <div class="row"> | ||
| <div class="col-md-8 col-md-offset-2"> | ||
| <h1 class="brand-heading">Remote HCS</h1> | ||
| <p class="intro-text">An open source, mobile solution for OpenEMR.<br>Created at Boston University.</p> | ||
| <ul class="list-inline banner-social-buttons"> | ||
| <li> | ||
| <a href="/api" class="btn btn-default btn-lg"><i class="fa fa-code fa-fw"></i> <span class="network-name">API</span></a> | ||
| </li> | ||
| <li> | ||
| <a href="/admin" class="btn btn-default btn-lg"><i class="fa fa-cog fa-fw"></i> <span class="network-name">Admin</span></a> | ||
| </li> | ||
| <li> | ||
| <a href="http://remotehcs.com/openemr" class="btn btn-default btn-lg"><i class="fa fa-user-md fa-fw"></i> <span class="network-name">OpenEMR</span></a> | ||
| </li> | ||
| <li> | ||
| <a href="/accounts/register" class="btn btn-default btn-lg"><i class="fa fa-user fa-fw"></i> <span class="network-name">Make User</span></a> | ||
| </li> | ||
| </ul> | ||
| <a href="#about" class="btn btn-circle page-scroll"> | ||
| <i class="fa fa-angle-double-down animated"></i> | ||
| </a> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </header> | ||
|
|
||
| <!-- About Section --> | ||
| <section id="about" class="container content-section text-center"> | ||
| <div class="row"> | ||
| <div class="col-lg-8 col-lg-offset-2"> | ||
| <h2>About RemoteHCS</h2> | ||
| <p>This is under development :)</p> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- Download Section --> | ||
| <!-- No downloads | ||
| <section id="download" class="content-section text-center"> | ||
| <div class="download-section"> | ||
| <div class="container"> | ||
| <div class="col-lg-8 col-lg-offset-2"> | ||
| <h2>Download Grayscale</h2> | ||
| <p>You can download Grayscale for free on the preview page at Start Bootstrap.</p> | ||
| <a href="http://startbootstrap.com/template-overviews/grayscale/" class="btn btn-default btn-lg">Visit Download Page</a> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </section> | ||
| --> | ||
|
|
||
| <!-- Contact Section --> | ||
| <section id="contact" class="container content-section text-center"> | ||
| <div class="row"> | ||
| <div class="col-lg-8 col-lg-offset-2"> | ||
| <h2>Contact Us</h2> | ||
| <p>Feel free to email us to provide some feedback on our project, give us suggestions, or to just say hello!</p> | ||
| <p><a href="mailto:noreply@remotehcs.com">noreply@remotehcs.com</a> | ||
| </p> | ||
| <ul class="list-inline banner-social-buttons"> | ||
| <li> | ||
| <a href="https://github.com/ryanoflaherty/OpenEMR-API" class="btn btn-default btn-lg"><i class="fa fa-github fa-fw"></i> <span class="network-name">Github</span></a> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- jQuery --> | ||
| <script src="/static/bootstrap/js/jquery.js"></script> | ||
|
|
||
| <!-- Bootstrap Core JavaScript --> | ||
| <script src="/static/bootstrap/js/bootstrap.min.js"></script> | ||
|
|
||
| <!-- Plugin JavaScript --> | ||
| <script src="/static/bootstrap/js/jquery.easing.min.js"></script> | ||
|
|
||
| <!-- Custom Theme JavaScript --> | ||
| <script src="/static/bootstrap/js/grayscale.js"></script> | ||
|
|
||
| {% endblock %} | ||
| </body> |
| @@ -0,0 +1,8 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
|
|
||
| <p>{% trans "Account activation failed" %}</p> | ||
|
|
||
| {% endblock %} |
| @@ -0,0 +1,16 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block header %} | ||
| <header> | ||
| <nav> | ||
| <a href="/">Home</a> | ||
| </nav> | ||
| </header> | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <section id="login" class="container content-section text-center"> | ||
| <p>{% trans "Your account is now activated." %}</p> | ||
| </section> | ||
| {% endblock %} |
| @@ -0,0 +1,6 @@ | ||
| {% load i18n %} | ||
| {% trans "Activate account at" %} {{ site.name }}: | ||
|
|
||
| http://remotehcs.com:8000{% url 'registration_activate' activation_key %} | ||
|
|
||
| {% blocktrans %}Link is valid for {{ expiration_days }} days.{% endblocktrans %} |
| @@ -0,0 +1 @@ | ||
| {% load i18n %}{% trans "Account activation on" %} {{ site.name }} |
| @@ -0,0 +1,19 @@ | ||
| {% extends 'base.html' %} | ||
| {% load i18n %} | ||
|
|
||
| {% block title %} | Login {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <section id="login" class="container content-section text-center"> | ||
| <form method="post" action="."> | ||
| {% csrf_token %} | ||
| {{ form.as_p }} | ||
|
|
||
| <input type="submit" value="{% trans 'Log in' %}" /> | ||
| <input type="hidden" name="next" value="{{ next }}" /> | ||
| </form> | ||
|
|
||
| <p style="padding-top:20px">{% trans "Forgot password" %}? <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a>!</p> | ||
| <p>{% trans "Not member" %}? <a href="{% url 'registration_register' %}">{% trans "Register" %}</a>!</p> | ||
| </section> | ||
| {% endblock %} |
| @@ -0,0 +1,6 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <p>{% trans "Logged out" %}</p> | ||
| {% endblock %} |
| @@ -0,0 +1,6 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <p>{% trans "Password changed" %}</p> | ||
| {% endblock %} |
| @@ -0,0 +1,11 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <form method="post" action="."> | ||
| {% csrf_token %} | ||
| {{ form.as_p }} | ||
|
|
||
| <input type="submit" value="{% trans 'Submit' %}" /> | ||
| </form> | ||
| {% endblock %} |
| @@ -0,0 +1,10 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
|
|
||
| <p>{% trans "Password reset successfully" %}</p> | ||
|
|
||
| <p><a href="{% url 'auth_login' %}">{% trans "Log in" %}</a></p> | ||
|
|
||
| {% endblock %} |
| @@ -0,0 +1,21 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
|
|
||
| {% if validlink %} | ||
|
|
||
| <form method="post" action="."> | ||
| {% csrf_token %} | ||
| {{ form.as_p }} | ||
|
|
||
| <input type="submit" value="{% trans 'Submit' %}" /> | ||
| </form> | ||
|
|
||
| {% else %} | ||
|
|
||
| <p>{% trans "Password reset failed" %}</p> | ||
|
|
||
| {% endif %} | ||
|
|
||
| {% endblock %} |
| @@ -0,0 +1,6 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <p>{% trans "Email with password reset instructions has been sent." %}</p> | ||
| {% endblock %} |
| @@ -0,0 +1,5 @@ | ||
| {% load i18n %} | ||
| {% blocktrans %}Reset password at {{ site_name }}{% endblocktrans %}: | ||
| {% block reset_link %} | ||
| {{ protocol }}://{{ domain }}{% url 'auth_password_reset_confirm' uid token %} | ||
| {% endblock %} |
| @@ -0,0 +1,11 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <form method="post" action="."> | ||
| {% csrf_token %} | ||
| {{ form.as_p }} | ||
|
|
||
| <input type="submit" value="{% trans 'Submit' %}" /> | ||
| </form> | ||
| {% endblock %} |
| @@ -0,0 +1,6 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block content %} | ||
| <p>{% trans "Registration is currently closed." %}</p> | ||
| {% endblock %} |
| @@ -0,0 +1,16 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block header %} | ||
| <header> | ||
| <nav> | ||
| <a href="/">Home</a> | ||
| </nav> | ||
| </header> | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <section id="login" class="container content-section text-center"> | ||
| <p>{% trans "You are now registered. Activation email sent." %}</p> | ||
| </section> | ||
| {% endblock %} |
| @@ -0,0 +1,21 @@ | ||
| {% extends "base.html" %} | ||
| {% load i18n %} | ||
|
|
||
| {% block header %} | ||
| <header> | ||
| <nav> | ||
| <a href="/">Home</a> | ||
| </nav> | ||
| </header> | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <section id="login" class="container content-section text-center"> | ||
| <form method="post" action="."> | ||
| {% csrf_token %} | ||
| {{ form.as_p }} | ||
|
|
||
| <input type="submit" value="{% trans 'Submit' %}" /> | ||
| </form> | ||
| </section> | ||
| {% endblock %} |