Exemplo n.º 1
0
    def _import_data_sender(self, form_model, organization, values):
        try:
            if organization.in_trial_mode:
                mobile_number = case_insensitive_lookup(values, "m")
                data_sender = DataSenderOnTrialAccount.objects.model(
                    mobile_number=mobile_number, organization=organization)
                data_sender.save(force_insert=True)
        except IntegrityError:
            raise MultipleReportersForANumberException(mobile_number)

        if len(",".join(values["l"])) > 500:
            raise MangroveException(
                "Location Name cannot exceed 500 characters.")

        email = case_insensitive_lookup(values, "email")
        if email:
            if not email_re.match(email):
                raise InvalidEmailException(message="Invalid email address.")

            self._validate_duplicate_email_address(email)

            response = self.submit(form_model, values, [])

        else:
            response = self.submit(form_model, values, [])

        return response
Exemplo n.º 2
0
    def import_data_sender(self, form_model, organization, registered_emails,
                           registered_phone_numbers, submission, values):
        phone_number = TelephoneNumber().clean(
            case_insensitive_lookup(values, MOBILE_NUMBER_FIELD_CODE))
        if phone_number in registered_phone_numbers:
            raise DataObjectAlreadyExists(_("Data Sender"), _("Mobile Number"),
                                          phone_number)
        email = case_insensitive_lookup(values, "email")
        if email:
            if email in registered_emails:
                raise DataObjectAlreadyExists(_("User"), _("email address"),
                                              email)

            if not email_re.match(email):
                raise InvalidEmailException(message="Invalid email address.")

            response = self.submit(form_model, values, submission, [])
            user = User.objects.create_user(email, email, 'password')
            group = Group.objects.filter(name="Data Senders")[0]
            user.groups.add(group)
            user.first_name = case_insensitive_lookup(response.processed_data,
                                                      NAME_FIELD_CODE)
            user.save()
            profile = NGOUserProfile(user=user,
                                     org_id=organization.org_id,
                                     title="Mr",
                                     reporter_id=case_insensitive_lookup(
                                         response.processed_data, SHORT_CODE))
            profile.save()
            send_reset_password_email(user, ugettext_lazy("en"))
        else:
            response = self.submit(form_model, values, submission, [])
        return response
Exemplo n.º 3
0
 def _create_user(self, email, organization, response):
     user = User.objects.create_user(email, email, 'password')
     group = Group.objects.filter(name="Data Senders")[0]
     user.groups.add(group)
     user.first_name = case_insensitive_lookup(response.processed_data, NAME_FIELD_CODE)
     user.save()
     profile = NGOUserProfile(user=user, org_id=organization.org_id, title="Mr",
                              reporter_id=case_insensitive_lookup(response.processed_data, SHORT_CODE))
     profile.save()
     return user
Exemplo n.º 4
0
    def _import_submission(self, organization, values, form_model=None):
        self._append_country_for_location_field(form_model, values,
                                                organization)
        sid = transaction.savepoint()
        try:
            if filter(lambda x: len(x), values.values()).__len__() == 0:
                raise EmptyRowException()
            values = self._process(form_model, values)
            is_reporter = case_insensitive_lookup(
                values, ENTITY_TYPE_FIELD_CODE) == REPORTER
            if is_reporter:
                values[
                    'is_data_sender'] = 'True' if self.is_datasender else 'False'
                response = self._import_data_sender(form_model, organization,
                                                    values)
            else:
                SubjectTemplateValidator(form_model).validate(values)
                response = self.submit(form_model, values, [], self.is_update)

            if not response.success:
                response.errors = dict(error=response.errors, row=values)
            transaction.savepoint_commit(sid)
            return response
        except DataObjectAlreadyExists as e:
            transaction.savepoint_rollback(sid)
            if is_reporter:
                msg = _("%s with Unique ID Number = %s already exists.") % (e.data[2], e.data[1]) \
                    if e.data[0] == 'Unique ID Number' \
                    else _("%s with %s = %s already exists.") % (e.data[2], e.data[0], e.data[1])
            else:
                msg = _("%s with ID Number '%s' already exists or has previously collected data.") % (
                    e.data[2], e.data[1]) \
                    if e.data[0] == 'Unique ID Number' \
                    else _("%s with %s = %s already exists.") % (e.data[2], e.data[0], e.data[1])
            return self._appendFailedResponse(msg, values=values)
        except EmptyRowException as e:
            transaction.savepoint_rollback(sid)
            return self._appendFailedResponse(e.message)
        except (InvalidEmailException, MangroveException,
                NameNotFoundException, ValidationError) as e:
            transaction.savepoint_rollback(sid)
            return self._appendFailedResponse(e.message, values=values)
        except ImportValidationError as e:
            raise
Exemplo n.º 5
0
    def import_submission(self, form_code, organization, registered_emails,
                          registered_phone_numbers, responses, values):
        transport_info = TransportInfo(transport=self.channel_name,
                                       source=self.channel_name,
                                       destination="")
        submission = self._create_submission(transport_info, form_code,
                                             copy(values))
        try:
            form_model, values = self._process(form_code, values)
            log_entry = "message: " + str(values) + "|source: web|"
            if case_insensitive_lookup(values,
                                       ENTITY_TYPE_FIELD_CODE) == REPORTER:
                response = self.import_data_sender(form_model, organization,
                                                   registered_emails,
                                                   registered_phone_numbers,
                                                   submission, values)
            else:
                response = self.submit(form_model, values, submission, [])

            if not response.success:
                response.errors = dict(error=response.errors, row=values)
                log_entry += "Status: False"
            else:
                log_entry += "Status: True"
            self.logger.info(log_entry)
            responses.append(response)
        except DataObjectAlreadyExists as e:
            if self.logger is not None:
                log_entry += "Status: False"
                self.logger.info(log_entry)
            self.appendFailedResponse(responses,
                                      "%s with %s = %s already exists." %
                                      (e.data[2], e.data[0], e.data[1]),
                                      values=values)
        except (InvalidEmailException, MangroveException) as e:
            self.appendFailedResponse(responses, e.message, values=values)