tum %!s(int64=4) %!d(string=před) roky
revize
a4345e5759
100 změnil soubory, kde provedl 836 přidání a 0 odebrání
  1. 11 0
      Dockerfile
  2. 0 0
      backend/__init__.py
  3. binární
      backend/__pycache__/__init__.cpython-39.pyc
  4. binární
      backend/__pycache__/admin.cpython-39.pyc
  5. binární
      backend/__pycache__/apps.cpython-39.pyc
  6. binární
      backend/__pycache__/models.cpython-39.pyc
  7. binární
      backend/__pycache__/urls.cpython-39.pyc
  8. binární
      backend/__pycache__/views.cpython-39.pyc
  9. 57 0
      backend/admin.py
  10. 6 0
      backend/apps.py
  11. 26 0
      backend/migrations/0001_initial.py
  12. 20 0
      backend/migrations/0002_hospital_geolocation.py
  13. 19 0
      backend/migrations/0003_alter_hospital_address.py
  14. 19 0
      backend/migrations/0004_alter_hospital_location.py
  15. 18 0
      backend/migrations/0005_hospital_address_text.py
  16. 34 0
      backend/migrations/0006_bed_patient.py
  17. 24 0
      backend/migrations/0007_auto_20210718_0249.py
  18. 23 0
      backend/migrations/0008_auto_20210718_0659.py
  19. 23 0
      backend/migrations/0009_auto_20210718_0702.py
  20. 24 0
      backend/migrations/0010_auto_20210718_0713.py
  21. 29 0
      backend/migrations/0011_auto_20210718_0722.py
  22. 18 0
      backend/migrations/0012_patient_comment.py
  23. 28 0
      backend/migrations/0013_patientlog.py
  24. 20 0
      backend/migrations/0014_alter_patientlog_bed.py
  25. 20 0
      backend/migrations/0015_alter_patientlog_bed.py
  26. 29 0
      backend/migrations/0016_auto_20210718_1031.py
  27. 43 0
      backend/migrations/0017_ambulance_driver.py
  28. 19 0
      backend/migrations/0018_ambulance_color.py
  29. 27 0
      backend/migrations/0019_ambulanceticket.py
  30. 18 0
      backend/migrations/0020_driver_status.py
  31. 24 0
      backend/migrations/0021_auto_20210719_0014.py
  32. 21 0
      backend/migrations/0022_auto_20210719_0024.py
  33. 25 0
      backend/migrations/0023_place.py
  34. 0 0
      backend/migrations/__init__.py
  35. binární
      backend/migrations/__pycache__/0001_initial.cpython-39.pyc
  36. binární
      backend/migrations/__pycache__/0002_hospital_geolocation.cpython-39.pyc
  37. binární
      backend/migrations/__pycache__/0003_alter_hospital_address.cpython-39.pyc
  38. binární
      backend/migrations/__pycache__/0004_alter_hospital_location.cpython-39.pyc
  39. binární
      backend/migrations/__pycache__/0005_hospital_address_text.cpython-39.pyc
  40. binární
      backend/migrations/__pycache__/0006_bed_patient.cpython-39.pyc
  41. binární
      backend/migrations/__pycache__/0007_auto_20210718_0246.cpython-39.pyc
  42. binární
      backend/migrations/__pycache__/0007_auto_20210718_0249.cpython-39.pyc
  43. binární
      backend/migrations/__pycache__/0008_alter_patient_prefix.cpython-39.pyc
  44. binární
      backend/migrations/__pycache__/0008_auto_20210718_0659.cpython-39.pyc
  45. binární
      backend/migrations/__pycache__/0009_auto_20210718_0702.cpython-39.pyc
  46. binární
      backend/migrations/__pycache__/0010_auto_20210718_0711.cpython-39.pyc
  47. binární
      backend/migrations/__pycache__/0010_auto_20210718_0713.cpython-39.pyc
  48. binární
      backend/migrations/__pycache__/0011_auto_20210718_0722.cpython-39.pyc
  49. binární
      backend/migrations/__pycache__/0012_patient_comment.cpython-39.pyc
  50. binární
      backend/migrations/__pycache__/0013_patientlog.cpython-39.pyc
  51. binární
      backend/migrations/__pycache__/0014_alter_patientlog_bed.cpython-39.pyc
  52. binární
      backend/migrations/__pycache__/0015_alter_patientlog_bed.cpython-39.pyc
  53. binární
      backend/migrations/__pycache__/0016_auto_20210718_1031.cpython-39.pyc
  54. binární
      backend/migrations/__pycache__/0017_ambulance_driver.cpython-39.pyc
  55. binární
      backend/migrations/__pycache__/0018_ambulance_color.cpython-39.pyc
  56. binární
      backend/migrations/__pycache__/0019_ambulanceticket.cpython-39.pyc
  57. binární
      backend/migrations/__pycache__/0020_driver_status.cpython-39.pyc
  58. binární
      backend/migrations/__pycache__/0021_auto_20210719_0014.cpython-39.pyc
  59. binární
      backend/migrations/__pycache__/0022_auto_20210719_0024.cpython-39.pyc
  60. binární
      backend/migrations/__pycache__/0023_place.cpython-39.pyc
  61. binární
      backend/migrations/__pycache__/__init__.cpython-39.pyc
  62. 192 0
      backend/models.py
  63. 3 0
      backend/tests.py
  64. 7 0
      backend/urls.py
  65. 8 0
      backend/views.py
  66. 1 0
      data/db/PG_VERSION
  67. binární
      data/db/base/1/112
  68. binární
      data/db/base/1/113
  69. binární
      data/db/base/1/1247
  70. binární
      data/db/base/1/1247_fsm
  71. binární
      data/db/base/1/1247_vm
  72. binární
      data/db/base/1/1249
  73. binární
      data/db/base/1/1249_fsm
  74. binární
      data/db/base/1/1249_vm
  75. binární
      data/db/base/1/1255
  76. binární
      data/db/base/1/1255_fsm
  77. binární
      data/db/base/1/1255_vm
  78. binární
      data/db/base/1/1259
  79. binární
      data/db/base/1/1259_fsm
  80. binární
      data/db/base/1/1259_vm
  81. binární
      data/db/base/1/13245
  82. binární
      data/db/base/1/13245_fsm
  83. binární
      data/db/base/1/13245_vm
  84. 0 0
      data/db/base/1/13247
  85. binární
      data/db/base/1/13249
  86. binární
      data/db/base/1/13250
  87. binární
      data/db/base/1/13250_fsm
  88. binární
      data/db/base/1/13250_vm
  89. 0 0
      data/db/base/1/13252
  90. binární
      data/db/base/1/13254
  91. binární
      data/db/base/1/13255
  92. binární
      data/db/base/1/13255_fsm
  93. binární
      data/db/base/1/13255_vm
  94. 0 0
      data/db/base/1/13257
  95. binární
      data/db/base/1/13259
  96. binární
      data/db/base/1/13260
  97. binární
      data/db/base/1/13260_fsm
  98. binární
      data/db/base/1/13260_vm
  99. 0 0
      data/db/base/1/13262
  100. 0 0
      data/db/base/1/13264

