def add_cases_to_case_group(domain, case_group_id, uploaded_data, progress_tracker): response = { 'errors': [], 'success': [], } try: case_group = CommCareCaseGroup.get(case_group_id) except ResourceNotFound: response['errors'].append(_("The case group was not found.")) return response num_rows = len(uploaded_data) progress_tracker(0, num_rows) for row_number, row in enumerate(uploaded_data): identifier = row.get('case_identifier') case = None if identifier is not None: case = get_case_by_identifier(domain, str(identifier)) if not case: response['errors'].append( _("Could not find case with identifier '{}'.").format( identifier)) elif case.doc_type != 'CommCareCase': response['errors'].append( _("It looks like the case with identifier '{}' " "is marked as deleted.").format(identifier))
def get_recipient_info(self, recipient_doc_type, recipient_id, contact_cache): if recipient_doc_type in ['SQLLocation']: return self.get_orm_recipient_info(recipient_doc_type, recipient_id, contact_cache) if recipient_id in contact_cache: return contact_cache[recipient_id] doc = None if recipient_id not in [None, ""]: try: if recipient_doc_type.startswith('CommCareCaseGroup'): doc = CommCareCaseGroup.get(recipient_id) elif recipient_doc_type.startswith('CommCareCase'): doc = CommCareCase.get(recipient_id) elif recipient_doc_type in ('CommCareUser', 'WebUser'): doc = CouchUser.get_by_user_id(recipient_id) elif recipient_doc_type.startswith('Group'): doc = Group.get(recipient_id) except Exception: pass if doc: doc_info = get_doc_info(doc.to_json(), self.domain) else: doc_info = None contact_cache[recipient_id] = doc_info return doc_info
def add_cases_to_case_group(domain, case_group_id, uploaded_data): response = {"errors": [], "success": []} try: case_group = CommCareCaseGroup.get(case_group_id) except ResourceNotFound: response["errors"].append(_("The case group was not found.")) return response for row in uploaded_data: identifier = row.get("case_identifier") case = None if identifier is not None: case = get_case_by_identifier(domain, str(identifier)) if not case: response["errors"].append(_("Could not find case with identifier '%s'." % identifier)) elif case.doc_type != "CommCareCase": response["errors"].append(_("It looks like the case with identifier '%s' is deleted" % identifier)) elif case._id in case_group.cases: response["errors"].append(_("A case with identifier %s already exists in this group." % identifier)) else: case_group.cases.append(case._id) response["success"].append(_("Case with identifier '%s' has been added to this group." % identifier)) if response["success"]: case_group.save() return response
def get_recipient_info(self, recipient_doc_type, recipient_id, contact_cache): if recipient_doc_type in ['SQLLocation']: return self.get_orm_recipient_info(recipient_doc_type, recipient_id, contact_cache) if recipient_id in contact_cache: return contact_cache[recipient_id] doc = None if recipient_id not in [None, ""]: try: if recipient_doc_type.startswith('CommCareCaseGroup'): doc = CommCareCaseGroup.get(recipient_id) elif recipient_doc_type.startswith('CommCareCase'): doc = CommCareCase.get(recipient_id) elif recipient_doc_type in ('CommCareUser', 'WebUser'): doc = CouchUser.get_by_user_id(recipient_id) elif recipient_doc_type.startswith('Group'): doc = Group.get(recipient_id) except Exception: pass doc_info = None if doc: try: doc_info = get_doc_info(doc.to_json(), self.domain) except DomainMismatchException: # This can happen, for example, if a WebUser was sent an SMS # and then they unsubscribed from the domain. If that's the # case, we'll just leave doc_info as None and no contact link # will be displayed. pass contact_cache[recipient_id] = doc_info return doc_info
def get_recipient_info(self, recipient_doc_type, recipient_id, contact_cache): if recipient_id in contact_cache: return contact_cache[recipient_id] doc = None if recipient_id not in [None, ""]: try: if recipient_doc_type.startswith('CommCareCaseGroup'): doc = CommCareCaseGroup.get(recipient_id) elif recipient_doc_type.startswith('CommCareCase'): doc = CommCareCase.get(recipient_id) elif recipient_doc_type in ('CommCareUser', 'WebUser'): doc = CouchUser.get_by_user_id(recipient_id) elif recipient_doc_type.startswith('Group'): doc = Group.get(recipient_id) except Exception: pass if doc: doc_info = get_doc_info(doc.to_json(), self.domain) else: doc_info = None contact_cache[recipient_id] = doc_info return doc_info
def get_deleted_item_data(self, item_id): case_group = CommCareCaseGroup.get(item_id) item_data = self._get_item_data(case_group) case_group.soft_delete() return { 'itemData': item_data, 'template': 'deleted-group-template', }
def clean(self): cleaned_data = super(UpdateCaseGroupForm, self).clean() try: self.current_group = CommCareCaseGroup.get(self.cleaned_data.get('item_id')) except AttributeError: raise forms.ValidationError(_("Please include the case group ID.")) except ResourceNotFound: raise forms.ValidationError(_("A case group was not found with that ID.")) return cleaned_data
def clean(self): cleaned_data = super(UpdateCaseGroupForm, self).clean() try: self.current_group = CommCareCaseGroup.get(self.cleaned_data.get('item_id')) except AttributeError: raise forms.ValidationError("You're not passing in the group's id!") except ResourceNotFound: raise forms.ValidationError("This case group was not found in our database!") return cleaned_data
def recipient(self): if self.recipient_type == self.RECIPIENT_TYPE_CASE: try: case = CaseAccessors(self.domain).get_case(self.recipient_id) except CaseNotFound: return None if case.domain != self.domain: return None return case elif self.recipient_type == self.RECIPIENT_TYPE_MOBILE_WORKER: user = CouchUser.get_by_user_id(self.recipient_id, domain=self.domain) if not isinstance(user, CommCareUser): return None return user elif self.recipient_type == self.RECIPIENT_TYPE_WEB_USER: user = CouchUser.get_by_user_id(self.recipient_id, domain=self.domain) if not isinstance(user, WebUser): return None return user elif self.recipient_type == self.RECIPIENT_TYPE_CASE_GROUP: try: group = CommCareCaseGroup.get(self.recipient_id) except ResourceNotFound: return None if group.domain != self.domain: return None return group elif self.recipient_type == self.RECIPIENT_TYPE_USER_GROUP: try: group = Group.get(self.recipient_id) except ResourceNotFound: return None if group.domain != self.domain: return None return group elif self.recipient_type == self.RECIPIENT_TYPE_LOCATION: location = SQLLocation.by_location_id(self.recipient_id) if location is None: return None if location.domain != self.domain: return None return location else: raise UnknownRecipientType(self.recipient_type)
def recipient(self): if self.recipient_type == self.RECIPIENT_TYPE_CASE: return CaseAccessors(self.domain).get_case(self.recipient_id) elif self.recipient_type == self.RECIPIENT_TYPE_MOBILE_WORKER: return CommCareUser.get(self.recipient_id) elif self.recipient_type == self.RECIPIENT_TYPE_WEB_USER: return WebUser.get(self.recipient_id) elif self.recipient_type == self.RECIPIENT_TYPE_CASE_GROUP: return CommCareCaseGroup.get(self.recipient_id) elif self.recipient_type == self.RECIPIENT_TYPE_USER_GROUP: return Group.get(self.recipient_id) elif self.recipient_type == self.RECIPIENT_TYPE_LOCATION: return SQLLocation.by_location_id(self.recipient_id) else: raise UnknownRecipientType(self.recipient_type)
def recipient(self): if self.recipient_type == 'CommCareCase': return CaseAccessors(self.domain).get_case(self.recipient_id) elif self.recipient_type == 'CommCareUser': return CommCareUser.get(self.recipient_id) elif self.recipient_type == 'WebUser': return WebUser.get(self.recipient_id) elif self.recipient_type == 'CommCareCaseGroup': return CommCareCaseGroup.get(self.recipient_id) elif self.recipient_type == 'Group': return Group.get(self.recipient_id) elif self.recipient_type == 'Location': return SQLLocation.by_location_id(self.recipient_id) else: raise UnknownRecipientType(self.recipient_type)
def get_recipient_info(self, domain, recipient_doc_type, recipient_id, contact_cache): """ We need to accept domain as an arg here for admin reports that extend this base. """ if recipient_id in contact_cache: return contact_cache[recipient_id] couch_object = None sql_object = None if recipient_id: try: if recipient_doc_type.startswith('CommCareCaseGroup'): couch_object = CommCareCaseGroup.get(recipient_id) elif recipient_doc_type.startswith('CommCareCase'): obj = CaseAccessors(domain).get_case(recipient_id) if isinstance(obj, CommCareCase): couch_object = obj elif isinstance(obj, CommCareCaseSQL): sql_object = obj elif recipient_doc_type in ('CommCareUser', 'WebUser'): couch_object = CouchUser.get_by_user_id(recipient_id) elif recipient_doc_type.startswith('Group'): couch_object = Group.get(recipient_id) elif recipient_doc_type == 'SQLLocation': sql_object = SQLLocation.objects.get(location_id=recipient_id) except (ResourceNotFound, CaseNotFound, ObjectDoesNotExist): pass doc_info = None if couch_object: try: doc_info = get_doc_info(couch_object.to_json(), domain) except DomainMismatchException: # This can happen, for example, if a WebUser was sent an SMS # and then they unsubscribed from the domain. If that's the # case, we'll just leave doc_info as None and no contact link # will be displayed. pass if sql_object: doc_info = get_object_info(sql_object) contact_cache[recipient_id] = doc_info return doc_info
def add_cases_to_case_group(domain, case_group_id, uploaded_data): response = { 'errors': [], 'success': [], } try: case_group = CommCareCaseGroup.get(case_group_id) except ResourceNotFound: response['errors'].append(_("The case group was not found.")) return response for row in uploaded_data: identifier = row.get('case_identifier') case = None if identifier is not None: case = get_case_by_identifier(domain, str(identifier)) if not case: response['errors'].append(_("Could not find case with identifier '%s'." % identifier)) elif case.doc_type != 'CommCareCase': response['errors'].append(_("It looks like the case with identifier '%s' is deleted" % identifier))
return case elif self.recipient_type == self.RECIPIENT_TYPE_MOBILE_WORKER: user = CouchUser.get_by_user_id(self.recipient_id, domain=self.domain) if not isinstance(user, CommCareUser): return None return user elif self.recipient_type == self.RECIPIENT_TYPE_WEB_USER: user = CouchUser.get_by_user_id(self.recipient_id, domain=self.domain) if not isinstance(user, WebUser): return None return user elif self.recipient_type == self.RECIPIENT_TYPE_CASE_GROUP: try: group = CommCareCaseGroup.get(self.recipient_id) except ResourceNotFound: return None if group.domain != self.domain: return None return group elif self.recipient_type == self.RECIPIENT_TYPE_USER_GROUP: try: group = Group.get(self.recipient_id) except ResourceNotFound: return None if group.domain != self.domain: return None
def case_group(self): try: return CommCareCaseGroup.get(self.group_id) except ResourceNotFound: raise Http404()
def case_groups(self): return [CommCareCaseGroup.get(g) for g in self.case_group_ids]