renalware-core 2.0.109 → 2.0.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/images/renalware/loading-gears-animation.gif +0 -0
- data/app/assets/javascripts/renalware/drugs.js +3 -4
- data/app/assets/javascripts/renalware/letters.js +47 -2
- data/app/assets/pdf/blank_page.pdf +56 -0
- data/app/assets/stylesheets/renalware/modules/_letters.scss +46 -0
- data/app/assets/stylesheets/renalware/partials/_tables.scss +2 -2
- data/app/controllers/renalware/base_controller.rb +9 -2
- data/app/controllers/renalware/clinics/appointments_controller.rb +8 -3
- data/app/controllers/renalware/letters/batches_controller.rb +106 -0
- data/app/controllers/renalware/letters/completed_batches_controller.rb +32 -0
- data/app/controllers/renalware/letters/lists_controller.rb +34 -5
- data/app/controllers/renalware/pathology/requests/requests_controller.rb +1 -1
- data/app/jobs/renalware/hd/update_rolling_patient_statistics_dj_job.rb +38 -0
- data/app/jobs/renalware/hd/update_rolling_patient_statistics_job.rb +4 -2
- data/app/jobs/renalware/letters/printing/batch_print_job.rb +27 -0
- data/app/models/concerns/renalware/patients_ransack_helper.rb +1 -1
- data/app/models/concerns/renalware/using_temp_folder.rb +14 -0
- data/app/models/renalware/clinics/appointment.rb +2 -3
- data/app/models/renalware/clinics/appointment_query.rb +5 -1
- data/app/models/renalware/hd/sessions/save_session.rb +5 -1
- data/app/models/renalware/hd/update_rolling_patient_statistics.rb +1 -1
- data/app/models/renalware/letters/batch.rb +37 -0
- data/app/models/renalware/letters/batch_item.rb +17 -0
- data/app/models/renalware/letters/lists/form.rb +101 -0
- data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
- data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +121 -0
- data/app/models/renalware/letters/printing/complete_batch.rb +24 -0
- data/app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb.dead +90 -0
- data/app/models/renalware/letters/printing/duplex_interleaved_pdf_renderer.rb +1 -1
- data/app/models/renalware/letters/printing/pdf_combining.rb +24 -21
- data/app/models/renalware/pathology/{consultant.rb → consultant.rb.dead} +0 -0
- data/app/models/renalware/pathology/observations_grouped_by_date_query.rb +1 -1
- data/app/models/renalware/pathology/relevant_observation_description.rb +1 -1
- data/app/models/renalware/pathology/requests/global_rule/transplant_date_within_weeks.rb +1 -1
- data/app/models/renalware/pathology/requests/global_rule/transplant_registration_status.rb +3 -1
- data/app/models/renalware/pathology/requests/request.rb +1 -1
- data/app/models/renalware/pathology/requests/request_params_factory.rb +11 -12
- data/app/models/renalware/patient.rb +3 -2
- data/app/models/renalware/pd/apd_regime.rb +6 -6
- data/app/models/renalware/renal/consultant.rb +16 -0
- data/app/models/renalware/transplants/registrations/wait_list_query.rb +4 -10
- data/app/models/renalware/ukrdc/treatment_timeline/generator_factory.rb +1 -1
- data/app/pdfs/renalware/letters/printing/recipient_address_page_pdf.rb +50 -0
- data/app/policies/renalware/letters/batch_policy.rb +13 -0
- data/app/presenters/renalware/letters/recipient_presenter.rb +1 -1
- data/app/presenters/renalware/pathology/requests/request_presenter.rb +1 -1
- data/app/presenters/renalware/transplants/mdm_presenter.rb +1 -1
- data/app/presenters/renalware/virology/dashboard_presenter.rb +2 -1
- data/app/views/renalware/api/ukrdc/patients/_hd_session_observations.xml.builder +2 -2
- data/app/views/renalware/clinics/appointments/index.html.slim +5 -4
- data/app/views/renalware/clinics/appointments/new.html.slim +3 -0
- data/app/views/renalware/letters/batches/_create.html.slim +27 -0
- data/app/views/renalware/letters/batches/create.js.erb +3 -0
- data/app/views/renalware/letters/batches/index.html.slim +20 -0
- data/app/views/renalware/letters/batches/show.html.slim +7 -0
- data/app/views/renalware/letters/completed_batches/create.js.erb +9 -0
- data/app/views/renalware/letters/completed_batches/new.html.slim +26 -0
- data/app/views/renalware/letters/lists/_table.html.slim +1 -1
- data/app/views/renalware/letters/lists/_tabs.html.slim +9 -0
- data/app/views/renalware/letters/lists/index.html.slim.dead +101 -0
- data/app/views/renalware/letters/lists/index.html.slim.dead1 +90 -0
- data/app/views/renalware/letters/lists/show.html.slim +57 -11
- data/app/views/renalware/medications/prescriptions/_form.html.slim +1 -0
- data/app/views/renalware/navigation/_super_admin.html.slim +1 -0
- data/app/views/renalware/pathology/requests/requests/_pdf_header.html.slim +2 -3
- data/app/views/renalware/pathology/requests/requests/index.html.slim +1 -1
- data/app/views/renalware/pathology/requests/requests/new.html.slim +0 -1
- data/config/locales/renalware/letters/letter.en.yml +5 -0
- data/config/routes/letters.rb +18 -1
- data/db/migrate/20190830153416_create_letter_batches.rb +14 -0
- data/db/migrate/20190902085216_create_letter_batch_items.rb +13 -0
- data/db/migrate/20190919073410_add_filepath_to_letter_batches.rb +7 -0
- data/db/migrate/20190920063447_add_status_to_letter_batch_items.rb +15 -0
- data/db/migrate/20190925104902_remove_user_from_appointments.rb +19 -0
- data/db/migrate/20190925130052_add_telephone_to_renal_consultants.rb +7 -0
- data/db/migrate/20190925161724_change_path_request_consultant_id.rb +19 -0
- data/db/migrate/20190925173849_renal_consultants_changes.rb +9 -0
- data/db/migrate/20190928131032_add_some_more_missing_indexes.rb +18 -0
- data/db/views/pathology_observation_digests_v01.sql +1 -1
- data/lib/renalware/configuration.rb +2 -0
- data/lib/renalware/engine.rb +1 -0
- data/lib/renalware/version.rb +1 -1
- data/lib/tasks/demo_data.rake +66 -0
- data/lib/tasks/pd.rake +32 -0
- data/spec/factories/clinics/appointments.rb +1 -1
- data/spec/factories/medications/medication_route.rb +5 -0
- data/spec/factories/renal/consultants.rb +9 -0
- data/spec/support/pages/medications/prescription_fom.rb +54 -0
- metadata +43 -7
- data/app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb +0 -140
- data/spec/factories/pathology/consultant.rb +0 -5
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: renalware-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.110
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airslie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_type
|
@@ -324,14 +324,14 @@ dependencies:
|
|
324
324
|
requirements:
|
325
325
|
- - "~>"
|
326
326
|
- !ruby/object:Gem::Version
|
327
|
-
version: 0
|
327
|
+
version: '1.0'
|
328
328
|
type: :runtime
|
329
329
|
prerelease: false
|
330
330
|
version_requirements: !ruby/object:Gem::Requirement
|
331
331
|
requirements:
|
332
332
|
- - "~>"
|
333
333
|
- !ruby/object:Gem::Version
|
334
|
-
version: 0
|
334
|
+
version: '1.0'
|
335
335
|
- !ruby/object:Gem::Dependency
|
336
336
|
name: httparty
|
337
337
|
requirement: !ruby/object:Gem::Requirement
|
@@ -982,6 +982,7 @@ files:
|
|
982
982
|
- app/assets/images/renalware/hd/avf_avg_assessment.jpg
|
983
983
|
- app/assets/images/renalware/hd/mr_victor.jpg
|
984
984
|
- app/assets/images/renalware/kidney.png
|
985
|
+
- app/assets/images/renalware/loading-gears-animation.gif
|
985
986
|
- app/assets/images/renalware/nhs_a4_letter_logo_black.png
|
986
987
|
- app/assets/images/renalware/nhs_a4_letter_logo_blue.png
|
987
988
|
- app/assets/images/renalware/print-button-example.png
|
@@ -1026,6 +1027,7 @@ files:
|
|
1026
1027
|
- app/assets/javascripts/renalware/tabs.js
|
1027
1028
|
- app/assets/javascripts/renalware/toggler.js
|
1028
1029
|
- app/assets/javascripts/renalware/transplants.js
|
1030
|
+
- app/assets/pdf/blank_page.pdf
|
1029
1031
|
- app/assets/stylesheets/renalware/application.scss
|
1030
1032
|
- app/assets/stylesheets/renalware/base/_mixins.scss
|
1031
1033
|
- app/assets/stylesheets/renalware/base/_variables.scss
|
@@ -1163,6 +1165,8 @@ files:
|
|
1163
1165
|
- app/controllers/renalware/hospitals/wards_controller.rb
|
1164
1166
|
- app/controllers/renalware/letters/approved_letters_controller.rb
|
1165
1167
|
- app/controllers/renalware/letters/base_controller.rb
|
1168
|
+
- app/controllers/renalware/letters/batches_controller.rb
|
1169
|
+
- app/controllers/renalware/letters/completed_batches_controller.rb
|
1166
1170
|
- app/controllers/renalware/letters/completed_letters_controller.rb
|
1167
1171
|
- app/controllers/renalware/letters/contacts_controller.rb
|
1168
1172
|
- app/controllers/renalware/letters/descriptions_controller.rb
|
@@ -1356,8 +1360,10 @@ files:
|
|
1356
1360
|
- app/jobs/renalware/events/save_pdf_event_to_file_job.rb
|
1357
1361
|
- app/jobs/renalware/hd/generate_monthly_statistics.rb
|
1358
1362
|
- app/jobs/renalware/hd/generate_monthly_statistics_for_patient_job.rb
|
1363
|
+
- app/jobs/renalware/hd/update_rolling_patient_statistics_dj_job.rb
|
1359
1364
|
- app/jobs/renalware/hd/update_rolling_patient_statistics_job.rb
|
1360
1365
|
- app/jobs/renalware/letters/calculate_page_count_job.rb
|
1366
|
+
- app/jobs/renalware/letters/printing/batch_print_job.rb
|
1361
1367
|
- app/jobs/renalware/letters/save_pdf_letter_to_file_job.rb
|
1362
1368
|
- app/jobs/renalware/letters/save_rtf_letter_to_file_job.rb
|
1363
1369
|
- app/jobs/renalware/reporting/refresh_audit_data_job.rb
|
@@ -1388,6 +1394,7 @@ files:
|
|
1388
1394
|
- app/models/concerns/renalware/personable.rb
|
1389
1395
|
- app/models/concerns/renalware/string_logging.rb
|
1390
1396
|
- app/models/concerns/renalware/supersedeable.rb
|
1397
|
+
- app/models/concerns/renalware/using_temp_folder.rb
|
1391
1398
|
- app/models/null_exception_notifier.rb
|
1392
1399
|
- app/models/renalware.rb
|
1393
1400
|
- app/models/renalware/accesses.rb
|
@@ -1538,6 +1545,8 @@ files:
|
|
1538
1545
|
- app/models/renalware/letters/approve_letter.rb
|
1539
1546
|
- app/models/renalware/letters/archive.rb
|
1540
1547
|
- app/models/renalware/letters/author.rb
|
1548
|
+
- app/models/renalware/letters/batch.rb
|
1549
|
+
- app/models/renalware/letters/batch_item.rb
|
1541
1550
|
- app/models/renalware/letters/complete_letter.rb
|
1542
1551
|
- app/models/renalware/letters/contact.rb
|
1543
1552
|
- app/models/renalware/letters/contact_description.rb
|
@@ -1563,6 +1572,7 @@ files:
|
|
1563
1572
|
- app/models/renalware/letters/letter_params_processor.rb
|
1564
1573
|
- app/models/renalware/letters/letter_query.rb
|
1565
1574
|
- app/models/renalware/letters/letterhead.rb
|
1575
|
+
- app/models/renalware/letters/lists/form.rb
|
1566
1576
|
- app/models/renalware/letters/part.rb
|
1567
1577
|
- app/models/renalware/letters/part/allergies.rb
|
1568
1578
|
- app/models/renalware/letters/part/clinical_observations.rb
|
@@ -1575,7 +1585,9 @@ files:
|
|
1575
1585
|
- app/models/renalware/letters/pdf_letter_cache.rb
|
1576
1586
|
- app/models/renalware/letters/pdf_renderer.rb
|
1577
1587
|
- app/models/renalware/letters/primary_care_physician.rb
|
1578
|
-
- app/models/renalware/letters/printing/
|
1588
|
+
- app/models/renalware/letters/printing/batch_compile_pdfs.rb
|
1589
|
+
- app/models/renalware/letters/printing/complete_batch.rb
|
1590
|
+
- app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb.dead
|
1579
1591
|
- app/models/renalware/letters/printing/duplex_interleaved_pdf_renderer.rb
|
1580
1592
|
- app/models/renalware/letters/printing/pdf_combining.rb
|
1581
1593
|
- app/models/renalware/letters/printing/printable_recipients.rb
|
@@ -1634,7 +1646,7 @@ files:
|
|
1634
1646
|
- app/models/renalware/pathology/clinic.rb
|
1635
1647
|
- app/models/renalware/pathology/code_group.rb
|
1636
1648
|
- app/models/renalware/pathology/code_group_membership.rb
|
1637
|
-
- app/models/renalware/pathology/consultant.rb
|
1649
|
+
- app/models/renalware/pathology/consultant.rb.dead
|
1638
1650
|
- app/models/renalware/pathology/create_observation_requests.rb
|
1639
1651
|
- app/models/renalware/pathology/create_observations_grouped_by_date_table.rb
|
1640
1652
|
- app/models/renalware/pathology/current_observation.rb
|
@@ -1779,6 +1791,7 @@ files:
|
|
1779
1791
|
- app/models/renalware/renal/aki_alert_action.rb
|
1780
1792
|
- app/models/renalware/renal/aki_alert_query.rb
|
1781
1793
|
- app/models/renalware/renal/aki_alert_search_form.rb
|
1794
|
+
- app/models/renalware/renal/consultant.rb
|
1782
1795
|
- app/models/renalware/renal/patient.rb
|
1783
1796
|
- app/models/renalware/renal/prd_description.rb
|
1784
1797
|
- app/models/renalware/renal/prd_descriptions/search_query.rb
|
@@ -1877,6 +1890,7 @@ files:
|
|
1877
1890
|
- app/models/renalware/virology/version.rb
|
1878
1891
|
- app/models/renalware/zip_archive.rb
|
1879
1892
|
- app/pdfs/renalware/events/event_pdf.rb
|
1893
|
+
- app/pdfs/renalware/letters/printing/recipient_address_page_pdf.rb
|
1880
1894
|
- app/policies/application_policy.rb
|
1881
1895
|
- app/policies/renalware/admin/cache_policy.rb
|
1882
1896
|
- app/policies/renalware/admissions/admission_policy.rb
|
@@ -1903,6 +1917,7 @@ files:
|
|
1903
1917
|
- app/policies/renalware/hd/station_policy.rb
|
1904
1918
|
- app/policies/renalware/hospitals/ward_policy.rb
|
1905
1919
|
- app/policies/renalware/letters/approved_letter_policy.rb
|
1920
|
+
- app/policies/renalware/letters/batch_policy.rb
|
1906
1921
|
- app/policies/renalware/letters/completed_letter_policy.rb
|
1907
1922
|
- app/policies/renalware/letters/draft_letter_policy.rb
|
1908
1923
|
- app/policies/renalware/letters/electronic_receipt_policy.rb
|
@@ -2396,6 +2411,12 @@ files:
|
|
2396
2411
|
- app/views/renalware/layouts/letter.pdf.slim
|
2397
2412
|
- app/views/renalware/layouts/pdf.pdf.slim
|
2398
2413
|
- app/views/renalware/letters/_summary_part.html.slim
|
2414
|
+
- app/views/renalware/letters/batches/_create.html.slim
|
2415
|
+
- app/views/renalware/letters/batches/create.js.erb
|
2416
|
+
- app/views/renalware/letters/batches/index.html.slim
|
2417
|
+
- app/views/renalware/letters/batches/show.html.slim
|
2418
|
+
- app/views/renalware/letters/completed_batches/create.js.erb
|
2419
|
+
- app/views/renalware/letters/completed_batches/new.html.slim
|
2399
2420
|
- app/views/renalware/letters/completed_letters/create.js.erb
|
2400
2421
|
- app/views/renalware/letters/completed_letters/new.html.slim
|
2401
2422
|
- app/views/renalware/letters/contacts/_contact.html.slim
|
@@ -2444,6 +2465,9 @@ files:
|
|
2444
2465
|
- app/views/renalware/letters/letters/show.html.slim
|
2445
2466
|
- app/views/renalware/letters/lists/_letter.html.slim
|
2446
2467
|
- app/views/renalware/letters/lists/_table.html.slim
|
2468
|
+
- app/views/renalware/letters/lists/_tabs.html.slim
|
2469
|
+
- app/views/renalware/letters/lists/index.html.slim.dead
|
2470
|
+
- app/views/renalware/letters/lists/index.html.slim.dead1
|
2447
2471
|
- app/views/renalware/letters/lists/show.html.slim
|
2448
2472
|
- app/views/renalware/letters/lists/show.js.erb
|
2449
2473
|
- app/views/renalware/letters/parts/_allergies.html.slim
|
@@ -3556,11 +3580,20 @@ files:
|
|
3556
3580
|
- db/migrate/20190823051014_add_hidden_colum_to_event_types.rb
|
3557
3581
|
- db/migrate/20190823105642_add_asked_for_write_access_to_users.rb
|
3558
3582
|
- db/migrate/20190830082736_add_pd_regime_columns_for_blt.rb
|
3583
|
+
- db/migrate/20190830153416_create_letter_batches.rb
|
3584
|
+
- db/migrate/20190902085216_create_letter_batch_items.rb
|
3559
3585
|
- db/migrate/20190909084425_add_columns_to_support_data_migration.rb
|
3560
3586
|
- db/migrate/20190915071451_add_unique_index_to_medication_routes.rb
|
3561
3587
|
- db/migrate/20190915083424_create_pathology_request_sample_types.rb
|
3562
3588
|
- db/migrate/20190916160231_add_hd_type_to_ukrdc_treatments.rb
|
3563
3589
|
- db/migrate/20190917124204_add_priority_to_admission_consults.rb
|
3590
|
+
- db/migrate/20190919073410_add_filepath_to_letter_batches.rb
|
3591
|
+
- db/migrate/20190920063447_add_status_to_letter_batch_items.rb
|
3592
|
+
- db/migrate/20190925104902_remove_user_from_appointments.rb
|
3593
|
+
- db/migrate/20190925130052_add_telephone_to_renal_consultants.rb
|
3594
|
+
- db/migrate/20190925161724_change_path_request_consultant_id.rb
|
3595
|
+
- db/migrate/20190925173849_renal_consultants_changes.rb
|
3596
|
+
- db/migrate/20190928131032_add_some_more_missing_indexes.rb
|
3564
3597
|
- db/seeds.rb
|
3565
3598
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.csv
|
3566
3599
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.rb
|
@@ -3732,10 +3765,12 @@ files:
|
|
3732
3765
|
- lib/tasks/cucumber.rake
|
3733
3766
|
- lib/tasks/cucumber_web.rake
|
3734
3767
|
- lib/tasks/db.rake
|
3768
|
+
- lib/tasks/demo_data.rake
|
3735
3769
|
- lib/tasks/feeds/files.rake
|
3736
3770
|
- lib/tasks/hd.rake
|
3737
3771
|
- lib/tasks/ods.rake
|
3738
3772
|
- lib/tasks/pathology.rake
|
3773
|
+
- lib/tasks/pd.rake
|
3739
3774
|
- lib/tasks/reporting.rake
|
3740
3775
|
- lib/tasks/ukrdc.rake
|
3741
3776
|
- lib/templates/slim/scaffold/_form.html.slim
|
@@ -3815,7 +3850,6 @@ files:
|
|
3815
3850
|
- spec/factories/modalities/modalities.rb
|
3816
3851
|
- spec/factories/modalities/modality_descriptions.rb
|
3817
3852
|
- spec/factories/modalities/modality_reasons.rb
|
3818
|
-
- spec/factories/pathology/consultant.rb
|
3819
3853
|
- spec/factories/pathology/lab.rb
|
3820
3854
|
- spec/factories/pathology/measurement_units.rb
|
3821
3855
|
- spec/factories/pathology/observation_descriptions.rb
|
@@ -3859,6 +3893,7 @@ files:
|
|
3859
3893
|
- spec/factories/problems/problems.rb
|
3860
3894
|
- spec/factories/renal/aki_alert_actions.rb
|
3861
3895
|
- spec/factories/renal/aki_alerts.rb
|
3896
|
+
- spec/factories/renal/consultants.rb
|
3862
3897
|
- spec/factories/renal/patients.rb
|
3863
3898
|
- spec/factories/renal/prd_description.rb
|
3864
3899
|
- spec/factories/renal/profiles.rb
|
@@ -3909,6 +3944,7 @@ files:
|
|
3909
3944
|
- spec/support/pages/admissions/consults_page.rb
|
3910
3945
|
- spec/support/pages/letters/form.rb
|
3911
3946
|
- spec/support/pages/letters/patient_letters.rb
|
3947
|
+
- spec/support/pages/medications/prescription_fom.rb
|
3912
3948
|
- spec/support/pages/page_object.rb
|
3913
3949
|
- spec/support/pathology_spec_helper.rb
|
3914
3950
|
- spec/support/patients_spec_helper.rb
|
@@ -1,140 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_dependency "renalware/letters"
|
4
|
-
require "attr_extras"
|
5
|
-
|
6
|
-
module Renalware
|
7
|
-
module Letters
|
8
|
-
module Printing
|
9
|
-
# Build PDF for printing. We are targetting an envelope stuffer so there will be an address
|
10
|
-
# cover sheet in front of each letter.
|
11
|
-
# So for a letter where the patient is the main recipient, and we CC to the GP (no practice
|
12
|
-
# email address so snail mailing) and 1 extra CC (a contact) the output will look like
|
13
|
-
# this:
|
14
|
-
#
|
15
|
-
# 1. Patient address cover sheet
|
16
|
-
# 2. Letter
|
17
|
-
# 3. GP address cover sheet
|
18
|
-
# 2. Letter
|
19
|
-
# 5. Contact address cover sheet
|
20
|
-
# 2. Letter
|
21
|
-
#
|
22
|
-
# Note however the we always pad each item (address sheet, letter) with blank pages to make
|
23
|
-
# sure duplex printing does not cause the next page recipient's content to be rendered on the
|
24
|
-
# back of the ast page of the previous letter for example/
|
25
|
-
#
|
26
|
-
# Compiles print content for all input letters and outputs the merged PDF to output_file.
|
27
|
-
# Allows batch printing if you want to print say all 2 page letters together.
|
28
|
-
# The caller may choose for example to send the output_file could be sent back to the browser
|
29
|
-
# for manual printing using (eg using send_file) or copy the merged PDF to a folder for
|
30
|
-
# automated printing.
|
31
|
-
class CreatePdfByInterleavingAddressSheetAndLetterForEachRecipient
|
32
|
-
pattr_initialize [:letters!, :output_file!]
|
33
|
-
|
34
|
-
def call
|
35
|
-
# There is a choice of two methods of building the merged PDF. See pros and cons.
|
36
|
-
# The other is UsingSeparatePdfForEachLetterSection.
|
37
|
-
UsingOnePdfForAllLetterSections.new(
|
38
|
-
letters: letters,
|
39
|
-
output_file: output_file
|
40
|
-
).call
|
41
|
-
end
|
42
|
-
|
43
|
-
# For each letter, uses whkhtmltopdf to build the entire print content, ie all address
|
44
|
-
# sheets and required instance of the letter are created as one fresh pdf (no cache will be
|
45
|
-
# used).
|
46
|
-
#
|
47
|
-
# Pros:
|
48
|
-
# - Quicker: For each letter only one PDF is generated, and although the generation is slow
|
49
|
-
# as it does not use the previously cached letter PDF, and it has to render all the letter
|
50
|
-
# sections, including the letter itself, for every recipient, its stil faster then
|
51
|
-
# rendering separate PDFs fo each section.
|
52
|
-
# Cons:
|
53
|
-
# - wastes some resources because it does not use the cache and renders same letter
|
54
|
-
# multiple times in the views
|
55
|
-
# - cannot be 100% sure the number of pages in the final PDF will be extactly what we
|
56
|
-
# predict, so requires a check to load the pdf into a reader and validate the page_count
|
57
|
-
class UsingOnePdfForAllLetterSections
|
58
|
-
include PdfCombining
|
59
|
-
pattr_initialize [:letters!, :output_file!]
|
60
|
-
|
61
|
-
def call
|
62
|
-
in_a_temporary_folder do |dir|
|
63
|
-
Array(letters).each do |letter|
|
64
|
-
if letter.page_count.to_i < 1
|
65
|
-
raise(ArgumentError, "letter.page_count not set on letter.id=#{letter.id}")
|
66
|
-
end
|
67
|
-
|
68
|
-
letter_filename = create_letter_pdf_in(dir, letter)
|
69
|
-
files << letter_filename
|
70
|
-
end
|
71
|
-
combine_multiple_pdfs_into_one(dir, output_file)
|
72
|
-
# For debuging:
|
73
|
-
# FileUtils.cp output_file, "/Users/tim/Desktop/x.pdf"
|
74
|
-
# `open /Users/tim/Desktop/x.pdf`
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
|
80
|
-
def create_letter_pdf_in(dir, letter)
|
81
|
-
filename = "letter_#{letter.id}.pdf"
|
82
|
-
path = dir.join(filename)
|
83
|
-
File.open(path, "wb") { |file| file.write(DuplexInterleavedPdfRenderer.call(letter)) }
|
84
|
-
filename
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# This approach generates a PDF for each address cover sheet and each
|
89
|
-
# letter. It shells to ghostscript to merge the PDFs together in
|
90
|
-
# the right order.
|
91
|
-
#
|
92
|
-
# Pros:
|
93
|
-
# - uses the letter PDF already in the cache from when we rendered it to deduce the page
|
94
|
-
# count after the letter was archived
|
95
|
-
# - uses very little memory as PDF concatenation done on disk
|
96
|
-
# - concatentation itslef reasonable fast
|
97
|
-
#
|
98
|
-
# Cons:
|
99
|
-
# - slow because it shells to wkhtmltopdf for each cover sheet, and these are unklikely to
|
100
|
-
# be found in tha cache. So for main recip and 2 CCs it wil call wkhtmltopdf 3 times to
|
101
|
-
# render the address cover sheets, and the letter PDF should be pulled from cache so that
|
102
|
-
# is quick at least.
|
103
|
-
#
|
104
|
-
class UsingSeparatePdfForEachLetterSection
|
105
|
-
include PdfCombining
|
106
|
-
pattr_initialize [:letters!, :output_file!]
|
107
|
-
|
108
|
-
def call
|
109
|
-
in_a_temporary_folder do |dir|
|
110
|
-
Array(letters).each do |letter|
|
111
|
-
letter_filename = create_letter_pdf_in(dir, letter)
|
112
|
-
PrintableRecipients.for(letter).each do |recipient|
|
113
|
-
files << create_cover_sheet_for(recipient, letter, dir)
|
114
|
-
files << letter_filename
|
115
|
-
end
|
116
|
-
end
|
117
|
-
combine_multiple_pdfs_into_one(dir, output_file)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
private
|
122
|
-
|
123
|
-
def create_letter_pdf_in(dir, letter)
|
124
|
-
filename = "letter_#{letter.id}.pdf"
|
125
|
-
path = dir.join(filename)
|
126
|
-
File.open(path, "wb") { |file| file.write(PdfRenderer.call(letter)) }
|
127
|
-
filename
|
128
|
-
end
|
129
|
-
|
130
|
-
def create_cover_sheet_for(recipient, _letter, dir)
|
131
|
-
filename = "recipient_#{recipient.id}.pdf"
|
132
|
-
path = dir.join(filename)
|
133
|
-
File.open(path, "wb") { |file| file.write(RecipientAddressPdfRenderer.call(recipient)) }
|
134
|
-
filename
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|