+ 11 - 0
Dockerfile

@@ -0,0 +1,11 @@
1
+# syntax=docker/dockerfile:1
2
+FROM python:3
3
+ENV PYTHONUNBUFFERED=1
4
+WORKDIR /code
5
+COPY requirements.txt /code/
6
+RUN apt-get update && apt-get install -y \
7
+        gettext \
8
+        xfonts-thai \
9
+        gdal-bin libgdal-dev python3-gdal binutils libproj-dev
10
+RUN pip install -r requirements.txt
11
+COPY . /code/

+ 0 - 0
backend/__init__.py


binární
backend/__pycache__/__init__.cpython-39.pyc


binární
backend/__pycache__/admin.cpython-39.pyc


binární
backend/__pycache__/apps.cpython-39.pyc


binární
backend/__pycache__/models.cpython-39.pyc


binární
backend/__pycache__/urls.cpython-39.pyc


binární
backend/__pycache__/views.cpython-39.pyc


+ 57 - 0
backend/admin.py

@@ -0,0 +1,57 @@
1
+from django.contrib import admin
2
+from django.contrib.gis.admin import OSMGeoAdmin
3
+from .models import Hospital, Patient, Bed, PatientLog, Driver, Ambulance, AmbulanceTicket, Place
4
+from django_google_maps import widgets as map_widgets
5
+from django_google_maps import fields as map_fields
6
+from django_json_widget.widgets import JSONEditorWidget
7
+from django.db import models
8
+
9
+
10
+#@admin.register(Bed)
11
+
12
+@admin.register(AmbulanceTicket)
13
+class AmbulanceTicketAdmin(admin.ModelAdmin):
14
+    list_display = ('driver', 'ambulance', 'checkin_at', 'checkout_at', 'status')
15
+
16
+@admin.register(Place)
17
+class PlaceAdmin(admin.ModelAdmin):
18
+    formfield_overrides = {
19
+        map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
20
+        models.JSONField: {'widget': JSONEditorWidget},
21
+    }
22
+    #pass
23
+    #list_display = ('driver', 'ambulance', 'checkin_at', 'checkout_at', 'status')
24
+
25
+@admin.register(Ambulance)
26
+class AmbulanceAdmin(admin.ModelAdmin):
27
+    list_display = ('code', 'license_plate', 'brand', 'status')
28
+
29
+@admin.register(Driver)
30
+class DriverAdmin(admin.ModelAdmin):
31
+    pass
32
+
33
+class BedAdmin(admin.TabularInline):
34
+    model = Bed
35
+
36
+
37
+class PatientLogAdmin(admin.StackedInline):
38
+    model = PatientLog
39
+    #fields = ('hospital', 'notes', 'condition_level', 'status')
40
+
41
+@admin.register(Hospital)
42
+class HospitalAdmin(OSMGeoAdmin):
43
+    list_display = ('title', 'address', 'geolocation')
44
+    inlines = [BedAdmin,]
45
+    fields = ('title', 'address_text', 'address', 'geolocation',)
46
+    formfield_overrides = {
47
+        map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
48
+    }
49
+
50
+
51
+
52
+@admin.register(Patient)
53
+class PatientAdmin(admin.ModelAdmin):
54
+    formfield_overrides = {
55
+        map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
56
+    }
57
+    inlines = [PatientLogAdmin,]

