Ejemplo n.º 1
0
    def create_project(self):
        data = self.data
        user = data['user']

        project = FoiProject(
            title=data['subject'],
            description=data['body'],
            status=FoiProject.STATUS_PENDING,
            public=data['public'],
            user=user,
            site=Site.objects.get_current(),
            reference=data.get('reference', ''),
            request_count=len(self.data['publicbodies'])
        )
        save_obj_with_slug(project)
        project.publicbodies.add(*data['publicbodies'])

        if 'tags' in data and data['tags']:
            project.tags.add(*data['tags'])

        FoiProject.project_created.send(sender=project)

        publicbody_ids = [pb.pk for pb in data['publicbodies']]
        extra = {
            'full_text': data.get('full_text', False)
        }
        create_project_requests.delay(
            project.id, publicbody_ids, **extra
        )
        return project
Ejemplo n.º 2
0
 def save(self, **kwargs):
     kwargs['commit'] = False
     crowdfunding = super(CrowdfundingRequestStartForm, self).save(**kwargs)
     crowdfunding.user = self.user
     crowdfunding.request = self.foirequest
     # Calculate amount needed
     crowdfunding.amount_needed = calculate_amount_needed(
         crowdfunding.amount_requested)
     save_obj_with_slug(crowdfunding)
     return crowdfunding
Ejemplo n.º 3
0
    def create_project(self):
        data = self.data
        user = data['user']

        project = FoiProject(title=data['subject'],
                             description=data['body'],
                             status=FoiProject.STATUS_PENDING,
                             public=data['public'],
                             user=user,
                             site=Site.objects.get_current(),
                             reference=data.get('reference', ''),
                             request_count=len(self.data['publicbodies']))
        save_obj_with_slug(project)
        project.publicbodies.add(*data['publicbodies'])

        if 'tags' in data and data['tags']:
            project.tags.add(*data['tags'])

        FoiProject.project_created.send(sender=project)

        publicbody_ids = [pb.pk for pb in data['publicbodies']]
        extra = {'full_text': data.get('full_text', False)}
        create_project_requests.delay(project.id, publicbody_ids, **extra)
        return project
Ejemplo n.º 4
0
    def create_request(self, publicbody, sequence=0):
        data = self.data
        user = data['user']

        now = timezone.now()
        request = FoiRequest(
            title=data['subject'],
            public_body=publicbody,
            user=data['user'],
            description=data['body'],
            public=data['public'],
            site=Site.objects.get_current(),
            reference=data.get('reference', ''),
            first_message=now,
            last_message=now,
            project=data.get('project'),
            project_order=data.get('project_order'),
        )

        send_now = False

        if not user.is_active:
            request.status = 'awaiting_user_confirmation'
            request.visibility = FoiRequest.INVISIBLE
        else:
            # TODO add draft
            request.status = 'awaiting_response'
            request.determine_visibility()
            send_now = True

        request.secret_address = generate_unique_secret_address(user)
        foilaw = None
        if data.get('law_type'):
            law_type = data['law_type']
            foilaw = publicbody.get_applicable_law(law_type=law_type)

        if foilaw is None:
            foilaw = publicbody.default_law

        request.law = foilaw
        request.jurisdiction = foilaw.jurisdiction

        if send_now:
            request.due_date = request.law.calculate_due_date()

        if data.get('blocked'):
            send_now = False
            request.is_blocked = True

        self.pre_save_request(request)
        save_obj_with_slug(request, count=sequence)

        if 'tags' in data and data['tags']:
            request.tags.add(*data['tags'])

        subject = '%s [#%s]' % (request.title, request.pk)
        message = FoiMessage(
            request=request,
            sent=False,
            is_response=False,
            sender_user=user,
            sender_email=request.secret_address,
            sender_name=user.display_name(),
            timestamp=now,
            status='awaiting_response',
            subject=subject,
            subject_redacted=redact_subject(subject, user=user)
        )

        send_address = True
        if request.law:
            send_address = not request.law.email_only

        message.plaintext = construct_initial_message_body(
                request,
                text=data['body'],
                foilaw=foilaw,
                full_text=data.get('full_text', False),
                send_address=send_address)

        message.plaintext_redacted = redact_plaintext(
            message.plaintext,
            is_response=False,
            user=user
        )

        message.recipient_public_body = publicbody
        message.recipient = publicbody.name
        message.recipient_email = publicbody.email

        FoiRequest.request_to_public_body.send(sender=request)

        message.save()
        FoiRequest.request_created.send(
            sender=request,
            reference=data.get('reference', '')
        )
        if send_now:
            message.send()
            message.save()
        return request
Ejemplo n.º 5
0
    def create_request(self, publicbody, sequence=0):
        data = self.data
        user = data['user']

        now = timezone.now()
        request = FoiRequest(
            title=data['subject'],
            public_body=publicbody,
            user=data['user'],
            description=data['body'],
            public=data['public'],
            site=Site.objects.get_current(),
            reference=data.get('reference', ''),
            first_message=now,
            last_message=now,
            project=data.get('project'),
            project_order=data.get('project_order'),
        )

        send_now = False

        if not user.is_active:
            request.status = 'awaiting_user_confirmation'
            request.visibility = FoiRequest.INVISIBLE
        else:
            # TODO add draft
            request.status = 'awaiting_response'
            request.determine_visibility()
            send_now = True

        request.secret_address = generate_unique_secret_address(user)
        foilaw = None
        if data.get('law_type'):
            law_type = data['law_type']
            foilaw = publicbody.get_applicable_law(law_type=law_type)

        if foilaw is None:
            foilaw = publicbody.default_law

        request.law = foilaw
        request.jurisdiction = foilaw.jurisdiction

        if send_now:
            request.due_date = request.law.calculate_due_date()

        if data.get('blocked'):
            send_now = False
            request.is_blocked = True

        self.pre_save_request(request)
        save_obj_with_slug(request, count=sequence)

        if 'tags' in data and data['tags']:
            request.tags.add(*data['tags'])

        subject = '%s [#%s]' % (request.title, request.pk)
        message = FoiMessage(request=request,
                             sent=False,
                             is_response=False,
                             sender_user=user,
                             sender_email=request.secret_address,
                             sender_name=user.display_name(),
                             timestamp=now,
                             status='awaiting_response',
                             subject=subject,
                             subject_redacted=redact_subject(subject,
                                                             user=user))

        send_address = bool(self.data.get('address'))
        message.plaintext = construct_initial_message_body(
            request,
            text=data['body'],
            foilaw=foilaw,
            full_text=data.get('full_text', False),
            send_address=send_address)
        message.plaintext_redacted = redact_plaintext_with_request(
            message.plaintext, request)

        message.recipient_public_body = publicbody
        message.recipient = publicbody.name
        message.recipient_email = publicbody.email

        FoiRequest.request_to_public_body.send(sender=request)

        message.save()
        FoiRequest.request_created.send(sender=request,
                                        reference=data.get('reference', ''))
        if send_now:
            message.send()
            message.save()
        return request