Bug 18736: Calculate tax depending on rounding
[koha.git] / C4 / ImportExportFramework.pm
index 8769a79..d4a11ca 100644 (file)
@@ -4,18 +4,18 @@ package C4::ImportExportFramework;
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use strict;
 use warnings;
@@ -28,10 +28,9 @@ use C4::Context;
 use C4::Debug;
 
 
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 BEGIN {
-    $VERSION = 3.07.00.049;    # set version for version checking
     require Exporter;
     @ISA    = qw(Exporter);
     @EXPORT = qw(
@@ -279,9 +278,10 @@ sub _export_table_csv
         $sth->execute($frameworkcode);
         my $data;
         while (my $hashRef = $sth->fetchrow_hashref) {
-            for (@fields) {
-                $hashRef->{$_} =~ s/[\r\n]//g;
-                $$strCSV .= '"' . $hashRef->{$_} . '",';
+            for my $field (@fields) {
+                my $value = $hashRef->{$field} // q||;
+                $value =~ s/[\r\n]//g;
+                $$strCSV .= '"' . $value . '",';
             }
             chop $$strCSV;
             $$strCSV .= chr(10);
@@ -345,6 +345,8 @@ sub _export_table_ods
                 $data = $hashRef->{$_->{name}};
                 if ($_->{type} eq 'float' && !defined($data)) {
                     $data = '0';
+                } elsif ($_->{type} eq 'string' && !defined($data)) {
+                    $data = q{};
                 } elsif ($_->{type} eq 'string' && (!$data && $data ne '0')) {
                     $data = '#';
                 }
@@ -415,6 +417,8 @@ sub _export_table_excel
                 $data = $hashRef->{$_->{name}};
                 if ($_->{type} eq 'Number' && !defined($data)) {
                     $data = '0';
+                } elsif ($_->{type} eq 'String' && !defined($data)) {
+                    $data = q{};
                 } elsif ($_->{type} eq 'String' && (!$data && $data ne '0')) {
                     $data = '#';
                 }
@@ -977,40 +981,31 @@ sub _import_table_csv
                     seek($dom, $pos, 0);
                     return 1;
                 }
-                if (scalar(@$fields) == scalar(@arrData)) {
-                    if (!$fieldsNameRead) {
-                        # New table, we read the field names
-                        $fieldsNameRead = 1;
-                        for (my $i=0; $i < @arrData; $i++) {
-                            if ($arrData[$i] ne $fields->[$i]) {
-                                $fieldsNameRead = 0;
-                                last;
-                            }
-                        }
-                        if ($fieldsNameRead) {
-                            $fieldsStr = join(',', @$fields);
-                            $dataStr = '';
-                            map { $dataStr .= '?,';} @$fields;
-                            chop($dataStr) if ($dataStr);
-                            $updateStr = '';
-                            map { $updateStr .= $_ . '=?,';} @$fields;
-                            chop($updateStr) if ($updateStr);
-                        }
-                    } else {
-                        # Read data
-                        my $j = 0;
-                        my %dataFields = ();
-                        for (@arrData) {
-                            if ($fields->[$j] eq 'frameworkcode' && $_ ne $frameworkcode) {
-                                $dataFields{$fields->[$j]} = $frameworkcode;
-                                $arrData[$j] = $frameworkcode;
-                            } else {
-                                $dataFields{$fields->[$j]} = $_;
-                            }
-                            $j++
+                if (!$fieldsNameRead) {
+                    # New table, we read the field names
+                    $fieldsNameRead = 1;
+                    $fields = [@arrData];
+                    $fieldsStr = join(',', @$fields);
+                    $dataStr = '';
+                    map { $dataStr .= '?,';} @$fields;
+                    chop($dataStr) if ($dataStr);
+                    $updateStr = '';
+                    map { $updateStr .= $_ . '=?,';} @$fields;
+                    chop($updateStr) if ($updateStr);
+                } else {
+                    # Read data
+                    my $j = 0;
+                    my %dataFields = ();
+                    for (@arrData) {
+                        if ($fields->[$j] eq 'frameworkcode' && $_ ne $frameworkcode) {
+                            $dataFields{$fields->[$j]} = $frameworkcode;
+                            $arrData[$j] = $frameworkcode;
+                        } else {
+                            $dataFields{$fields->[$j]} = $_;
                         }
-                        $ok = _processRow_DB($dbh, $db_scheme, $table, $fieldsStr, $dataStr, $updateStr, \@arrData, \%dataFields, $PKArray, \@fieldsPK, $fields2Delete);
+                        $j++
                     }
+                    $ok = _processRow_DB($dbh, $db_scheme, $table, $fieldsStr, $dataStr, $updateStr, \@arrData, \%dataFields, $PKArray, \@fieldsPK, $fields2Delete);
                 }
                 $pos = tell($dom);
             }