+ 6 - 0
backend/apps.py

@@ -0,0 +1,6 @@
1
+from django.apps import AppConfig
2
+
3
+
4
+class BackendConfig(AppConfig):
5
+    default_auto_field = 'django.db.models.BigAutoField'
6
+    name = 'backend'

+ 26 - 0
backend/migrations/0001_initial.py

@@ -0,0 +1,26 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 14:58
2
+
3
+import django.contrib.gis.db.models.fields
4
+from django.db import migrations, models
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    initial = True
10
+
11
+    dependencies = [
12
+    ]
13
+
14
+    operations = [
15
+        migrations.CreateModel(
16
+            name='Hospital',
17
+            fields=[
18
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
+                ('title', models.CharField(max_length=200)),
20
+                ('location', django.contrib.gis.db.models.fields.PointField(srid=4326)),
21
+                ('address', models.CharField(max_length=100)),
22
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
23
+                ('updated_at', models.DateTimeField(auto_now=True)),
24
+            ],
25
+        ),
26
+    ]

+ 20 - 0
backend/migrations/0002_hospital_geolocation.py

@@ -0,0 +1,20 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 15:30
2
+
3
+from django.db import migrations
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0001_initial'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='hospital',
16
+            name='geolocation',
17
+            field=django_google_maps.fields.GeoLocationField(default=None, max_length=100),
18
+            preserve_default=False,
19
+        ),
20
+    ]

+ 19 - 0
backend/migrations/0003_alter_hospital_address.py

@@ -0,0 +1,19 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 15:39
2
+
3
+from django.db import migrations
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0002_hospital_geolocation'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AlterField(
15
+            model_name='hospital',
16
+            name='address',
17
+            field=django_google_maps.fields.AddressField(max_length=200),
18
+        ),
19
+    ]

+ 19 - 0
backend/migrations/0004_alter_hospital_location.py

@@ -0,0 +1,19 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 15:54
2
+
3
+import django.contrib.gis.db.models.fields
4
+from django.db import migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0003_alter_hospital_address'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AlterField(
15
+            model_name='hospital',
16
+            name='location',
17
+            field=django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326),
18
+        ),
19
+    ]

+ 18 - 0
backend/migrations/0005_hospital_address_text.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 15:56
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0004_alter_hospital_location'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='hospital',
15
+            name='address_text',
16
+            field=models.TextField(blank=True, null=True),
17
+        ),
18
+    ]

+ 34 - 0
backend/migrations/0006_bed_patient.py

@@ -0,0 +1,34 @@
1
+# Generated by Django 3.2.5 on 2021-07-17 16:17
2
+
3
+from django.db import migrations, models
4
+import django.db.models.deletion
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0005_hospital_address_text'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='Patient',
16
+            fields=[
17
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('first_name', models.CharField(max_length=100)),
19
+                ('last_name', models.CharField(max_length=100)),
20
+            ],
21
+        ),
22
+        migrations.CreateModel(
23
+            name='Bed',
24
+            fields=[
25
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
26
+                ('code', models.CharField(max_length=30)),
27
+                ('occupy', models.BooleanField(default=False)),
28
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
29
+                ('updated_at', models.DateTimeField(auto_now=True)),
30
+                ('hospital', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.hospital')),
31
+                ('patient', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.patient')),
32
+            ],
33
+        ),
34
+    ]

+ 24 - 0
backend/migrations/0007_auto_20210718_0249.py

@@ -0,0 +1,24 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 02:49
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0006_bed_patient'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='patient',
15
+            name='age',
16
+            field=models.IntegerField(default=5),
17
+            preserve_default=False,
18
+        ),
19
+        migrations.AddField(
20
+            model_name='patient',
21
+            name='prefix',
22
+            field=models.CharField(choices=[('นางสาว', 'นางสาว'), ('นาย', 'นาย'), ('นาง', 'นาง'), ('ด.ช.', 'เด็กชาย'), ('ด.ญ.', 'เด็กหญิง')], max_length=30, null=True),
23
+        ),
24
+    ]

