No Description

admin.py 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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, Points, ImportFile
  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. from django.utils.html import format_html
  9. from django.conf import settings
  10. from dal import autocomplete
  11. from django import forms
  12. class PointForm(forms.ModelForm):
  13. class Meta:
  14. model = Points
  15. fields = ('__all__')
  16. widgets = {
  17. 'dest': autocomplete.ModelSelect2(url='hospital-autocomplete'),
  18. 'address': map_widgets.GoogleMapsAddressWidget,
  19. 'directions': JSONEditorWidget,
  20. }
  21. #@admin.register(Bed)
  22. @admin.register(ImportFile)
  23. class ImportFileAdmin(admin.ModelAdmin):
  24. pass
  25. class PointInlineAdmin(admin.StackedInline):
  26. model = Points
  27. form = PointForm
  28. #readonly_fields = ('distance', 'duration', 'get_map')
  29. #fields = ('hospital', 'notes', 'condition_level', 'status')
  30. @admin.register(AmbulanceTicket)
  31. class AmbulanceTicketAdmin(admin.ModelAdmin):
  32. #inlines = [PointInlineAdmin,]
  33. list_display = ('driver', 'ambulance', 'checkin_at', 'checkout_at', 'status')
  34. @admin.register(Points)
  35. class PointAdmin(admin.ModelAdmin):
  36. form = PointForm
  37. readonly_fields = ('distance', 'duration', 'get_map')
  38. '''
  39. formfield_overrides = {
  40. map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
  41. models.JSONField: {'widget': JSONEditorWidget},
  42. }
  43. '''
  44. def get_map(self, obj):
  45. return format_html( f'''
  46. <br>
  47. <div>
  48. <iframe
  49. width="100%"
  50. height="450"
  51. style="border:0"
  52. loading="lazy"
  53. allowfullscreen
  54. src="https://www.google.com/maps/embed/v1/directions?key={settings.GOOGLE_MAPS_API_KEY}&origin={obj.geolocation.lat},{obj.geolocation.lon}&destination={obj.dest.geolocation.lat},{obj.dest.geolocation.lon}"></iframe></div>''')
  55. fields = ('dest', 'address', 'geolocation', 'distance', 'duration', 'directions','get_map' )
  56. #pass
  57. #@admin.register(Place)
  58. class PlaceAdmin(admin.ModelAdmin):
  59. formfield_overrides = {
  60. map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
  61. models.JSONField: {'widget': JSONEditorWidget},
  62. }
  63. #pass
  64. #list_display = ('driver', 'ambulance', 'checkin_at', 'checkout_at', 'status')
  65. @admin.register(Ambulance)
  66. class AmbulanceAdmin(admin.ModelAdmin):
  67. list_display = ('code', 'license_plate', 'brand', 'status')
  68. @admin.register(Driver)
  69. class DriverAdmin(admin.ModelAdmin):
  70. pass
  71. class BedAdmin(admin.TabularInline):
  72. model = Bed
  73. class PatientLogForm(forms.ModelForm):
  74. class Meta:
  75. fields = ('__all__')
  76. widgets = {
  77. 'hospital': autocomplete.ModelSelect2(url='hospital-autocomplete'),
  78. }
  79. class PatientLogAdmin(admin.StackedInline):
  80. model = PatientLog
  81. form = PatientLogForm
  82. #fields = ('hospital', 'notes', 'condition_level', 'status')
  83. @admin.register(Hospital)
  84. class HospitalAdmin(OSMGeoAdmin):
  85. search_fields = ('title',)
  86. list_display = ('title', 'address', 'geolocation')
  87. inlines = [BedAdmin,]
  88. fields = ('title', 'address_text', 'tel', 'line_id', 'address', 'geolocation',)
  89. formfield_overrides = {
  90. map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
  91. }
  92. @admin.register(Patient)
  93. class PatientAdmin(admin.ModelAdmin):
  94. search_fields = ('first_name','last_name', 'idcard', 'address', 'patient_status')
  95. list_display = ('first_name','last_name', 'idcard', 'address', 'patient_status', 'created_at')
  96. readonly_fields = ('nearby_from_db', 'nearby_places', )
  97. formfield_overrides = {
  98. map_fields.AddressField: {'widget': map_widgets.GoogleMapsAddressWidget},
  99. }
  100. inlines = [PatientLogAdmin,]
  101. def nearby_places(self, obj):
  102. r = obj.nearby()
  103. return format_html(r)
  104. def nearby_from_db(self, obj):
  105. r = obj.nearby_from_db(20)
  106. return format_html(r)