Skip to content

Commit be77e23

Browse files
authored
Merge pull request #252 from Mosquito-Alert/245-solve-pagination-issues
review of filter and flip function
2 parents 66f0d1a + af14242 commit be77e23

File tree

4 files changed

+165
-30
lines changed

4 files changed

+165
-30
lines changed

tigacrafting/static/tigacrafting/javascript/coarse_filter.js

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ function make_site(report_id, type){
1010
$('#flip_' + report_id).data('type','site');
1111
$('#ia' + report_id).empty();
1212
$('#ia_label_' + report_id ).html('IA Value N/A');
13+
if(type=='other'){
14+
$('#label_' + report_id ).html('Breeding site - other');
15+
}else{
16+
$('#label_' + report_id ).html('Breeding site - storm drain');
17+
}
18+
$('#quick_upload_' + report_id).removeClass('hide_button');
1319
}
1420

1521
function make_adult(report_id){
@@ -24,7 +30,7 @@ function make_adult(report_id){
2430
const ia_value = $('#ia' + report_id ).data('ia-value');
2531
const ia_f_value = Math.round(parseFloat(ia_value) * 100) / 100
2632
$('#ia_label_' + report_id ).html('IA Value ' + ia_f_value );
27-
33+
$('#label_' + report_id ).html('Adult');
2834
}
2935

3036
function set_report_visible_to(report_id, hide_value){
@@ -50,6 +56,7 @@ function show_adult_buttons(report_id){
5056
$(`#palbo_${ report_id }`).removeClass('hide_button');
5157
$(`#dalbo_${ report_id }`).removeClass('hide_button');
5258
$(`#ns_${ report_id }`).removeClass('hide_button');
59+
$(`#quick_upload_${ report_id }`).addClass('hide_button');
5360
}
5461

5562
function hide_adult_buttons(report_id){
@@ -58,6 +65,7 @@ function hide_adult_buttons(report_id){
5865
$(`#palbo_${ report_id }`).addClass('hide_button');
5966
$(`#dalbo_${ report_id }`).addClass('hide_button');
6067
$(`#ns_${ report_id }`).addClass('hide_button');
68+
$(`#quick_upload_${ report_id }`).removeClass('hide_button');
6169
}
6270

6371
$(document).ready(function() {
@@ -339,8 +347,11 @@ function flip_report(report_id, flip_to_type, flip_to_subtype){
339347
},
340348
error: function(jqXHR, textStatus, errorThrown){
341349
if( jqXHR.responseJSON.opcode == -1 ){
342-
alert("This report has been claimed by at least one expert, so it will be removed from the coarse filter.")
350+
alert("This report has been claimed by at least one expert, so it will be removed from the coarse filter.");
343351
remove_report(report_id);
352+
}else{
353+
alert(jqXHR.responseJSON.message);
354+
$('#modal_flip_to_site').modal('hide');
344355
}
345356
$('#' + report_id).unblock();
346357
},
@@ -430,7 +441,7 @@ function single_report_template(report){
430441
<a href="/single_simple/${ report.version_UUID }" target="_blank"><span class="label label-default"><span class="glyphicon glyphicon-link"> </span> ${ report_country_name }</span></a>
431442
</div>
432443
<div class="header_report_label_wrapper">
433-
<div class="header_report_label"><span class="label label-default">${report_type_label}</span></div>
444+
<div class="header_report_label"><span id="label_${report.version_UUID}" class="label label-default">${report_type_label}</span></div>
434445
</div>
435446
<div id="header_ia_${ report.version_UUID }" class="header_ia">
436447
<div id="ia_label_${ report.version_UUID }">IA Value ${ ia_value }</div>
@@ -495,20 +506,34 @@ function single_report_template(report){
495506
$('#next_page_button').click( function(e){
496507
const offset = $(this).data('offset');
497508
const page_size = get_page_size();
498-
load_data(page_size,offset);
509+
const filter = ui_to_filter();
510+
$('#filter_options').val(filter);
511+
load_data(page_size,offset,filter);
499512
} );
500513

501514
$('#previous_page_button').click( function(e){
502515
const offset = $(this).data('offset');
503516
const page_size = get_page_size();
504-
load_data(page_size,offset);
517+
const filter = ui_to_filter();
518+
$('#filter_options').val(filter);
519+
load_data(page_size,offset,filter);
505520
} );
506521

522+
$('#reload_button').click( function(e){
523+
const offset = 1;
524+
const page_size = get_page_size();
525+
const filter = ui_to_filter();
526+
$('#filter_options').val(filter);
527+
load_data(page_size,offset,filter);
528+
});
529+
507530
$('#page_button').click( function(e){
508531
const page = $('#page_input').val();
509532
const page_size = get_page_size();
533+
const filter = ui_to_filter();
534+
$('#filter_options').val(filter);
510535
if(page != ''){
511-
load_data(page_size,parseInt(page));
536+
load_data(page_size,parseInt(page),filter);
512537
}
513538
});
514539

@@ -624,10 +649,45 @@ $('div#photo_grid').on('click', 'div.buttons_internal_grid button.btn.btn-warnin
624649
}
625650
});
626651

652+
$("input[name='radio_report_type']").on('click', function(){
653+
const selected_value = $(this).val();
654+
$('#flip_to_type').val(selected_value);
655+
if(selected_value == 'adult'){
656+
$('input[name=radio_site_type]').attr("disabled",true);
657+
$('input[name=radio_water]').attr("disabled",true);
658+
}else{
659+
$('input[name=radio_site_type]').attr("disabled",false);
660+
$('input[name=radio_water]').attr("disabled",false);
661+
}
662+
});
663+
664+
$("input[name='radio_site_type']").on('click', function(){
665+
$('#flip_to_subtype').val($(this).val());
666+
});
667+
668+
$("input[name='radio_water']").on('click', function(){
669+
$('#flip_water').val($(this).val());
670+
});
671+
672+
function set_modal_defaults(){
673+
$("input[name=radio_report_type][value=adult]").prop('checked', true);
674+
$("input[name=radio_site_type][value=storm_drain]").prop('checked', true);
675+
$("input[name=radio_water][value=water]").prop('checked', true);
676+
$('#flip_to_type').val('adult');
677+
$('#flip_to_subtype').val('storm_drain');
678+
$('#flip_water').val('water');
679+
$('input[name=radio_site_type]').attr("disabled",true);
680+
$('input[name=radio_water]').attr("disabled",true);
681+
}
682+
627683
$('div#photo_grid').on('click', 'div.buttons_internal_grid button.btn.btn-danger.foot_btn.btn_flip', function(){
628684
const type = $(this).data("type");
629685
const site_cat = $(this).data("site-cat");
686+
const report_id = $(this).data("report-id");
630687
$('#flip_report_id').val( $(this).data("report-id") );
688+
set_modal_defaults();
689+
$('#modal_flip_to_site').modal('show');
690+
/*
631691
if( type=='adult' ){
632692
$('#flip_to_type').val( "site" );
633693
$('#modal_flip_to_site').modal('show');
@@ -638,6 +698,7 @@ $('div#photo_grid').on('click', 'div.buttons_internal_grid button.btn.btn-danger
638698
flip_report(report_id, 'adult', null);
639699
}
640700
}
701+
*/
641702
});
642703

643704
function map_init_basic(map, lat, lon) {

tigacrafting/templates/tigacrafting/coarse_filter.html

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@
228228
class="form-control input-sm" id="page_input" placeholder="Go to page"
229229
style="width:100px;">
230230
<button id="page_button" class="btn btn-default btn-sm active" type="button">Go</button>
231+
<button id="reload_button" class="btn btn-default btn-sm active" type="button">Reload</button>
231232
</div>
232233
</form>
233234
</span>
@@ -270,42 +271,80 @@
270271
<div class="modal-content">
271272
<div class="modal-header">
272273
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
273-
<h4 class="modal-title" id="modallabel">Flip adult report to site</h4>
274+
<h4 class="modal-title" id="modallabel">Change report type</h4>
274275
</div>
275276
<div class="modal-body">
276277
<form role="form" class="form-horizontal">
277278
<div class="form-group">
278-
<h4>Select the site type</h4>
279-
<div class="radio">
280-
<label>
281-
<input type="radio" name="radio_site_type" id="type_storm_drain" value="storm_drain" checked>
282-
Storm drain
283-
</label>
284-
</div>
285-
<div class="radio">
286-
<label>
287-
<input type="radio" name="radio_site_type" id="type_other" value="other">
288-
Other
289-
</label>
279+
<h4>Select report type</h4>
280+
<div class="row">
281+
<div class="col-md-6">
282+
<div class="radio">
283+
<label style="font-size: 20px;margin-left: 20px;">
284+
<input type="radio" name="radio_report_type" id="type_adult" value="adult" checked>
285+
Adult
286+
</label>
287+
</div>
288+
</div>
289+
<div class="col-md-6">
290+
<div class="radio">
291+
<label style="font-size: 20px;">
292+
<input type="radio" name="radio_report_type" id="type_site" value="site">
293+
Site
294+
</label>
295+
</div>
296+
</div>
290297
</div>
291298
</div>
299+
<hr>
292300
<div class="form-group">
293-
<h4>Do you see water?</h4>
294-
<div class="radio">
295-
<label>
296-
<input type="radio" name="radio_water" id="radio_water_yes" value="water" checked>
297-
Yes, there is water
298-
</label>
301+
<div class="row">
302+
<div class="col-md-6">
303+
304+
</div>
305+
<div class="col-md-6">
306+
<h4>Select the site type</h4>
307+
<div class="radio">
308+
<label>
309+
<input type="radio" name="radio_site_type" id="type_storm_drain" value="storm_drain" checked>
310+
Storm drain
311+
</label>
312+
</div>
313+
<div class="radio">
314+
<label>
315+
<input type="radio" name="radio_site_type" id="type_other" value="other">
316+
Other
317+
</label>
318+
</div>
319+
</div>
299320
</div>
300-
<div class="radio">
301-
<label>
302-
<input type="radio" name="radio_water" id="radio_water_no" value="dry">
303-
No, there is no water
304-
</label>
321+
</div>
322+
<div class="form-group">
323+
<div class="row">
324+
<div class="col-md-6">
325+
326+
</div>
327+
<div class="col-md-6">
328+
<h4>Do you see water?</h4>
329+
<div class="radio">
330+
<label>
331+
<input type="radio" name="radio_water" id="radio_water_yes" value="water" checked>
332+
Yes, there is water
333+
</label>
334+
</div>
335+
<div class="radio">
336+
<label>
337+
<input type="radio" name="radio_water" id="radio_water_no" value="dry">
338+
No, there is no water
339+
</label>
340+
</div>
341+
</div>
305342
</div>
306343
</div>
307344
<input id="flip_report_id" type="hidden">
308345
<input id="flip_to_type" type="hidden">
346+
<input id="flip_to_subtype" type="hidden">
347+
<input id="flip_water" type="hidden">
309348
</form>
310349
</div>
311350
<div class="modal-footer">

tigaserver_app/tests/tests.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,6 +1095,37 @@ def test_annotate_coarse(self):
10951095
Notification.objects.filter(report=r).delete()
10961096
ExpertReportAnnotation.objects.filter(report=r).delete()
10971097

1098+
def test_flip_adult_to_adult(self):
1099+
u = User.objects.get(pk=25)
1100+
self.client.force_authenticate(user=u)
1101+
r_adult = Report.objects.get(pk="004D5A85-1D88-4170-A253-DABF30669EBE")
1102+
self.assertEqual(r_adult.type, 'adult', "Report type should be adult, is {0}".format(r_adult.type))
1103+
data = {
1104+
'report_id': r_adult.version_UUID,
1105+
'flip_to_type': 'adult'
1106+
}
1107+
response = self.client.patch('/api/flip_report/', data=data)
1108+
self.assertEqual(response.status_code, 400, "Response should be 400, is {0}".format(response.status_code))
1109+
self.assertEqual(response.data['opcode'], -2, "Opcode should be -2, is {0}".format(response.data['opcode']))
1110+
1111+
def test_flip_site_to_site(self):
1112+
u = User.objects.get(pk=25)
1113+
self.client.force_authenticate(user=u)
1114+
r_site = Report.objects.get(pk='007106f1-6003-4cf5-b049-8f6533a90813')
1115+
self.assertEqual(r_site.type, 'site', "Report type should be site, is {0}".format(r_site.type))
1116+
data = {
1117+
'report_id': r_site.version_UUID,
1118+
'flip_to_type': 'site',
1119+
'flip_to_subtype': 'storm_drain_water'
1120+
}
1121+
response = self.client.patch('/api/flip_report/', data=data)
1122+
self.assertEqual(response.status_code, 200, "Response should be 200, is {0}".format(response.status_code))
1123+
r_site_reloaded = Report.objects.get(pk='007106f1-6003-4cf5-b049-8f6533a90813')
1124+
n_responses = ReportResponse.objects.filter(report=r_site_reloaded).count()
1125+
self.assertTrue(n_responses == 2, "Number of responses should be 2, is {0}".format(n_responses))
1126+
self.assertTrue(r_site_reloaded.flipped, "Report should be marked as flipped")
1127+
self.assertTrue(r_site_reloaded.flipped_to == 'site#site',"Report should be marked as flipped from site to site, field has value of {0}".format(r_site_reloaded.flipped_to))
1128+
10981129
def test_flip(self):
10991130
u = User.objects.get(pk=25)
11001131
self.client.force_authenticate(user=u)

tigaserver_app/views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,6 +2264,10 @@ def flip_report(request):
22642264
else:
22652265
if flip_to_subtype not in ['storm_drain_water','storm_drain_dry', 'other_water', 'other_dry']:
22662266
raise ParseError(detail='value not allowed, possible values are \'storm_drain_water\',\'storm_drain_dry\', \'other_water\', \'other_dry\' ')
2267+
2268+
if report.type == 'adult' and flip_to_type == 'adult':
2269+
return Response(
2270+
data={'message': 'Type is already adult, doing nothing', 'opcode': -2}, status=status.HTTP_400_BAD_REQUEST)
22672271
# delete questions and answers ?
22682272

22692273
# set new questions and answers

0 commit comments

Comments
 (0)