11from django .contrib import admin
22from django .contrib .gis .admin import OSMGeoAdmin
3- from tigaserver_app .models import Notification , TigaUser , Mission , MissionTrigger , MissionItem , Report , ReportResponse , Photo , \
4- Fix , Configuration , CoverageArea , OWCampaigns , OrganizationPin , NotificationTopic , MobileApp , Device
5- import csv
6- from django .utils .encoding import smart_str
7- from django .http .response import HttpResponse
8- from django .utils .html import mark_safe
3+ from tigaserver_app .models import Notification , TigaUser , Report , ReportResponse , Photo , \
4+ Fix , OWCampaigns , OrganizationPin , NotificationTopic , MobileApp , Device
95from django .utils .translation import ugettext_lazy as _
106
117from simple_history .admin import SimpleHistoryAdmin
128from simple_history .utils import get_history_model_for_model
139
14- def export_full_csv (modeladmin , request , queryset ):
15- response = HttpResponse (mimetype = 'text/csv' )
16- this_meta = queryset [0 ]._meta
17- response ['Content-Disposition' ] = 'attachment; filename=tigatrapp_export_ ' + smart_str (this_meta .db_table ) + '.csv'
18- writer = csv .writer (response , csv .excel , quoting = csv .QUOTE_NONNUMERIC )
19- response .write (u'\ufeff ' .encode ('utf8' )) # BOM (optional...Excel needs it to open UTF-8 file properly)
20- colnames = []
21- for field in this_meta .fields :
22- colnames .append (smart_str (field .name ))
23- writer .writerow (colnames )
24- for obj in queryset :
25- this_row = []
26- for field in this_meta .fields :
27- this_row .append (smart_str (getattr (obj , field .name )))
28- writer .writerow (this_row )
29- return response
30- export_full_csv .short_description = u"Export Full CSV"
31-
32-
33- def export_full_csv_sc (modeladmin , request , queryset ):
34- response = HttpResponse (mimetype = 'text/csv' )
35- this_meta = queryset [0 ]._meta
36- response ['Content-Disposition' ] = 'attachment; filename=tigatrapp_export_ ' + smart_str (this_meta .db_table ) + '.csv'
37- writer = csv .writer (response , csv .excel , delimiter = ";" , quoting = csv .QUOTE_NONNUMERIC )
38- response .write (u'\ufeff ' .encode ('utf8' )) # BOM (optional...Excel needs it to open UTF-8 file properly)
39- colnames = []
40- for field in this_meta .fields :
41- colnames .append (smart_str (field .name ))
42- writer .writerow (colnames )
43- for obj in queryset :
44- this_row = []
45- for field in this_meta .fields :
46- this_row .append (smart_str (getattr (obj , field .name )))
47- writer .writerow (this_row )
48- return response
49- export_full_csv_sc .short_description = u"Export Full Semi-Colon Separated Values"
50-
51-
52- admin .site .disable_action ('delete_selected' )
5310
5411class ReportInline (admin .TabularInline ):
5512 model = Report
@@ -92,7 +49,6 @@ class UserAdmin(admin.ModelAdmin):
9249 readonly_fields = ('user_UUID' , 'registration_time' , 'score_v2' , 'last_score_update' , 'last_location' , 'last_location_update' )
9350 search_fields = ('user_UUID' ,)
9451 ordering = ('registration_time' ,)
95- actions = [export_full_csv , export_full_csv_sc ]
9652 inlines = [ReportInline , DeviceInline ]
9753
9854 def has_add_permission (self , request ):
@@ -102,27 +58,6 @@ def has_delete_permission(self, request, obj=None):
10258 return False
10359
10460
105- class ConfigurationAdmin (admin .ModelAdmin ):
106- list_display = ('id' , 'creation_time' , 'samples_per_day' )
107- readonly_fields = ('creation_time' , )
108-
109-
110- class MissionItemInline (admin .StackedInline ):
111- model = MissionItem
112- extra = 1
113-
114-
115- class MissionTriggerInline (admin .TabularInline ):
116- model = MissionTrigger
117- extra = 1
118-
119-
120- class MissionAdmin (admin .ModelAdmin ):
121- list_display = ('title_catalan' , 'platform' , 'creation_time' , 'expiration_time' )
122- inlines = [MissionItemInline , MissionTriggerInline ]
123- ordering = ('creation_time' ,)
124-
125-
12661class ReportResponseInline (admin .StackedInline ):
12762 model = ReportResponse
12863 readonly_fields = ('question' , 'answer' )
@@ -139,14 +74,13 @@ class PhotoInline(admin.StackedInline):
13974
14075class ReportAdmin (SimpleHistoryAdmin ):
14176 list_display = (
142- 'version_UUID' , 'report_id' , 'deleted' , 'user' , 'version_number' , 'creation_time' , 'version_time' , 'type' , 'mission' ,
77+ 'version_UUID' , 'report_id' , 'deleted' , 'user' , 'version_number' , 'creation_time' , 'version_time' , 'type' ,
14378 'package_version' , 'os' , 'n_photos'
14479 )
145- list_filter = ['os' , 'type' , 'mission' , ' package_name' , 'package_version' ]
80+ list_filter = ['os' , 'type' , 'package_name' , 'package_version' ]
14681 search_fields = ('version_UUID' ,)
14782
14883 inlines = [ReportResponseInline , PhotoInline ]
149- actions = [export_full_csv , export_full_csv_sc ]
15084
15185 readonly_fields = [
15286 "deleted" ,
@@ -156,7 +90,6 @@ class ReportAdmin(SimpleHistoryAdmin):
15690 "version_number" ,
15791 "type" ,
15892 "user" ,
159- "mission" ,
16093 "session" ,
16194 "server_upload_time" ,
16295 "updated_at" ,
@@ -176,7 +109,7 @@ class ReportAdmin(SimpleHistoryAdmin):
176109 ("hide" , "deleted" , "deleted_at" ),
177110 "type" ,
178111 "user" ,
179- ("mission" , " session" ),
112+ ("session" , ),
180113 ("server_upload_time" , "updated_at" ),
181114 ("version_time" , "datetime_fix_offset" ),
182115 ("creation_time" , "phone_upload_time" )
@@ -295,151 +228,23 @@ def has_add_permission(self, request):
295228 def has_delete_permission (self , request , obj = None ):
296229 return False
297230
298- def export_csv_photo (modeladmin , request , queryset ):
299- response = HttpResponse (mimetype = 'text/csv' )
300- response ['Content-Disposition' ] = 'attachment; filename=tigatrapp_photos.csv'
301- writer = csv .writer (response , csv .excel )
302- response .write (u'\ufeff ' .encode ('utf8' )) # BOM (optional...Excel needs it to open UTF-8 file properly)
303- writer .writerow ([
304- smart_str (u"id" ),
305- smart_str (u"url" ),
306- smart_str (u"user" ),
307- smart_str (u"report" ),
308- smart_str (u"date" ),
309- smart_str (u"report_lat" ),
310- smart_str (u"report_lon" ),
311- smart_str (u"report_note" ),
312- smart_str (u"report_type" ),
313- smart_str (u"report_responses" ),
314- ])
315- for obj in queryset :
316- writer .writerow ([
317- smart_str (obj .id ),
318- smart_str ("http://%s%s" % (request .get_host (), obj .photo .url )),
319- smart_str (obj .user ),
320- smart_str (obj .report ),
321- smart_str (obj .date ),
322- smart_str (obj .report .lat ),
323- smart_str (obj .report .lon ),
324- smart_str (obj .report .note ),
325- smart_str (obj .report .type ),
326- smart_str (obj .report .response_string ),
327-
328- ])
329- return response
330- export_csv_photo .short_description = u"Export Full CSV"
331-
332-
333- def export_csv_photo_crowdcrafting (modeladmin , request , queryset ):
334- response = HttpResponse (mimetype = 'text/csv' )
335- response ['Content-Disposition' ] = 'attachment; filename=tigatrapp_crowdcrafting_photos.csv'
336- writer = csv .writer (response , csv .excel )
337- response .write (u'\ufeff ' .encode ('utf8' )) # BOM (optional...Excel needs it to open UTF-8 file properly)
338- writer .writerow ([
339- smart_str (u"id" ),
340- smart_str (u"uuid" ),
341- ])
342- for obj in queryset :
343- if not obj .report .deleted and not obj .report .hide and not obj .hide :
344- writer .writerow ([
345- smart_str (obj .id ),
346- smart_str (obj .uuid ),
347- ])
348- return response
349- export_csv_photo_crowdcrafting .short_description = u"Export Crowdcrafting CSV"
350-
351-
352- def hide_photos (modeladmin , request , queryset ):
353- queryset .update (hide = True )
354-
355-
356- hide_photos .short_description = u"Hide selected photos"
357-
358-
359- def show_photos (modeladmin , request , queryset ):
360- queryset .update (hide = False )
361-
362-
363- show_photos .short_description = u"Unhide selected photos"
364-
365-
366- class PhotoAdmin (admin .ModelAdmin ):
367- list_display = ('id' , 'date' , 'deleted' , 'hide' , 'small_image_' , 'user' , 'date' , 'report_link' , 'map_link' )
368- list_filter = ['hide' , 'report__package_name' , 'report__package_version' ]
369- readonly_fields = ('deleted' , 'uuid' , 'photo' , 'small_image_' , 'user' , 'date' , 'report_link' , 'map_link' )
370- fields = ('hide' , 'deleted' , 'uuid' , 'date' , 'user' , 'photo' , 'report_link' , 'map_link' , 'small_image_' )
371- actions = [export_csv_photo , export_csv_photo_crowdcrafting , hide_photos , show_photos ]
372- list_max_show_all = 6000
373- list_per_page = 400
374-
375- def user (self , obj ):
376- return obj .user .user_UUID
377-
378- def small_image_ (self , obj ):
379- return mark_safe (obj .small_image_ ())
380-
381- def report_link (self , obj ):
382- return mark_safe ('<a href="/admin/tigaserver_app/report/%s" target="_blank">%s</a>' % (obj .report .version_UUID , obj .report .version_UUID ))
383- report_link .allow_tags = True
384-
385- def map_link (self , obj ):
386- return mark_safe ('<a href="/single_report_map/%s/" target="_blank">Show map</a>' % obj .report .version_UUID )
387- map_link .allow_tags = True
388-
389- def deleted (self , obj ):
390- return obj .report .deleted
391-
392- def has_add_permission (self , request ):
393- return False
394-
395- def has_delete_permission (self , request , obj = None ):
396- return False
397-
398231
399232class FixAdmin (admin .ModelAdmin ):
400233 list_display = ('id' , 'user_coverage_uuid' , 'fix_time' , 'server_upload_time' )
401234 ordering = ('fix_time' ,)
402235 readonly_fields = ('id' , 'user_coverage_uuid' , 'fix_time' , 'server_upload_time' , 'phone_upload_time' , 'masked_lon' , 'masked_lat' , 'power' )
403236 fields = ('id' , 'user_coverage_uuid' , 'fix_time' , 'server_upload_time' , 'phone_upload_time' , 'masked_lon' , 'masked_lat' , 'power' )
404- actions = [export_full_csv , export_full_csv_sc ]
405237
406238 def has_add_permission (self , request ):
407239 return False
408240
409241 def has_delete_permission (self , request , obj = None ):
410242 return False
411243
412-
413- class ReportResponseAdmin (admin .ModelAdmin ):
414- list_display = ('report' , 'question' , 'answer' )
415- fields = ('report' , 'question' , 'answer' )
416- actions = [export_full_csv , export_full_csv_sc ]
417-
418- def has_add_permission (self , request ):
419- return False
420-
421- def has_delete_permission (self , request , obj = None ):
422- return False
423-
424-
425- class CoverageAreaAdmin (admin .ModelAdmin ):
426- list_display = ('lat' , 'lon' , 'n_fixes' , 'last_modified' , 'latest_report_server_upload_time' , 'latest_fix_id' )
427- fields = ('lat' , 'lon' , 'n_fixes' , 'last_modified' , 'latest_report_server_upload_time' , 'latest_fix_id' )
428-
429- def has_add_permission (self , request ):
430- return False
431-
432-
433244class NotificationAdmin (admin .ModelAdmin ):
434- #list_display = ('report', 'user', 'expert', 'date_comment', 'expert_comment', 'expert_html', 'photo_url', 'acknowledged')
435245 list_display = ('report' , 'expert' , 'date_comment' , 'expert_comment' , 'expert_html' , 'photo_url' )
436246 search_fields = ['report__version_UUID' ,'user__user_UUID' ]
437247
438- def formfield_for_foreignkey (self , db_field , request = None , ** kwargs ):
439- if db_field .name == 'report' :
440- kwargs ["queryset" ] = Report .objects .order_by ("version_UUID" )
441- return super (NotificationAdmin ,self ).formfield_for_foreignkey (db_field ,request ,** kwargs )
442-
443248
444249class OWCampaignsAdmin (admin .ModelAdmin ):
445250 list_display = ('id' , 'country' , 'posting_address' , 'campaign_start_date' , 'campaign_end_date' )
@@ -462,11 +267,6 @@ class OrganizationPinAdmin(OSMGeoAdmin):
462267admin .site .register (MobileApp , MobileAppAdmin )
463268admin .site .register (Report , ReportAdmin )
464269admin .site .register (Fix , FixAdmin )
465- admin .site .register (Configuration , ConfigurationAdmin )
466- admin .site .register (Mission , MissionAdmin )
467- admin .site .register (Photo , PhotoAdmin )
468- admin .site .register (ReportResponse , ReportResponseAdmin )
469- admin .site .register (CoverageArea , CoverageAreaAdmin )
470270admin .site .register (Notification , NotificationAdmin )
471271admin .site .register (OWCampaigns , OWCampaignsAdmin )
472272admin .site .register (OrganizationPin , OrganizationPinAdmin )
0 commit comments