+ 23 - 0
backend/migrations/0008_auto_20210718_0659.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 06:59
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0007_auto_20210718_0249'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='patient',
15
+            name='idcard',
16
+            field=models.CharField(max_length=20, null=True),
17
+        ),
18
+        migrations.AddField(
19
+            model_name='patient',
20
+            name='sex',
21
+            field=models.CharField(choices=[('Male', 'male'), ('Female', 'female')], max_length=30, null=True),
22
+        ),
23
+    ]

+ 23 - 0
backend/migrations/0009_auto_20210718_0702.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:02
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0008_auto_20210718_0659'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='patient',
15
+            name='photo',
16
+            field=models.FileField(blank=True, upload_to='uploads/%Y/%m/%d/', verbose_name='Photo'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='patient',
20
+            name='sex',
21
+            field=models.CharField(choices=[('male', 'Male'), ('female', 'Female')], max_length=30, null=True),
22
+        ),
23
+    ]

+ 24 - 0
backend/migrations/0010_auto_20210718_0713.py

@@ -0,0 +1,24 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:13
2
+
3
+from django.db import migrations
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0009_auto_20210718_0702'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='patient',
16
+            name='address',
17
+            field=django_google_maps.fields.AddressField(blank=True, max_length=200, null=True),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='patient',
21
+            name='geolocation',
22
+            field=django_google_maps.fields.GeoLocationField(blank=True, max_length=100, null=True),
23
+        ),
24
+    ]

+ 29 - 0
backend/migrations/0011_auto_20210718_0722.py

@@ -0,0 +1,29 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:22
2
+
3
+from django.db import migrations, models
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0010_auto_20210718_0713'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='patient',
16
+            name='condition_level',
17
+            field=models.CharField(choices=[('green', 'Green'), ('yellow', 'Yellow'), ('red', 'Red')], max_length=30, null=True),
18
+        ),
19
+        migrations.AlterField(
20
+            model_name='patient',
21
+            name='address',
22
+            field=django_google_maps.fields.AddressField(max_length=200, null=True),
23
+        ),
24
+        migrations.AlterField(
25
+            model_name='patient',
26
+            name='geolocation',
27
+            field=django_google_maps.fields.GeoLocationField(max_length=100, null=True),
28
+        ),
29
+    ]

+ 18 - 0
backend/migrations/0012_patient_comment.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:24
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0011_auto_20210718_0722'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='patient',
15
+            name='comment',
16
+            field=models.TextField(blank=True, null=True),
17
+        ),
18
+    ]

+ 28 - 0
backend/migrations/0013_patientlog.py

@@ -0,0 +1,28 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:29
2
+
3
+from django.db import migrations, models
4
+import django.db.models.deletion
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0012_patient_comment'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='PatientLog',
16
+            fields=[
17
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('notes', models.TextField(blank=True, null=True)),
19
+                ('condition_level', models.CharField(choices=[('green', 'Green'), ('yellow', 'Yellow'), ('red', 'Red')], max_length=30, null=True)),
20
+                ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive'), ('transfer', 'Transfer')], max_length=30, null=True)),
21
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
22
+                ('updated_at', models.DateTimeField(auto_now=True)),
23
+                ('bed', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.bed')),
24
+                ('hospital', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='backend.hospital')),
25
+                ('patient', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.patient')),
26
+            ],
27
+        ),
28
+    ]

+ 20 - 0
backend/migrations/0014_alter_patientlog_bed.py

@@ -0,0 +1,20 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:49
2
+
3
+from django.db import migrations
4
+import django.db.models.deletion
5
+import smart_selects.db_fields
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('backend', '0013_patientlog'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='patientlog',
17
+            name='bed',
18
+            field=smart_selects.db_fields.GroupedForeignKey(group_field='hospital', null=True, on_delete=django.db.models.deletion.CASCADE, to='backend.bed'),
19
+        ),
20
+    ]

+ 20 - 0
backend/migrations/0015_alter_patientlog_bed.py

