X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/7130c4c1a0cd348455b9b046b58edd6b45ec47a8..a9bbf9c652f83d910b1bd4dc256adf10ea115817:/SL/DATEV/CSV.pm diff --git a/SL/DATEV/CSV.pm b/SL/DATEV/CSV.pm index 560edd5a1..c93241b2a 100644 --- a/SL/DATEV/CSV.pm +++ b/SL/DATEV/CSV.pm @@ -1,15 +1,15 @@ package SL::DATEV::CSV; use strict; +use Carp; +use DateTime; +use Encode qw(encode); +use Scalar::Util qw(looks_like_number); -use SL::Locale::String qw(t8); use SL::DB::Datev; -use DateTime; # safer before the Helper +use SL::DB::Chart; use SL::Helper::DateTime; - -use Carp; -use Encode qw(decode); -use Scalar::Util qw(looks_like_number); +use SL::Locale::String qw(t8); use Rose::Object::MakeMethods::Generic ( scalar => [ qw(datev_lines from to locked warnings) ], @@ -22,7 +22,7 @@ my @kivitendo_to_datev = ( max_length => 13, type => 'Value', required => 1, - input_check => sub { my ($input) = @_; return (looks_like_number($input) && length($input) <= 13) }, + input_check => sub { my ($input) = @_; return (looks_like_number($input) && length($input) <= 13 && $input > 0) }, formatter => \&_format_amount, valid_check => sub { my ($check) = @_; return ($check =~ m/^\d{1,10}(\,\d{1,2})?$/) }, }, @@ -56,7 +56,7 @@ my @kivitendo_to_datev = ( }, { kivi_datev_name => 'not yet implemented', - sv_header_name => t8('Base Transaction Value'), + csv_header_name => t8('Base Transaction Value'), }, { kivi_datev_name => 'not yet implemented', @@ -119,7 +119,7 @@ my @kivitendo_to_datev = ( type => 'Value', }, { - kivi_datev_name => 'buchungsbes', + kivi_datev_name => 'buchungstext', csv_header_name => t8('Posting Text'), max_length => 60, type => 'Text', @@ -228,8 +228,13 @@ my @kivitendo_to_datev = ( max_length => 15, type => 'Text', default => '', - input_check => sub { my ($check) = @_; return ($check eq '' || $check =~ m/[A-Z]{2}\w{5,13}/) }, - formatter => sub { my ($input) = @_; return ($input =~ s/\s//g) }, + input_check => sub { + my ($ustid) = @_; + return 1 if ('' eq $ustid); + $ustid =~ s{\s+}{}g; + return ($ustid =~ m/^CH|^[A-Z]{2}\w{5,13}$/); + }, + formatter => sub { my ($input) = @_; $input =~ s/\s//g; return $input }, valid_check => sub { my ($ustid) = @_; return 1 if ('' eq $ustid); @@ -255,7 +260,7 @@ sub check_encoding { my ($test) = @_; return undef unless $test; if (eval { - decode('Windows-1252', $test, Encode::FB_CROAK|Encode::LEAVE_SRC); + encode('Windows-1252', $test, Encode::FB_CROAK|Encode::LEAVE_SRC); 1 }) { return 1; @@ -263,11 +268,7 @@ sub check_encoding { } sub _kivitendo_to_datev { - my ($self) = @_; - - my $entries = scalar (@kivitendo_to_datev); - push @kivitendo_to_datev, { kivi_datev_name => 'not yet implemented' } for 1 .. (116 - $entries); - return @kivitendo_to_datev; + @kivitendo_to_datev, ({ kivi_datev_name => 'not yet implemented' }) x (116 - @kivitendo_to_datev); } sub header { @@ -276,8 +277,8 @@ sub header { my @header; # we can safely set these defaults - # TODO use Helper::DateTime and get lenght_of_accounts from DATEV.pm - my $today = DateTime->now(time_zone => "local"); + # TODO get length_of_accounts from DATEV.pm + my $today = DateTime->now_local; my $created_on = $today->ymd('') . $today->hms('') . '000'; my $length_of_accounts = length(SL::DB::Manager::Chart->get_first(where => [charttype => 'A'])->accno) // 4; my $default_curr = SL::DB::Default->get_default_currency; @@ -298,7 +299,7 @@ sub header { } my @header_row_1 = ( - "EXTF", "300", 21, "Buchungsstapel", 7, $created_on, "", "ki", + "EXTF", "510", 21, "Buchungsstapel", 7, $created_on, "", "ki", "kivitendo-datev", "", $meta_datev{beraternr}, $meta_datev{mandantennr}, $self->first_day_of_fiscal_year->ymd(''), $length_of_accounts, $self->from->ymd(''), $self->to->ymd(''), "", "", 1, "", $self->locked, @@ -334,7 +335,7 @@ sub lines { if (defined $column->{default}) { $data = $column->{default}; } else { - die 'No sensible value or a sensible default found for the entry: ' . $column->{kivi_datev_name}; + die 'No sensible value or a sensible default found for the entry: ' . $column->{kivi_datev_name}; } } # checkpoint a: no undefined data. All strict checks now! @@ -534,14 +535,7 @@ To add or alter the structure of the data take a look at the C<@kivitendo_to_dat =head1 TODO CAVEAT - -Currently no effort has be done that _kivitenod_to_datev is only intializied once: -Therefore the second call may generate integrity faults: - - my $datev_csv_1 = SL::DATEV::CSV->new(...)->lines; - my $datev_csv_2 = SL::DATEV::CSV->new(...)->lines; - -Secondly one can circumevent the check of the warnings.quite easily, +One can circumevent the check of the warnings.quite easily, becaus warnings are generated after the call to lines: # WRONG usage