From 3edce10573400d4c166d7d6cc8d8a327a872fda5 Mon Sep 17 00:00:00 2001
From: Julian Maurice <julian.maurice@biblibre.com>
Date: Tue, 13 Apr 2021 10:06:24 +0200
Subject: [PATCH] Bug 28138: Add syspref to make the payment type required

The payment type is already required when using the cash register
feature, but some users want to force selecting a payment type even
when cash registers are not used

The new system preference name is RequirePaymentType

Test plan:
1. Apply patch and run updatedatabase.pl
2. Disable UseCashRegisters and RequirePaymentType sysprefs
3. Create some authorised values in PAYMENT_TYPE category if needed
4. Create a manual invoice and pay it. Notice that the payment type is
   optional.
5. Enable RequirePaymentType
6. Create a manual invoice and pay it. Notice that the payment type is
   now required.
7. Enable UseCashRegisters and verify that the payment type is always
   required, even if RequirePaymentType is disabled
---
 .../add-system-preference-RequirePaymentType.perl        | 9 +++++++++
 installer/data/mysql/mandatory/sysprefs.sql              | 1 +
 koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc    | 2 +-
 .../prog/en/modules/admin/preferences/accounting.pref    | 7 +++++++
 4 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 installer/data/mysql/atomicupdate/add-system-preference-RequirePaymentType.perl

diff --git a/installer/data/mysql/atomicupdate/add-system-preference-RequirePaymentType.perl b/installer/data/mysql/atomicupdate/add-system-preference-RequirePaymentType.perl
new file mode 100644
index 0000000000..5ba51c1a38
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/add-system-preference-RequirePaymentType.perl
@@ -0,0 +1,9 @@
+$DBversion = 'XXX';
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q{
+        INSERT IGNORE INTO systempreferences (`variable`,`value`,`options`,`explanation`,`type`)
+        VALUES ('RequirePaymentType','0','','Require staff to select a payment type when a payment is made','YesNo')
+    });
+
+    NewVersion( $DBversion, '28138', 'Add system preference RequirePaymentType');
+}
diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql
index 19111fdfe9..160589565b 100644
--- a/installer/data/mysql/mandatory/sysprefs.sql
+++ b/installer/data/mysql/mandatory/sysprefs.sql
@@ -561,6 +561,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('ReplyToDefault','',NULL,'Use this email address as the replyto in emails','Free'),
 ('ReportsLog','0',NULL,'If ON, log information about reports.','YesNo'),
 ('RequestOnOpac','1',NULL,'If ON, globally enables patron holds on OPAC','YesNo'),
+('RequirePaymentType','0','','Require staff to select a payment type when a payment is made','YesNo'),
 ('RequireStrongPassword','1','','Require a strong login password for staff and patrons','YesNo'),
 ('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice'),
 ('ReservesMaxPickUpDelay','7','','Define the Maximum delay to pick up an item on hold','Integer'),
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc
index b1b57979ad..789a186979 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc
@@ -7,7 +7,7 @@
     [% END %]
     [% IF payment_types.size > 0 %]
         <li>
-            [% IF Koha.Preference('UseCashRegisters') %]
+            [% IF Koha.Preference('UseCashRegisters') || Koha.Preference('RequirePaymentType') %]
                 <label for="payment_type" class="required">Payment type: </label>
                 <select name="payment_type" id="payment_type" class="required" required="required">
                     [% FOREACH pt IN payment_types %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/accounting.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/accounting.pref
index b23880179b..29df8f75a0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/accounting.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/accounting.pref
@@ -12,6 +12,13 @@ Accounting:
                   1: "Do"
                   0: "Don't"
             - automatically display a print dialog for a payment receipt when making a payment.
+        -
+            - pref: RequirePaymentType
+              choices:
+                  0: "Do not require"
+                  1: "Require"
+            - staff to select a payment type when a payment is made.
+            - This preference has no effect when UseCashRegisters is enabled or when no payment type is defined in PAYMENT_TYPE authorised value category
         -
             - pref: RoundFinesAtPayment
               choices:
-- 
2.20.1