}
}
- # record a AR/AP with a payment
- if ($form->round_amount($paymentamount, 2) > 0) {
- $form->{invnumber} = "";
- OP::overpayment("", $myconfig, $form, $dbh, $paymentamount, $ml, 1);
- }
-
my $rc;
if ($form->round_amount($paymentamount, 2) < 0) {
- $dbh->rollback;
+ # Hier werden negativen Zahlungseingänge abgefangen
+ # Besser: in Oberfläche schon prüfen
+ # Zahlungsein- und ausgänge sind immer positiv
+ $dbh->rollback;
$rc = 0;
}
if ($form->round_amount($paymentamount, 2) == 0) {
qq| cnew.accno | .
qq|FROM chart c | .
qq|LEFT JOIN chart cnew ON c.new_chart_id = cnew.id | .
- qq|WHERE (c.id = ?) AND NOT c.new_chart_id ISNULL AND (c.new_chart_id > 0)|;
+ qq|WHERE (c.id = ?) AND NOT c.new_chart_id IS NULL AND (c.new_chart_id > 0)|;
$sth = prepare_query($form, $dbh, $query);
while (1) {
return $value;
}
+##########################
+# Get data for the submitted order id
+# from database
+#
+sub get_order_data_by_ordnumber {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my %params = @_;
+
+ Common::check_params(\%params, qw(ordnumber));
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $dbh = $form->get_standard_dbh();
+
+ my @values = ($params{ordnumber});
+
+ # We query the database for the fields we need using the submitted "ordnumber"
+ my $query = <<SQL;
+ SELECT o.payment_id, o.salesman_id, o.transdate AS orddate, o.taxzone_id, o.quonumber
+ FROM oe o
+ WHERE o.ordnumber = ?;
+SQL
+
+ # Do the actual query and return the results for later processing by our "frontend"
+ my $result = selectfirst_hashref_query($form, $dbh, $query, @values);
+
+ $main::lxdebug->leave_sub();
+
+ return $result;
+}
+
1;
__END__
+++ /dev/null
-#=====================================================================
-# LX-Office ERP
-# Copyright (C) 2004
-# Based on SQL-Ledger Version 2.1.9
-# Web http://www.lx-office.org
-#
-#=====================================================================
-# SQL-Ledger Accounting
-# Copyright (C) 2003
-#
-# Author: Dieter Simader
-# Email: dsimader@sql-ledger.org
-# Web: http://www.sql-ledger.org
-#
-# Contributors:
-#
-# This program 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.
-#
-# This program 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 this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#======================================================================
-#
-# Overpayment function
-# used in AR, AP, IS, IR, OE, CP
-#======================================================================
-
-package OP;
-
-use SL::DBUtils;
-
-use strict;
-
-sub overpayment {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form, $dbh, $amount, $ml) = @_;
-
- my $fxamount = $form->round_amount($amount * $form->{exchangerate}, 2);
- my ($paymentaccno) = split(/--/, $form->{account});
-
- my $vc_id = $form->{vc} eq "customer" ? "customer_id" : "vendor_id";
- my $arap = $form->{arap} eq "ar" ? "ar" : "ap";
-
- my $query = qq|SELECT nextval('glid')|;
- my ($new_id) = selectrow_query($form, $dbh, $query);
-
- # add AR/AP header transaction with a payment
- $query =
- qq|INSERT INTO $arap (id, invnumber, employee_id) | .
- qq|VALUES (?, ?, (SELECT id FROM employee WHERE login = ?))|;
- my @values = ($new_id, $form->{login}, $form->{login});
- do_query($form, $dbh, $query, @values);
-
- my $invnumber = ($form->{invnumber}) ? $form->{invnumber} : $new_id;
- $query =
- qq|UPDATE $arap SET invnumber = ?, $vc_id = ?, transdate = ?, datepaid = ?, | .
- qq|duedate = ?, netamount = ?, amount = ?, paid = ?, | .
- qq|curr = ?, department_id = ? | .
- qq|WHERE id = ?|;
- @values = ($invnumber, $form->{$vc_id},
- conv_date($form->{datepaid}), conv_date($form->{datepaid}),
- conv_date($form->{datepaid}), 0, 0, $fxamount, $form->{currency},
- $form->{department_id}, $new_id);
- do_query($form, $dbh, $query, @values);
-
- # add AR/AP
- my ($accno) = split /--/, $form->{ $form->{ARAP} };
-
- $query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount) | .
- qq|VALUES (?, (SELECT id FROM chart WHERE accno = ? ), ?, ?)|;
- @values = ($new_id, $accno, conv_date($form->{datepaid}), $fxamount * $ml);
- do_query($form, $dbh, $query, @values);
-
- # add payment
- $query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, source, memo) | .
- qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|;
- @values = ($new_id, $paymentaccno, conv_date($form->{datepaid}),
- $amount * $ml * -1, $form->{source}, $form->{memo});
- do_query($form, $dbh, $query, @values);
-
- # add exchangerate difference
- if ($fxamount != $amount) {
- $query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, cleared, fx_transaction) | .
- qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|;
- @values = ($new_id, $paymentaccno, conv_date($form->{datepaid}),
- (($fxamount - $amount) * $ml * -1), 1, 1);
- do_query($form, $dbh, $query, @values);
- }
-
- $main::lxdebug->leave_sub();
-}
-
-1;
-
--- /dev/null
+package SL::Template::Plugin::T8;
+
+use Template::Plugin::Filter;
+use base qw( Template::Plugin::Filter );
+
+my $locale = undef;
+
+sub init {
+ my $self = shift;
+
+ $locale ||= Locale->new($main::myconfig{countrycode}, 'all');
+
+ # first arg can specify filter name
+ $self->install_filter($self->{ _ARGS }->[0] || 'T8');
+
+ return $self;
+}
+
+sub filter {
+ my ($self, $text, $args) = @_;
+ return $locale->text($text, @{ $args || [] });
+}
+
+return 'SL::Template::Plugin::T8';
#======================================================================
use SL::CP;
-use SL::OP;
use SL::IS;
use SL::IR;
use SL::FU;
use SL::IS;
use SL::PE;
+use SL::OE;
use Data::Dumper;
use List::Util qw(max sum);
$ref->{name} = $form->quote($ref->{name});
}
+ # Load data for a specific order and update form fields
+ my $order_data = OE->get_order_data_by_ordnumber(%$form) if $form->{ordnumber};
+
+ # Copy the fields we need to %form
+ for my $key (qw(payment_id salesman_id orddate taxzone_id quonumber)) {
+ $form->{$key} = $order_data->{$key};
+ }
+
$form->restore_vars(qw(id));
IS->retrieve_invoice(\%myconfig, \%$form);
$form->restore_vars(qw(taxincluded)) if $form->{id};
$form->restore_vars(qw(salesman_id)) if $main::editing;
+
# build vendor/customer drop down comatibility... don't ask
if (@{ $form->{"all_customer"} }) {
$form->{"selectcustomer"} = 1;
@code{chown -R www-data lx-office-erp/users lx-office-erp/spool lx-office-erp/webdav}
+Weiterhin muss der Webserver-Benutzer im Verzeichnis @code{templates} Verzeichnisse für
+jeden neuen Benutzer, der in lx-office angelegt wird, anlegen dürfen:
+
+@code{chgrp www-data lx-office-erp/templates; chmod g+w lx-office-erp/templates}
+
+
@c ---------------------------------------------------------------
@node Anpassung der PostgreSQL-Konfiguration
ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
Lx-Office mit ISO-8859-15 als Encoding betrieben werden.
+Das Encoding einer Datenbank kann in @code{psql} mit @code{\l} geprüft werden.
+
@node Änderungen an Konfigurationsdateien
@section Änderungen an Konfigurationsdateien
Bitte beachten Sie, dass der Pfad zur Datei @code{plpgsql.so} von
Distribution zu Distribution verschiedlich sein kann. Bei
Debian/Ubuntu befindet sie sich unter
-@code{/usr/lib/postgresql/lib/plpgsql.so}.
+@code{/usr/lib/postgresql/lib/plpgsql.so}, bei Ubuntu 9.10 unter @code{/usr/lib/postgresql/8.4/lib/plpgsql.so}.
@c ---------------------------------------------------------------
<td><code>dunning_duedate</code></td>
<td>Fälligkeitsdatum für diese Mahhnung</td>
</tr>
+ <tr>
+ <td><code>dunning_id</code></td>
+ <td>Mahnungsnummer</td>
+ </tr>
<tr>
<td><code>fee</code></td>
<td>Kummulative Mahngebühren</td>
$plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator));
}
+ while ($line =~ m/\[\% # Template-Start-Tag
+ [\-~#] # Whitespace-Unterdrückung
+ \s* # Optional beliebig viele Whitespace
+ [\'\"] # Anfang des zu übersetzenden Strings
+ (.*?) # Der zu übersetzende String
+ [\'\"] # Ende des zu übersetzenden Strings
+ \s*\|\s* # Pipe-Zeichen mit optionalen Whitespace davor und danach
+ \$T8 # Filteraufruf
+ .*? # Optionale Argumente für den Filter und Whitespaces
+ [\-~#] # Whitespace-Unterdrückung
+ \%\] # Template-Ende-Tag
+ /ix) {
+ print "Found filter >>>$1<<<\n";
+ $cached{$_[0]}{all}{$1} = 1;
+ $cached{$_[0]}{html}{$1} = 1;
+ $plugins{needed}->{T8} = 1;
+ substr $line, $-[1], $+[0] - $-[0], '';
+ }
+
while ("" ne $line) {
if (!$copying) {
if ($line =~ m|<translate>|i) {
}
# copy back into global arrays
- map { $alllocales{$_} = 1 } keys %{$cached{$_[0]}{all}};
- map { $htmllocales{$_} = 1 } keys %{$cached{$_[0]}{html}};
- map { $submit{$_} = 1 } keys %{$cached{$_[0]}{submit}};
+ map { $alllocales{$_} = 1 } keys %{$cached{$_[0]}{all}};
+ map { $htmllocale{$_} = 1 } keys %{$cached{$_[0]}{html}};
+ map { $submit{$_} = 1 } keys %{$cached{$_[0]}{submit}};
}
sub converthtmlfile {
--- /dev/null
+#!/usr/bin/perl -pli.orig
+
+#
+# template converter -> T8 converter
+#
+# wanna get rid of those <translate> tags?
+# no problem. use this script to fix most it.
+#
+# use: perl tmpl2t8.pl <file>
+#
+# will save the original file as file.orig
+#
+s/$/[% USE T8 %]/ if $. == 1;
+s/<translate>([^<]+)<\/translate>/[%- '$1' | \$T8 %]/xg;
-[%- USE LxERP %]
+[%- USE LxERP %][% USE T8 %]
<tr>
<td>
<table width="100%">
<tr class="listheading">
[% IF is_type_credit_note %]
- <th colspan="6" class="listheading">Zahlungsausgänge</th>
+ <th colspan="6" class="listheading">[%- 'Payments' | $T8 %]</th>
[% ELSE %]
- <th colspan="6" class="listheading">Zahlungseingänge</th>
+ <th colspan="6" class="listheading">[%- 'Incoming Payments' | $T8 %]</th>
[%- END %]
</tr>
<tr>
- <th>Datum</th>
- <th>Beleg</th>
- <th>Memo</th>
- <th>Betrag</th>
+ <th>[%- 'Date' | $T8 %]</th>
+ <th>[%- 'Source' | $T8 %]</th>
+ <th>[%- 'Memo' | $T8 %]</th>
+ <th>[%- 'Amount' | $T8 %]</th>
[% IF show_exchangerate %]
- <th>Wechselkurs.</th>
+ <th>[%- 'Exch' | $T8 %]</th>
[% END %]
- <th>Konto</th>
+ <th>[%- 'Account' | $T8 %]</th>
</tr>
<tr>
<td></td>
<td></td>
- <td align="center">Summe</td>
+ <td align="center">[%- 'Total' | $T8 %]</td>
<td align="center">[% LxERP.foramt_amount(totalpaid, 2) | html %]</td>
</tr>
<tr>
<td></td>
<td></td>
- <td align="center">Fehlbetrag</td>
+ <td align="center">[%- 'Missing amount' | $T8 %]</td>
<td align="center">[% LxERP.format_amount(paid_missing, 2) | html %]</td>
</tr>
-[%- USE LxERP %]
+[%- USE LxERP %][% USE T8 %]
<tr>
<td>
<table width="100%">
<tr class="listheading">
[% IF is_type_credit_note %]
- <th colspan="6" class="listheading"><translate>Payments</translate></th>
+ <th colspan="6" class="listheading">[%- 'Payments' | $T8 %]</th>
[% ELSE %]
- <th colspan="6" class="listheading"><translate>Incoming Payments</translate></th>
+ <th colspan="6" class="listheading">[%- 'Incoming Payments' | $T8 %]</th>
[%- END %]
</tr>
<tr>
- <th><translate>Date</translate></th>
- <th><translate>Source</translate></th>
- <th><translate>Memo</translate></th>
- <th><translate>Amount</translate></th>
+ <th>[%- 'Date' | $T8 %]</th>
+ <th>[%- 'Source' | $T8 %]</th>
+ <th>[%- 'Memo' | $T8 %]</th>
+ <th>[%- 'Amount' | $T8 %]</th>
[% IF show_exchangerate %]
- <th><translate>Exch</translate></th>
+ <th>[%- 'Exch' | $T8 %]</th>
[% END %]
- <th><translate>Account</translate></th>
+ <th>[%- 'Account' | $T8 %]</th>
</tr>
<tr>
<td></td>
<td></td>
- <td align="center"><translate>Total</translate></td>
+ <td align="center">[%- 'Total' | $T8 %]</td>
<td align="center">[% LxERP.foramt_amount(totalpaid, 2) | html %]</td>
</tr>
<tr>
<td></td>
<td></td>
- <td align="center"><translate>Missing amount</translate></td>
+ <td align="center">[%- 'Missing amount' | $T8 %]</td>
<td align="center">[% LxERP.format_amount(paid_missing, 2) | html %]</td>
</tr>