def test_requests_updated(self): # prepare data data = self.make_data() # check and clean data errors_occur, cleaned = clean_upload_trainingrequest_manual_score(data) self.assertFalse(errors_occur) # make sure so far nothing changed self.tr1.refresh_from_db() self.tr2.refresh_from_db() self.tr3.refresh_from_db() self.tr4.refresh_from_db() self.assertEqual(self.tr1.score_manual, 10) self.assertEqual(self.tr2.score_manual, -10) self.assertEqual(self.tr3.score_manual, 0) self.assertEqual(self.tr4.score_manual, None) records_updated = update_manual_score(cleaned) # 4 records should be updated: self.tr1, self.tr2, self.tr3, self.tr4 self.assertEqual(records_updated, 4) # make sure requests updated self.tr1.refresh_from_db() self.tr2.refresh_from_db() self.tr3.refresh_from_db() self.tr4.refresh_from_db() self.assertEqual(self.tr1.score_manual, -10) self.assertEqual(self.tr2.score_manual, 0) self.assertEqual(self.tr3.score_manual, 10) self.assertEqual(self.tr4.score_manual, 0)
def bulk_upload_training_request_scores_confirmation(request): """This view allows for verifying and saving of uploaded training request scores.""" data = request.session.get('bulk-upload-training-request-scores') if not data: messages.warning(request, "Could not locate CSV data, please upload again.") return redirect('bulk_upload_training_request_scores') if request.method == "POST": if (request.POST.get('confirm', None) and not request.POST.get('cancel', None)): errors, cleaned_data = \ clean_upload_trainingrequest_manual_score(data) if not errors: try: records_count = update_manual_score(cleaned_data) except (IntegrityError, ObjectDoesNotExist, InternalError, TypeError, ValueError) as e: messages.error( request, "Error saving data to the database: {}. Please make " "sure to fix all errors listed below.".format(e)) errors, cleaned_data = \ clean_upload_trainingrequest_manual_score(data) else: request.session['bulk-upload-training-request-scores'] = \ None messages.success( request, "Successfully updated {} Training Requests.".format( records_count)) return redirect('bulk_upload_training_request_scores') else: messages.warning( request, "Please fix the data according to error messages below.", ) else: # any "cancel" or lack of "confirm" in POST cancels the upload request.session['bulk-upload-training-request-scores'] = None return redirect('bulk_upload_training_request_scores') else: errors, cleaned_data = clean_upload_trainingrequest_manual_score(data) if errors: messages.warning( request, 'Please fix errors in the provided CSV file and re-upload.', ) context = { 'title': 'Confirm uploaded Training Requests manual score data', 'any_errors': errors, 'zipped': zip(cleaned_data, data), } return render( request, 'requests/trainingrequest_bulk_upload_manual_score_confirmation.html', context, )
def bulk_upload_training_request_scores_confirmation(request): """This view allows for verifying and saving of uploaded training request scores.""" data = request.session.get('bulk-upload-training-request-scores') if not data: messages.warning(request, "Could not locate CSV data, please upload again.") return redirect('bulk_upload_training_request_scores') if request.method == "POST": if (request.POST.get('confirm', None) and not request.POST.get('cancel', None)): errors, cleaned_data = \ clean_upload_trainingrequest_manual_score(data) if not errors: try: records_count = update_manual_score(cleaned_data) except (IntegrityError, ObjectDoesNotExist, InternalError, TypeError, ValueError) as e: messages.error( request, "Error saving data to the database: {}. Please make " "sure to fix all errors listed below.".format(e) ) errors, cleaned_data = \ clean_upload_trainingrequest_manual_score(data) else: request.session['bulk-upload-training-request-scores'] = \ None messages.success( request, "Successfully updated {} Training Requests." .format(records_count) ) return redirect('bulk_upload_training_request_scores') else: messages.warning( request, "Please fix the data according to error messages below.", ) else: # any "cancel" or lack of "confirm" in POST cancels the upload request.session['bulk-upload-training-request-scores'] = None return redirect('bulk_upload_training_request_scores') else: errors, cleaned_data = clean_upload_trainingrequest_manual_score(data) if errors: messages.warning( request, 'Please fix errors in the provided CSV file and re-upload.', ) context = { 'title': 'Confirm uploaded Training Requests manual score data', 'any_errors': errors, 'zipped': zip(cleaned_data, data), } return render( request, 'requests/trainingrequest_bulk_upload_manual_score_confirmation.html', context, )