예제 #1
0
    def test_couch_action_equality(self):
        case_id = _post_util(create=True)
        _post_util(case_id=case_id, p1='p1', p2='p2')

        case = CommCareCase.get(case_id)
        self.assertEqual(3, len(case.actions))  # (1) create & (2) update date opened (3) update properties
        self.assertTrue(case.actions[0] != case.actions[1])
        self.assertTrue(case.actions[1] == case.actions[1])

        orig = case.actions[1]
        copy = CommCareCaseAction.wrap(orig._doc.copy())
        self.assertTrue(copy != case.actions[0])
        self.assertTrue(copy == orig)

        copy.server_date = copy.server_date + timedelta(seconds=1)
        self.assertTrue(copy != orig)
        copy.server_date = orig.server_date
        self.assertTrue(copy == orig)

        copy.updated_unknown_properties['p1'] = 'not-p1'
        self.assertTrue(copy != orig)
        copy.updated_unknown_properties['p1'] = 'p1'
        self.assertTrue(copy == orig)
        copy.updated_unknown_properties['pnew'] = ''
        self.assertTrue(copy != orig)
예제 #2
0
    def test_couch_action_equality(self):
        case_id = _post_util(create=True)
        _post_util(case_id=case_id, p1='p1', p2='p2')

        case = CommCareCase.get(case_id)
        self.assertEqual(3, len(case.actions))  # (1) create & (2) update date opened (3) update properties
        self.assertTrue(case.actions[0] != case.actions[1])
        self.assertTrue(case.actions[1] == case.actions[1])

        orig = case.actions[2]
        copy = CommCareCaseAction.wrap(deepcopy(orig._doc))
        self.assertTrue(copy != case.actions[0])
        self.assertTrue(copy == orig)

        copy.server_date = copy.server_date + timedelta(seconds=1)
        self.assertTrue(copy != orig)
        copy.server_date = orig.server_date
        self.assertTrue(copy == orig)

        copy.updated_unknown_properties['p1'] = 'not-p1'
        self.assertTrue(copy != orig)
        copy.updated_unknown_properties['p1'] = 'p1'
        self.assertTrue(copy == orig)
        copy.updated_unknown_properties['pnew'] = ''
        self.assertTrue(copy != orig)
예제 #3
0
    def testActionEquality(self):
        case_id = _post_util(create=True)
        _post_util(case_id=case_id, p1='p1', p2='p2')

        case = CommCareCase.get(case_id)
        self.assertEqual(2, len(case.actions)) # create + update
        self.assertTrue(case.actions[0] != case.actions[1])
        self.assertTrue(case.actions[1] == case.actions[1])

        orig = case.actions[1]
        copy = CommCareCaseAction.wrap(orig._doc.copy())
        self.assertTrue(copy != case.actions[0])
        self.assertTrue(copy == orig)

        copy.server_date = copy.server_date + timedelta(seconds=1)
        self.assertTrue(copy != orig)
        copy.server_date = orig.server_date
        self.assertTrue(copy == orig)

        copy.updated_unknown_properties['p1'] = 'not-p1'
        self.assertTrue(copy != orig)
        copy.updated_unknown_properties['p1'] = 'p1'
        self.assertTrue(copy == orig)
        copy.updated_unknown_properties['pnew'] = ''
        self.assertTrue(copy != orig)
예제 #4
0
    def allocated_to(self):
        if self.status == "Closed":
            close_action = [CommCareCaseAction.wrap(a) for a in self.case['actions'] if a['action_type'] ==
                const.CASE_ACTION_CLOSE][0]

            CATI_FOLLOW_UP_FORMS = (
                "http://openrosa.org/formdesigner/A5B08D8F-139D-46C6-9FDF-B1AD176EAE1F",
            )
            if close_action.xform.xmlns in CATI_FOLLOW_UP_FORMS:
                return 'CATI'
            else:
                return 'Field'

        else:
            follow_up_type = self.case.get('follow_up_type', '')
            house_number = self.case.get('phone_house_number', '')
            husband_number = self.case.get('phone_husband_number', '')
            mother_number = self.case.get('phone_mother_number', '')
            asha_number = self.case.get('phone_asha_number', '')

            if follow_up_type != 'field_follow_up' and (house_number or
                   husband_number or mother_number or asha_number):
                return 'CATI'
            else:
                return 'Field'
