Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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()))
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
        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()))