예제 #1
0
    def build(self):
        if not entity_type_already_defined(self._manager, self._entity_type):
            define_type(self._manager, self._entity_type)

        entity = self.create_or_update_entity(self._manager, entity_type=self._entity_type, short_code=self._short_code,
            aggregation_paths=self._aggregation_paths, location=self._location, geometry=self._geometry)
        for each in self._data: entity.add_data(each)
        return entity
예제 #2
0
def validate_for_subject(dbm, subject_type, subject_short_code, start_date=None, end_date=None):
    result = DataExtractionResult()
    if not entity_type_already_defined(dbm, [subject_type]):
        result.success = False
        result.message = _("Subject type [%s] is not defined.") % subject_type
        return result
    if not check_if_subject_exists(dbm, subject_short_code, [subject_type]):
        result.success = False
        result.message = _("Subject [%s] is not registered.") % subject_short_code
        return result
    result = validate_date(result, start_date, end_date)
    if not result.success:
        return result
    return result
예제 #3
0
def create_contact(dbm, short_code, location=None, aggregation_paths=None, geometry=None, is_datasender=True):
    """
    Initialize and save an entity to the database. Return the entity
    created unless the short code used is not unique or this entity
    type has not been defined yet.
    """
    contact_type = ["reporter"]
    assert is_string(short_code) and not is_empty(short_code)
    if not entity_type_already_defined(dbm, contact_type):
        raise EntityTypeDoesNotExistsException(contact_type)
    existing = _check_if_entity_exists(dbm, contact_type, short_code, return_entity=True)
    if existing:
        entity_name = existing.data.get('name', {'value': ''}).get('value')
        raise DataObjectAlreadyExists(contact_type[0].capitalize(), "Unique ID Number", short_code,
                                      existing_name=entity_name)
    e = Contact(dbm, entity_type=contact_type, location=location,
               aggregation_paths=aggregation_paths, short_code=short_code, geometry=geometry, is_datasender=is_datasender)
    #e.save()
    return e
예제 #4
0
def create_type(request):
    success = False
    form = EntityTypeForm(request.POST)
    if form.is_valid():
        entity_name = form.cleaned_data["entity_type_regex"]
        entity_name = [entity_name.strip().lower()]
        try:
            manager = get_database_manager(request.user)

            if entity_type_already_defined(manager, entity_name):
                raise EntityTypeAlreadyDefined(u"Type: %s is already defined" % u'.'.join(entity_name))

            create_registration_form(manager, entity_name)
            define_type(manager, entity_name)
            message = _("Entity definition successful")
            success = True
            UserActivityLog().log(request, action=ADDED_IDENTIFICATION_NUMBER_TYPE, project=entity_name[0].capitalize())
        except EntityTypeAlreadyDefined:
            message = _("%s already exists.") % (entity_name[0].capitalize(),)
    else:
        message = form.errors['entity_type_regex']
    return HttpResponse(json.dumps({'success': success, 'message': _(message)}))
예제 #5
0
def create_reporter_id_for_profile(dbm, org, profile):
    phone = profile.mobile_phone if profile.mobile_phone and profile.mobile_phone != "Not Assigned" else None
    if profile.reporter_id is None and entity_type_already_defined(dbm, REPORTER_ENTITY_TYPE):
        profile.reporter_id = _create_couchdb_datasender(dbm, org, profile.user.get_full_name(), phone)
        profile.save()
예제 #6
0
 def validate_unique_id_type(self, field):
     unique_id_type = self._get_unique_id_type(field)
     if not entity_type_already_defined(self.dbm, [unique_id_type]):
         raise UniqueIdNotFoundException(unique_id_type)
     if not get_non_voided_entity_count_for_type(self.dbm, unique_id_type.lower()):
         raise UniqueIdNumbersNotFoundException(unique_id_type)