diff --git a/edivorce/apps/core/efilinghub.py b/edivorce/apps/core/efilinghub.py index 3a08f7ff..f1b4488e 100644 --- a/edivorce/apps/core/efilinghub.py +++ b/edivorce/apps/core/efilinghub.py @@ -166,10 +166,11 @@ class EFilingHub: return str(uuid.UUID(guid)) return guid - def _format_package(self, request, files, parties): + def _format_package(self, request, files, doc_types, parties): documents = [] - for file in files: + for index, file in enumerate(files): document = PACKAGE_DOCUMENT_FORMAT.copy() + document['type'] = doc_types[index] document['name'] = file[1][0] documents.append(document) package = PACKAGE_FORMAT.copy() @@ -188,7 +189,7 @@ class EFilingHub: # -- 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. :param parties: @@ -216,7 +217,7 @@ class EFilingHub: headers = { '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" response = self._get_api(request, url, transaction_id, bce_id, headers=headers, data=json.dumps(package_data)) diff --git a/edivorce/apps/core/tests/test_efiling_hub.py b/edivorce/apps/core/tests/test_efiling_hub.py index fd34ef39..3fed843c 100644 --- a/edivorce/apps/core/tests/test_efiling_hub.py +++ b/edivorce/apps/core/tests/test_efiling_hub.py @@ -172,7 +172,8 @@ class EFilingHubTests(TransactionTestCase): party['firstName'] = 'Party {}'.format(i) party['lastName'] = 'Test' 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.assertEqual(package['filingPackage']['documents'][0]['name'], 'form_0.pdf') diff --git a/edivorce/apps/core/utils/cso_filing.py b/edivorce/apps/core/utils/cso_filing.py index a8616844..d43c8b3f 100644 --- a/edivorce/apps/core/utils/cso_filing.py +++ b/edivorce/apps/core/utils/cso_filing.py @@ -1,4 +1,5 @@ import random +import re 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': 'RCP', 'form_number': 36}) 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}) if has_children: 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': 'RCP', 'form_number': 36}) 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}) if has_children: uploaded.append({'doc_type': 'AAI', 'party_code': 0}) @@ -147,3 +150,14 @@ def forms_to_file(responses_dict, initial=False): return [], [] 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" diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index af576244..6f57157c 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -9,7 +9,8 @@ from django.contrib.auth.decorators import login_required from edivorce.apps.core.utils.derived import get_derived_data 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.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 @@ -20,6 +21,7 @@ from ..utils.user_response import ( get_responses_from_session, get_responses_from_session_grouped_by_steps, ) +from .pdf import images_to_pdf, pdf_form def home(request): @@ -188,7 +190,7 @@ def dashboard_nav(request, nav_step): responses_dict['derived'] = get_derived_data(responses_dict) 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 if request.GET.get('cancelled'): messages.add_message(request, messages.ERROR, @@ -228,6 +230,51 @@ def _submit_files(request, initial=False): for form_name in missing_forms: messages.add_message(request, messages.ERROR, f'Missing documents for {form_name}') 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)