From 01b8dfdf13aa7726a3b0aaa92d994e0ae3a45616 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Thu, 21 Jun 2018 14:43:34 -0300
Subject: [PATCH] Bug 20980: Add 'Manual Credit' and fix existing offsets

This patch adds a new offset type 'Manual Credit'. And adds an atomic
update for fixing existing offsets.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
---
 installer/data/mysql/account_offset_types.sql      |  1 +
 installer/data/mysql/atomicupdate/bug_20980.perl   | 39 ++++++++++++++++++++++
 .../prog/en/includes/account_offset_type.inc       |  1 +
 3 files changed, 41 insertions(+)
 create mode 100644 installer/data/mysql/atomicupdate/bug_20980.perl

diff --git a/installer/data/mysql/account_offset_types.sql b/installer/data/mysql/account_offset_types.sql
index a9eaadc450..7b96abfdbd 100644
--- a/installer/data/mysql/account_offset_types.sql
+++ b/installer/data/mysql/account_offset_types.sql
@@ -3,6 +3,7 @@ INSERT INTO account_offset_types ( type ) VALUES
 ('Payment'),
 ('Lost Item'),
 ('Processing Fee'),
+('Manual Credit'),
 ('Manual Debit'),
 ('Reverse Payment'),
 ('Forgiven'),
diff --git a/installer/data/mysql/atomicupdate/bug_20980.perl b/installer/data/mysql/atomicupdate/bug_20980.perl
new file mode 100644
index 0000000000..691ecd571f
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_20980.perl
@@ -0,0 +1,39 @@
+$DBversion = 'XXX';
+if( CheckVersion( $DBversion ) ) {
+
+    # Add 'Manual Credit' offset type
+    $dbh->do(q{
+        INSERT IGNORE INTO `account_offset_types` (`type`) VALUES ('Manual Credit');
+    });
+
+    # Fix wrong account offsets / Manual credits
+    $dbh->do(q{
+        UPDATE account_offsets
+        SET credit_id=debit_id,
+            debit_id=NULL,
+            type='Manual Credit'
+        WHERE amount < 0 AND
+              type='Manual Debit' AND
+              debit_id IN
+                (SELECT accountlines_id AS debit_id
+                 FROM accountlines
+                 WHERE accounttype='C');
+    });
+
+    # Fix wrong account offsets / Manually forgiven amounts
+    $dbh->do(q{
+        UPDATE account_offsets
+        SET credit_id=debit_id,
+            debit_id=NULL,
+            type='Writeoff'
+        WHERE amount < 0 AND
+              type='Manual Debit' AND
+              debit_id IN
+                (SELECT accountlines_id AS debit_id
+                 FROM accountlines
+                 WHERE accounttype='FOR');
+    });
+
+    SetVersion( $DBversion );
+    print "Upgrade to $DBversion done (Bug 20980 - Manual credit offsets are stored as debits)\n";
+}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc
index a36a883a86..6ec71d1f09 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc
@@ -1,5 +1,6 @@
 [% SWITCH account_offset.type %]
     [% CASE 'Payment' %]Payment
+    [% CASE 'Manual Credit' %]Manual credit
     [% CASE 'Manual Debit' %]Manual invoice
     [% CASE 'Lost Item Return' %]Lost item returned
     [% CASE 'Writeoff' %]Writeoff
-- 
2.15.2 (Apple Git-101.1)