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.
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