Exemple #1
0
    def get_context_data(self, **kwargs):
        if len(self.args) > 1:
            kwargs['application_pk'] = self.args[1]

        try:
            applicant = utils.determine_applicant(self.request)
        except utils.SessionDataMissingException as e:
            messages.error(self.request, six.text_type(e))
            return redirect('wl_applications:create_select_customer')

        profile_exists = applicant.profile_set.count() > 0

        if utils.is_app_session_data_set(self.request.session, 'profile_pk'):
            selected_profile = Profile.objects.get(id=utils.get_app_session_data(self.request.session, 'profile_pk'))
            kwargs['profile_selection_form'] = ProfileSelectionForm(user=applicant, selected_profile=selected_profile)
        else:
            if profile_exists:
                kwargs['profile_selection_form'] = ProfileSelectionForm(user=applicant)

        if profile_exists:
            kwargs['profile_creation_form'] = ProfileForm(user=utils.get_app_session_data(self.request.session, 'customer_pk'))
        else:
            kwargs['profile_creation_form'] = ProfileForm(initial_display_name='Default', initial_email=applicant.email,
                                                          user=utils.get_app_session_data(self.request.session, 'customer_pk'))

        kwargs['address_form'] = AddressForm()
        kwargs['licence_type'] = get_object_or_404(WildlifeLicenceType, code_slug=self.args[0])

        return super(CreateSelectProfileView, self).get_context_data(**kwargs)
Exemple #2
0
    def get_context_data(self, **kwargs):
        with open('%s/json/%s.json' % (APPLICATION_SCHEMA_PATH, self.args[0])) as data_file:
            form_structure = json.load(data_file)

        licence_type = WildlifeLicenceType.objects.get(code=self.args[0])

        application = get_object_or_404(Application, pk=self.args[1]) if len(self.args) > 1 else None

        if is_app_session_data_set(self.request.session, 'profile_pk'):
            profile = get_object_or_404(Profile, pk=get_app_session_data(self.request.session, 'profile_pk'))
        else:
            profile = application.applicant_profile

        kwargs['licence_type'] = licence_type
        kwargs['profile'] = profile
        kwargs['structure'] = form_structure

        kwargs['is_proxy_applicant'] = is_officer(self.request.user)

        if len(self.args) > 1:
            kwargs['application_pk'] = self.args[1]

        if is_app_session_data_set(self.request.session, 'data'):
            data = get_app_session_data(self.request.session, 'data')

            temp_files_url = settings.MEDIA_URL + \
                os.path.basename(os.path.normpath(get_app_session_data(self.request.session, 'temp_files_dir')))

            prepend_url_to_application_data_files(form_structure, data, temp_files_url)

            kwargs['data'] = data

        return super(PreviewView, self).get_context_data(**kwargs)
Exemple #3
0
    def get_context_data(self, **kwargs):
        application = get_object_or_404(Application, pk=self.args[1]) if len(self.args) > 1 else None

        licence_type = WildlifeLicenceType.objects.get(code=self.args[0])
        if is_app_session_data_set(self.request.session, 'profile_pk'):
            profile = get_object_or_404(Profile, pk=get_app_session_data(self.request.session, 'profile_pk'))
        else:
            profile = application.applicant_profile

        with open('%s/json/%s.json' % (APPLICATION_SCHEMA_PATH, self.args[0])) as data_file:
            form_structure = json.load(data_file)

        kwargs['licence_type'] = licence_type
        kwargs['profile'] = profile
        kwargs['structure'] = form_structure

        kwargs['is_proxy_applicant'] = is_officer(self.request.user)

        if application is not None:
            kwargs['application_pk'] = application.pk
            if application.review_status == 'awaiting_amendments':
                amendments = AmendmentRequest.objects.filter(application=application).filter(status='requested')
                kwargs['amendments'] = amendments

        if is_app_session_data_set(self.request.session, 'data'):
            data = get_app_session_data(self.request.session, 'data')

            temp_files_dir = get_app_session_data(self.request.session, 'temp_files_dir')
            if temp_files_dir is not None:
                temp_files_url = settings.MEDIA_URL + os.path.basename(os.path.normpath(temp_files_dir))
                prepend_url_to_application_data_files(form_structure, data, temp_files_url)

            kwargs['data'] = data

        return super(EnterDetailsView, self).get_context_data(**kwargs)
