Browse Source

Initial (rough) implementation of Initial eFiling -- WIP

pull/172/head
Michael Olund 5 years ago
parent
commit
9d089bfced
4 changed files with 74 additions and 11 deletions
  1. +5
    -4
      edivorce/apps/core/efilinghub.py
  2. +2
    -1
      edivorce/apps/core/tests/test_efiling_hub.py
  3. +18
    -4
      edivorce/apps/core/utils/cso_filing.py
  4. +49
    -2
      edivorce/apps/core/views/main.py

+ 5
- 4
edivorce/apps/core/efilinghub.py View File

@ -166,10 +166,11 @@ class EFilingHub:
return str(uuid.UUID(guid)) return str(uuid.UUID(guid))
return guid return guid
def _format_package(self, request, files, parties):
def _format_package(self, request, files, doc_types, parties):
documents = [] documents = []
for file in files:
for index, file in enumerate(files):
document = PACKAGE_DOCUMENT_FORMAT.copy() document = PACKAGE_DOCUMENT_FORMAT.copy()
document['type'] = doc_types[index]
document['name'] = file[1][0] document['name'] = file[1][0]
documents.append(document) documents.append(document)
package = PACKAGE_FORMAT.copy() package = PACKAGE_FORMAT.copy()
@ -188,7 +189,7 @@ class EFilingHub:
# -- EFILING HUB INTERFACE -- # -- EFILING HUB INTERFACE --
def upload(self, request, files, parties=None):
def upload(self, request, files, doc_types=None, parties=None):
""" """
Does an initial upload of documents and gets the generated eFiling Hub url. Does an initial upload of documents and gets the generated eFiling Hub url.
:param parties: :param parties:
@ -216,7 +217,7 @@ class EFilingHub:
headers = { headers = {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }
package_data = self._format_package(request, files, parties=parties)
package_data = self._format_package(request, files, doc_types, parties=parties)
url = f"{self.api_base_url}/submission/{response['submissionId']}/generateUrl" url = f"{self.api_base_url}/submission/{response['submissionId']}/generateUrl"
response = self._get_api(request, url, transaction_id, bce_id, headers=headers, response = self._get_api(request, url, transaction_id, bce_id, headers=headers,
data=json.dumps(package_data)) data=json.dumps(package_data))


+ 2
- 1
edivorce/apps/core/tests/test_efiling_hub.py View File

@ -172,7 +172,8 @@ class EFilingHubTests(TransactionTestCase):
party['firstName'] = 'Party {}'.format(i) party['firstName'] = 'Party {}'.format(i)
party['lastName'] = 'Test' party['lastName'] = 'Test'
parties.append(party) parties.append(party)
package = self.hub._format_package(self.request, files, parties=parties)
doc_types = ['MC', 'RDP']
package = self.hub._format_package(self.request, files, doc_types, parties=parties)
self.assertTrue(package) self.assertTrue(package)
self.assertEqual(package['filingPackage']['documents'][0]['name'], 'form_0.pdf') self.assertEqual(package['filingPackage']['documents'][0]['name'], 'form_0.pdf')


+ 18
- 4
edivorce/apps/core/utils/cso_filing.py View File

@ -1,4 +1,5 @@
import random import random
import re
from django.conf import settings from django.conf import settings
@ -87,7 +88,8 @@ def forms_to_file(responses_dict, initial=False):
generated.append({'doc_type': 'RFO', 'form_number': 35}) generated.append({'doc_type': 'RFO', 'form_number': 35})
generated.append({'doc_type': 'RCP', 'form_number': 36}) generated.append({'doc_type': 'RCP', 'form_number': 36})
uploaded.append({'doc_type': 'OFI', 'party_code': 0}) uploaded.append({'doc_type': 'OFI', 'party_code': 0})
uploaded.append({'doc_type': 'EFSS', 'party_code': 1})
if married_in_quebec:
uploaded.append({'doc_type': 'EFSS', 'party_code': 1})
uploaded.append({'doc_type': 'RDP', 'party_code': 0}) uploaded.append({'doc_type': 'RDP', 'party_code': 0})
if has_children: if has_children:
uploaded.append({'doc_type': 'AAI', 'party_code': 0}) uploaded.append({'doc_type': 'AAI', 'party_code': 0})
@ -99,9 +101,10 @@ def forms_to_file(responses_dict, initial=False):
generated.append({'doc_type': 'RFO', 'form_number': 35}) generated.append({'doc_type': 'RFO', 'form_number': 35})
generated.append({'doc_type': 'RCP', 'form_number': 36}) generated.append({'doc_type': 'RCP', 'form_number': 36})
uploaded.append({'doc_type': 'OFI', 'party_code': 0}) uploaded.append({'doc_type': 'OFI', 'party_code': 0})
uploaded.append({'doc_type': 'EFSS', 'party_code': 1})
if how_to_sign == 'Separately':
uploaded.append({'doc_type': 'EFSS', 'party_code': 2})
if married_in_quebec:
uploaded.append({'doc_type': 'EFSS', 'party_code': 1})
if how_to_sign == 'Separately':
uploaded.append({'doc_type': 'EFSS', 'party_code': 2})
uploaded.append({'doc_type': 'RDP', 'party_code': 0}) uploaded.append({'doc_type': 'RDP', 'party_code': 0})
if has_children: if has_children:
uploaded.append({'doc_type': 'AAI', 'party_code': 0}) uploaded.append({'doc_type': 'AAI', 'party_code': 0})
@ -147,3 +150,14 @@ def forms_to_file(responses_dict, initial=False):
return [], [] return [], []
return uploaded, generated return uploaded, generated
def get_filename(doc_type, party_code):
form_name = Document.form_types[doc_type]
slug = re.sub('[^0-9a-zA-Z]+', '-', form_name).strip('-')
if party_code == 0:
return slug + ".pdf"
elif party_code == 1:
return slug + "--Claimant1.pdf"
else:
return slug + "--Claimant2.pdf"

+ 49
- 2
edivorce/apps/core/views/main.py View File

@ -9,7 +9,8 @@ from django.contrib.auth.decorators import login_required
from edivorce.apps.core.utils.derived import get_derived_data from edivorce.apps.core.utils.derived import get_derived_data
from ..decorators import intercept, prequal_completed from ..decorators import intercept, prequal_completed
from ..utils.cso_filing import file_documents, forms_to_file
from ..utils.cso_filing import file_documents, forms_to_file, get_filename
from ..efilinghub import EFilingHub, PACKAGE_PARTY_FORMAT, PACKAGE_DOCUMENT_FORMAT
from ..utils.question_step_mapping import list_of_registries from ..utils.question_step_mapping import list_of_registries
from ..utils.step_completeness import get_error_dict, get_missed_question_keys, get_step_completeness, is_complete, get_formatted_incomplete_list from ..utils.step_completeness import get_error_dict, get_missed_question_keys, get_step_completeness, is_complete, get_formatted_incomplete_list
from ..utils.template_step_order import template_step_order from ..utils.template_step_order import template_step_order
@ -20,6 +21,7 @@ from ..utils.user_response import (
get_responses_from_session, get_responses_from_session,
get_responses_from_session_grouped_by_steps, get_responses_from_session_grouped_by_steps,
) )
from .pdf import images_to_pdf, pdf_form
def home(request): def home(request):
@ -188,7 +190,7 @@ def dashboard_nav(request, nav_step):
responses_dict['derived'] = get_derived_data(responses_dict) responses_dict['derived'] = get_derived_data(responses_dict)
if nav_step == 'initial_filing': if nav_step == 'initial_filing':
uploaded, generated = forms_to_file(responses_dict, initial=True)
uploaded, _ = forms_to_file(responses_dict, initial=True)
responses_dict['form_types'] = uploaded responses_dict['form_types'] = uploaded
if request.GET.get('cancelled'): if request.GET.get('cancelled'):
messages.add_message(request, messages.ERROR, messages.add_message(request, messages.ERROR,
@ -228,6 +230,51 @@ def _submit_files(request, initial=False):
for form_name in missing_forms: for form_name in missing_forms:
messages.add_message(request, messages.ERROR, f'Missing documents for {form_name}') messages.add_message(request, messages.ERROR, f'Missing documents for {form_name}')
responses_dict['active_page'] = next_page responses_dict['active_page'] = next_page
#################
# todo: refactor this!!!!
post_files = []
doc_types = []
(uploaded, generated) = forms_to_file(responses_dict, initial)
for form in generated:
pdf_response = pdf_form(request, str(form['form_number']))
filename = get_filename(form['doc_type'], 0)
post_files.append(('files', (filename, pdf_response.content)))
doc_types.append(form['doc_type'])
for document in uploaded:
pdf_response = images_to_pdf(request, document['doc_type'], document['party_code'])
if pdf_response.status_code == 200:
filename = get_filename(document['doc_type'], document['party_code'])
post_files.append(('files', (filename, pdf_response.content)))
doc_types.append(document['doc_type'])
# generate the list of parties to send to eFiling Hub
parties = []
party1 = PACKAGE_PARTY_FORMAT.copy()
party1['firstName'] = responses_dict.get('given_name_1_you', '').strip()
party1['middleName'] = (responses_dict.get('given_name_2_you', '') + ' ' + responses_dict.get('given_name_3_you', '')).strip()
party1['lastName'] = responses_dict.get('last_name_you', '').strip()
parties.append(party1)
party2 = PACKAGE_PARTY_FORMAT.copy()
party2['firstName'] = responses_dict.get('given_name_1_spouse', '').strip()
party2['middleName'] = (responses_dict.get('given_name_2_spouse', '') + ' ' + responses_dict.get('given_name_3_spouse', '')).strip()
party2['lastName'] = responses_dict.get('last_name_spouse', '').strip()
parties.append(party2)
hub = EFilingHub()
redirect_url, msg = hub.upload(request, post_files, doc_types, parties=parties)
if redirect_url:
return redirect(redirect_url)
#################
return redirect(reverse('dashboard_nav', kwargs={'nav_step': next_page}), context=responses_dict) return redirect(reverse('dashboard_nav', kwargs={'nav_step': next_page}), context=responses_dict)


Loading…
Cancel
Save