@@ -0,0 +1,20 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 07:59
2
+
3
+from django.db import migrations
4
+import django.db.models.deletion
5
+import smart_selects.db_fields
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('backend', '0014_alter_patientlog_bed'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='patientlog',
17
+            name='bed',
18
+            field=smart_selects.db_fields.ChainedForeignKey(auto_choose=True, chained_field='hospital', chained_model_field='hospital', null=True, on_delete=django.db.models.deletion.CASCADE, to='backend.bed'),
19
+        ),
20
+    ]

+ 29 - 0
backend/migrations/0016_auto_20210718_1031.py

@@ -0,0 +1,29 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 10:31
2
+
3
+from django.db import migrations, models
4
+import django.db.models.deletion
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0015_alter_patientlog_bed'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='patientlog',
16
+            name='checkin_at',
17
+            field=models.DateTimeField(blank=True, null=True),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='patientlog',
21
+            name='checkout_at',
22
+            field=models.DateTimeField(blank=True, null=True),
23
+        ),
24
+        migrations.AlterField(
25
+            model_name='bed',
26
+            name='patient',
27
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.patient'),
28
+        ),
29
+    ]

+ 43 - 0
backend/migrations/0017_ambulance_driver.py

@@ -0,0 +1,43 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 10:43
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0016_auto_20210718_1031'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.CreateModel(
14
+            name='Ambulance',
15
+            fields=[
16
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17
+                ('code', models.CharField(max_length=100)),
18
+                ('license_plate', models.CharField(max_length=100)),
19
+                ('brand', models.CharField(max_length=100)),
20
+                ('model_name', models.CharField(max_length=100)),
21
+                ('comment', models.TextField(blank=True, null=True)),
22
+                ('status', models.CharField(choices=[('working', 'Working'), ('free', 'Free'), ('ma', 'MA')], max_length=30, null=True)),
23
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
24
+                ('updated_at', models.DateTimeField(auto_now=True)),
25
+            ],
26
+        ),
27
+        migrations.CreateModel(
28
+            name='Driver',
29
+            fields=[
30
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
31
+                ('first_name', models.CharField(max_length=100)),
32
+                ('last_name', models.CharField(max_length=100)),
33
+                ('age', models.IntegerField()),
34
+                ('idcard', models.CharField(max_length=20, null=True)),
35
+                ('prefix', models.CharField(choices=[('นางสาว', 'นางสาว'), ('นาย', 'นาย'), ('นาง', 'นาง'), ('ด.ช.', 'เด็กชาย'), ('ด.ญ.', 'เด็กหญิง')], max_length=30, null=True)),
36
+                ('sex', models.CharField(choices=[('male', 'Male'), ('female', 'Female')], max_length=30, null=True)),
37
+                ('photo', models.FileField(blank=True, upload_to='uploads/%Y/%m/%d/', verbose_name='Photo')),
38
+                ('address', models.TextField(blank=True, null=True)),
39
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
40
+                ('updated_at', models.DateTimeField(auto_now=True)),
41
+            ],
42
+        ),
43
+    ]

+ 19 - 0
backend/migrations/0018_ambulance_color.py

@@ -0,0 +1,19 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 10:56
2
+
3
+import colorfield.fields
4
+from django.db import migrations
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0017_ambulance_driver'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='ambulance',
16
+            name='color',
17
+            field=colorfield.fields.ColorField(default='#FF0000', max_length=18),
18
+        ),
19
+    ]

+ 27 - 0
backend/migrations/0019_ambulanceticket.py

@@ -0,0 +1,27 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 16:25
2
+
3
+from django.db import migrations, models
4
+import django.db.models.deletion
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0018_ambulance_color'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='AmbulanceTicket',
16
+            fields=[
17
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('status', models.CharField(choices=[('working', 'Working'), ('free', 'Free'), ('ma', 'MA')], max_length=30, null=True)),
19
+                ('checkin_at', models.DateTimeField(blank=True, null=True)),
20
+                ('checkout_at', models.DateTimeField(blank=True, null=True)),
21
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
22
+                ('updated_at', models.DateTimeField(auto_now=True)),
23
+                ('ambulance', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.ambulance')),
24
+                ('driver', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.driver')),
25
+            ],
26
+        ),
27
+    ]

+ 18 - 0
backend/migrations/0020_driver_status.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 16:51
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0019_ambulanceticket'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='driver',
15
+            name='status',
16
+            field=models.CharField(choices=[('working', 'Working'), ('free', 'Free'), ('block', 'Block')], max_length=30, null=True),
17
+        ),
18
+    ]

+ 24 - 0
backend/migrations/0021_auto_20210719_0014.py

