X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/00b6dc2240564add9114864655e96eb7cc6dde4f..0e1c16fdec22180f47a298a9d1d9e3d26ab821ca:/SL/GDPDU.pm diff --git a/SL/GDPDU.pm b/SL/GDPDU.pm index 0978df9f3..e9878ae34 100644 --- a/SL/GDPDU.pm +++ b/SL/GDPDU.pm @@ -33,9 +33,9 @@ use Rose::Object::MakeMethods::Generic ( # keep: arrayref of columns that should be saved for further referencing # tables: arrayref with one column and one or many table.column references that were kept earlier my %known_tables = ( - chart => { name => t8('Charts'), description => t8('Chart of Accounts'), primary_key => 'accno' }, - customer => { name => t8('Customers'), description => t8('Customer Master Data'), }, - vendor => { name => t8('Vendors'), description => t8('Vendor Master Data'), }, + chart => { name => t8('Charts'), description => t8('Chart of Accounts'), primary_key => 'accno', columns => [ qw(id accno description) ], }, + customer => { name => t8('Customers'), description => t8('Customer Master Data'), columns => [ qw(id name department_1 department_2 street zipcode city country contact phone fax email notes customernumber taxnumber obsolete ustid) ] }, + vendor => { name => t8('Vendors'), description => t8('Vendor Master Data'), columns => [ qw(id name department_1 department_2 street zipcode city country contact phone fax email notes customernumber taxnumber obsolete ustid) ] }, ); my %datev_column_defs = ( @@ -49,13 +49,14 @@ my %datev_column_defs = ( name => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Name'), }, notes => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Notes'), }, tax => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Tax'), }, + taxdescription => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('tax_taxdescription'), }, taxkey => { type => 'Rose::DB::Object::Metadata::Column::Integer', text => t8('Taxkey'), }, tax_accname => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Tax Account Name'), }, tax_accno => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Tax Account'), }, transdate => { type => 'Rose::DB::Object::Metadata::Column::Date', text => t8('Invoice Date'), }, vcnumber => { type => 'Rose::DB::Object::Metadata::Column::Text', text => t8('Customer/Vendor Number'), }, - customer_id => { type => 'Rose::DB::Object::Metadata::Column::Integer', text => t8('Customer ID'), }, - vendor_id => { type => 'Rose::DB::Object::Metadata::Column::Integer', text => t8('Vendor ID'), }, + customer_id => { type => 'Rose::DB::Object::Metadata::Column::Integer', text => t8('Customer (database ID)'), }, + vendor_id => { type => 'Rose::DB::Object::Metadata::Column::Integer', text => t8('Vendor (database ID)'), }, ); my @datev_columns = qw( @@ -65,7 +66,7 @@ my @datev_columns = qw( transdate invnumber amount debit_accno debit_accname credit_accno credit_accname - tax + taxdescription tax tax_accno tax_accname taxkey notes ); @@ -219,11 +220,20 @@ sub _table_columns { my ($table) = @_; my $package = SL::DB::Helper::Mappings::get_package_for_table($table); + my %white_list; + my $use_white_list = 0; + if ($known_tables{$table}{columns}) { + $use_white_list = 1; + $white_list{$_} = 1 for @{ $known_tables{$table}{columns} || [] }; + } + # PrimaryKeys must come before regular columns, so partition first partition_by { $known_tables{$table}{primary_key} ? 1 * ($_ eq $known_tables{$table}{primary_key}) : 1 * $_->is_primary_key_member + } grep { + $use_white_list ? $white_list{$_->name} : 1 } $package->meta->columns; } @@ -315,7 +325,7 @@ sub do_datev_xml_table { sub datev_columns { my ($self, $table) = @_; - my %cols_by_primary_key = partition_by { $datev_column_defs{$_}{primary_key} } @datev_columns; + my %cols_by_primary_key = partition_by { 1 * $datev_column_defs{$_}{primary_key} } @datev_columns; $::lxdebug->dump(0, "cols", \%cols_by_primary_key); for my $column (@{ $cols_by_primary_key{1} }) { @@ -329,7 +339,7 @@ sub datev_columns { }) } - for my $column (@{ $cols_by_primary_key{''} }) { + for my $column (@{ $cols_by_primary_key{0} }) { my $type = $column_types{ $datev_column_defs{$column}{type} }; die "unknown col type @{[ ref $column]}" unless $type; @@ -375,11 +385,7 @@ sub do_datev_csv_export { my @transactions = sort_by { $_->[0]->{sortkey} } @{ $datev->{DATEV} }; - my $csv = Text::CSV_XS->new({ - binary => 1, - eol => "\n", - sep_char => ";", - }); + my $csv = Text::CSV_XS->new({ binary => 1, eol => "\r\n", sep_char => ",", quote_char => '"' }); my ($fh, $filename) = File::Temp::tempfile(); binmode($fh, ':utf8'); @@ -407,7 +413,8 @@ sub do_datev_csv_export { debit_accname => $soll->{accname}, credit_accno => $haben->{accno}, credit_accname => $haben->{accname}, - tax => abs($amount->{amount}) - abs($amount->{net_amount}), + tax => defined $amount->{net_amount} ? abs($amount->{amount}) - abs($amount->{net_amount}) : 0, + taxdescription => defined($soll->{tax_accno}) ? $soll->{taxdescription} : $haben->{taxdescription}, notes => $haben->{notes}, (map { ($_ => $tax->{$_}) } qw(taxkey tax_accname tax_accno)), (map { ($_ => ($haben->{$_} // $soll->{$_})) } qw(acc_trans_id invnumber name vcnumber transdate)),