def _create_licence(licence_buffer, licence, application): ''' Creates licence summary and purpose details for licence. ''' def _create_licence_purpose(elements, selected_activity, issued_purpose): ''' Creates the licence purpose details per page available on the activity. ''' # delegation holds the dates, licencee and issuer details. delegation = [] sequence = purpose.purpose_sequence licence_display = '{0}-{1}-{2}'.format(licence.licence_number, sequence, issued_purpose.purpose.code) licence_purpose = issued_purpose.purpose.name elements.append( Paragraph(licence_purpose.upper(), styles['InfoTitleVeryLargeCenter'])) elements.append( Paragraph( 'Regulation {}, Biodiversity Conservation Regulations 2018'. format(issued_purpose.purpose.regulation), styles['Center'])) # applicant details delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) if application.applicant_type \ == application.APPLICANT_TYPE_ORGANISATION: address = application.org_applicant.address pass elif application.applicant_type == application.APPLICANT_TYPE_PROXY: address = application.proxy_applicant.residential_address pass else: # applic.applicant_type == application.APPLICANT_TYPE_SUBMITTER address = application.submitter.residential_address address_paragraphs = [ Paragraph(address.line1, styles['Left']), Paragraph(address.line2, styles['Left']), Paragraph(address.line3, styles['Left']), Paragraph( '%s %s %s' % (address.locality, address.state, address.postcode), styles['Left']), Paragraph(address.country.name, styles['Left']) ] delegation.append( Table([[[ Paragraph('Licence Number', styles['BoldLeft']), Paragraph('Licence Holder', styles['BoldLeft']), Paragraph('Address', styles['BoldLeft']) ], [Paragraph(licence_display, styles['Left'])] + [ Paragraph(licence.current_application.applicant, styles['Left']) ] + address_paragraphs]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=licence_table_style)) # dates dates_licensing_officer_table_style = TableStyle([ ('VALIGN', (0, 0), (-2, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'BOTTOM') ]) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) date_headings = [ Paragraph('Date of Issue', styles['BoldLeft']), Paragraph('Date Valid From', styles['BoldLeft']), Paragraph('Date of Expiry', styles['BoldLeft']) ] date_values = [ Paragraph(issued_purpose.issue_date.strftime('%d/%m/%Y'), styles['Left']), Paragraph(issued_purpose.start_date.strftime('%d/%m/%Y'), styles['Left']), Paragraph(issued_purpose.expiry_date.strftime('%d/%m/%Y'), styles['Left']) ] if issued_purpose.is_reissued: date_headings.insert( 0, Paragraph('Original Date of Issue', styles['BoldLeft'])) date_values.insert( 0, Paragraph(issued_purpose.original_issue_date, styles['Left'])) delegation.append( Table([[date_headings, date_values]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=dates_licensing_officer_table_style)) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(KeepTogether(delegation)) # species species_ids = issued_purpose.purpose.get_species_list if species_ids: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('SPECIES', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) species = LicenceSpecies.objects.values_list('data').filter( specie_id__in=species_ids) speciesList = ListFlowable([ Paragraph(s[0][0]['vernacular_names'], styles['Left']) for s in species ], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(speciesList) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) try: # copy-to-licence sections with terms and additional information. activity_util = ActivitySchemaUtil(selected_activity.application) terms = selected_activity.additional_licence_info['terms'] for term in terms: header = term['header'] if not header: continue elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph(header.upper(), styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) text = activity_util.get_ctl_text(term) elements.append(Paragraph(text, styles['Left'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) except BaseException: pass # PurposeSpecies Section # for s in purpose.purpose_species_json: # if s.has_key('is_additional_info') and s['is_additional_info']: # continue # # if s['details']: # parser = HtmlParser(s['details']) # # # Get and Display Purpose Species Header # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # elements.append( # Paragraph( # s['header'], # styles['BoldLeft'] # ) # ) # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # # purposeSpeciesList = add_parsed_details(parser, list_flowable=False) # for info_item in purposeSpeciesList: # elements.append(KeepTogether(info_item)) for s in purpose.purpose_species_json: if 'is_additional_info' in s and s['is_additional_info']: continue if s['details']: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) purposeSpeciesList, listcounter = html_to_rl( s['details'], styles) for info_item in purposeSpeciesList: elements.append(KeepTogether(info_item)) # End PurposeSpecies Section # application conditions activity_conditions = selected_activity.application.conditions.filter( licence_activity_id=selected_activity.licence_activity_id, licence_purpose_id=issued_purpose.purpose.id) if activity_conditions.exists(): elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('CONDITIONS', styles['BoldLeft'])) #elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # Conditions Section # conditionList = [] # for s in activity_conditions.order_by('order'): # parser = HtmlParser(s.condition) # conditionList += add_parsed_details(parser, list_flowable=False) # #elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # conditionList = ListFlowable( # conditionList, # bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE # ) # elements.append(conditionList) listcounter = 0 conditionList = [] for s in activity_conditions.order_by('order'): #_conditionList, listcounter += html_to_rl(s.condition, styles) _conditionList, listcounter = html_to_rl( s.condition_text, styles, listcounter) conditionList += _conditionList for info_item in conditionList: elements.append(KeepTogether(info_item)) # End Conditions Section elements += _layout_extracted_fields(licence.extracted_fields) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # signature block elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) issue_officer = '{} {}'.format(selected_activity.updated_by.first_name, selected_activity.updated_by.last_name) elements.append(Paragraph('____________________', styles['Left'])) elements.append(Paragraph(issue_officer, styles['Left'])) elements.append(Paragraph('LICENSING OFFICER', styles['Left'])) elements.append(Paragraph('WILDLIFE PROTECTION BRANCH', styles['Left'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Delegate of CEO', styles['ItalicLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # additional information # 'is_additional_info' Section from Purposespecies # for s in purpose.purpose_species_json: # if s.has_key('is_additional_info') and s['is_additional_info'] and s['details']: # parser = HtmlParser(s['details']) # # # Get and Display Purpose Species Header # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # elements.append( # Paragraph( # s['header'], # styles['BoldLeft'] # ) # ) # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # # purposeSpeciesInfoList = add_parsed_details(parser, list_flowable=False) # #elements.append(purposeSpeciesInfoList) # for info_item in purposeSpeciesInfoList: # elements.append(KeepTogether(info_item)) # additional information for s in purpose.purpose_species_json: if 'is_additional_info' in s and s['is_additional_info'] and s[ 'details']: # Get and Display Purpose Species Header elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) purposeSpeciesInfoList, listcounter = html_to_rl( s['details'], styles) for info_item in purposeSpeciesInfoList: elements.append(KeepTogether(info_item)) # End PurposeSpecies Section if licence.has_additional_information_for(selected_activity): elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append( Paragraph('ADDITIONAL INFORMATION', styles['BoldLeft'])) #elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) conditions = activity_conditions infos = [] c_num = 0 for c_id, condition in enumerate(conditions.order_by('order')): info = None if condition.standard_condition: info = condition.standard_condition.additional_information c_num = c_id + 1 if info: infos.append('{0} (related to condition no.{1})'.format( info.encode('utf8'), c_num)) # Conditions Section # for s in infos: # parser = HtmlParser(s) # infoList = add_parsed_details(parser) # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # elements.append(infoList) for s in infos: infoList, listcounter = html_to_rl(s, styles) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) #elements.append(infoList) for info_item in infoList: elements.append(KeepTogether(info_item)) # End Conditions Section elements.append(PageBreak()) # create the summary for this licence. site_url = settings.SITE_URL every_page_frame = Frame(PAGE_MARGIN, PAGE_MARGIN, PAGE_WIDTH - 2 * PAGE_MARGIN, PAGE_HEIGHT - 160, id='EveryPagesFrame') every_page_template = PageTemplate(id='EveryPages', frames=[every_page_frame], onPage=_create_licence_header) doc = BaseDocTemplate(licence_buffer, pageTemplates=[every_page_template], pagesize=A4) # this is the only way to get data into the onPage callback function doc.licence = licence doc.site_url = site_url licence_table_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')]) elements = [] elements.append( Paragraph('Licence Summary', styles['InfoTitleVeryLargeCenter'])) # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # elements.append(Paragraph('Activities', styles['BoldLeft'])) # elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # activityList = ListFlowable( # [Paragraph("{name}".format( # name=selected_activity.licence_activity.name # ), # styles['Left'], # ) for selected_activity in licence.current_activities], # bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) # elements.append(activityList) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Purposes', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) include = [ ApplicationSelectedActivityPurpose.PURPOSE_STATUS_SUSPENDED, ApplicationSelectedActivityPurpose.PURPOSE_STATUS_CURRENT, ApplicationSelectedActivityPurpose.PURPOSE_STATUS_DEFAULT, ] licence_purposes = [ p for p in licence.get_purposes_in_sequence() if p.purpose_status in include and p.is_issued and p.expiry_date ] purposeList = ListFlowable([ Paragraph( "{name} {start} - {end} ({status})".format( name=p.purpose.name, status=p.purpose_status, start=p.start_date.strftime('%d/%m/%Y'), end=p.expiry_date.strftime('%d/%m/%Y'), ), styles['Left'], ) for p in licence_purposes ], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(purposeList) elements.append(PageBreak()) for purpose in licence_purposes: # if not purpose.is_issued or purpose.purpose_status not in include: # # Exclude purposes that are not issued. # continue _create_licence_purpose(elements, purpose.selected_activity, purpose) doc.build(elements) return licence_buffer
def _create_licence(licence_buffer, licence, application, site_url, original_issue_date): every_page_frame = Frame(PAGE_MARGIN, PAGE_MARGIN, PAGE_WIDTH - 2 * PAGE_MARGIN, PAGE_HEIGHT - 160, id='EveryPagesFrame') every_page_template = PageTemplate(id='EveryPages', frames=every_page_frame, onPage=_create_licence_header) doc = BaseDocTemplate(licence_buffer, pageTemplates=[every_page_template], pagesize=A4) # this is the only way to get data into the onPage callback function doc.licence = licence doc.site_url = site_url licence_table_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')]) elements = [] elements.append(Paragraph(licence.licence_type.act, styles['InfoTitleLargeCenter'])) elements.append(Paragraph(licence.licence_type.code.upper(), styles['InfoTitleLargeCenter'])) # cannot use licence get_title_with_variants because licence isn't saved yet so can't get variants if application.variants.exists: title = '{} ({})'.format(application.licence_type.name, ' / '.join(application.variants.all(). values_list('name', flat=True))) else: title = licence.licence_type.name elements.append(Paragraph(title, styles['InfoTitleVeryLargeCenter'])) elements.append(Paragraph(licence.licence_type.statement, styles['InfoTitleLargeLeft'])) elements.append(Paragraph(licence.licence_type.authority, styles['InfoTitleLargeRight'])) # licence conditions if application.conditions.exists(): elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Conditions', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) conditionList = ListFlowable( [Paragraph(condition.text, styles['Left']) for condition in application.conditions.all()], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(conditionList) # purpose if licence.purpose: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Purpose', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) for purpose in licence.purpose.split('\r\n'): if purpose: elements.append(Paragraph(purpose, styles['Left'])) else: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # locations if licence.locations: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Locations', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) for location in licence.locations.split('\r\n'): if location: elements.append(Paragraph(location, styles['Left'])) else: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # authorised persons authorised_persons = _get_authorised_person_names(application) if len(authorised_persons) > 0: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Authorised Persons', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) for ap in authorised_persons: elements.append(Paragraph(ap, styles['Left'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # species species = _get_species(application) if len(species) > 0: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) section_width = (PAGE_WIDTH - (2 * PAGE_MARGIN) - 100) / 2 elements.append(Table([[Paragraph('Species', styles['BoldLeft']), Paragraph('Name', styles['BoldLeft']), Paragraph('Count', styles['BoldLeft'])]], colWidths=(100, section_width, section_width), style=licence_table_style)) for s in species: elements.append(Table([['', Paragraph(s[0], styles['Left']), Paragraph(s[1], styles['Left'])]], colWidths=(100, section_width, section_width), style=licence_table_style)) # additional information if licence.additional_information: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Additional Information', styles['BoldLeft'])) for paragraph in licence.additional_information.split('\r\n'): if paragraph: elements.append(Paragraph(paragraph, styles['Left'])) else: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) # delegation holds the dates, licencee and issuer details. delegation = [] # dates and licensing officer dates_licensing_officer_table_style = TableStyle([('VALIGN', (0, 0), (-2, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'BOTTOM')]) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) date_headings = [Paragraph('Date of Issue', styles['BoldLeft']), Paragraph('Valid From', styles['BoldLeft']), Paragraph('Date of Expiry', styles['BoldLeft'])] date_values = [Paragraph(licence.issue_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.start_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.end_date.strftime(DATE_FORMAT), styles['Left'])] if original_issue_date is not None: date_headings.insert(0, Paragraph('Original Date of Issue', styles['BoldLeft'])) date_values.insert(0, Paragraph(original_issue_date.strftime(DATE_FORMAT), styles['Left'])) delegation.append(Table([[date_headings, date_values]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=dates_licensing_officer_table_style)) # licensee details delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) address = application.applicant_profile.postal_address address_paragraphs = [Paragraph(address.line1, styles['Left']), Paragraph(address.line2, styles['Left']), Paragraph(address.line3, styles['Left']), Paragraph('%s %s %s' % (address.locality, address.state, address.postcode), styles['Left']), Paragraph(address.country.name, styles['Left'])] delegation.append(Table([[[Paragraph('Licensee:', styles['BoldLeft']), Paragraph('Address', styles['BoldLeft'])], [Paragraph(render_user_name(application.applicant), styles['Left'])] + address_paragraphs]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=licence_table_style)) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) delegation.append(Paragraph('Issued by a Wildlife Licensing Officer of the Department of Parks and Wildlife ' 'under delegation from the Minister for Environment pursuant to section 133(1) ' 'of the Conservation and Land Management Act 1984.', styles['Left'])) elements.append(KeepTogether(delegation)) doc.build(elements) return licence_buffer
def _create_licence(licence_buffer, licence, application): site_url = settings.SITE_URL every_page_frame = Frame(PAGE_MARGIN, PAGE_MARGIN, PAGE_WIDTH - 2 * PAGE_MARGIN, PAGE_HEIGHT - 160, id='EveryPagesFrame') every_page_template = PageTemplate(id='EveryPages', frames=[every_page_frame], onPage=_create_licence_header) doc = BaseDocTemplate(licence_buffer, pageTemplates=[every_page_template], pagesize=A4) # this is the only way to get data into the onPage callback function doc.licence = licence doc.site_url = site_url licence_table_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')]) elements = [] title = licence.title.encode('UTF-8') elements.append(Paragraph(title, styles['InfoTitleVeryLargeCenter'])) elements.append(Paragraph(licence.activity, styles['InfoTitleLargeLeft'])) elements.append(Paragraph(licence.region, styles['InfoTitleLargeLeft'])) elements.append(Paragraph(licence.tenure if licence.tenure else '', styles['InfoTitleLargeRight'])) # application conditions if application.conditions.exists(): elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Conditions', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) conditionList = ListFlowable( [Paragraph(a.condition, styles['Left']) for a in application.conditions.order_by('order')], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(conditionList) elements += _layout_extracted_fields(licence.extracted_fields) # additional information '''if licence.additional_information: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Additional Information', styles['BoldLeft'])) elements += _layout_paragraphs(licence.additional_information)''' # delegation holds the dates, licencee and issuer details. delegation = [] # dates and licensing officer dates_licensing_officer_table_style = TableStyle([('VALIGN', (0, 0), (-2, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'BOTTOM')]) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) date_headings = [Paragraph('Date of Issue', styles['BoldLeft']), Paragraph('Valid From', styles['BoldLeft']), Paragraph('Date of Expiry', styles['BoldLeft'])] date_values = [Paragraph(licence.issue_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.start_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.expiry_date.strftime(DATE_FORMAT), styles['Left'])] if licence.original_issue_date is not None: date_headings.insert(0, Paragraph('Original Date of Issue', styles['BoldLeft'])) date_values.insert(0, Paragraph(licence.original_issue_date.strftime(DATE_FORMAT), styles['Left'])) delegation.append(Table([[date_headings, date_values]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=dates_licensing_officer_table_style)) # proponent details delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) address = application.applicant.organisation.postal_address address_paragraphs = [Paragraph(address.line1, styles['Left']), Paragraph(address.line2, styles['Left']), Paragraph(address.line3, styles['Left']), Paragraph('%s %s %s' % (address.locality, address.state, address.postcode), styles['Left']), Paragraph(address.country.name, styles['Left'])] delegation.append(Table([[[Paragraph('Licensee:', styles['BoldLeft']), Paragraph('Address', styles['BoldLeft'])], [Paragraph(_format_name(licence.applicant), styles['Left'])] + address_paragraphs]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=licence_table_style)) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) delegation.append(Paragraph('Issued by a Wildlife Licensing Officer of the {} ' 'under delegation from the Minister for Environment pursuant to section 133(1) ' 'of the Conservation and Land Management Act 1984.'.format(settings.DEP_NAME), styles['Left'])) elements.append(KeepTogether(delegation)) doc.build(elements) return licence_buffer
def _create_licence(licence_buffer, licence, application, site_url, original_issue_date): every_page_frame = Frame(PAGE_MARGIN, PAGE_MARGIN, PAGE_WIDTH - 2 * PAGE_MARGIN, PAGE_HEIGHT - 160, id='EveryPagesFrame') every_page_template = PageTemplate(id='EveryPages', frames=[every_page_frame], onPage=_create_licence_header) doc = BaseDocTemplate(licence_buffer, pageTemplates=[every_page_template], pagesize=A4) # this is the only way to get data into the onPage callback function doc.licence = licence doc.site_url = site_url licence_table_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')]) elements = [] elements.append(Paragraph(licence.licence_type.act, styles['InfoTitleLargeCenter'])) elements.append(Paragraph(licence.licence_type.code.upper(), styles['InfoTitleLargeCenter'])) # cannot use licence get_title_with_variants because licence isn't saved yet so can't get variants if application.variants.exists(): title = '{} ({})'.format(application.licence_type.name.encode('UTF-8'), ' / '.join(application.variants.all(). values_list('name', flat=True))) else: title = licence.licence_type.name.encode('UTF-8') elements.append(Paragraph(title, styles['InfoTitleVeryLargeCenter'])) elements.append(Paragraph(licence.licence_type.statement, styles['InfoTitleLargeLeft'])) elements.append(Paragraph(licence.licence_type.authority, styles['InfoTitleLargeRight'])) # licence conditions if application.conditions.exists(): elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Conditions', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) conditionList = ListFlowable( [Paragraph(a.condition.text, styles['Left']) for a in application.applicationcondition_set.order_by('order')], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(conditionList) # purpose if licence.purpose: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Purpose', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements += _layout_paragraphs(licence.purpose) # locations if licence.locations: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Locations', styles['BoldLeft'])) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements += _layout_paragraphs(licence.locations) elements += _layout_extracted_fields(licence.extracted_fields) # additional information if licence.additional_information: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Additional Information', styles['BoldLeft'])) elements += _layout_paragraphs(licence.additional_information) # delegation holds the dates, licencee and issuer details. delegation = [] # dates and licensing officer dates_licensing_officer_table_style = TableStyle([('VALIGN', (0, 0), (-2, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'BOTTOM')]) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) date_headings = [Paragraph('Date of Issue', styles['BoldLeft']), Paragraph('Valid From', styles['BoldLeft']), Paragraph('Date of Expiry', styles['BoldLeft'])] date_values = [Paragraph(licence.issue_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.start_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.end_date.strftime(DATE_FORMAT), styles['Left'])] if original_issue_date is not None: date_headings.insert(0, Paragraph('Original Date of Issue', styles['BoldLeft'])) date_values.insert(0, Paragraph(original_issue_date.strftime(DATE_FORMAT), styles['Left'])) delegation.append(Table([[date_headings, date_values]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=dates_licensing_officer_table_style)) # licensee details delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) address = application.applicant_profile.postal_address address_paragraphs = [Paragraph(address.line1, styles['Left']), Paragraph(address.line2, styles['Left']), Paragraph(address.line3, styles['Left']), Paragraph('%s %s %s' % (address.locality, address.state, address.postcode), styles['Left']), Paragraph(address.country.name, styles['Left'])] delegation.append(Table([[[Paragraph('Licensee:', styles['BoldLeft']), Paragraph('Address', styles['BoldLeft'])], [Paragraph(_format_name(application.applicant, include_first_name=True), styles['Left'])] + address_paragraphs]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=licence_table_style)) delegation.append(Spacer(1, SECTION_BUFFER_HEIGHT)) delegation.append(Paragraph('Issued by a Wildlife Licensing Officer of the Department of Parks and Wildlife ' 'under delegation from the Minister for Environment pursuant to section 133(1) ' 'of the Conservation and Land Management Act 1984.', styles['Left'])) elements.append(KeepTogether(delegation)) doc.build(elements) return licence_buffer
def _create_licence(licence_buffer, licence, application, site_url, original_issue_date): every_page_frame = Frame(PAGE_MARGIN, PAGE_MARGIN, PAGE_WIDTH - 2 * PAGE_MARGIN, PAGE_HEIGHT - 160, id='EveryPagesFrame') every_page_template = PageTemplate(id='EveryPages', frames=every_page_frame, onPage=_create_header) doc = BaseDocTemplate(licence_buffer, pageTemplates=[every_page_template], pagesize=A4) # this is the only way to get data into the onPage callback function doc.licence = licence doc.site_url = site_url licence_table_style = TableStyle([('VALIGN', (0, 0), (-1, -1), 'TOP')]) elements = [] elements.append(Paragraph(licence.licence_type.act, styles['InfoTitleLargeCenter'])) elements.append(Paragraph(licence.licence_type.code.upper(), styles['InfoTitleLargeCenter'])) elements.append(Paragraph(licence.licence_type.name, styles['InfoTitleVeryLargeCenter'])) elements.append(Paragraph(licence.licence_type.statement, styles['InfoTitleLargeLeft'])) elements.append(Paragraph(licence.licence_type.authority, styles['InfoTitleLargeRight'])) # licence conditions elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Paragraph('Conditions', styles['InfoTitleLargeCenter'])) conditionList = ListFlowable([Paragraph(condition.text, styles['Left']) for condition in application.conditions.all()], bulletFontName=BOLD_FONTNAME, bulletFontSize=MEDIUM_FONTSIZE) elements.append(conditionList) # purpose if licence.purpose: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) purposes = [] for purpose in licence.purpose.split('\r\n'): if purpose: purposes.append(Paragraph(purpose, styles['Left'])) else: purposes.append(Spacer(1, SECTION_BUFFER_HEIGHT)) elements.append(Table([[Paragraph('Purpose', styles['BoldLeft']), purposes]], colWidths=(100, PAGE_WIDTH - (2 * PAGE_MARGIN) - 100), style=licence_table_style)) # authorised persons authorised_persons = _get_authorised_person_names(application) if len(authorised_persons) > 0: elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) authorized_persons = [Paragraph(ap, styles['Left']) for ap in authorised_persons] elements.append(Table([[Paragraph('Authorised Persons', styles['BoldLeft']), authorized_persons]], colWidths=(100, PAGE_WIDTH - (2 * PAGE_MARGIN) - 100), style=licence_table_style)) # dates and licensing officer dates_licensing_officer_table_style = TableStyle([('VALIGN', (0, 0), (-2, -1), 'TOP'), ('VALIGN', (0, 0), (-1, -1), 'BOTTOM')]) elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) date_headings = [Paragraph('Date of Issue', styles['BoldLeft']), Paragraph('Valid From', styles['BoldLeft']), Paragraph('Date of Expiry', styles['BoldLeft'])] date_values = [Paragraph(licence.issue_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.start_date.strftime(DATE_FORMAT), styles['Left']), Paragraph(licence.end_date.strftime(DATE_FORMAT), styles['Left'])] if original_issue_date is not None: date_headings.insert(0, Paragraph('Original Date of Issue', styles['BoldLeft'])) date_values.insert(0, Paragraph(original_issue_date.strftime(DATE_FORMAT), styles['Left'])) elements.append(Table([[date_headings, date_values, Paragraph('Licensing Officer', styles['BoldRight'])]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 200, 80), style=dates_licensing_officer_table_style)) # licensee details elements.append(Spacer(1, SECTION_BUFFER_HEIGHT)) address = application.applicant_profile.postal_address address_paragraphs = [Paragraph(address.line1, styles['Left']), Paragraph(address.line2, styles['Left']), Paragraph(address.line3, styles['Left']), Paragraph('%s %s %s' % (address.locality, address.state, address.postcode), styles['Left']), Paragraph(address.country.name, styles['Left'])] elements.append(Table([[[Paragraph('Licensee:', styles['BoldLeft']), Paragraph('Address', styles['BoldLeft'])], [Paragraph(render_user_name(application.applicant_profile.user), styles['Left'])] + address_paragraphs]], colWidths=(120, PAGE_WIDTH - (2 * PAGE_MARGIN) - 120), style=licence_table_style)) doc.build(elements) return licence_buffer