@@ -0,0 +1,24 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 17:14
2
+
3
+from django.db import migrations
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0020_driver_status'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='hospital',
16
+            name='address2',
17
+            field=django_google_maps.fields.AddressField(max_length=200, null=True),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='hospital',
21
+            name='geolocation2',
22
+            field=django_google_maps.fields.GeoLocationField(max_length=100, null=True),
23
+        ),
24
+    ]

+ 21 - 0
backend/migrations/0022_auto_20210719_0024.py

@@ -0,0 +1,21 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 17:24
2
+
3
+from django.db import migrations
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('backend', '0021_auto_20210719_0014'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.RemoveField(
14
+            model_name='hospital',
15
+            name='address2',
16
+        ),
17
+        migrations.RemoveField(
18
+            model_name='hospital',
19
+            name='geolocation2',
20
+        ),
21
+    ]

+ 25 - 0
backend/migrations/0023_place.py

@@ -0,0 +1,25 @@
1
+# Generated by Django 3.2.5 on 2021-07-18 17:29
2
+
3
+from django.db import migrations, models
4
+import django_google_maps.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('backend', '0022_auto_20210719_0024'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='Place',
16
+            fields=[
17
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('address', django_google_maps.fields.AddressField(max_length=200)),
19
+                ('geolocation', django_google_maps.fields.GeoLocationField(max_length=100)),
20
+                ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
21
+                ('updated_at', models.DateTimeField(auto_now=True)),
22
+                ('more_info', models.JSONField(blank=True, null=True)),
23
+            ],
24
+        ),
25
+    ]

+ 0 - 0
backend/migrations/__init__.py


binární
backend/migrations/__pycache__/0001_initial.cpython-39.pyc


binární
backend/migrations/__pycache__/0002_hospital_geolocation.cpython-39.pyc


binární
backend/migrations/__pycache__/0003_alter_hospital_address.cpython-39.pyc


binární
backend/migrations/__pycache__/0004_alter_hospital_location.cpython-39.pyc


binární
backend/migrations/__pycache__/0005_hospital_address_text.cpython-39.pyc


binární
backend/migrations/__pycache__/0006_bed_patient.cpython-39.pyc


binární
backend/migrations/__pycache__/0007_auto_20210718_0246.cpython-39.pyc


binární
backend/migrations/__pycache__/0007_auto_20210718_0249.cpython-39.pyc


binární
backend/migrations/__pycache__/0008_alter_patient_prefix.cpython-39.pyc


binární
backend/migrations/__pycache__/0008_auto_20210718_0659.cpython-39.pyc


binární
backend/migrations/__pycache__/0009_auto_20210718_0702.cpython-39.pyc


binární
backend/migrations/__pycache__/0010_auto_20210718_0711.cpython-39.pyc


binární
backend/migrations/__pycache__/0010_auto_20210718_0713.cpython-39.pyc


binární
backend/migrations/__pycache__/0011_auto_20210718_0722.cpython-39.pyc


binární
backend/migrations/__pycache__/0012_patient_comment.cpython-39.pyc


binární
backend/migrations/__pycache__/0013_patientlog.cpython-39.pyc


binární
backend/migrations/__pycache__/0014_alter_patientlog_bed.cpython-39.pyc


binární
backend/migrations/__pycache__/0015_alter_patientlog_bed.cpython-39.pyc


binární
backend/migrations/__pycache__/0016_auto_20210718_1031.cpython-39.pyc


binární
backend/migrations/__pycache__/0017_ambulance_driver.cpython-39.pyc


binární
backend/migrations/__pycache__/0018_ambulance_color.cpython-39.pyc


binární
backend/migrations/__pycache__/0019_ambulanceticket.cpython-39.pyc


binární
backend/migrations/__pycache__/0020_driver_status.cpython-39.pyc


binární
backend/migrations/__pycache__/0021_auto_20210719_0014.cpython-39.pyc


binární
backend/migrations/__pycache__/0022_auto_20210719_0024.cpython-39.pyc


binární
backend/migrations/__pycache__/0023_place.cpython-39.pyc


binární
backend/migrations/__pycache__/__init__.cpython-39.pyc


+ 192 - 0
backend/models.py

