renalware-core 2.0.109 → 2.0.110
Sign up to get free protection for your applications and to get access to all the features.
- 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
|