Exemple #4
0
    def get_context_data(self, **kwargs):
        licence_type = WildlifeLicenceType.objects.get(code_slug=self.args[0])

        application = get_object_or_404(Application, pk=self.args[1]) if len(self.args) > 1 else None

        if utils.is_app_session_data_set(self.request.session, 'profile_pk'):
            profile = get_object_or_404(Profile, pk=utils.get_app_session_data(self.request.session, 'profile_pk'))
        else:
            profile = application.applicant_profile

        kwargs['licence_type'] = licence_type
        kwargs['profile'] = profile
        kwargs['structure'] = licence_type.application_schema

        kwargs['is_proxy_applicant'] = is_officer(self.request.user)

        if len(self.args) > 1:
            kwargs['application_pk'] = self.args[1]

        temp_files_dir = utils.get_app_session_data(self.request.session, 'temp_files_dir')
        if temp_files_dir is not None:
            temp_files_url = settings.MEDIA_URL + os.path.basename(os.path.normpath(temp_files_dir))

        if utils.is_app_session_data_set(self.request.session, 'data'):
            data = utils.get_app_session_data(self.request.session, 'data')

            if temp_files_dir is not None:
                utils.prepend_url_to_files(licence_type.application_schema, data, temp_files_url)

            kwargs['data'] = data

        if utils.is_app_session_data_set(self.request.session, 'application_document'):
            application_document = utils.get_app_session_data(self.request.session, 'application_document')

            if temp_files_dir is not None:
                application_document = os.path.join(temp_files_url, application_document)

            kwargs['structure'], kwargs['data'] = utils.append_app_document_to_schema_data(kwargs['structure'],
                                                                                           kwargs['data'],
                                                                                           application_document)

        return super(PreviewView, self).get_context_data(**kwargs)
Exemple #5
0
    def get_context_data(self, **kwargs):
        application = get_object_or_404(Application, pk=self.args[1]) if len(self.args) > 1 else None

        licence_type = WildlifeLicenceType.objects.get(code_slug=self.args[0])
        if utils.is_app_session_data_set(self.request.session, 'profile_pk'):
            profile = get_object_or_404(Profile, pk=utils.get_app_session_data(self.request.session, 'profile_pk'))
        else:
            profile = application.applicant_profile

        kwargs['licence_type'] = licence_type
        kwargs['profile'] = profile
        kwargs['structure'] = licence_type.application_schema

        kwargs['is_proxy_applicant'] = is_officer(self.request.user)

        if application is not None:
            kwargs['application_pk'] = application.pk
            if application.review_status == 'awaiting_amendments':
                amendments = AmendmentRequest.objects.filter(application=application).filter(status='requested')
                kwargs['amendments'] = amendments

        temp_files_dir = utils.get_app_session_data(self.request.session, 'temp_files_dir')
        if temp_files_dir is not None:
            temp_files_url = settings.MEDIA_URL + os.path.basename(os.path.normpath(temp_files_dir))

        if utils.is_app_session_data_set(self.request.session, 'data'):
            data = utils.get_app_session_data(self.request.session, 'data')

            if temp_files_dir is not None:
                utils.prepend_url_to_files(licence_type.application_schema, data, temp_files_url)

            kwargs['data'] = data

        if utils.is_app_session_data_set(self.request.session, 'application_document'):
            application_document = utils.get_app_session_data(self.request.session, 'application_document')

            if temp_files_dir is not None:
                application_document = os.path.join(temp_files_url, application_document)

            kwargs['application_document'] = application_document

        return super(EnterDetailsView, self).get_context_data(**kwargs)
Exemple #6
0
    def get_context_data(self, **kwargs):
        kwargs['licence_type'] = get_object_or_404(WildlifeLicenceType, code_slug=self.args[0])

        if is_officer(self.request.user) and utils.is_app_session_data_set(self.request.session, 'customer_pk'):
            kwargs['customer'] = EmailUser.objects.get(pk=utils.get_app_session_data(self.request.session, 'customer_pk'))

        kwargs['is_renewal'] = False
        if len(self.args) > 1:
            try:
                application = Application.objects.get(pk=self.args[1])
                if application.processing_status == 'renewal':
                    kwargs['is_renewal'] = True
            except Exception:
                pass

        return super(ApplicationEntryBaseView, self).get_context_data(**kwargs)
