def post(self, request, *args, **kwargs): domain = request.GET.get('domain') case_type = request.GET.get('case_type') user_name = request.GET.get('user') properties = json.loads(request.body) case_id = properties['case_id'] properties.pop('case_id') couch_user = CommCareUser.get_by_username(user_name) if not couch_user.is_member_of(domain): return HttpResponseForbidden("This user does not have access to this domain.") case = get_case_or_404(domain, case_id) if not case.type == case_type: return HttpResponseBadRequest("Case type mismatch") factory = CaseFactory(domain=domain) factory.update_case( case_id=case_id, update=properties ) return HttpResponse("Case {case_id} updated".format(case_id=case_id))
def handle(self, domain, log_path, log_errors, **options): commit = options['commit'] accessor = CaseAccessors(domain) factory = CaseFactory(domain) headers = [ 'case_id', 'diagnosis_test_result_date', 'diagnosis_lab_facility_name', 'diagnosis_test_lab_serial_number', 'diagnosis_test_summary', 'datamigration_diagnosis_test_information', ] print("Starting {} migration on {} at {}".format( "real" if commit else "fake", domain, datetime.datetime.utcnow())) with open(log_errors, 'w') as log_errors_file: error_logger = csv.writer(log_errors_file) error_logger.writerow(['case_id']) with open(log_path, "w") as log_file: writer = csv.writer(log_file) writer.writerow(headers) for episode_case_id in accessor.get_case_ids_in_domain( type='episode'): print('Looking at {}'.format(episode_case_id)) episode_case = accessor.get_case(episode_case_id) case_properties = episode_case.dynamic_case_properties() if self.should_migrate_case(episode_case_id, case_properties, domain): test = self.get_relevant_test_case( domain, episode_case, error_logger) if test is not None: update = self.get_updates(test) print('Updating {}...'.format(episode_case_id)) writer.writerow( [episode_case_id] + [update[key] for key in headers[1:]]) if commit: try: factory.update_case( case_id=episode_case_id, update=update) except NikshayLocationNotFound: pass else: print( 'No relevant test found for episode {}'.format( episode_case_id)) else: print('Do not migrate {}'.format(episode_case_id)) print('Migration complete at {}'.format(datetime.datetime.utcnow()))
def post(self, request, *args, **kwargs): domain = request.GET.get('domain') case_type = request.GET.get('case_type') user_name = request.GET.get('user') properties = json.loads(request.body) case_id = properties['case_id'] properties.pop('case_id') couch_user = CommCareUser.get_by_username(user_name, domain) if not couch_user.is_member_of(domain): return HttpResponseForbidden( "This user does not have access to this domain.") if case_id not in CaseAccessors(domain).get_case_ids_in_domain( case_type): return HttpResponseForbidden("Could not find case in domain") factory = CaseFactory(domain=domain) factory.update_case(case_id=case_id, update=properties) return HttpResponse("Case {case_id} updated".format(case_id=case_id))
if not domain_has_privilege(domain, privileges.ZAPIER_INTEGRATION): return HttpResponseForbidden() return super(ZapierUpdateCase, self).dispatch(request, *args, **kwargs) def post(self, request, *args, **kwargs): domain = request.GET.get('domain') case_type = request.GET.get('case_type') user_name = request.GET.get('user') properties = json.loads(request.body) case_id = properties['case_id'] properties.pop('case_id') couch_user = CommCareUser.get_by_username(user_name, domain) if not couch_user.is_member_of(domain): return HttpResponseForbidden( "This user does not have access to this domain.") try: case = CaseAccessors(domain).get_case(case_id) except CaseNotFound: return HttpResponseForbidden("Could not find case in domain") if not case.type == case_type: return HttpResponseForbidden("Case type mismatch") factory = CaseFactory(domain=domain) factory.update_case(case_id=case_id, update=properties) return HttpResponse("Case {case_id} updated".format(case_id=case_id))
def handle(self, domain, log_path, **options): commit = options['commit'] accessor = CaseAccessors(domain) factory = CaseFactory(domain) headers = [ 'case_id', 'datamigration_diagnosis_test_information', 'current_test_confirming_diagnosis', 'current_date_of_diagnosis', 'current_treatment_initiation_date', 'current_diagnosis_test_result_date', 'current_diagnosis_lab_facility_name', 'current_diagnosis_lab_facility_id', 'current_diagnosis_test_lab_serial_number', 'current_diagnosis_test_summary', 'current_diagnosis_test_type', 'current_diagnosis_test_type_label', 'info_diagnosis_test_case_id', 'diagnosis_test_result_date', 'diagnosis_lab_facility_name', 'diagnosis_lab_facility_id', 'diagnosis_test_lab_serial_number', 'diagnosis_test_summary', 'diagnosis_test_type', 'diagnosis_test_type_label', 'flag_for_review', 'datamigration_diagnosis_test_information2', ] print("Starting {} migration on {} at {}".format( "real" if commit else "fake", domain, datetime.utcnow())) with open(log_path, "w") as log_file: writer = csv.writer(log_file) writer.writerow(headers) for episode_case_id in with_progress_bar( accessor.get_case_ids_in_domain(type='episode')): episode = accessor.get_case(episode_case_id) case_properties = episode.dynamic_case_properties() if self.should_migrate_case(episode_case_id, case_properties, domain): test_confirming_diagnosis = case_properties.get( 'test_confirming_diagnosis') date_of_diagnosis = case_properties.get( 'date_of_diagnosis') treatment_initiation_date = case_properties.get( 'treatment_initiation_date') current_diagnosis_test_result_date = case_properties.get( 'diagnosis_test_result_date') current_diagnosis_lab_facility_name = case_properties.get( 'diagnosis_lab_facility_name') current_diagnosis_lab_facility_id = case_properties.get( 'diagnosis_lab_facility_id') current_diagnosis_test_lab_serial_number = \ case_properties.get('diagnosis_test_lab_serial_number') current_diagnosis_test_summary = case_properties.get( 'diagnosis_test_summary') current_diagnosis_test_type = case_properties.get( 'diagnosis_test_type') current_diagnosis_test_type_label = case_properties.get( 'diagnosis_test_type_label') datamigration_diagnosis_test_information = \ case_properties.get('datamigration_diagnosis_test_information') test_case_id = None diagnosis_test_result_date = '' diagnosis_lab_facility_name = '' diagnosis_lab_facility_id = '' diagnosis_test_lab_serial_number = '' diagnosis_test_summary = '' diagnosis_test_type = '' diagnosis_test_type_label = '' flag_for_review = '' datamigration_diagnosis_test_information2 = "no" date_format = "%Y-%m-%d" comparison_date = date_of_diagnosis or treatment_initiation_date test_type = test_confirming_diagnosis or current_diagnosis_test_type if comparison_date and test_type: test = self.get_relevant_test_case( domain, episode, test_type) # logic to make sure test we found is close to date of diagnosis if (test and test.get_case_property("date_tested") and abs( (datetime.strptime(comparison_date, date_format) - datetime.strptime( test.get_case_property("date_tested"), date_format)).days) <= 30): test_case_id = test.case_id test_case_properties = test.dynamic_case_properties( ) diagnosis_test_result_date = test_case_properties.get( 'date_tested', '') diagnosis_lab_facility_name = test_case_properties.get( 'testing_facility_name', '') diagnosis_lab_facility_id = test_case_properties.get( 'testing_facility_id', '') diagnosis_test_lab_serial_number = test_case_properties.get( 'lab_serial_number', '') diagnosis_test_summary = test_case_properties.get( 'result_summary_display', '') diagnosis_test_type = test_case_properties.get( 'test_type_value', '') diagnosis_test_type_label = test_case_properties.get( 'test_type_label', '') datamigration_diagnosis_test_information2 = 'yes' else: if test_confirming_diagnosis: # Reset any properties we may have set accidentally in a previous migration diagnosis_test_type = test_confirming_diagnosis diagnosis_test_type_label = TEST_TO_LABEL.get( test_confirming_diagnosis, test_confirming_diagnosis) datamigration_diagnosis_test_information2 = "yes" elif datamigration_diagnosis_test_information == "yes": # The previous migration messed up this case. # Find the form that first set diagnosis_test_type and # reset all diagnosis properties from there flag_for_review = "yes" diagnosis_update = self._get_diagnosis_update(episode).\ get_update_action().dynamic_properties diagnosis_test_result_date = diagnosis_update.\ get('diagnosis_test_result_date', '') diagnosis_lab_facility_name = diagnosis_update.\ get('diagnosis_lab_facility_name', '') diagnosis_lab_facility_id = diagnosis_update.\ get('diagnosis_lab_facility_id', '') diagnosis_test_lab_serial_number = diagnosis_update.\ get('diagnosis_test_lab_serial_number', '') diagnosis_test_summary = diagnosis_update.\ get('diagnosis_test_summary', '') diagnosis_test_type = diagnosis_update.\ get('diagnosis_test_type', '') diagnosis_test_type_label = diagnosis_update.\ get('diagnosis_test_type_label', '') datamigration_diagnosis_test_information2 = 'yes' if datamigration_diagnosis_test_information2 == "yes": update = { 'diagnosis_test_result_date': diagnosis_test_result_date, 'diagnosis_lab_facility_name': diagnosis_lab_facility_name, 'diagnosis_test_lab_serial_number': diagnosis_test_lab_serial_number, 'diagnosis_test_summary': diagnosis_test_summary, 'diagnosis_test_type': diagnosis_test_type, 'diagnosis_test_type_label': diagnosis_test_type_label, 'datamigration_diagnosis_test_information2': datamigration_diagnosis_test_information2, } if commit: factory.update_case(case_id=episode_case_id, update=update) writer.writerow([ episode_case_id, datamigration_diagnosis_test_information, test_confirming_diagnosis, date_of_diagnosis, treatment_initiation_date, current_diagnosis_test_result_date, current_diagnosis_lab_facility_name, current_diagnosis_lab_facility_id, current_diagnosis_test_lab_serial_number, current_diagnosis_test_summary, current_diagnosis_test_type, current_diagnosis_test_type_label, test_case_id, diagnosis_test_result_date, diagnosis_lab_facility_name, diagnosis_lab_facility_id, diagnosis_test_lab_serial_number, diagnosis_test_summary, diagnosis_test_type, diagnosis_test_type_label, flag_for_review, datamigration_diagnosis_test_information2, ]) print('Migration complete at {}'.format(datetime.utcnow()))