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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/renalware/loading-gears-animation.gif +0 -0
  3. data/app/assets/javascripts/renalware/drugs.js +3 -4
  4. data/app/assets/javascripts/renalware/letters.js +47 -2
  5. data/app/assets/pdf/blank_page.pdf +56 -0
  6. data/app/assets/stylesheets/renalware/modules/_letters.scss +46 -0
  7. data/app/assets/stylesheets/renalware/partials/_tables.scss +2 -2
  8. data/app/controllers/renalware/base_controller.rb +9 -2
  9. data/app/controllers/renalware/clinics/appointments_controller.rb +8 -3
  10. data/app/controllers/renalware/letters/batches_controller.rb +106 -0
  11. data/app/controllers/renalware/letters/completed_batches_controller.rb +32 -0
  12. data/app/controllers/renalware/letters/lists_controller.rb +34 -5
  13. data/app/controllers/renalware/pathology/requests/requests_controller.rb +1 -1
  14. data/app/jobs/renalware/hd/update_rolling_patient_statistics_dj_job.rb +38 -0
  15. data/app/jobs/renalware/hd/update_rolling_patient_statistics_job.rb +4 -2
  16. data/app/jobs/renalware/letters/printing/batch_print_job.rb +27 -0
  17. data/app/models/concerns/renalware/patients_ransack_helper.rb +1 -1
  18. data/app/models/concerns/renalware/using_temp_folder.rb +14 -0
  19. data/app/models/renalware/clinics/appointment.rb +2 -3
  20. data/app/models/renalware/clinics/appointment_query.rb +5 -1
  21. data/app/models/renalware/hd/sessions/save_session.rb +5 -1
  22. data/app/models/renalware/hd/update_rolling_patient_statistics.rb +1 -1
  23. data/app/models/renalware/letters/batch.rb +37 -0
  24. data/app/models/renalware/letters/batch_item.rb +17 -0
  25. data/app/models/renalware/letters/lists/form.rb +101 -0
  26. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  27. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +121 -0
  28. data/app/models/renalware/letters/printing/complete_batch.rb +24 -0
  29. data/app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb.dead +90 -0
  30. data/app/models/renalware/letters/printing/duplex_interleaved_pdf_renderer.rb +1 -1
  31. data/app/models/renalware/letters/printing/pdf_combining.rb +24 -21
  32. data/app/models/renalware/pathology/{consultant.rb → consultant.rb.dead} +0 -0
  33. data/app/models/renalware/pathology/observations_grouped_by_date_query.rb +1 -1
  34. data/app/models/renalware/pathology/relevant_observation_description.rb +1 -1
  35. data/app/models/renalware/pathology/requests/global_rule/transplant_date_within_weeks.rb +1 -1
  36. data/app/models/renalware/pathology/requests/global_rule/transplant_registration_status.rb +3 -1
  37. data/app/models/renalware/pathology/requests/request.rb +1 -1
  38. data/app/models/renalware/pathology/requests/request_params_factory.rb +11 -12
  39. data/app/models/renalware/patient.rb +3 -2
  40. data/app/models/renalware/pd/apd_regime.rb +6 -6
  41. data/app/models/renalware/renal/consultant.rb +16 -0
  42. data/app/models/renalware/transplants/registrations/wait_list_query.rb +4 -10
  43. data/app/models/renalware/ukrdc/treatment_timeline/generator_factory.rb +1 -1
  44. data/app/pdfs/renalware/letters/printing/recipient_address_page_pdf.rb +50 -0
  45. data/app/policies/renalware/letters/batch_policy.rb +13 -0
  46. data/app/presenters/renalware/letters/recipient_presenter.rb +1 -1
  47. data/app/presenters/renalware/pathology/requests/request_presenter.rb +1 -1
  48. data/app/presenters/renalware/transplants/mdm_presenter.rb +1 -1
  49. data/app/presenters/renalware/virology/dashboard_presenter.rb +2 -1
  50. data/app/views/renalware/api/ukrdc/patients/_hd_session_observations.xml.builder +2 -2
  51. data/app/views/renalware/clinics/appointments/index.html.slim +5 -4
  52. data/app/views/renalware/clinics/appointments/new.html.slim +3 -0
  53. data/app/views/renalware/letters/batches/_create.html.slim +27 -0
  54. data/app/views/renalware/letters/batches/create.js.erb +3 -0
  55. data/app/views/renalware/letters/batches/index.html.slim +20 -0
  56. data/app/views/renalware/letters/batches/show.html.slim +7 -0
  57. data/app/views/renalware/letters/completed_batches/create.js.erb +9 -0
  58. data/app/views/renalware/letters/completed_batches/new.html.slim +26 -0
  59. data/app/views/renalware/letters/lists/_table.html.slim +1 -1
  60. data/app/views/renalware/letters/lists/_tabs.html.slim +9 -0
  61. data/app/views/renalware/letters/lists/index.html.slim.dead +101 -0
  62. data/app/views/renalware/letters/lists/index.html.slim.dead1 +90 -0
  63. data/app/views/renalware/letters/lists/show.html.slim +57 -11
  64. data/app/views/renalware/medications/prescriptions/_form.html.slim +1 -0
  65. data/app/views/renalware/navigation/_super_admin.html.slim +1 -0
  66. data/app/views/renalware/pathology/requests/requests/_pdf_header.html.slim +2 -3
  67. data/app/views/renalware/pathology/requests/requests/index.html.slim +1 -1
  68. data/app/views/renalware/pathology/requests/requests/new.html.slim +0 -1
  69. data/config/locales/renalware/letters/letter.en.yml +5 -0
  70. data/config/routes/letters.rb +18 -1
  71. data/db/migrate/20190830153416_create_letter_batches.rb +14 -0
  72. data/db/migrate/20190902085216_create_letter_batch_items.rb +13 -0
  73. data/db/migrate/20190919073410_add_filepath_to_letter_batches.rb +7 -0
  74. data/db/migrate/20190920063447_add_status_to_letter_batch_items.rb +15 -0
  75. data/db/migrate/20190925104902_remove_user_from_appointments.rb +19 -0
  76. data/db/migrate/20190925130052_add_telephone_to_renal_consultants.rb +7 -0
  77. data/db/migrate/20190925161724_change_path_request_consultant_id.rb +19 -0
  78. data/db/migrate/20190925173849_renal_consultants_changes.rb +9 -0
  79. data/db/migrate/20190928131032_add_some_more_missing_indexes.rb +18 -0
  80. data/db/views/pathology_observation_digests_v01.sql +1 -1
  81. data/lib/renalware/configuration.rb +2 -0
  82. data/lib/renalware/engine.rb +1 -0
  83. data/lib/renalware/version.rb +1 -1
  84. data/lib/tasks/demo_data.rake +66 -0
  85. data/lib/tasks/pd.rake +32 -0
  86. data/spec/factories/clinics/appointments.rb +1 -1
  87. data/spec/factories/medications/medication_route.rb +5 -0
  88. data/spec/factories/renal/consultants.rb +9 -0
  89. data/spec/support/pages/medications/prescription_fom.rb +54 -0
  90. metadata +43 -7
  91. data/app/models/renalware/letters/printing/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb +0 -140
  92. 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.109
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-17 00:00:00.000000000 Z
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.3.9
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.3.9
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/create_pdf_by_interleaving_address_sheet_and_letter_for_each_recipient.rb
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
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- FactoryBot.define do
4
- factory :pathology_consultant, class: "Renalware::Pathology::Consultant", parent: :user
5
- end