From d0db1862469d06a9f08c6c5e4320e924d6eaa7ac Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Tue, 22 Jan 2013 13:54:38 -0500
Subject: [PATCH] Bug 9448 - Add separate permission for writing off fees

Adds new sub-permissions to updatecharges, 'writeoff' for writing off fees
and 'remaining_permissions' for all other fee related activites.

Test plan:
1) Apply patch
2) Run updatedatabase.pl
3) Remove the 'writeoff' permission from your privileges
4) Attempt to write off a fee, you should not be able to
5) Re-add the 'writeoff' permission
6) Attempt to write off a fee, you should now be able to do so
---
 .../data/mysql/de-DE/mandatory/userpermissions.sql |    2 ++
 .../data/mysql/en/mandatory/userpermissions.sql    |    2 ++
 .../data/mysql/es-ES/mandatory/userpermissions.sql |    2 ++
 .../mysql/fr-FR/1-Obligatoire/userpermissions.sql  |    2 ++
 .../data/mysql/it-IT/necessari/userpermissions.sql |    2 ++
 .../mysql/nb-NO/1-Obligatorisk/userpermissions.sql |    2 ++
 .../data/mysql/pl-PL/mandatory/userpermissions.sql |    2 ++
 .../ru-RU/mandatory/permissions_and_user_flags.sql |    2 ++
 .../uk-UA/mandatory/permissions_and_user_flags.sql |    2 ++
 installer/data/mysql/updatedatabase.pl             |    8 ++++++++
 .../intranet-tmpl/prog/en/modules/members/pay.tt   |    4 ++--
 members/boraccount.pl                              |    2 +-
 members/mancredit.pl                               |    2 +-
 members/maninvoice.pl                              |    2 +-
 members/pay.pl                                     |    3 ++-
 members/paycollect.pl                              |    3 ++-
 members/printfeercpt.pl                            |    2 +-
 members/printinvoice.pl                            |    2 +-
 18 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/installer/data/mysql/de-DE/mandatory/userpermissions.sql b/installer/data/mysql/de-DE/mandatory/userpermissions.sql
