From: Jan Büren Date: Mon, 9 Jan 2012 16:58:09 +0000 (+0100) Subject: Merge branch 'master' of vc.linet-services.de:public/lx-office-erp X-Git-Tag: release-2.7.0beta1~78^2^2 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/77527022ef849e10970f285717b9db5d383a1a2e?hp=6c27e6e48268d1a70e581d75f97446007bbedc68 Merge branch 'master' of vc.linet-services.de:public/lx-office-erp --- diff --git a/SL/DB/Customer.pm b/SL/DB/Customer.pm index f9f890167..2e3fa6856 100644 --- a/SL/DB/Customer.pm +++ b/SL/DB/Customer.pm @@ -26,11 +26,6 @@ __PACKAGE__->meta->add_relationship( column_map => { id => 'cp_cv_id' }, manager_args => { sort_by => 'lower(contacts.cp_name)' }, }, - business => { - type => 'one to one', - class => 'SL::DB::Business', - column_map => { business_id => 'id' }, - }, ); __PACKAGE__->meta->initialize; diff --git a/SL/DB/MetaSetup/Customer.pm b/SL/DB/MetaSetup/Customer.pm index 00bdb258f..181f6e658 100644 --- a/SL/DB/MetaSetup/Customer.pm +++ b/SL/DB/MetaSetup/Customer.pm @@ -51,14 +51,30 @@ __PACKAGE__->meta->setup( taxzone_id => { type => 'integer', default => '0', not_null => 1 }, greeting => { type => 'text' }, ustid => { type => 'text' }, + direct_debit => { type => 'boolean', default => 'false' }, iban => { type => 'varchar', length => 100 }, bic => { type => 'varchar', length => 100 }, - direct_debit => { type => 'boolean', default => 'false' }, + curr => { type => 'character', length => 3 }, ], primary_key_columns => [ 'id' ], - allow_inline_column_values => 1, + foreign_keys => [ + business => { + class => 'SL::DB::Business', + key_columns => { business_id => 'id' }, + }, + + language_obj => { + class => 'SL::DB::Language', + key_columns => { language_id => 'id' }, + }, + + payment => { + class => 'SL::DB::PaymentTerm', + key_columns => { payment_id => 'id' }, + }, + ], ); 1; diff --git a/SL/DB/MetaSetup/Part.pm b/SL/DB/MetaSetup/Part.pm index d6814e8d0..d4e142b74 100644 --- a/SL/DB/MetaSetup/Part.pm +++ b/SL/DB/MetaSetup/Part.pm @@ -59,6 +59,11 @@ __PACKAGE__->meta->setup( class => 'SL::DB::Buchungsgruppe', key_columns => { buchungsgruppen_id => 'id' }, }, + + unit_obj => { + class => 'SL::DB::Unit', + key_columns => { unit => 'name' }, + }, ], ); diff --git a/SL/DB/MetaSetup/Vendor.pm b/SL/DB/MetaSetup/Vendor.pm index ae71c6293..2fc47cc18 100644 --- a/SL/DB/MetaSetup/Vendor.pm +++ b/SL/DB/MetaSetup/Vendor.pm @@ -54,6 +54,7 @@ __PACKAGE__->meta->setup( direct_debit => { type => 'boolean', default => 'false' }, iban => { type => 'varchar', length => 100 }, bic => { type => 'varchar', length => 100 }, + curr => { type => 'character', length => 3 }, ], primary_key_columns => [ 'id' ], diff --git a/SL/DB/Part.pm b/SL/DB/Part.pm index 22fbc1b4c..952bce278 100644 --- a/SL/DB/Part.pm +++ b/SL/DB/Part.pm @@ -16,11 +16,6 @@ use SL::DB::Helper::CustomVariables ( ); __PACKAGE__->meta->add_relationships( - unit_obj => { - type => 'one to one', - class => 'SL::DB::Unit', - column_map => { unit => 'name' }, - }, assemblies => { type => 'one to many', class => 'SL::DB::Assembly', diff --git a/SL/DO.pm b/SL/DO.pm index 0d2a5ec21..f241cdfb7 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -350,7 +350,7 @@ sub save { conv_i($form->{salesman_id}), conv_i($form->{cp_id}), $form->{transaction_description}, $form->{type} =~ /^sales/ ? 't' : 'f', - conv_i($form->{taxzone_id}), $form->{taxincluded} ? 't' : 'f', conv_i($form->{terms}), $form->{curr}, + conv_i($form->{taxzone_id}), $form->{taxincluded} ? 't' : 'f', conv_i($form->{terms}), substr($form->{currency}, 0, 3), conv_i($form->{id})); do_query($form, $dbh, $query, @values); @@ -601,7 +601,7 @@ sub retrieve { d.description AS department, dord.language_id, dord.shipto_id, dord.globalproject_id, dord.delivered, dord.transaction_description, - dord.taxzone_id, dord.taxincluded, dord.terms, dord.curr + dord.taxzone_id, dord.taxincluded, dord.terms, dord.curr AS currency FROM delivery_orders dord JOIN ${vc} cv ON (dord.${vc}_id = cv.id) LEFT JOIN employee e ON (dord.employee_id = e.id) @@ -623,6 +623,9 @@ sub retrieve { } $sth->finish(); + # remove any trailing whitespace + $form->{currency} =~ s/\s*$//; + $form->{donumber_array} =~ s/\s*$//g; $form->{saved_donumber} = $form->{donumber}; diff --git a/SL/Form.pm b/SL/Form.pm index 5393c4719..0c291dabe 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -1094,19 +1094,16 @@ sub parse_template { # OUT is used for the media, screen, printer, email # for postscript we store a copy in a temporary file - my $fileid = time; - my $prepend_userspath; - - if (!$self->{tmpfile}) { - $self->{tmpfile} = "${fileid}.$self->{IN}"; - $prepend_userspath = 1; - } - - $prepend_userspath = 1 if substr($self->{tmpfile}, 0, length $userspath) eq $userspath; - - $self->{tmpfile} =~ s|.*/||; - $self->{tmpfile} =~ s/[^a-zA-Z0-9\._\ \-]//g; - $self->{tmpfile} = "$userspath/$self->{tmpfile}" if $prepend_userspath; + my ($temp_fh, $suffix); + $suffix = $self->{IN}; + $suffix =~ s/.*\.//; + ($temp_fh, $self->{tmpfile}) = File::Temp::tempfile( + 'lx-office-printXXXXXX', + SUFFIX => '.' . ($suffix || 'tex'), + DIR => $userspath, + UNLINK => 1, + ); + close $temp_fh; if ($template->uses_temp_file() || $self->{media} eq 'email') { $out = $self->{OUT}; @@ -1152,7 +1149,7 @@ sub parse_template { $mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; $mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email}; $mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|; - $mail->{fileid} = "$fileid."; + $mail->{fileid} = time() . '.' . $$ . '.'; $myconfig->{signature} =~ s/\r//g; # if we send html or plain text inline @@ -2524,7 +2521,7 @@ sub all_vc { $table = $table eq "customer" ? "customer" : "vendor"; - my $query = qq|SELECT count(*) FROM $table|; + my $query = qq|SELECT count(*) FROM $table WHERE NOT obsolete|; my ($count) = selectrow_query($self, $dbh, $query); # build selection list @@ -2860,7 +2857,7 @@ sub create_links { if ($self->{"$self->{vc}_id"}) { # only setup currency - ($self->{currency}) = split(/:/, $self->{currencies}); + ($self->{currency}) = split(/:/, $self->{currencies}) if !$self->{currency}; } else { diff --git a/SL/IC.pm b/SL/IC.pm index 8fd928167..5396c7add 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -497,7 +497,6 @@ sub save { } # insert makemodel records - unless ($form->{item} eq 'service') { my $lastupdate = ''; my $value = 0; for my $i (1 .. $form->{makemodel_rows}) { @@ -521,7 +520,6 @@ sub save { do_query($form, $dbh, $query, @values); } } - } # insert taxes foreach my $item (split(/ /, $form->{taxaccounts})) { diff --git a/SL/IS.pm b/SL/IS.pm index 22c25c7ad..56c266ccd 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -1413,14 +1413,16 @@ sub delete_invoice { do_query($form, $dbh, qq|UPDATE ar SET storno = 'f', paid = 0 WHERE id = ?|, $invoice_id); } - # delete AR record - do_query($form, $dbh, qq|DELETE FROM ar WHERE id = ?|, @values); - # delete spool files my @spoolfiles = selectall_array_query($form, $dbh, qq|SELECT spoolfile FROM status WHERE trans_id = ?|, @values); - # delete status entries - do_query($form, $dbh, qq|DELETE FROM status WHERE trans_id = ?|, @values); + my @queries = ( + qq|DELETE FROM status WHERE trans_id = ?|, + qq|DELETE FROM periodic_invoices WHERE ar_id = ?|, + qq|DELETE FROM ar WHERE id = ?|, + ); + + map { do_query($form, $dbh, $_, @values) } @queries; my $rc = $dbh->commit; diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index 2df7e8cfb..c6d54d593 100644 --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@ -63,47 +63,6 @@ sub parse_foreach { $form->{"__odd__"} = (($i + 1) % 2) == 1; $form->{"__counter__"} = $i + 1; - if ( ref $description_array eq 'ARRAY' - && scalar @{$description_array} == scalar @{$ary} - && $self->{"chars_per_line"} != 0) - { - my $lines = int(length($description_array->[$i]) / $self->{"chars_per_line"}); - my $lpp; - - $description_array->[$i] =~ s/(\\newline\s?)*$//; - $lines++ while ($description_array->[$i] =~ m/\\newline/g); - $lines++; - - if ($current_page == 1) { - $lpp = $self->{"lines_on_first_page"}; - } else { - $lpp = $self->{"lines_on_second_page"}; - } - - # Yes we need a manual page break -- or the user has forced one - if ( (($current_line + $lines) > $lpp) - || ($description_array->[$i] =~ //) - || ( ref $longdescription_array eq 'ARRAY' - && $longdescription_array->[$i] =~ //)) { - my $pb = $self->{"pagebreak_block"}; - - # replace the special variables <%sumcarriedforward%> - # and <%lastpage%> - - my $psum = $form->format_amount($self->{"myconfig"}, $sum, 2); - $pb =~ s/$self->{tag_start_qm}sumcarriedforward$self->{tag_end_qm}/$psum/g; - $pb =~ s/$self->{tag_start_qm}lastpage$self->{tag_end_qm}/$current_page/g; - - my $new_text = $self->parse_block($pb, (@indices, $i)); - return undef unless (defined($new_text)); - $new_contents .= $new_text; - - $current_page++; - $current_line = 0; - } - $current_line += $lines; - } - if ( ref $linetotal_array eq 'ARRAY' && $i < scalar(@{$linetotal_array})) { $sum += $form->parse_amount($self->{"myconfig"}, $linetotal_array->[$i]); @@ -336,18 +295,6 @@ sub parse { my $contents = join("", @lines); - # detect pagebreak block and its parameters - if ($contents =~ /$self->{tag_start_qm}pagebreak\s+(\d+)\s+(\d+)\s+(\d+)\s*$self->{tag_end_qm}(.*?)$self->{tag_start_qm}end(\s*pagebreak)?$self->{tag_end_qm}/s) { - $self->{"chars_per_line"} = $1; - $self->{"lines_on_first_page"} = $2; - $self->{"lines_on_second_page"} = $3; - $self->{"pagebreak_block"} = $4; - - substr($contents, length($`), length($&)) = ""; - } - - $self->{"forced_pagebreaks"} = []; - my $new_contents = $self->parse_block($contents); if (!defined($new_contents)) { $main::lxdebug->leave_sub(); diff --git a/SL/User.pm b/SL/User.pm index 640299d8a..49ba33924 100644 --- a/SL/User.pm +++ b/SL/User.pm @@ -77,9 +77,9 @@ sub country_codes { my @dir = grep(!/(^\.\.?$|\..*)/, readdir(DIR)); foreach my $dir (@dir) { - next unless open(FH, "locale/$dir/LANGUAGE"); - @language = ; - close FH; + next unless open(my $fh, '<:encoding(UTF-8)', "locale/$dir/LANGUAGE"); + @language = <$fh>; + close $fh; $cc{$dir} = "@language"; } diff --git a/SL/VK.pm b/SL/VK.pm index 13c7d7f99..c3a2562fd 100644 --- a/SL/VK.pm +++ b/SL/VK.pm @@ -62,6 +62,9 @@ sub invoice_transactions { # Stornierte Rechnungen und Stornorechnungen in invoice rausfiltern $where .= " AND ar.storno is not true "; + # Bestandteile von Erzeugnissen herausfiltern + $where .= " AND i.assemblyitem is not true "; + my $sortorder = "cus.name,i.parts_id,ar.transdate"; if ($form->{sortby} eq 'artikelsort') { $sortorder = "i.parts_id,cus.name,ar.transdate"; diff --git a/bin/mozilla/admin.pl b/bin/mozilla/admin.pl index 0592a69b1..6d518fcbd 100755 --- a/bin/mozilla/admin.pl +++ b/bin/mozilla/admin.pl @@ -61,6 +61,13 @@ require "bin/mozilla/admin_printer.pl"; use strict; +# parserhappy(R): + +# $locale->text('periodic') +# $locale->text('income') +# $locale->text('perpetual') +# $locale->text('balance') + our $cgi; our $form; our $locale; diff --git a/bin/mozilla/invoice_io.pl b/bin/mozilla/invoice_io.pl index 42e402ec8..5f6c1414e 100644 --- a/bin/mozilla/invoice_io.pl +++ b/bin/mozilla/invoice_io.pl @@ -205,8 +205,7 @@ sub display_form { my $numrows = ++$form->{rowcount}; my $subroutine = "display_row"; - if ($form->{item} eq 'part') { - + if ($form->{item} =~ /(part|service)/) { #set preisgruppenanzahl $numrows = $form->{price_rows}; $subroutine = "price_row"; @@ -231,14 +230,6 @@ sub display_form { $numrows = ++$form->{assembly_rows}; $subroutine = "assembly_row"; } - if ($form->{item} eq 'service') { - $numrows = $form->{price_rows}; - $subroutine = "price_row"; - - &{$subroutine}($numrows); - - $numrows = 0; - } # create rows &{$subroutine}($numrows) if $numrows; diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index f73c17974..18058437f 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -341,7 +341,19 @@ sub display_row { $form->{"marge_percent_$i"} = 0; my $marge_color; - my $real_sellprice = $linetotal; + my $real_sellprice; + if ( $form->{taxincluded} and $form->{"qty_$i"} * 1 and $form->{$form->{"taxaccounts_$i"} . "_rate"} * 1) { + # if we use taxincluded we need to calculate the marge from the net_value + # all the marge calculations are based on linetotal which we need to + # convert to net first + + # there is no direct form value for the tax_rate of the item, but + # form->{taxaccounts_$i} gives the tax account (e.g. 3806) and 3806_rate + # gives the tax percentage (e.g. 0.19) + $real_sellprice = $linetotal / (1 + $form->{$form->{"taxaccounts_$i"} . "_rate"}); + } else { + $real_sellprice = $linetotal; + }; my $real_lastcost = $form->{"lastcost_$i"} * $form->{"qty_$i"} / ( $form->{"marge_price_factor_$i"} || 1 ); my $marge_percent_warn = $myconfig{marge_percent_warn} * 1 || 15; my $marge_adjust_credit_note = $form->{type} eq 'credit_note' ? -1 : 1; diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index b550532ed..2ace9a7b4 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -116,7 +116,7 @@ sub invoice_links { } } - my ($payment_id, $language_id, $taxzone_id); + my ($payment_id, $language_id, $taxzone_id, $currency); if ($form->{payment_id}) { $payment_id = $form->{payment_id}; } @@ -126,6 +126,9 @@ sub invoice_links { if ($form->{taxzone_id}) { $taxzone_id = $form->{taxzone_id}; } + if ($form->{currency}) { + $currency = $form->{currency}; + } my $cp_id = $form->{cp_id}; IR->get_vendor(\%myconfig, \%$form); @@ -141,6 +144,9 @@ sub invoice_links { if ($taxzone_id) { $form->{taxzone_id} = $taxzone_id; } + if ($currency) { + $form->{currency} = $currency; + } my @curr = split(/:/, $form->{currencies}); #seems to be missing map { $form->{selectcurrency} .= "