@@ -0,0 +1,192 @@
1
+#from django.db import models
2
+from django.contrib.gis.db import models
3
+from django_google_maps import fields as map_fields
4
+from colorfield.fields import ColorField
5
+#from smart_selects.db_fields import GroupedForeignKey
6
+from smart_selects.db_fields import (
7
+    ChainedForeignKey,
8
+    ChainedManyToManyField,
9
+    GroupedForeignKey,
10
+)
11
+# Create your models here.
12
+GENDER_CHOICES = (
13
+    ('นางสาว','นางสาว'),
14
+    ('นาย','นาย'),
15
+    ('นาง', 'นาง'),
16
+    ("ด.ช.","เด็กชาย"),
17
+    ("ด.ญ.","เด็กหญิง"),
18
+)
19
+
20
+class Ambulance(models.Model):
21
+    code = models.CharField(max_length=100)
22
+    license_plate = models.CharField(max_length=100)
23
+    brand = models.CharField(max_length=100)
24
+    model_name = models.CharField(max_length=100)
25
+    comment  = models.TextField(blank=True, null=True)
26
+
27
+    color = ColorField(default='#FF0000')
28
+    status = models.CharField(
29
+        max_length=30,
30
+        choices=(("working", "Working"), ("free", "Free"), ("ma", "MA")),
31
+        null=True,
32
+    )
33
+
34
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
35
+    updated_at = models.DateTimeField(auto_now=True)
36
+
37
+    def __str__(self):
38
+        return f"{self.license_plate} ({self.get_status_display()}) {self.code} {self.brand} / {self.model_name}"
39
+
40
+class Driver(models.Model):
41
+    first_name = models.CharField(max_length=100)
42
+    last_name = models.CharField(max_length=100)
43
+    age = models.IntegerField()
44
+    idcard = models.CharField(max_length=20, null=True, blank=False)
45
+    prefix = models.CharField(
46
+        max_length=30,
47
+        choices=GENDER_CHOICES,
48
+        null=True,
49
+    )
50
+    sex = models.CharField(
51
+        max_length=30,
52
+        choices=(("male", "Male"), ("female", "Female"),),
53
+        null=True,
54
+    )
55
+    photo  = models.FileField(upload_to="uploads/%Y/%m/%d/", blank=True, verbose_name="Photo")
56
+
57
+    address  = models.TextField(blank=True, null=True)
58
+    #test
59
+    status = models.CharField(
60
+        max_length=30,
61
+        choices=(("working", "Working"), ("free", "Free"), ("block", "Block")),
62
+        null=True,
63
+    )
64
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
65
+    updated_at = models.DateTimeField(auto_now=True)
66
+
67
+    def __str__(self):
68
+        return f"{self.first_name} {self.last_name} ({self.get_status_display()})"
69
+
70
+class AmbulanceTicket(models.Model):
71
+    driver = models.ForeignKey(Driver, on_delete=models.SET_NULL, null=True)
72
+    ambulance = models.ForeignKey(Ambulance, on_delete=models.SET_NULL, null=True)
73
+
74
+    status = models.CharField(
75
+        max_length=30,
76
+        choices=(("working", "Working"), ("free", "Free"), ("ma", "MA")),
77
+        null=True,
78
+    )
79
+
80
+    checkin_at = models.DateTimeField(null=True, blank=True)
81
+    checkout_at = models.DateTimeField(null=True, blank=True)
82
+
83
+
84
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
85
+    updated_at = models.DateTimeField(auto_now=True)
86
+
87
+
88
+    def save(self, *args, **kwargs):
89
+        super(AmbulanceTicket, self).save(*args, **kwargs)
90
+        self.ambulance.status = self.status
91
+        self.ambulance.save()
92
+        self.driver.status = "working"
93
+        self.driver.save()
94
+
95
+    def __str__(self):
96
+        return f"{self.driver}@{self.ambulance}"
97
+
98
+class Patient(models.Model):
99
+    first_name = models.CharField(max_length=100)
100
+    last_name = models.CharField(max_length=100)
101
+    age = models.IntegerField()
102
+    idcard = models.CharField(max_length=20, null=True, blank=False)
103
+    prefix = models.CharField(
104
+        max_length=30,
105
+        choices=GENDER_CHOICES,
106
+        null=True,
107
+    )
108
+    sex = models.CharField(
109
+        max_length=30,
110
+        choices=(("male", "Male"), ("female", "Female"),),
111
+        null=True,
112
+    )
113
+    photo  = models.FileField(upload_to="uploads/%Y/%m/%d/", blank=True, verbose_name="Photo")
114
+
115
+    address = map_fields.AddressField(max_length=200, null=True)
116
+    geolocation = map_fields.GeoLocationField(max_length=100, null=True)
117
+    condition_level = models.CharField(
118
+        max_length=30,
119
+        choices=(("green", "Green"), ("yellow", "Yellow"), ("red", "Red")),
120
+        null=True,
121
+    )
122
+    comment  = models.TextField(blank=True, null=True)
123
+    #test
124
+    def __str__(self):
125
+        return f"{self.first_name} {self.last_name}"
126
+
127
+class Place(models.Model):
128
+    address = map_fields.AddressField(max_length=200)
129
+    geolocation = map_fields.GeoLocationField(max_length=100)
130
+
131
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
132
+    updated_at = models.DateTimeField(auto_now=True)
133
+
134
+    more_info  = models.JSONField(null=True, blank=True)
135
+
136
+class Hospital(models.Model):
137
+    title = models.CharField(max_length=200)
138
+    location = models.PointField(blank=True, null=True)
139
+    address_text = models.TextField(blank=True, null=True)
140
+    #address = models.CharField(max_length=100)
141
+    address = map_fields.AddressField(max_length=200)
142
+    geolocation = map_fields.GeoLocationField(max_length=100)
143
+
144
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
145
+    updated_at = models.DateTimeField(auto_now=True)
146
+
147
+    def __str__(self):
148
+        return f"{self.title} {self.address_text}"
149
+
150
+
151
+class Bed(models.Model):
152
+    code = models.CharField(max_length=30)
153
+    occupy = models.BooleanField(default=False)
154
+    patient = models.ForeignKey(Patient, on_delete=models.SET_NULL, null=True, blank=True)
155
+    hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE)
156
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
157
+    updated_at = models.DateTimeField(auto_now=True)
158
+
159
+
160
+    def __str__(self):
161
+        return self.code
162
+
163
+
164
+class PatientLog(models.Model):
165
+    patient = models.ForeignKey(Patient, on_delete=models.SET_NULL, null=True)
166
+    hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE, null=True)
167
+    bed = ChainedForeignKey(
168
+        "Bed",
169
+        chained_field="hospital",
170
+        chained_model_field="hospital",
171
+        show_all=False,
172
+        auto_choose=True,
173
+        null=True
174
+    )
175
+    notes  = models.TextField(blank=True, null=True)
176
+    condition_level = models.CharField(
177
+        max_length=30,
178
+        choices=(("green", "Green"), ("yellow", "Yellow"), ("red", "Red")),
179
+        null=True,
180
+    )
181
+    status = models.CharField(
182
+        max_length=30,
183
+        choices=(("active", "Active"), ("inactive", "Inactive"), ("transfer", "Transfer")),
184
+        null=True,
185
+    )
186
+    checkin_at = models.DateTimeField(null=True, blank=True)
187
+    checkout_at = models.DateTimeField(null=True, blank=True)
188
+
189
+    created_at = models.DateTimeField(auto_now_add=True, null=True)
190
+    updated_at = models.DateTimeField(auto_now=True)
191
+
192
+