index ec5a22a..e298335 100644
--- a/installer/data/mysql/de-DE/mandatory/userpermissions.sql
+++ b/installer/data/mysql/de-DE/mandatory/userpermissions.sql
@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Katalogdaten bearbeiten (Titel- und Exemplardaten ändern)'),
    ( 9, 'fast_cataloging', 'Schnellaufnahmen anlegen'),
    ( 9, 'edit_items', 'Exemplare bearbeiten'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Lieferanten verwalten'),
    (11, 'contracts_manage', 'Vereinbarungen verwalten'),
    (11, 'period_manage', 'Etats verwalten'),
diff --git a/installer/data/mysql/en/mandatory/userpermissions.sql b/installer/data/mysql/en/mandatory/userpermissions.sql
index 070e8f5..bfa108e 100644
--- a/installer/data/mysql/en/mandatory/userpermissions.sql
+++ b/installer/data/mysql/en/mandatory/userpermissions.sql
@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/es-ES/mandatory/userpermissions.sql b/installer/data/mysql/es-ES/mandatory/userpermissions.sql
index 070e8f5..bfa108e 100644
--- a/installer/data/mysql/es-ES/mandatory/userpermissions.sql
+++ b/installer/data/mysql/es-ES/mandatory/userpermissions.sql
@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
index 3147bed..b42b3de 100644
--- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
+++ b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql
@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Ajouter et modifier des notices au catalogue'),
    ( 9, 'fast_cataloging', 'Catalogage rapide'),
    ( 9, 'edit_items', 'Modifier des exemplaires'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (13, 'edit_news', 'Ecrire des nouvelles pour l''OPAC et l''interface professionnelle'),
    (13, 'label_creator', 'Créer des étiquettes à partir des données du catalogues et des adhérents'),
    (13, 'edit_calendar', 'Définir les jours de fermeture de la bibliothèque'),
diff --git a/installer/data/mysql/it-IT/necessari/userpermissions.sql b/installer/data/mysql/it-IT/necessari/userpermissions.sql
index cf5424e..78fe28b 100644
--- a/installer/data/mysql/it-IT/necessari/userpermissions.sql
+++ b/installer/data/mysql/it-IT/necessari/userpermissions.sql
@@ -10,6 +10,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Cataloga (crea/modifica dati bibliografici e di copia)'),
    ( 9, 'fast_cataloging', 'Catalogazione veloce'),
    ( 9, 'edit_items', 'Crea/modifica copie'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Crea/modifica fornitori'),
    (11, 'contracts_manage', 'Crea/modifica contratti'),
    (11, 'period_manage', 'Gestisci scadenze budgets'),
diff --git a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
index 36c03f3..6692d60 100644
--- a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
+++ b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql
@@ -28,6 +28,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Endre katalogen (Endre bibliografiske poster og eksemplaropplysninger)'),
    ( 9, 'fast_cataloging', 'Hurtigkatalogisering'),
    ( 9, 'edit_items', 'Endre eksmeplarer'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Administrere leverandører'),
    (11, 'contracts_manage', 'Administrere kontrakter'),
    (11, 'period_manage', 'Administrere perioder'),
diff --git a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
index 1165af1..d9b11c0 100644
--- a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
+++ b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql
@@ -8,6 +8,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalogue'),
    ( 9, 'fast_cataloging', 'Szybkie katalogowanie'),
    ( 9, 'edit_items', 'Edit Items'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Zarządzanei dostawcami'),
    (11, 'contracts_manage', 'Zarządzanie kontraktami'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql b/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql
index 00d6538..c346960 100644
--- a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql
+++ b/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql
@@ -32,6 +32,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql b/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql
index 188a146..e1ec23f 100644
--- a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql
+++ b/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql
@@ -32,6 +32,8 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'),
    ( 9, 'fast_cataloging', 'Fast cataloging'),
    ( 9, 'edit_items', 'Edit Items'),
+   (10, 'writeoff', 'Write off charges'),
+   (10, 'remaining_permissions', 'Remaining updatecharges permissions'),
    (11, 'vendors_manage', 'Manage vendors'),
    (11, 'contracts_manage', 'Manage contracts'),
    (11, 'period_manage', 'Manage periods'),
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 77265f4..9b5ff1b 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -6339,6 +6339,14 @@ if ( CheckVersion($DBversion) ) {
    SetVersion ($DBversion);
 }
 
+$DBversion = "3.11.00.XXX";
+if ( CheckVersion($DBversion) ) {
+   $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('10', 'writeoff', 'Write off charges')");
+   $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES ('10', 'remaining_permissions', 'Remaining updatecharges permissions')");
+   print "Upgrade to $DBversion done (Bug 9448 - Add separate permission for writing off fees)\n";
+   SetVersion ($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
index 2780c3f..f536964 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
@@ -67,7 +67,7 @@
     <td>
     [% IF ( line.amountoutstanding > 0 ) %]
         <input type="submit" name="pay_indiv_[% line.accountno %]" value="Pay" />
-        <input type="submit" name="wo_indiv_[% line.accountno %]" value="Write off" />
+        [% IF CAN_user_updatecharges_writeoff %]<input type="submit" name="wo_indiv_[% line.accountno %]" value="Write off" />[% END %]
     [% END %]
     <input type="hidden" name="itemnumber[% line.accountno %]" value="[% line.itemnumber %]" />
     <input type="hidden" name="description[% line.accountno %]" value="[% line.description %]" />
@@ -106,7 +106,7 @@
 </table>
 <fieldset class="action">
 <input type="submit" name="paycollect"  value="Pay amount" class="submit" />
-<input type="submit" name="woall"  id="woall" value="Write off all" class="submit" />
+[% IF CAN_user_updatecharges_writeoff %]<input type="submit" name="woall"  id="woall" value="Write off all" class="submit" />[% END %]
 <input type="submit" name="payselected"  value="Pay selected" class="submit" />
 <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% borrower.borrowernumber %]">Cancel</a>
 </fieldset>
diff --git a/members/boraccount.pl b/members/boraccount.pl
index eebc8d3..a987035 100755
--- a/members/boraccount.pl
+++ b/members/boraccount.pl
@@ -42,7 +42,7 @@ my ($template, $loggedinuser, $cookie)
                             query => $input,
                             type => "intranet",
                             authnotrequired => 0,
-                            flagsrequired => {borrowers => 1, updatecharges => 1},
+                            flagsrequired => {borrowers => 1, updatecharges => 'remaining_permissions'},
                             debug => 1,
                             });
 
diff --git a/members/mancredit.pl b/members/mancredit.pl
index 88200d0..2af4243 100755
--- a/members/mancredit.pl
+++ b/members/mancredit.pl
@@ -64,7 +64,7 @@ if ($add){
 					  query => $input,
 					  type => "intranet",
 					  authnotrequired => 0,
-					  flagsrequired => {borrowers => 1, updatecharges => 1},
+					  flagsrequired => {borrowers => 1, updatecharges => 'remaining_permissions'},
 					  debug => 1,
 					  });
 					  
diff --git a/members/maninvoice.pl b/members/maninvoice.pl
index f1c572c..38eb347 100755
--- a/members/maninvoice.pl
+++ b/members/maninvoice.pl
@@ -82,7 +82,7 @@ if ($add){
 					query => $input,
 					type => "intranet",
 					authnotrequired => 0,
-					flagsrequired => {borrowers => 1, updatecharges => 1},
+					flagsrequired => {borrowers => 1, updatecharges => 'remaining_permissions'},
 					debug => 1,
 					});
 					
diff --git a/members/pay.pl b/members/pay.pl
index 7580daf..4372efd 100755
--- a/members/pay.pl
+++ b/members/pay.pl
@@ -45,12 +45,13 @@ our $input = CGI->new;
 our $writeoff_sth;
 our $add_writeoff_sth;
 
+my $updatecharges_permissions = $input->param('woall') ? 'writeoff' : 'remaining_permissions';
 our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {   template_name   => 'members/pay.tmpl',
         query           => $input,
         type            => 'intranet',
         authnotrequired => 0,
-        flagsrequired   => { borrowers => 1, updatecharges => 1 },
+        flagsrequired   => { borrowers => 1, updatecharges => $updatecharges_permissions },
         debug           => 1,
     }
 );
diff --git a/members/paycollect.pl b/members/paycollect.pl
index d66702e..8ff6e81 100755
--- a/members/paycollect.pl
+++ b/members/paycollect.pl
@@ -30,12 +30,13 @@ use C4::Branch;
 
 my $input = CGI->new();
 
+my $updatecharges_permissions = $input->param('writeoff_individual') ? 'writeoff' : 'remaining_permissions';
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {   template_name   => 'members/paycollect.tmpl',
         query           => $input,
         type            => 'intranet',
         authnotrequired => 0,
-        flagsrequired   => { borrowers => 1, updatecharges => 1 },
+        flagsrequired   => { borrowers => 1, updatecharges => $updatecharges_permissions },
         debug           => 1,
     }
 );
diff --git a/members/printfeercpt.pl b/members/printfeercpt.pl
index 59d5cb3..e475451 100755
--- a/members/printfeercpt.pl
+++ b/members/printfeercpt.pl
@@ -41,7 +41,7 @@ my ($template, $loggedinuser, $cookie)
                             query => $input,
                             type => "intranet",
                             authnotrequired => 0,
-                            flagsrequired => {borrowers => 1, updatecharges => 1},
+                            flagsrequired => {borrowers => 1, updatecharges => 'remaining_permissions'},
                             debug => 1,
                             });
 
diff --git a/members/printinvoice.pl b/members/printinvoice.pl
index 3e04fcc..a9ef6aa 100755
--- a/members/printinvoice.pl
+++ b/members/printinvoice.pl
@@ -41,7 +41,7 @@ my ($template, $loggedinuser, $cookie)
                             query => $input,
                             type => "intranet",
                             authnotrequired => 0,
-                            flagsrequired => {borrowers => 1, updatecharges => 1},
+                            flagsrequired => {borrowers => 1, updatecharges => 'remaining_permissions'},
                             debug => 1,
                             });
 
-- 
1.7.2.5