Exemple #7
0
    def post(self, request, *args, **kwargs):
        if len(args) > 1:
            application = get_object_or_404(Application, pk=args[1])
        else:
            application = Application()

        if is_officer(request.user):
            application.proxy_applicant = request.user

        application.data = utils.get_app_session_data(self.request.session, 'data')
        application.licence_type = get_object_or_404(WildlifeLicenceType, code_slug=args[0])
        application.correctness_disclaimer = request.POST.get('correctnessDisclaimer', '') == 'on'
        application.further_information_disclaimer = request.POST.get('furtherInfoDisclaimer', '') == 'on'
        application.applicant_profile = get_object_or_404(Profile, pk=utils.get_app_session_data(request.session,
                                                                                                 'profile_pk'))
        application.lodgement_sequence += 1
        application.lodgement_date = datetime.now().date()

        if application.customer_status == 'amendment_required':
            # this is a 're-lodged' application after some amendment were required.
            # from this point we assume that all the amendments have been amended.
            AmendmentRequest.objects.filter(application=application).filter(status='requested').update(status='amended')
            application.review_status = 'amended'
            application.processing_status = 'ready_for_action'
        else:
            if application.processing_status != 'renewal':
                application.processing_status = 'new'

        application.customer_status = 'under_review'

        # need to save application in order to get its pk
        if not application.lodgement_number:
            application.save(no_revision=True)
            application.lodgement_number = '%s-%s' % (str(application.licence_type.pk).zfill(LICENCE_TYPE_NUM_CHARS),
                                                      str(application.pk).zfill(LODGEMENT_NUMBER_NUM_CHARS))

        application.documents.clear()

        # if attached files were saved temporarily, add each to application as part of a Document
        temp_files_dir = utils.get_app_session_data(request.session, 'temp_files_dir')
        try:
            for filename in utils.get_all_filenames_from_application_data(application.licence_type.application_schema,
                                                                          utils.get_app_session_data(request.session, 'data')):
                document = Document.objects.create(name=filename)
                with open(os.path.join(temp_files_dir, filename), 'rb') as doc_file:
                    document.file.save(filename, File(doc_file), save=True)

                    application.documents.add(document)

            if utils.is_app_session_data_set(request.session, 'application_document'):
                filename = utils.get_app_session_data(request.session, 'application_document')
                document = Document.objects.create(name=filename)
                with open(os.path.join(utils.get_app_session_data(request.session, 'temp_files_dir'), filename), 'rb') as doc_file:
                    document.file.save(filename, File(doc_file), save=True)

                    application.hard_copy = document

            messages.success(request, 'The application was successfully lodged.')
        except Exception as e:
            messages.error(request, 'There was a problem creating the application: %s' % e)

        application.save(version_user=application.applicant_profile.user, version_comment='Details Modified')

        try:
            utils.delete_app_session_data(request.session)
        except Exception as e:
            messages.warning(request, 'There was a problem deleting session data: %s' % e)

        return redirect('wl_dashboard:home')
Exemple #8
0
    def post(self, request, *args, **kwargs):
        licence_type = WildlifeLicenceType.objects.get(code_slug=self.args[0])

        utils.rename_filename_doubleups(request.POST, request.FILES)

        utils.set_app_session_data(request.session, 'data', utils.create_data_from_form(licence_type.application_schema,
                                                                                        request.POST, request.FILES))

        temp_files_dir = utils.get_app_session_data(request.session, 'temp_files_dir')

        if 'draft' in request.POST or 'draft_continue' in request.POST:
            if len(args) > 1:
                application = get_object_or_404(Application, pk=args[1])
            else:
                application = Application()

            if is_officer(request.user):
                application.proxy_applicant = request.user

            application.data = utils.get_app_session_data(request.session, 'data')
            application.licence_type = WildlifeLicenceType.objects.get(code_slug=args[0])
            application.applicant_profile = get_object_or_404(Profile,
                                                              pk=utils.get_app_session_data(request.session, 'profile_pk'))
            application.customer_status = 'draft'

            if application.processing_status != 'renewal':
                application.processing_status = 'draft'

            application.save(version_user=application.applicant_profile.user)

            application.documents.clear()

            # need to create documents from all the existing files that haven't been replaced
            # (saved in temp_files_dir) as well as any new ones
            try:
                for filename in utils.get_all_filenames_from_application_data(licence_type.application_schema,
                                                                              utils.get_app_session_data(request.session, 'data')):

                    # need to be sure file is in tmp directory (as it could be a freshly attached file)
                    if os.path.exists(os.path.join(temp_files_dir, filename)):
                        document = Document.objects.create(name=filename)
                        with open(os.path.join(temp_files_dir, filename), 'rb') as doc_file:
                            document.file.save(filename, File(doc_file), save=True)
                            application.documents.add(document)
            except Exception as e:
                messages.error(request, 'There was a problem appending applications files: %s' % e)

            for f in request.FILES:
                if f == 'application_document':
                    application.hard_copy = Document.objects.create(name=str(request.FILES[f]), file=request.FILES[f])
                else:
                    application.documents.add(Document.objects.create(name=str(request.FILES[f]), file=request.FILES[f]))

            application.save(no_revision=True)

            messages.warning(request, 'The application was saved to draft.')

            if 'draft' in request.POST:
                try:
                    utils.delete_app_session_data(request.session)
                except Exception as e:
                    messages.warning(request, 'There was a problem deleting session data: %s' % e)

                return redirect('wl_dashboard:home')
            else:
                # if continuing, need to save new files in temp so they can be previewed on enter details screen
                if len(request.FILES) > 0:
                    temp_files_dir = utils.get_app_session_data(request.session, 'temp_files_dir')

                    for f in request.FILES:
                        if f == 'application_document':
                            utils.set_app_session_data(request.session, 'application_document', str(request.FILES[f]))

                        with open(os.path.join(temp_files_dir, str(request.FILES[f])), 'wb+') as destination:
                            for chunk in request.FILES[f].chunks():
                                destination.write(chunk)

                return redirect('wl_applications:enter_details', args[0], application.pk)
        else:
            if len(request.FILES) > 0:
                temp_files_dir = utils.get_app_session_data(request.session, 'temp_files_dir')

                for f in request.FILES:
                    if f == 'application_document':
                        utils.set_app_session_data(request.session, 'application_document', str(request.FILES[f]))

                    with open(os.path.join(temp_files_dir, str(request.FILES[f])), 'wb+') as destination:
                        for chunk in request.FILES[f].chunks():
                            destination.write(chunk)

            return redirect('wl_applications:preview', *args)