+ 3 - 0
backend/tests.py

@@ -0,0 +1,3 @@
1
+from django.test import TestCase
2
+
3
+# Create your tests here.

+ 7 - 0
backend/urls.py

@@ -0,0 +1,7 @@
1
+from django.urls import path
2
+
3
+from . import views
4
+
5
+urlpatterns = [
6
+    path('', views.index, name='index'),
7
+]

+ 8 - 0
backend/views.py

@@ -0,0 +1,8 @@
1
+from django.shortcuts import render
2
+
3
+# Create your views here.
4
+from django.http import HttpResponse
5
+
6
+
7
+def index(request):
8
+    return HttpResponse("Hello, world. You're at the polls index.")

+ 1 - 0
data/db/PG_VERSION

@@ -0,0 +1 @@
1
+13

binární
data/db/base/1/112


binární
data/db/base/1/113


binární
data/db/base/1/1247


binární
data/db/base/1/1247_fsm


binární
data/db/base/1/1247_vm


binární
data/db/base/1/1249


binární
data/db/base/1/1249_fsm


binární
data/db/base/1/1249_vm


binární
data/db/base/1/1255


binární
data/db/base/1/1255_fsm


binární
data/db/base/1/1255_vm


binární
data/db/base/1/1259


binární
data/db/base/1/1259_fsm


binární
data/db/base/1/1259_vm


binární
data/db/base/1/13245


binární
data/db/base/1/13245_fsm


binární
data/db/base/1/13245_vm


+ 0 - 0
data/db/base/1/13247


binární
data/db/base/1/13249


binární
data/db/base/1/13250


binární
data/db/base/1/13250_fsm


binární
data/db/base/1/13250_vm


+ 0 - 0
data/db/base/1/13252


binární
data/db/base/1/13254


binární
data/db/base/1/13255


binární
data/db/base/1/13255_fsm


binární
data/db/base/1/13255_vm


+ 0 - 0
data/db/base/1/13257


binární
data/db/base/1/13259


binární
data/db/base/1/13260


binární
data/db/base/1/13260_fsm


binární
data/db/base/1/13260_vm


+ 0 - 0
data/db/base/1/13262


+ 0 - 0
data/db/base/1/13264


Some files were not shown because too many files changed in this diff