예제 #5
0
    def allocated_to(self):
        if self.status == "Closed":
            close_action = [
                CommCareCaseAction.wrap(a) for a in self.case['actions']
                if a['action_type'] == const.CASE_ACTION_CLOSE
            ][0]

            CATI_FOLLOW_UP_FORMS = (
                "http://openrosa.org/formdesigner/A5B08D8F-139D-46C6-9FDF-B1AD176EAE1F",
            )
            if close_action.xform.xmlns in CATI_FOLLOW_UP_FORMS:
                return 'CATI'
            else:
                return 'Field'

        else:
            follow_up_type = self.case.get('follow_up_type', '')
            house_number = self.case.get('phone_house_number', '')
            husband_number = self.case.get('phone_husband_number', '')
            mother_number = self.case.get('phone_mother_number', '')
            asha_number = self.case.get('phone_asha_number', '')

            if follow_up_type != 'field_follow_up' and (house_number
                                                        or husband_number
                                                        or mother_number
                                                        or asha_number):
                return 'CATI'
            else:
                return 'Field'
예제 #6
0
 def creating_user(self):
     creator_id = None
     for action in self.case['actions']:
         if action['action_type'] == 'create':
             action_doc = CommCareCaseAction.wrap(action)
             creator_id = action_doc.get_user_id()
             break
     if not creator_id:
         return None
     return self._user_meta(creator_id)
예제 #7
0
 def creating_user(self):
     creator_id = None
     for action in self.case['actions']:
         if action['action_type'] == 'create':
             action_doc = CommCareCaseAction.wrap(action)
             creator_id = action_doc.get_user_id()
             break
     if not creator_id:
         return _("No data")
     return self._get_username(creator_id)
예제 #8
0
파일: cases.py 프로젝트: ye-man/commcare-hq
    def _creating_user(self):
        try:
            creator_id = self.raw_data['opened_by']
        except KeyError:
            creator_id = None
            if 'actions' in self.raw_data:
                for action in self.raw_data['actions']:
                    if action['action_type'] == 'create':
                        action_doc = CommCareCaseAction.wrap(action)
                        creator_id = action_doc.get_user_id()
                        break

        if not creator_id:
            return None
        return self._user_meta(creator_id)
예제 #9
0
    def creating_user(self):
        try:
            creator_id = self.case['opened_by']
        except KeyError:
            creator_id = None
            if 'actions' in self.case:
                for action in self.case['actions']:
                    if action['action_type'] == 'create':
                        action_doc = CommCareCaseAction.wrap(action)
                        creator_id = action_doc.get_user_id()
                        break

        if not creator_id:
            return None
        return self._user_meta(creator_id)
예제 #10
0
def prepare_case_json(planning_db):
    case_ids = planning_db.get_all_case_ids(valid_only=False)
    for case_json in iter_docs(CommCareCase.get_db(), case_ids):
        case = CommCareCase.wrap(case_json)
        if case.doc_type != "CommCareCase":
            assert case.doc_type == "CommCareCase-Deleted"
            continue

        # to normalize for any new fields added
        case_json = deepcopy(case.to_json())
        actions = [CommCareCaseAction.wrap(action) for action in planning_db.get_actions_by_case(case.case_id)]
        rebuild_case_from_actions(case, actions)
        planning_db.update_case_json(case.case_id, case.to_json())
        planning_db.add_diffs("case", case.case_id, json_diff(case_json, case.to_json()))

    return planning_db
예제 #11
0
 def test_couch_action_not_equals(self):
     orig = CommCareCaseAction()
     copy = CommCareCaseAction.wrap(deepcopy(orig._doc))
     self.assertTrue(orig == copy)
     self.assertFalse(orig != copy)
예제 #12
0
        ])
    return prepare_case_json(planning_db)


def prepare_case_json(planning_db):
    case_ids = planning_db.get_all_case_ids(valid_only=False)
    for case_json in iter_docs(CommCareCase.get_db(), case_ids):
        case = CommCareCase.wrap(case_json)
        if case.doc_type != 'CommCareCase':
            assert case.doc_type == 'CommCareCase-Deleted'
            continue

        # to normalize for any new fields added
        case_json = deepcopy(case.to_json())
        actions = [
            CommCareCaseAction.wrap(action)
            for action in planning_db.get_actions_by_case(case.case_id)
        ]
        rebuild_case_from_actions(case, actions)
        planning_db.update_case_json(case.case_id, case.to_json())
        planning_db.add_diffs('case', case.case_id,
                              json_diff(case_json, case.to_json()))

    return planning_db


def is_datetime_string(string):
    if not isinstance(string, str):
        return False
    try:
        iso_string_to_datetime(string, strict=True)
예제 #13
0
 def test_couch_action_not_equals(self):
     orig = CommCareCaseAction()
     copy = CommCareCaseAction.wrap(deepcopy(orig._doc))
     self.assertTrue(orig == copy)
     self.assertFalse(orig != copy)