Exemple #9
0
    def post(self, request, *args, **kwargs):
        with open('%s/json/%s.json' % (APPLICATION_SCHEMA_PATH, args[0])) as data_file:
            form_structure = json.load(data_file)

        set_app_session_data(request.session, 'data', create_data_from_form(form_structure, request.POST, request.FILES))

        temp_files_dir = get_app_session_data(request.session, 'temp_files_dir')

        if 'draft' in request.POST or 'draft_continue' in request.POST:
            if len(args) > 1:
                application = get_object_or_404(Application, pk=args[1])
            else:
                application = Application()

            if is_officer(request.user):
                application.proxy_applicant = request.user

            application.data = get_app_session_data(request.session, 'data')
            application.licence_type = WildlifeLicenceType.objects.get(code=args[0])
            application.applicant_profile = get_object_or_404(Profile,
                                                              pk=get_app_session_data(request.session, 'profile_pk'))
            application.customer_status = 'draft'

            if application.processing_status != 'renewal':
                application.processing_status = 'draft'

            application.save(version_user=application.applicant_profile.user)

            # delete all existing documents for this application
            application.documents.all().delete()
            if application.hard_copy is not None:
                application.hard_copy.delete()

            # need to create documents from all the existing files that haven't been replaced
            # (saved in temp_files_dir) as well as any new ones
            try:
                for filename in get_all_filenames_from_application_data(form_structure,
                                                                        get_app_session_data(request.session, 'data')):

                    # need to be sure file is in tmp directory (as it could be a freshly attached file)
                    if os.path.exists(os.path.join(temp_files_dir, filename)):
                        document = Document.objects.create(name=filename)
                        with open(os.path.join(temp_files_dir, filename), 'rb') as doc_file:
                            document.file.save(filename, File(doc_file), save=True)
                            application.documents.add(document)
            except Exception as e:
                messages.error(request, 'There was a problem appending applications files: %s' % e)

            finally:
                try:
                    if temp_files_dir is not None:
                        shutil.rmtree(temp_files_dir)
                except (shutil.Error, OSError) as e:
                    messages.warning(request, 'There was a problem deleting temporary files: %s' % e)

            for f in request.FILES:
                if f == 'application_document':
                    application.hard_copy = Document.objects.create(name=str(request.FILES[f]), file=request.FILES[f])
                else:
                    application.documents.add(Document.objects.create(name=str(request.FILES[f]), file=request.FILES[f]))

            messages.warning(request, 'The application was saved to draft.')

            if 'draft' in request.POST:
                delete_app_session_data(request.session)
                return redirect('dashboard:home')
            else:
                return redirect('applications:enter_details', args[0], application.pk)
        else:
            if len(request.FILES) > 0:
                temp_files_dir = get_app_session_data(request.session, 'temp_files_dir')

                for f in request.FILES:
                    if f == 'application_document':
                        set_app_session_data(request.session, 'application_document', str(request.FILES[f]))

                    with open(os.path.join(temp_files_dir, str(request.FILES[f])), 'wb+') as destination:
                        for chunk in request.FILES[f].chunks():
                            destination.write(chunk)

            return redirect('applications:preview', *args)