Revision 05c6840d
Von Moritz Bunkus vor fast 14 Jahren hinzugefügt
SL/AccTransCorrections.pm | ||
---|---|---|
1 | 1 |
package AccTransCorrections; |
2 | 2 |
|
3 |
use utf8; |
|
3 | 4 |
use strict; |
4 | 5 |
|
5 | 6 |
use List::Util qw(first); |
... | ... | |
129 | 130 |
delete $entry->{chartlink}; |
130 | 131 |
} |
131 | 132 |
|
132 |
# Verkn?pfungen zwischen Steuerschl?sseln und zum Zeitpunkt der Transaktion
|
|
133 |
# g?ltigen Steuers?tze
|
|
133 |
# Verknüpfungen zwischen Steuerschlüsseln und zum Zeitpunkt der Transaktion
|
|
134 |
# gültigen Steuersätze
|
|
134 | 135 |
my %all_taxes = $self->{taxkeys}->get_full_tax_info('transdate' => $transaction->[0]->{transdate}); |
135 | 136 |
|
136 | 137 |
my ($trans_type, $previous_non_tax_entry); |
... | ... | |
184 | 185 |
} |
185 | 186 |
} |
186 | 187 |
|
187 |
# Alle Eintr?ge entfernen, die die Gegenkonten zu Zahlungsein- und
|
|
188 |
# -ausg?ngen darstellen.
|
|
188 |
# Alle Einträge entfernen, die die Gegenkonten zu Zahlungsein- und
|
|
189 |
# -ausgängen darstellen.
|
|
189 | 190 |
foreach my $payment (@{ $data->{payments} }) { |
190 | 191 |
my $idx = 0 < $payment->{amount} ? 'debit' : 'credit'; |
191 | 192 |
|
... | ... | |
253 | 254 |
} |
254 | 255 |
|
255 | 256 |
# Problemfall: Verkaufsrechnungen, bei denen Buchungen auf Warenbestandskonten |
256 |
# mit Steuerschl?ssel != 0 durchgef?hrt wurden. Richtig w?re, dass alle
|
|
257 |
# Steuerschl?ssel f?r solche Warenbestandsbuchungen 0 sind.
|
|
257 |
# mit Steuerschlüssel != 0 durchgeführt wurden. Richtig wäre, dass alle
|
|
258 |
# Steuerschlüssel für solche Warenbestandsbuchungen 0 sind.
|
|
258 | 259 |
sub _check_trans_invoices_inventory_with_taxkeys { |
259 | 260 |
$main::lxdebug->enter_sub(); |
260 | 261 |
|
... | ... | |
289 | 290 |
} |
290 | 291 |
|
291 | 292 |
# Problemfall: Verkaufsrechnungen, bei denen Steuern verbucht wurden, obwohl |
292 |
# kein Steuerschl?ssel eingetragen ist.
|
|
293 |
# kein Steuerschlüssel eingetragen ist.
|
|
293 | 294 |
sub _check_missing_taxkeys_in_invoices { |
294 | 295 |
$::lxdebug->enter_sub; |
295 | 296 |
|
... | ... | |
331 | 332 |
return $found_broken; |
332 | 333 |
} |
333 | 334 |
|
334 |
# Problemfall: Kreditorenbuchungen, bei denen mit Umsatzsteuerschl?sseln
|
|
335 |
# gebucht wurde und Debitorenbuchungen, bei denen mit Vorsteuerschl?sseln
|
|
335 |
# Problemfall: Kreditorenbuchungen, bei denen mit Umsatzsteuerschlüsseln
|
|
336 |
# gebucht wurde und Debitorenbuchungen, bei denen mit Vorsteuerschlüsseln
|
|
336 | 337 |
# gebucht wurde. |
337 | 338 |
sub _check_trans_ap_ar_wrong_taxkeys { |
338 | 339 |
$main::lxdebug->enter_sub(); |
... | ... | |
360 | 361 |
} |
361 | 362 |
|
362 | 363 |
# Problemfall: Splitbuchungen, die mehrere Haben- und Sollkonten ansprechen. |
363 |
# Aber nur f?r Debitoren- und Kreditorenbuchungen, weil das bei Einkaufs- und
|
|
364 |
# Verkaufsrechnungen hingegen v?llig normal ist.
|
|
364 |
# Aber nur für Debitoren- und Kreditorenbuchungen, weil das bei Einkaufs- und
|
|
365 |
# Verkaufsrechnungen hingegen völlig normal ist.
|
|
365 | 366 |
sub _check_trans_split_multiple_credit_and_debit { |
366 | 367 |
$main::lxdebug->enter_sub(); |
367 | 368 |
|
... | ... | |
385 | 386 |
} |
386 | 387 |
|
387 | 388 |
# Problemfall: Buchungen, bei denen Steuersummen nicht mit den Summen |
388 |
# ?bereinstimmen, die nach ausgew?hltem Steuerschl?ssel h?tten auftreten m?ssen.
|
|
389 |
# übereinstimmen, die nach ausgewähltem Steuerschlüssel hätten auftreten müssen.
|
|
389 | 390 |
sub _check_trans_wrong_taxkeys { |
390 | 391 |
$main::lxdebug->enter_sub(); |
391 | 392 |
|
... | ... | |
510 | 511 |
return $retval; |
511 | 512 |
} |
512 | 513 |
|
513 |
# Inaktiver Code f?r das Erraten m?glicher Verteilungen von
|
|
514 |
# Steuerschl?sseln. Deaktiviert, weil er exponentiell Zeit
|
|
515 |
# ben?tigt.
|
|
514 |
# Inaktiver Code für das Erraten möglicher Verteilungen von
|
|
515 |
# Steuerschlüsseln. Deaktiviert, weil er exponentiell Zeit
|
|
516 |
# benötigt.
|
|
516 | 517 |
|
517 | 518 |
# if (abs($expected_tax - $data{$side}->{tax_sum}) >= 0.02) { |
518 | 519 |
# my @potential_taxkeys = $trans_type eq 'AP' ? (0, 8, 9) : (0, 1, 2, 3); |
519 | 520 |
|
520 | 521 |
# $main::lxdebug->dump(0, "pota", \@potential_taxkeys); |
521 | 522 |
|
522 |
# # ?ber alle Kombinationen aus Buchungss?tzen und potenziellen Steuerschl?sseln
|
|
523 |
# # Über alle Kombinationen aus Buchungssätzen und potenziellen Steuerschlüsseln
|
|
523 | 524 |
# # iterieren und jeweils die Summe ermitteln. |
524 | 525 |
# my $num_entries = scalar @{ $data{$side}->{entries} }; |
525 | 526 |
# my @taxkey_indices = (0) x $num_entries; |
... | ... | |
533 | 534 |
# while ($num_entries == scalar @taxkey_indices) { |
534 | 535 |
# my @tax_cache = (); |
535 | 536 |
|
536 |
# # Berechnen der Steuersumme f?r die aktuell angenommenen Steuerschl?ssel.
|
|
537 |
# # Berechnen der Steuersumme für die aktuell angenommenen Steuerschlüssel.
|
|
537 | 538 |
# my $tax_sum = 0; |
538 | 539 |
# foreach my $i (0 .. $num_entries - 1) { |
539 | 540 |
# my $taxkey = $potential_taxkeys[$taxkey_indices[$i]]; |
... | ... | |
543 | 544 |
# $tax_sum += $tax_cache[$i]; |
544 | 545 |
# } |
545 | 546 |
|
546 |
# # Entspricht die Steuersumme mit den aktuell angenommenen Steuerschl?sseln
|
|
547 |
# # Entspricht die Steuersumme mit den aktuell angenommenen Steuerschlüsseln
|
|
547 | 548 |
# # der verbuchten Steuersumme? Wenn ja, dann ist das eine potenzielle |
548 |
# # L?sung.
|
|
549 |
# # Lösung.
|
|
549 | 550 |
# if (abs($tax_sum - $data{$side}->{tax_sum}) < 0.02) { |
550 | 551 |
# push @solutions, { |
551 | 552 |
# 'taxkeys' => [ @potential_taxkeys[@taxkey_indices] ], |
... | ... | |
553 | 554 |
# } |
554 | 555 |
# } |
555 | 556 |
|
556 |
# # Weiterz?hlen der Steuerschl?sselindices zum Interieren ?ber
|
|
557 |
# # alle m?glichen Kombinationen.
|
|
557 |
# # Weiterzählen der Steuerschlüsselindices zum Interieren über
|
|
558 |
# # alle möglichen Kombinationen.
|
|
558 | 559 |
# my $i = 0; |
559 | 560 |
# while (1) { |
560 | 561 |
# $taxkey_indices[$i]++; |
SL/CA.pm | ||
---|---|---|
34 | 34 |
# |
35 | 35 |
#====================================================================== |
36 | 36 |
|
37 |
use utf8; |
|
38 |
use strict; |
|
39 |
|
|
37 | 40 |
package CA; |
38 | 41 |
use Data::Dumper; |
39 | 42 |
use SL::DBUtils; |
40 | 43 |
|
41 |
use strict; |
|
42 |
|
|
43 | 44 |
sub all_accounts { |
44 | 45 |
$main::lxdebug->enter_sub(); |
45 | 46 |
|
... | ... | |
50 | 51 |
# connect to database |
51 | 52 |
my $dbh = $form->dbconnect($myconfig); |
52 | 53 |
|
53 |
# bug 1071 Warum sollte bei Erreichen eines neuen Jahres die Konten?bersicht nur noch die
|
|
54 |
# bug 1071 Warum sollte bei Erreichen eines neuen Jahres die Kontenübersicht nur noch die
|
|
54 | 55 |
# bereits bebuchten Konten anzeigen? |
55 | 56 |
# Folgende Erweiterung: |
56 |
# 1.) Gehe zur?ck bis zu dem Datum an dem die B?cher geschlossen wurden
|
|
57 |
# 2.) Falls die B?cher noch nie geschlossen wurden, gehe zur?ck bis zum Bearbeitungsstart
|
|
57 |
# 1.) Gehe zurück bis zu dem Datum an dem die Bücher geschlossen wurden
|
|
58 |
# 2.) Falls die Bücher noch nie geschlossen wurden, gehe zurück bis zum Bearbeitungsstart
|
|
58 | 59 |
# COALESCE((SELECT closedto FROM defaults),(SELECT itime FROM defaults)) |
59 | 60 |
|
60 | 61 |
my $closedto_sql = "COALESCE((SELECT closedto FROM defaults),(SELECT itime FROM defaults))"; |
61 | 62 |
|
62 |
if ($form->{method} eq "cash") { # E?R
|
|
63 |
if ($form->{method} eq "cash") { # EÜR
|
|
63 | 64 |
$acc_cash_where = qq| AND (a.trans_id IN (SELECT id FROM ar WHERE datepaid>= $closedto_sql |
64 | 65 |
UNION SELECT id FROM ap WHERE datepaid>= $closedto_sql |
65 | 66 |
UNION SELECT id FROM gl WHERE transdate>= $closedto_sql |
... | ... | |
284 | 285 |
$query = |
285 | 286 |
qq|SELECT a.id, a.reference, a.description, ac.transdate, ac.chart_id, | . |
286 | 287 |
qq| $false AS invoice, ac.amount, 'gl' as module, | . |
287 |
qq?(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo ? .
|
|
288 |
qq§(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo § .
|
|
288 | 289 |
qq|FROM acc_trans ac, gl a | . |
289 | 290 |
$dpt_join . |
290 | 291 |
qq|WHERE | . $where . $dpt_where . $project . |
... | ... | |
296 | 297 |
|
297 | 298 |
qq|SELECT a.id, a.invnumber, c.name, ac.transdate, ac.chart_id, | . |
298 | 299 |
qq| a.invoice, ac.amount, 'ar' as module, | . |
299 |
qq?(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo ? .
|
|
300 |
qq§(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo § .
|
|
300 | 301 |
qq|FROM acc_trans ac, customer c, ar a | . |
301 | 302 |
$dpt_join . |
302 | 303 |
qq|WHERE | . $where . $dpt_where . $project . |
... | ... | |
309 | 310 |
|
310 | 311 |
qq|SELECT a.id, a.invnumber, v.name, ac.transdate, ac.chart_id, | . |
311 | 312 |
qq| a.invoice, ac.amount, 'ap' as module, | . |
312 |
qq?(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo ? .
|
|
313 |
qq§(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo, ac.source || ' ' || ac.memo AS memo § .
|
|
313 | 314 |
qq|FROM acc_trans ac, vendor v, ap a | . |
314 | 315 |
$dpt_join . |
315 | 316 |
qq|WHERE | . $where . $dpt_where . $project . |
... | ... | |
345 | 346 |
|
346 | 347 |
qq|SELECT a.id, a.invnumber, c.name, a.transdate, | . |
347 | 348 |
qq| a.invoice, ac.qty * ac.sellprice AS sellprice, 'ar' as module, | . |
348 |
qq?(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo ? .
|
|
349 |
qq§(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo § .
|
|
349 | 350 |
qq|FROM ar a | . |
350 | 351 |
qq|JOIN invoice ac ON (ac.trans_id = a.id) | . |
351 | 352 |
qq|JOIN parts p ON (ac.parts_id = p.id) | . |
... | ... | |
360 | 361 |
|
361 | 362 |
qq|SELECT a.id, a.invnumber, v.name, a.transdate, | . |
362 | 363 |
qq| a.invoice, ac.qty * ac.sellprice AS sellprice, 'ap' as module, | . |
363 |
qq?(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo ? .
|
|
364 |
qq§(SELECT accno||'--'||rate FROM tax LEFT JOIN chart ON (tax.chart_id=chart.id) WHERE tax.id = (SELECT tax_id FROM taxkeys WHERE taxkey_id = ac.taxkey AND taxkeys.startdate <= ac.transdate ORDER BY taxkeys.startdate DESC LIMIT 1)) AS taxinfo § .
|
|
364 | 365 |
qq|FROM ap a | . |
365 | 366 |
qq|JOIN invoice ac ON (ac.trans_id = a.id) | . |
366 | 367 |
qq|JOIN parts p ON (ac.parts_id = p.id) | . |
SL/Common.pm | ||
---|---|---|
8 | 8 |
|
9 | 9 |
package Common; |
10 | 10 |
|
11 |
use utf8; |
|
12 |
use strict; |
|
13 |
|
|
11 | 14 |
use Time::HiRes qw(gettimeofday); |
12 | 15 |
use Data::Dumper; |
13 | 16 |
|
... | ... | |
15 | 18 |
|
16 | 19 |
use vars qw(@db_encodings %db_encoding_to_charset %charset_to_db_encoding); |
17 | 20 |
|
18 |
use strict; |
|
19 |
|
|
20 | 21 |
@db_encodings = ( |
21 | 22 |
{ "label" => "ASCII", "dbencoding" => "SQL_ASCII", "charset" => "ASCII" }, |
22 | 23 |
{ "label" => "UTF-8 Unicode", "dbencoding" => "UNICODE", "charset" => "UTF-8" }, |
... | ... | |
286 | 287 |
|
287 | 288 |
my $query = |
288 | 289 |
qq!SELECT id, name, customernumber, (street || ', ' || zipcode || city) AS address FROM customer ! . |
289 |
qq!WHERE $filter business_id = (SELECT id FROM business WHERE description = 'H?ndler') ! .
|
|
290 |
qq!WHERE $filter business_id = (SELECT id FROM business WHERE description = ?') ! .
|
|
290 | 291 |
qq!ORDER BY $order_by $order_dir!; |
292 |
push @filter_values, $::locale->{iconv_utf8}->convert('Händler'); |
|
291 | 293 |
my $sth = $dbh->prepare($query); |
292 | 294 |
$sth->execute(@filter_values) || |
293 | 295 |
$form->dberror($query . " (" . join(", ", @filter_values) . ")"); |
... | ... | |
373 | 375 |
my $base_path = substr($ENV{'SCRIPT_NAME'}, 1); |
374 | 376 |
$base_path =~ s|[^/]+$||; |
375 | 377 |
$base_path =~ s|/$||; |
376 |
# wo kommt der wert f?r dir her? es wird doch gar nichts ?bergeben? fix f?r strict my $dir jb 21.2.
|
|
378 |
# wo kommt der wert für dir her? es wird doch gar nichts übergeben? fix für strict my $dir jb 21.2.
|
|
377 | 379 |
if (opendir my $dir, $path) { |
378 | 380 |
foreach my $file (sort { lc $a cmp lc $b } readdir $dir) { |
379 | 381 |
next if (($file eq '.') || ($file eq '..')); |
SL/DATEV.pm | ||
---|---|---|
26 | 26 |
|
27 | 27 |
package DATEV; |
28 | 28 |
|
29 |
use List::Util qw(max); |
|
29 |
use utf8; |
|
30 |
use strict; |
|
30 | 31 |
|
31 | 32 |
use SL::DBUtils; |
32 | 33 |
use SL::DATEV::KNEFile; |
... | ... | |
34 | 35 |
|
35 | 36 |
use Data::Dumper; |
36 | 37 |
use File::Path; |
38 |
use List::Util qw(max); |
|
37 | 39 |
use Time::HiRes qw(gettimeofday); |
38 | 40 |
|
39 |
use strict; |
|
40 |
|
|
41 | 41 |
sub _get_export_path { |
42 | 42 |
$main::lxdebug->enter_sub(); |
43 | 43 |
|
... | ... | |
776 | 776 |
my $taxkey = 0; |
777 | 777 |
my $charttax = 0; |
778 | 778 |
my ($haben, $soll); |
779 |
my $iconv = $main::locale->{iconv_iso8859};
|
|
780 |
my %umlaute = ($iconv->convert('?') => 'ae',
|
|
781 |
$iconv->convert('?') => 'oe',
|
|
782 |
$iconv->convert('?') => 'ue',
|
|
783 |
$iconv->convert('?') => 'Ae',
|
|
784 |
$iconv->convert('?') => 'Oe',
|
|
785 |
$iconv->convert('?') => 'Ue',
|
|
786 |
$iconv->convert('?') => 'sz');
|
|
779 |
my $iconv = $::locale->{iconv_utf8};
|
|
780 |
my %umlaute = ($iconv->convert('ä') => 'ae',
|
|
781 |
$iconv->convert('ö') => 'oe',
|
|
782 |
$iconv->convert('ü') => 'ue',
|
|
783 |
$iconv->convert('Ä') => 'Ae',
|
|
784 |
$iconv->convert('Ö') => 'Oe',
|
|
785 |
$iconv->convert('Ü') => 'Ue',
|
|
786 |
$iconv->convert('ß') => 'sz');
|
|
787 | 787 |
for (my $i = 0; $i < $trans_lines; $i++) { |
788 | 788 |
if ($trans_lines == 2) { |
789 | 789 |
if (abs($transaction->[$i]->{'amount'}) > abs($umsatz)) { |
SL/DB/Helpers/Mappings.pm | ||
---|---|---|
1 | 1 |
package SL::DB::Helpers::Mappings; |
2 | 2 |
|
3 |
use utf8; |
|
3 | 4 |
use strict; |
4 | 5 |
|
5 | 6 |
# these will not be managed as Rose::DB models, because they are not normalized, |
... | ... | |
181 | 182 |
|
182 | 183 |
=head1 AUTHOR |
183 | 184 |
|
184 |
Sven Sch?ling <s.schoeling@linet-services.de>
|
|
185 |
Sven Schöling <s.schoeling@linet-services.de>
|
|
185 | 186 |
|
186 | 187 |
=cut |
SL/DB/Order.pm | ||
---|---|---|
1 | 1 |
package SL::DB::Order; |
2 | 2 |
|
3 |
use utf8; |
|
3 | 4 |
use strict; |
4 | 5 |
|
5 | 6 |
use SL::RecordLinks; |
... | ... | |
98 | 99 |
|
99 | 100 |
=head1 AUTHOR |
100 | 101 |
|
101 |
Sven Sch?ling <s.schoeling@linet-services.de>
|
|
102 |
Sven Schöling <s.schoeling@linet-services.de>
|
|
102 | 103 |
|
103 | 104 |
=cut |
SL/Locale.pm | ||
---|---|---|
109 | 109 |
$self->{iconv_english} = SL::Iconv->new('ASCII', $db_charset); |
110 | 110 |
$self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', $db_charset); |
111 | 111 |
$self->{iconv_to_iso8859} = SL::Iconv->new($db_charset, 'ISO-8859-15'); |
112 |
$self->{iconv_utf8} = SL::Iconv->new('UTF-8', $db_charset); |
|
112 | 113 |
|
113 | 114 |
$self->_read_special_chars_file($country); |
114 | 115 |
|
SL/RecordLinks.pm | ||
---|---|---|
1 | 1 |
package RecordLinks; |
2 | 2 |
|
3 |
use utf8; |
|
4 |
use strict; |
|
5 |
|
|
3 | 6 |
use SL::Common; |
4 | 7 |
use SL::DBUtils; |
5 | 8 |
use Data::Dumper; |
6 | 9 |
use List::Util qw(reduce); |
7 | 10 |
|
8 |
use strict; |
|
9 |
|
|
10 | 11 |
sub create_links { |
11 | 12 |
$main::lxdebug->enter_sub(); |
12 | 13 |
|
... | ... | |
243 | 244 |
|
244 | 245 |
Transitive RecordLinks mit get_links_via. |
245 | 246 |
|
246 |
get_links_via erwartet den zus?tzlichen parameter via. via ist ein
|
|
247 |
hashref mit den jeweils optionalen Eintr?gen table und id, die sich
|
|
247 |
get_links_via erwartet den zusätzlichen parameter via. via ist ein
|
|
248 |
hashref mit den jeweils optionalen Einträgen table und id, die sich
|
|
248 | 249 |
genauso verhalten wie die from/to_table/id werte der get_links funktion. |
249 | 250 |
|
250 | 251 |
Alternativ kann via auch ein Array dieser Hashes sein: |
... | ... | |
267 | 268 |
], |
268 | 269 |
) |
269 | 270 |
|
270 |
Die Eintr?ge in einem via-Array werden exakt in dieser Reihenfolge
|
|
271 |
benutzt und sind nicht optional. Da obige Beispiel w?rde also die
|
|
272 |
Verkn?pfung:
|
|
271 |
Die Einträge in einem via-Array werden exakt in dieser Reihenfolge
|
|
272 |
benutzt und sind nicht optional. Da obige Beispiel würde also die
|
|
273 |
Verknüpfung:
|
|
273 | 274 |
|
274 | 275 |
oe:11 -> ar:12 -> is:13 -> do:14 |
275 | 276 |
|
SL/USTVA.pm | ||
---|---|---|
29 | 29 |
|
30 | 30 |
use SL::DBUtils; |
31 | 31 |
|
32 |
use utf8; |
|
32 | 33 |
use strict; |
33 | 34 |
|
34 | 35 |
my @tax_office_information = ( |
35 |
{ 'id' => 8, 'name' => 'Baden-W?rttemberg', 'taxbird_nr' => '0', 'elster_format' => 'FF/BBB/UUUUP', },
|
|
36 |
{ 'id' => 8, 'name' => 'Baden-Württemberg', 'taxbird_nr' => '0', 'elster_format' => 'FF/BBB/UUUUP', },
|
|
36 | 37 |
{ 'id' => 9, 'name' => 'Bayern', 'taxbird_nr' => '1', 'elster_format' => 'FFF/BBB/UUUUP', }, |
37 | 38 |
{ 'id' => 11, 'name' => 'Berlin', 'taxbird_nr' => '2', 'elster_format' => 'FF/BBB/UUUUP', }, |
38 | 39 |
{ 'id' => 12, 'name' => 'Brandenburg', 'taxbird_nr' => '3', 'elster_format' => 'FFF/BBB/UUUUP', }, |
... | ... | |
47 | 48 |
{ 'id' => 14, 'name' => 'Sachsen', 'taxbird_nr' => '12', 'elster_format' => 'FFF/BBB/UUUUP', }, |
48 | 49 |
{ 'id' => 15, 'name' => 'Sachsen-Anhalt', 'taxbird_nr' => '13', 'elster_format' => 'FFF/BBB/UUUUP', }, |
49 | 50 |
{ 'id' => 1, 'name' => 'Schleswig-Holstein', 'taxbird_nr' => '14', 'elster_format' => 'FF BBB UUUUP', }, |
50 |
{ 'id' => 16, 'name' => 'Th?ringen', 'taxbird_nr' => '15', 'elster_format' => 'FFF/BBB/UUUUP', },
|
|
51 |
{ 'id' => 16, 'name' => 'Thüringen', 'taxbird_nr' => '15', 'elster_format' => 'FFF/BBB/UUUUP', },
|
|
51 | 52 |
); |
52 | 53 |
|
53 | 54 |
sub new { |
... | ... | |
69 | 70 |
|
70 | 71 |
foreach (@tax_office_information) { |
71 | 72 |
my $entry = \%{ $_ }; |
72 |
$entry->{name} = $main::locale->{iconv_iso8859}->convert($entry->{name});
|
|
73 |
$entry->{name} = $::locale->{iconv_utf8}->convert($entry->{name});
|
|
73 | 74 |
push @{ $self->{tax_office_information} }, $entry; |
74 | 75 |
} |
75 | 76 |
} |
... | ... | |
282 | 283 |
|
283 | 284 |
# use SL::Form; |
284 | 285 |
|
285 |
# Referenz wird ?bergeben, hash of hash wird nicht
|
|
286 |
# in neues Hash kopiert, sondern direkt ?ber die Referenz ver?ndert
|
|
287 |
# Prototyp f?r diese Konstruktion
|
|
286 |
# Referenz wird übergeben, hash of hash wird nicht
|
|
287 |
# in neues Hash kopiert, sondern direkt über die Referenz verändert
|
|
288 |
# Prototyp für diese Konstruktion
|
|
288 | 289 |
|
289 | 290 |
my ($self, $land, $elsterFFFF, $elster_init) = @_; |
290 | 291 |
|
... | ... | |
302 | 303 |
var elsterBLAuswahl = document.verzeichnis.elsterland_new; |
303 | 304 |
var elsterFAAuswahl = document.verzeichnis.elsterFFFF_new; |
304 | 305 |
|
305 |
elsterFAAuswahl.options.length = 0; // dropdown aufr?umen
|
|
306 |
elsterFAAuswahl.options.length = 0; // dropdown aufräumen
|
|
306 | 307 |
|; |
307 | 308 |
|
308 | 309 |
foreach my $elster_land (sort keys %$elster_init) { |
... | ... | |
427 | 428 |
$main::lxdebug->enter_sub(); |
428 | 429 |
|
429 | 430 |
# noch nicht fertig |
430 |
# soll mal eine Erinnerungsfunktion f?r USTVA Abgaben werden, die automatisch
|
|
431 |
# den Termin der n?chsten USTVA anzeigt.
|
|
431 |
# soll mal eine Erinnerungsfunktion für USTVA Abgaben werden, die automatisch
|
|
432 |
# den Termin der nächsten USTVA anzeigt.
|
|
432 | 433 |
# |
433 | 434 |
# |
434 | 435 |
my ($today, $FA_dauerfrist, $FA_voranmeld) = @_; |
... | ... | |
522 | 523 |
|
523 | 524 |
#There is no table, read the table from sql/finanzamt.sql |
524 | 525 |
print qq|<p>Bitte warten, Tabelle $table wird einmalig in Datenbank: |
525 |
$myconfig->{dbname} als Benutzer: $myconfig->{dbuser} hinzugef?gt...</p>|;
|
|
526 |
$myconfig->{dbname} als Benutzer: $myconfig->{dbuser} hinzugefügt...</p>|;
|
|
526 | 527 |
process_query($form, $dbh, $filename) || $self->error(DBI->errstr); |
527 | 528 |
|
528 | 529 |
#execute second last call |
... | ... | |
741 | 742 |
} |
742 | 743 |
|
743 | 744 |
|
744 |
# Fixme: Wird auch noch f?r Oesterreich gebraucht,
|
|
745 |
# Fixme: Wird auch noch für Oesterreich gebraucht,
|
|
745 | 746 |
# weil kein eigenes Ausgabeformular |
746 |
# sotte aber aus der allgem?inen Steuerberechnung verschwinden
|
|
747 |
# sotte aber aus der allgeméinen Steuerberechnung verschwinden
|
|
747 | 748 |
# |
748 | 749 |
# Berechnung der USTVA Formularfelder laut Bogen 207 |
749 | 750 |
# |
... | ... | |
925 | 926 |
|
926 | 927 |
######################################### |
927 | 928 |
# Ausgaben und Gl Buchungen sind gleich |
928 |
# f?r Ist- und Soll-Versteuerung
|
|
929 |
# für Ist- und Soll-Versteuerung
|
|
929 | 930 |
######################################### |
930 | 931 |
$query .= qq| |
931 | 932 |
UNION -- alle Ausgaben AP erfassen |
bin/mozilla/am.pl | ||
---|---|---|
31 | 31 |
# |
32 | 32 |
#====================================================================== |
33 | 33 |
|
34 |
use utf8; |
|
35 |
|
|
34 | 36 |
use SL::Auth; |
35 | 37 |
use SL::AM; |
36 | 38 |
use SL::CA; |
... | ... | |
213 | 215 |
|
214 | 216 |
my $select_eur = q|<option value=""> |. $locale->text('None') .q|</option>\n|; |
215 | 217 |
my %eur = ( |
216 |
1 => "Umsatzerl?se",
|
|
217 |
2 => "sonstige Erl?se",
|
|
218 |
1 => "Umsatzerlöse",
|
|
219 |
2 => "sonstige Erlöse",
|
|
218 | 220 |
3 => "Privatanteile", |
219 |
4 => "Zinsertr?ge",
|
|
220 |
5 => "Ausserordentliche Ertr?ge",
|
|
221 |
4 => "Zinserträge",
|
|
222 |
5 => "Ausserordentliche Erträge",
|
|
221 | 223 |
6 => "Vereinnahmte Umsatzst.", |
222 | 224 |
7 => "Umsatzsteuererstattungen", |
223 |
8 => "Wareneing?nge",
|
|
224 |
9 => "L?hne und Geh?lter",
|
|
225 |
8 => "Wareneingänge",
|
|
226 |
9 => "Löhne und Gehälter",
|
|
225 | 227 |
10 => "Gesetzl. sozialer Aufw.", |
226 | 228 |
11 => "Mieten", |
227 | 229 |
12 => "Gas, Strom, Wasser", |
228 | 230 |
13 => "Instandhaltung", |
229 |
14 => "Steuern, Versich., Beitr?ge",
|
|
231 |
14 => "Steuern, Versich., Beiträge",
|
|
230 | 232 |
15 => "Kfz-Steuern", |
231 | 233 |
16 => "Kfz-Versicherungen", |
232 | 234 |
17 => "Sonst. Fahrzeugkosten", |
233 | 235 |
18 => "Werbe- und Reisekosten", |
234 | 236 |
19 => "Instandhaltung u. Werkzeuge", |
235 |
20 => "Fachzeitschriften, B?cher",
|
|
236 |
21 => "Miete f?r Einrichtungen",
|
|
237 |
20 => "Fachzeitschriften, Bücher",
|
|
238 |
21 => "Miete für Einrichtungen",
|
|
237 | 239 |
22 => "Rechts- und Beratungskosten", |
238 |
23 => "B?robedarf, Porto, Telefon",
|
|
240 |
23 => "Bürobedarf, Porto, Telefon",
|
|
239 | 241 |
24 => "Sonstige Aufwendungen", |
240 | 242 |
25 => "Abschreibungen auf Anlagever.", |
241 | 243 |
26 => "Abschreibungen auf GWG", |
... | ... | |
245 | 247 |
30 => "Ausserordentlicher Aufwand", |
246 | 248 |
31 => "Betriebliche Steuern"); |
247 | 249 |
foreach my $item (sort({ $a <=> $b } keys(%eur))) { |
248 |
my $text = H(SL::Iconv::convert("ISO-8859-15", $main::dbcharset, $eur{$item}));
|
|
250 |
my $text = H($::locale->{iconv_utf8}->convert($eur{$item}));
|
|
249 | 251 |
if ($item == $form->{pos_eur}) { |
250 | 252 |
$select_eur .= qq|<option value=$item selected>|. sprintf("%.2d", $item) .qq|. $text</option>\n|; |
251 | 253 |
} else { |
... | ... | |
257 | 259 |
my $select_bwa = q|<option value=""> |. $locale->text('None') .q|</option>\n|; |
258 | 260 |
|
259 | 261 |
my %bwapos = ( |
260 |
1 => 'Umsatzerl?se',
|
|
262 |
1 => 'Umsatzerlöse',
|
|
261 | 263 |
2 => 'Best.Verdg.FE/UE', |
262 | 264 |
3 => 'Aktiv.Eigenleistung', |
263 | 265 |
4 => 'Mat./Wareneinkauf', |
264 |
5 => 'So.betr.Erl?se',
|
|
266 |
5 => 'So.betr.Erlöse',
|
|
265 | 267 |
10 => 'Personalkosten', |
266 | 268 |
11 => 'Raumkosten', |
267 | 269 |
12 => 'Betriebl.Steuern', |
268 |
13 => 'Vers./Beitr?ge',
|
|
270 |
13 => 'Vers./Beiträge',
|
|
269 | 271 |
14 => 'Kfz.Kosten o.St.', |
270 | 272 |
15 => 'Werbe-Reisek.', |
271 | 273 |
16 => 'Kosten Warenabgabe', |
272 | 274 |
17 => 'Abschreibungen', |
273 | 275 |
18 => 'Rep./instandhlt.', |
274 |
19 => '?brige Steuern',
|
|
276 |
19 => 'Übrige Steuern',
|
|
275 | 277 |
20 => 'Sonst.Kosten', |
276 | 278 |
30 => 'Zinsauwand', |
277 | 279 |
31 => 'Sonst.neutr.Aufw.', |
278 |
32 => 'Zinsertr?ge',
|
|
280 |
32 => 'Zinserträge',
|
|
279 | 281 |
33 => 'Sonst.neutr.Ertrag', |
280 | 282 |
34 => 'Verr.kalk.Kosten', |
281 | 283 |
35 => 'Steuern Eink.u.Ertr.'); |
282 | 284 |
foreach my $item (sort({ $a <=> $b } keys %bwapos)) { |
283 |
my $text = H(SL::Iconv::convert("ISO-8859-15", $main::dbcharset, $bwapos{$item}));
|
|
285 |
my $text = H($::locale->{iconv_utf8}->convert($bwapos{$item}));
|
|
284 | 286 |
if ($item == $form->{pos_bwa}) { |
285 | 287 |
$select_bwa .= qq|<option value="$item" selected>|. sprintf("%.2d", $item) .qq|. $text\n|; |
286 | 288 |
} else { |
... | ... | |
289 | 291 |
|
290 | 292 |
} |
291 | 293 |
|
292 |
# Wieder hinzugef?gt zu evaluationszwecken (us) 09.03.2007
|
|
294 |
# Wieder hinzugefügt zu evaluationszwecken (us) 09.03.2007
|
|
293 | 295 |
my $select_bilanz = q|<option value=""> |. $locale->text('None') .q|</option>\n|; |
294 | 296 |
foreach my $item ((1, 2, 3, 4)) { |
295 | 297 |
if ($item == $form->{pos_bilanz}) { |
bin/mozilla/gl.pl | ||
---|---|---|
31 | 31 |
# |
32 | 32 |
#====================================================================== |
33 | 33 |
|
34 |
use utf8; |
|
35 |
use strict; |
|
36 |
|
|
34 | 37 |
use POSIX qw(strftime); |
35 | 38 |
use List::Util qw(sum); |
36 | 39 |
|
... | ... | |
44 | 47 |
require "bin/mozilla/drafts.pl"; |
45 | 48 |
require "bin/mozilla/reportgenerator.pl"; |
46 | 49 |
|
47 |
use strict; |
|
48 |
|
|
49 | 50 |
# this is for our long dates |
50 | 51 |
# $locale->text('January') |
51 | 52 |
# $locale->text('February') |
... | ... | |
817 | 818 |
my %charts = (); |
818 | 819 |
my $taxchart_init; |
819 | 820 |
foreach my $item (@{ $form->{ALL_CHARTS} }) { |
820 |
if ($item->{charttype} eq 'H'){ #falls ?berschrift
|
|
821 |
next; #?berspringen (Bug 1150)
|
|
821 |
if ($item->{charttype} eq 'H'){ #falls überschrift
|
|
822 |
next; #überspringen (Bug 1150)
|
|
822 | 823 |
} |
823 | 824 |
my $key = $item->{accno} . "--" . $item->{tax_id}; |
824 | 825 |
$taxchart_init = $item->{tax_id} unless (@chart_values); |
... | ... | |
1333 | 1334 |
print qq|<input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|">|; |
1334 | 1335 |
} |
1335 | 1336 |
|
1336 |
# L?schen und ?ndern von Buchungen nicht mehr m?glich (GoB) nur am selben Tag m?glich
|
|
1337 |
# Löschen und Ändern von Buchungen nicht mehr möglich (GoB) nur am selben Tag möglich
|
|
1337 | 1338 |
if (!$form->{locked} && $radieren) { |
1338 | 1339 |
print qq| |
1339 | 1340 |
<input class=submit type=submit name=action value="| . $locale->text('Post') . qq|" accesskey="b"> |
bin/mozilla/menuXML.pl | ||
---|---|---|
36 | 36 |
# 2007-10-14 - XMLified - Holger Will <holger@treebuilder.de> |
37 | 37 |
####################################################################### |
38 | 38 |
|
39 |
use utf8; |
|
40 |
|
|
39 | 41 |
use SL::Menu; |
40 | 42 |
|
41 | 43 |
use CGI::Carp qw(fatalsToBrowser); |
... | ... | |
62 | 64 |
. qq|<?xml version="1.0" encoding="${charset}"?> |
63 | 65 |
<?xml-stylesheet href="xslt/xulmenu.xsl" type="text/xsl"?> |
64 | 66 |
<!DOCTYPE doc [ |
65 |
<!ENTITY szlig "| . $::locale->{iconv_iso8859}->convert('?') . qq|">
|
|
66 |
<!ENTITY auml "| . $::locale->{iconv_iso8859}->convert('?') . qq|">
|
|
67 |
<!ENTITY ouml "| . $::locale->{iconv_iso8859}->convert('?') . qq|">
|
|
68 |
<!ENTITY uuml "| . $::locale->{iconv_iso8859}->convert('?') . qq|">
|
|
67 |
<!ENTITY szlig "| . $::locale->{iconv_utf8}->convert('ß') . qq|">
|
|
68 |
<!ENTITY auml "| . $::locale->{iconv_utf8}->convert('ä') . qq|">
|
|
69 |
<!ENTITY ouml "| . $::locale->{iconv_utf8}->convert('ö') . qq|">
|
|
70 |
<!ENTITY uuml "| . $::locale->{iconv_utf8}->convert('ü') . qq|">
|
|
69 | 71 |
]> |
70 | 72 |
|
71 | 73 |
<doc> |
bin/mozilla/menujs.pl | ||
---|---|---|
35 | 35 |
# 2004-12-14 - Holger Lindemann |
36 | 36 |
####################################################################### |
37 | 37 |
|
38 |
use utf8; |
|
39 |
use strict; |
|
40 |
|
|
38 | 41 |
use SL::Menu; |
39 | 42 |
use CGI::Carp qw(fatalsToBrowser); |
40 | 43 |
|
41 |
use strict; |
|
42 |
|
|
43 | 44 |
1; |
44 | 45 |
|
45 | 46 |
# end of main |
... | ... | |
415 | 416 |
} else { |
416 | 417 |
if ($menu->{$item}{module}) { |
417 | 418 |
|
418 |
#Untermen?punkte
|
|
419 |
#Untermenüpunkte
|
|
419 | 420 |
my $target = $menu->{$item}{target}; |
420 | 421 |
my $uri = $menu->menuitem_js(\%myconfig, \%$form, $item, $level); |
421 | 422 |
|
bin/mozilla/ustva.pl | ||
---|---|---|
23 | 23 |
# German Tax authority Module and later ELSTER Interface |
24 | 24 |
#====================================================================== |
25 | 25 |
|
26 |
use utf8; |
|
27 |
|
|
26 | 28 |
require "bin/mozilla/common.pl"; |
27 | 29 |
|
28 | 30 |
#use strict; |
... | ... | |
93 | 95 |
$ustva->get_config($userspath, 'finanzamt.ini'); |
94 | 96 |
|
95 | 97 |
# Hier Einlesen der user-config |
96 |
# steuernummer entfernt f?r prerelease
|
|
98 |
# steuernummer entfernt für prerelease
|
|
97 | 99 |
my @a = qw( |
98 | 100 |
signature name company address businessnumber |
99 | 101 |
tel fax email co_chief co_department |
... | ... | |
120 | 122 |
|
121 | 123 |
|
122 | 124 |
# Anpassungen der Variablennamen auf pre 2.1.1 Namen |
123 |
# kl?ren, ob $form->{company_street|_address} gesetzt sind
|
|
125 |
# klären, ob $form->{company_street|_address} gesetzt sind
|
|
124 | 126 |
if ($form->{address} ne '') { |
125 | 127 |
my $temp = $form->{address}; |
126 | 128 |
$temp =~ s/\n/<br \/>/; |
... | ... | |
302 | 304 |
$sel = ''; |
303 | 305 |
my $dfv = ''; |
304 | 306 |
|
305 |
# Offset f?r Dauerfristverl?ngerung
|
|
307 |
# Offset für Dauerfristverlängerung
|
|
306 | 308 |
$dfv = '100' if ($form->{FA_dauerfrist} eq '1'); |
307 | 309 |
|
308 | 310 |
SWITCH: { |
... | ... | |
386 | 388 |
my $yy = $form->{year} * 10000; |
387 | 389 |
$yymmdd = "$form->{year}$form->{month}$form->{day}" * 1; |
388 | 390 |
$sel = ''; |
389 |
my $dfv = ''; # Offset f?r Dauerfristverl?ngerung
|
|
391 |
my $dfv = ''; # Offset für Dauerfristverlängerung
|
|
390 | 392 |
$dfv = '100' if ($form->{FA_dauerfrist} eq '1'); |
391 | 393 |
|
392 | 394 |
SWITCH: { |
... | ... | |
672 | 674 |
}; |
673 | 675 |
} |
674 | 676 |
|
675 |
# Kontrollvariable f?r die Templates
|
|
677 |
# Kontrollvariable für die Templates
|
|
676 | 678 |
$form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0"; |
677 | 679 |
|
678 | 680 |
|
... | ... | |
788 | 790 |
$form->{endbold} = "}"; |
789 | 791 |
$form->{br} = '\\\\'; |
790 | 792 |
|
791 |
# Zahlenformatierung f?r Latex USTVA Formulare
|
|
793 |
# Zahlenformatierung für Latex USTVA Formulare
|
|
792 | 794 |
|
793 | 795 |
foreach my $number (@category_euro) { |
794 | 796 |
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', ''); |
... | ... | |
802 | 804 |
$form->{$number} =~ s/${decimal_comma}/~~/g; |
803 | 805 |
} |
804 | 806 |
|
805 |
} elsif ( $form->{format} eq 'html') { # Formatierungen f?r HTML Ausgabe
|
|
807 |
} elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
|
|
806 | 808 |
|
807 | 809 |
$form->{IN} = $form->{type} . '.html'; |
808 | 810 |
$form->{padding} = " "; |
... | ... | |
833 | 835 |
$file .= sprintf("%02d", $form->{year} % 100); |
834 | 836 |
#6. to 18. char = Elstersteuernummer |
835 | 837 |
#Beispiel: Steuernummer in Bayern |
836 |
#111/222/33334 ergibt f?r UStVA Jan 2004: U01049111022233334
|
|
838 |
#111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
|
|
837 | 839 |
$file .= $form->{elsterFFFF}; |
838 | 840 |
$file .= $form->{elstersteuernummer}; |
839 | 841 |
#file suffix |
... | ... | |
843 | 845 |
|
844 | 846 |
$form->{attachment_filename} = $file; |
845 | 847 |
|
846 |
# Zahlenformatierung f?r Winston
|
|
848 |
# Zahlenformatierung für Winston
|
|
847 | 849 |
|
848 | 850 |
my $temp_numberformat = $myconfig{numberformat}; |
849 | 851 |
|
... | ... | |
1013 | 1015 |
|
1014 | 1016 |
$form->{USTVA} = []; |
1015 | 1017 |
|
1016 |
if ( $form->{format} eq 'generic') { # Formatierungen f?r HTML Ausgabe
|
|
1018 |
if ( $form->{format} eq 'generic') { # Formatierungen für HTML Ausgabe
|
|
1017 | 1019 |
|
1018 | 1020 |
my $rec_ref = {}; |
1019 | 1021 |
for my $kennziffer (@category_cent, @category_euro) { |
... | ... | |
1123 | 1125 |
|
1124 | 1126 |
$ustva->get_coa($form, \%myconfig); |
1125 | 1127 |
|
1126 |
# h?? kann die weg?
|
|
1128 |
# hä? kann die weg?
|
|
1127 | 1129 |
my $steuernummer_new = ''; |
1128 | 1130 |
|
1129 |
# Variablen f?r das Template zur Verf?gung stellen
|
|
1131 |
# Variablen für das Template zur Verfügung stellen
|
|
1130 | 1132 |
my $template_ref = { |
1131 | 1133 |
select_tax_office => $select_tax_office, |
1132 | 1134 |
checked_accrual => $checked_accrual, |
... | ... | |
1164 | 1166 |
$ustva->get_config($userspath, 'finanzamt.ini') |
1165 | 1167 |
if ($form->{saved} eq $locale->text('saved')); |
1166 | 1168 |
|
1167 |
# Auf ?bergabefehler checken
|
|
1169 |
# Auf Übergabefehler checken
|
|
1168 | 1170 |
USTVA::info( $locale->text('Missing Tax Authoritys Preferences') . "\n" |
1169 | 1171 |
. $locale->text('USTVA-Hint: Tax Authoritys')) |
1170 | 1172 |
if ( $form->{elsterFFFF_new} eq 'Auswahl' |
... | ... | |
1173 | 1175 |
. $locale->text('USTVA-Hint: Method')) |
1174 | 1176 |
if ($form->{method} eq ''); |
1175 | 1177 |
|
1176 |
# Kl?ren, ob Variablen bereits bef?llt sind UND ob ver?derungen auf
|
|
1178 |
# Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
|
|
1177 | 1179 |
# der vorherigen Maske stattfanden: $change = 1(in der edit sub, |
1178 | 1180 |
# mittels get_config) |
1179 | 1181 |
|
... | ... | |
1186 | 1188 |
|
1187 | 1189 |
if ($change eq '1') { |
1188 | 1190 |
|
1189 |
# Daten ?ndern
|
|
1191 |
# Daten ändern
|
|
1190 | 1192 |
$elsterland = $form->{elsterland_new}; |
1191 | 1193 |
$elsterFFFF = $form->{elsterFFFF_new}; |
1192 | 1194 |
$form->{elsterland} = $elsterland; |
... | ... | |
1359 | 1361 |
FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel |
1360 | 1362 |
FA_71 FA_dauerfrist); |
1361 | 1363 |
|
1362 |
# Hier kommt dann die Plausibilit?tspr?fung der ELSTERSteuernummer
|
|
1364 |
# Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
|
|
1363 | 1365 |
if ($form->{elstersteuernummer} ne '000000000') { |
1364 | 1366 |
|
1365 | 1367 |
$form->{elster} = '1'; |
config/authentication.pl.default | ||
---|---|---|
1 | 1 |
#!/usr/bin/perl |
2 | 2 |
|
3 |
# Das Passwort f?r den Zugang zum Administrationsfrontend im Klartext.
|
|
4 |
# Kann nur in dieser Datei ge?ndert werden, nicht im Administrationsfrontend
|
|
3 |
# Das Passwort für den Zugang zum Administrationsfrontend im Klartext.
|
|
4 |
# Kann nur in dieser Datei geändert werden, nicht im Administrationsfrontend
|
|
5 | 5 |
# selber. |
6 | 6 |
$self->{admin_password} = 'admin'; |
7 | 7 |
|
... | ... | |
9 | 9 |
# Entweder 'DB' oder 'LDAP'. |
10 | 10 |
# |
11 | 11 |
# Wenn LDAP-Authentifizierung benutzt wird, dann kann der Benutzer sein |
12 |
# Passwort nicht ?ber Lx-Office ?ndern.
|
|
12 |
# Passwort nicht über Lx-Office ändern.
|
|
13 | 13 |
$self->{module} = 'DB'; |
14 | 14 |
|
15 | 15 |
# Verbindungsinformationen zur Datenbank mit den Benutzer- und |
16 |
# Gruppeninformationen. Wird auch dann ben?tigt, wenn gegen einen
|
|
17 |
# LDAP-Server authentifiziert wird, weil dieser nur zur Passwort?berpr?fung
|
|
16 |
# Gruppeninformationen. Wird auch dann benötigt, wenn gegen einen
|
|
17 |
# LDAP-Server authentifiziert wird, weil dieser nur zur Passwortüberprüfung
|
|
18 | 18 |
# benutzt wird. Der Rest der Benutzerdaten ist in der Datenbank hinterlegt. |
19 | 19 |
# |
20 |
# Ist 'module' = 'DB' dann wird diese Datenbank auch f?r die
|
|
21 |
# Passwort?berpr?fung benutzt.
|
|
20 |
# Ist 'module' = 'DB' dann wird diese Datenbank auch für die
|
|
21 |
# Passwortüberprüfung benutzt.
|
|
22 | 22 |
$self->{DB_config} = { |
23 | 23 |
'host' => 'localhost', |
24 | 24 |
'port' => 5432, |
... | ... | |
27 | 27 |
'password' => '', |
28 | 28 |
}; |
29 | 29 |
|
30 |
# Wird nur ben?tigt, wenn 'module' = 'LDAP' ist. An diesem LDAP-Server
|
|
31 |
# werden die Benutzerpassw?rter durch einen LDAP-Bind ?berpr?ft.
|
|
30 |
# Wird nur benötigt, wenn 'module' = 'LDAP' ist. An diesem LDAP-Server
|
|
31 |
# werden die Benutzerpasswörter durch einen LDAP-Bind überprüft.
|
|
32 | 32 |
# |
33 |
# Es m?ssen mindestens die Parameter host, attribute und base_dn
|
|
33 |
# Es müssen mindestens die Parameter host, attribute und base_dn
|
|
34 | 34 |
# angegeben werden. |
35 | 35 |
# |
36 |
# tls: Verschl?sselung per TLS erzwingen
|
|
37 |
# attribute: Das LDAP-Attribut, das den Loginnamen enth?lt
|
|
36 |
# tls: Verschlüsselung per TLS erzwingen
|
|
37 |
# attribute: Das LDAP-Attribut, das den Loginnamen enthält
|
|
38 | 38 |
# base_dn: Basis-DN, ab der der LDAP-Baum durchsucht wird |
39 | 39 |
# filter: Ein optionaler LDAP-Filter. Die Zeichenkette '<%login%>' wird |
40 | 40 |
# innerhalb des Filters durch den Loginnamen ersetzt. |
41 | 41 |
# bind_dn und bind_password: |
42 | 42 |
# Wenn zum Durchsuchen des LDAP-Baumes eine Anmeldung erforderlich |
43 |
# ist (z.B. beim ActiveDirectory), dann m?ssen diese beiden
|
|
43 |
# ist (z.B. beim ActiveDirectory), dann müssen diese beiden
|
|
44 | 44 |
# Parameter gesetzt sein. |
45 | 45 |
$self->{LDAP_config} = { |
46 | 46 |
'host' => 'localhost', |
... | ... | |
54 | 54 |
'bind_password' => undef, |
55 | 55 |
}; |
56 | 56 |
|
57 |
# Der Name des Cookies kann ge?ndert werden, sofern gew?nscht.
|
|
57 |
# Der Name des Cookies kann geändert werden, sofern gewünscht.
|
|
58 | 58 |
# $self->{cookie_name} = 'lx_office_erp_session_id'; |
59 | 59 |
|
60 |
# Die Zeitspanne, bis eine inaktive Session ung?ltig wird, kann
|
|
61 |
# hier ge?ndert werden. Der Standardwert ist acht Stunden.
|
|
60 |
# Die Zeitspanne, bis eine inaktive Session ungültig wird, kann
|
|
61 |
# hier geändert werden. Der Standardwert ist acht Stunden.
|
|
62 | 62 |
# Die Angabe ist in Minuten. |
63 | 63 |
# $self->{session_timeout} = 8 * 60; |
64 | 64 |
|
config/lx-erp.conf | ||
---|---|---|
20 | 20 |
# member file |
21 | 21 |
$memberfile = "users/members"; |
22 | 22 |
|
23 |
# Wenn Einnahmen-?berschussrechnung, dann auf 1 setzen
|
|
23 |
# Wenn Einnahmen-Überschussrechnung, dann auf 1 setzen
|
|
24 | 24 |
# Wenn Bilanzierung (z.B. GmbH), dann auf 0 setzen |
25 | 25 |
$eur = 1; |
26 | 26 |
|
... | ... | |
48 | 48 |
$webdav = 0; |
49 | 49 |
$lizenzen = 1; |
50 | 50 |
$vertreter = 0; |
51 |
$excel_templates = 0; # Minimalunterst?tzung f?r Excel-Druckvorlagen
|
|
51 |
$excel_templates = 0; # Minimalunterstützung für Excel-Druckvorlagen
|
|
52 | 52 |
|
53 |
# Zeige Felder f?r Mindesthaltbarkeitsdatum
|
|
53 |
# Zeige Felder für Mindesthaltbarkeitsdatum
|
|
54 | 54 |
$show_best_before = 0; |
55 | 55 |
|
56 | 56 |
## Support fuer OpenDocument-Vorlagen |
... | ... | |
77 | 77 |
$xvfb_bin = "/usr/bin/Xvfb"; |
78 | 78 |
|
79 | 79 |
# Das charset, in dem die Daten in der Datenbank abgelegt sind. |
80 |
$dbcharset = 'UTF-8'; # F?r UNICODE UTF-8
|
|
80 |
$dbcharset = 'UTF-8'; # Für UNICODE UTF-8
|
|
81 | 81 |
# $dbcharset = "ISO-8859-15"; |
82 | 82 |
|
83 | 83 |
|
... | ... | |
90 | 90 |
$latex_bin = 'pdflatex'; |
91 | 91 |
|
92 | 92 |
# Datenbankbackups werden mit dem externen Programm "pg_dump" erledigt. |
93 |
# Wenn es nicht im aktuellen Pfad vorhanden ist, so muss hier der vollst?ndige
|
|
93 |
# Wenn es nicht im aktuellen Pfad vorhanden ist, so muss hier der vollständige
|
|
94 | 94 |
# Pfad eingetragen werden. Wenn die Variable auf "DISABLED" gesetzt wird, |
95 |
# so wird der Men?punkt zum Backup von Datenbanken im Administrationsfrontend
|
|
95 |
# so wird der Menüpunkt zum Backup von Datenbanken im Administrationsfrontend
|
|
96 | 96 |
# nicht angeboten. |
97 |
# Das gleiche gilt analog f?r das Wiederherstellen mittels "pg_restore".
|
|
97 |
# Das gleiche gilt analog für das Wiederherstellen mittels "pg_restore".
|
|
98 | 98 |
$pg_dump_exe = "pg_dump"; |
99 | 99 |
$pg_restore_exe = "pg_restore"; |
100 | 100 |
|
101 | 101 |
# Rose::DB::Object Environment laden. |
102 |
# Die RDBO Klassen bieten f?r Addon Schreiber sehr einfache Interfaces zu den
|
|
102 |
# Die RDBO Klassen bieten für Addon Schreiber sehr einfache Interfaces zu den
|
|
103 | 103 |
# bestehenden Klassen, haben aber den Nachteil, dass der Start des Programms |
104 |
# etwa 2s mehr dauert. Damit f?llt die M?glichkeit Lx-Office ?ber CGI zu
|
|
104 |
# etwa 2s mehr dauert. Damit fällt die Möglichkeit Lx-Office über CGI zu
|
|
105 | 105 |
# betreiben weg. |
106 | 106 |
$use_rdbo = 1; |
107 | 107 |
|
... | ... | |
112 | 112 |
# LXDebug::DEBUG2 |
113 | 113 |
# LXDebug::QUERY - SQL Queries |
114 | 114 |
# LXDebug::TRACE - Tracing von Funktionsaufrufen |
115 |
# LXDebug::BACKTRACE_ON_ERROR - Vollst?ndiger Aufrufpfad, wenn $form->error() aufgerufen wird
|
|
115 |
# LXDebug::BACKTRACE_ON_ERROR - Vollständiger Aufrufpfad, wenn $form->error() aufgerufen wird
|
|
116 | 116 |
# LXDebug::REQUEST_TIMER - Timing von Requests loggen |
117 | 117 |
# LXDebug::WARN - warnings |
118 | 118 |
# LXDebug::ALL - alle Debugausgaben |
... | ... | |
123 | 123 |
# $LXDebug::global_level = LXDebug::TRACE | LXDebug::QUERY; |
124 | 124 |
$LXDebug::global_level = LXDebug->NONE; |
125 | 125 |
|
126 |
# ?berwachung der Inhalte von $form aktiviert oder nicht? Wenn ja,
|
|
127 |
# dann k?nnen einzelne Variablen mit
|
|
126 |
# Überwachung der Inhalte von $form aktiviert oder nicht? Wenn ja,
|
|
127 |
# dann können einzelne Variablen mit
|
|
128 | 128 |
# $form->{"Watchdog::<variablenname>"} = 1; |
129 |
# ?berwacht werden. Bedeutet aber auch einen Geschwindigkeitsverlust,
|
|
129 |
# überwacht werden. Bedeutet aber auch einen Geschwindigkeitsverlust,
|
|
130 | 130 |
# weshalb sie normalerweise deaktiviert ist. |
131 | 131 |
$LXDebug::watch_form = 0; |
132 | 132 |
|
133 | 133 |
# Zum debuggen von Latexausgaben. Wenn diese Option auf 1 gesetzt wird, werden |
134 |
# tempor?re Dateien, die bei der Erstellung von PDFs aus Latex erzeugt werden,
|
|
135 |
# nach Abschlu? der Erstellung oder im Fehlerfall nicht gel?scht, damit man sie
|
|
134 |
# temporäre Dateien, die bei der Erstellung von PDFs aus Latex erzeugt werden,
|
|
135 |
# nach Abschluß der Erstellung oder im Fehlerfall nicht gelöscht, damit man sie
|
|
136 | 136 |
# untersuchen kann. |
137 | 137 |
$::keep_temp_files = 0; |
138 | 138 |
|
config/lx-erp.conf.default | ||
---|---|---|
43 | 43 |
$lizenzen = 1; |
44 | 44 |
$vertreter = 0; |
45 | 45 |
|
46 |
# Zeige Felder f?r Mindesthaltbarkeitsdatum
|
|
46 |
# Zeige Felder für Mindesthaltbarkeitsdatum
|
|
47 | 47 |
$show_best_before = 0; |
48 | 48 |
|
49 | 49 |
## Support fuer OpenDocument-Vorlagen |
... | ... | |
70 | 70 |
$xvfb_bin = "/usr/bin/Xvfb"; |
71 | 71 |
|
72 | 72 |
# Das charset, in dem die Daten in der Datenbank abgelegt sind. |
73 |
$dbcharset = 'UTF-8'; # F?r UNICODE UTF-8
|
|
73 |
$dbcharset = 'UTF-8'; # Für UNICODE UTF-8
|
|
74 | 74 |
# $dbcharset = "ISO-8859-15"; |
75 | 75 |
|
76 | 76 |
|
... | ... | |
83 | 83 |
$latex_bin = 'pdflatex'; |
84 | 84 |
|
85 | 85 |
# Datenbankbackups werden mit dem externen Programm "pg_dump" erledigt. |
86 |
# Wenn es nicht im aktuellen Pfad vorhanden ist, so muss hier der vollst?ndige
|
|
86 |
# Wenn es nicht im aktuellen Pfad vorhanden ist, so muss hier der vollständige
|
|
87 | 87 |
# Pfad eingetragen werden. Wenn die Variable auf "DISABLED" gesetzt wird, |
88 |
# so wird der Men?punkt zum Backup von Datenbanken im Administrationsfrontend
|
|
88 |
# so wird der Menüpunkt zum Backup von Datenbanken im Administrationsfrontend
|
|
89 | 89 |
# nicht angeboten. |
90 |
# Das gleiche gilt analog f?r das Wiederherstellen mittels "pg_restore".
|
|
90 |
# Das gleiche gilt analog für das Wiederherstellen mittels "pg_restore".
|
|
91 | 91 |
$pg_dump_exe = "pg_dump"; |
92 | 92 |
$pg_restore_exe = "pg_restore"; |
93 | 93 |
|
... | ... | |
98 | 98 |
# LXDebug::DEBUG2 |
99 | 99 |
# LXDebug::QUERY - SQL Queries |
100 | 100 |
# LXDebug::TRACE - Tracing von Funktionsaufrufen |
101 |
# LXDebug::BACKTRACE_ON_ERROR - Vollst?ndiger Aufrufpfad, wenn $form->error() aufgerufen wird
|
|
101 |
# LXDebug::BACKTRACE_ON_ERROR - Vollständiger Aufrufpfad, wenn $form->error() aufgerufen wird
|
|
102 | 102 |
# LXDebug::REQUEST_TIMER - Timing von Requests loggen |
103 | 103 |
# LXDebug::WARN - warnings |
104 | 104 |
# LXDebug::ALL - alle Debugausgaben |
... | ... | |
109 | 109 |
# $LXDebug::global_level = LXDebug::TRACE | LXDebug::QUERY; |
110 | 110 |
$LXDebug::global_level = LXDebug::NONE; |
111 | 111 |
|
112 |
# ?berwachung der Inhalte von $form aktiviert oder nicht? Wenn ja,
|
|
113 |
# dann k?nnen einzelne Variablen mit
|
|
112 |
# Überwachung der Inhalte von $form aktiviert oder nicht? Wenn ja,
|
|
113 |
# dann können einzelne Variablen mit
|
|
114 | 114 |
# $form->{"Watchdog::<variablenname>"} = 1; |
115 |
# ?berwacht werden. Bedeutet aber auch einen Geschwindigkeitsverlust,
|
|
115 |
# überwacht werden. Bedeutet aber auch einen Geschwindigkeitsverlust,
|
|
116 | 116 |
# weshalb sie normalerweise deaktiviert ist. |
117 | 117 |
$LXDebug::watch_form = 0; |
118 | 118 |
|
119 | 119 |
# Zum debuggen von Latexausgaben. Wenn diese Option auf 1 gesetzt wird, werden |
120 |
# tempor?re Dateien, die bei der Erstellung von PDFs aus Latex erzeugt werden,
|
|
121 |
# nach Abschlu? der Erstellung oder im Fehlerfall nicht gel?scht, damit man sie
|
|
120 |
# temporäre Dateien, die bei der Erstellung von PDFs aus Latex erzeugt werden,
|
|
121 |
# nach Abschluß der Erstellung oder im Fehlerfall nicht gelöscht, damit man sie
|
|
122 | 122 |
# untersuchen kann. |
123 | 123 |
$::keep_temp_files = 0; |
124 | 124 |
|
css/lx-office-erp.css | ||
---|---|---|
123 | 123 |
} |
124 | 124 |
|
125 | 125 |
/* |
126 |
?berschriftsbalken
|
|
126 |
Überschriftsbalken
|
|
127 | 127 |
*/ |
128 | 128 |
.listtop { |
129 | 129 |
background-color: rgb(236,233,216); |
doc/INSTALL.fcgi | ||
---|---|---|
5 | 5 |
|
6 | 6 |
ist sie deutlich leichter zu lesen. |
7 | 7 |
|
8 |
=head1 FastCGI f?r Lx-Office
|
|
8 |
=head1 FastCGI für Lx-Office
|
|
9 | 9 |
|
10 | 10 |
=head2 Was ist FastCGI? |
11 | 11 |
|
12 | 12 |
Direkt aus L<http://de.wikipedia.org/wiki/FastCGI> kopiert: |
13 | 13 |
|
14 |
FastCGI ist ein Standard f?r die Einbindung externer Software zur Generierung
|
|
14 |
FastCGI ist ein Standard für die Einbindung externer Software zur Generierung
|
|
15 | 15 |
dynamischer Webseiten in einem Webserver. FastCGI ist vergleichbar zum Common |
16 | 16 |
Gateway Interface (CGI), wurde jedoch entwickelt, um dessen |
17 | 17 |
Performance-Probleme zu umgehen. |
... | ... | |
20 | 20 |
=head2 Warum FastCGI? |
21 | 21 |
|
22 | 22 |
Perl Programme (wie Lx-Office eines ist) werden nicht statisch kompiliert. |
23 |
Stattdessen werden die Quelldateien bei jedem Start ?bersetzt, was bei kurzen
|
|
24 |
Laufzeiten einen Gro?teil der Laufzeit ausmacht. W?hrend SQL Ledger einen
|
|
25 |
Gro?teil der Funktionalit?t in einzelne Module kapselt, um immer nur einen
|
|
26 |
kleinen Teil laden zu m?ssen, ist die Funktionalit?t von Lx-Office soweit
|
|
23 |
Stattdessen werden die Quelldateien bei jedem Start übersetzt, was bei kurzen
|
|
24 |
Laufzeiten einen Großteil der Laufzeit ausmacht. Während SQL Ledger einen
|
|
25 |
Großteil der Funktionalität in einzelne Module kapselt, um immer nur einen
|
|
26 |
kleinen Teil laden zu müssen, ist die Funktionalität von Lx-Office soweit
|
|
27 | 27 |
gewachsen, dass immer mehr Module auf den Rest des Programms zugreifen. |
28 |
Zus?tzlich benutzen wir umfangreiche Bibliotheken um Funktionalt?t nicht selber
|
|
29 |
entwickeln zu m?ssen, die zus?tzliche Ladezeit kosten. All dies f?hrt dazu dass
|
|
30 |
ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich l?nger dauert als
|
|
31 |
fr?her, und dass davon 90% f?r das Laden der Module verwendet wird.
|
|
28 |
Zusätzlich benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
|
|
29 |
entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies führt dazu dass
|
|
30 |
ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich länger dauert als
|
|
31 |
früher, und dass davon 90% für das Laden der Module verwendet wird.
|
|
32 | 32 |
|
33 | 33 |
Mit FastCGI werden nun die Module einmal geladen, und danach wird nur die |
34 |
eigentliche Programmlogik ausgef?hrt.
|
|
34 |
eigentliche Programmlogik ausgeführt.
|
|
35 | 35 |
|
36 | 36 |
=head2 Kombinationen aus Webservern und Plugin. |
37 | 37 |
|
... | ... | |
41 | 41 |
* Apache 2.2.11 (Ubuntu) und mod_fcgid: |
42 | 42 |
|
43 | 43 |
Als Perl Backend wird das Modul FCGI.pm verwendet. Vorsicht: FCGI 0.69 und |
44 |
h?her ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte
|
|
44 |
höher ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte
|
|
45 | 45 |
Eingaben von Lx-Office. Solange diese Probleme nicht behoben sind, muss auf die |
46 |
Vorg?ngerversion FCGI 0.68 ausgewichen werden.
|
|
46 |
Vorgängerversion FCGI 0.68 ausgewichen werden.
|
|
47 | 47 |
|
48 |
Mit cpan l?sst sie sich wie folgt installieren:
|
|
48 |
Mit cpan lässt sie sich wie folgt installieren:
|
|
49 | 49 |
|
50 | 50 |
force install M/MS/MSTROUT/FCGI-0.68.tar.gz |
51 | 51 |
|
... | ... | |
54 | 54 |
Bevor Sie versuchen eine Lx-Office Installation unter FCGI laufen zu lassen, |
55 | 55 |
empfliehlt es sich die Installation ersteinmal unter CGI aufzusetzen. FCGI |
56 | 56 |
macht es nicht einfach Fehler zu debuggen die beim ersten aufsetzen auftreten |
57 |
k?nnen. Sollte die Installation schon funktionieren, lesen Sie weiter.
|
|
57 |
können. Sollte die Installation schon funktionieren, lesen Sie weiter.
|
|
58 | 58 |
|
59 | 59 |
Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann unter |
60 | 60 |
Debian/Ubuntu z.B. mit folgendem Befehl geschehen: |
... | ... | |
65 | 65 |
|
66 | 66 |
a2enmod fcgid |
67 | 67 |
|
68 |
Die Konfiguration f?r die Verwendung von Lx-Office mit FastCGI erfolgt
|
|
68 |
Die Konfiguration für die Verwendung von Lx-Office mit FastCGI erfolgt
|
|
69 | 69 |
durch Anpassung der vorhandenen Alias- und Directory-Direktiven. Dabei |
70 | 70 |
wird zwischen dem Installationspfad von Lx-Office im Dateisystem |
71 | 71 |
("/path/to/lx-office-erp") und der URL unterschieden, unter der |
... | ... | |
89 | 89 |
Deny from All |
90 | 90 |
</DirectoryMatch> |
91 | 91 |
|
92 |
...und f?r mod_fcgid muss die erste Zeile ge?ndert werden in:
|
|
92 |
...und für mod_fcgid muss die erste Zeile geändert werden in:
|
|
93 | 93 |
|
94 | 94 |
AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi |
95 | 95 |
|
96 | 96 |
|
97 | 97 |
Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle Zugriffe |
98 | 98 |
auf die einzelnen Scripte werden auf diesen umgeleitet. Dadurch, dass |
99 |
zur Laufzeit ?fter mal Scripte neu geladen werden, gibt es hier kleine
|
|
100 |
Performance-Einbu?en. Trotzdem ist diese Variante einer globalen
|
|
99 |
zur Laufzeit öfter mal Scripte neu geladen werden, gibt es hier kleine
|
|
100 |
Performance-Einbußen. Trotzdem ist diese Variante einer globalen
|
|
101 | 101 |
Benutzung von "AddHandler fastcgi-script .pl" vorzuziehen. |
102 | 102 |
|
103 | 103 |
|
104 |
Es ist m?glich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
|
|
105 |
betreiben. Daf?r bleiben Directorydirektiven bleiben wie oben beschrieben, die
|
|
104 |
Es ist möglich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
|
|
105 |
betreiben. Dafür bleiben Directorydirektiven bleiben wie oben beschrieben, die
|
|
106 | 106 |
URLs werden aber umgeleitet: |
107 | 107 |
|
108 | 108 |
# Zugriff ohne FastCGI |
... | ... | |
118 | 118 |
Achtung: |
119 | 119 |
|
120 | 120 |
Die AddHandler Direktive vom Apache ist entgegen der Dokumentation |
121 |
anscheinend nicht lokal auf das Verzeichnis beschr?nkt sondern global im
|
|
121 |
anscheinend nicht lokal auf das Verzeichnis beschränkt sondern global im
|
|
122 | 122 |
vhost. |
123 | 123 |
|
124 | 124 |
=head2 Entwicklungsaspekte |
125 | 125 |
|
126 |
Wenn ?nderungen in der Konfiguration von Lx-Office gemacht werden, muss der
|
|
126 |
Wenn Änderungen in der Konfiguration von Lx-Office gemacht werden, muss der
|
|
127 | 127 |
Server neu gestartet werden. |
128 | 128 |
|
129 |
Bei der Entwicklung f?r FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
|
|
130 |
dass das Programm in einer Endlosschleife l?uft, m?ssen folgende Aspekte
|
|
129 |
Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
|
|
130 |
dass das Programm in einer Endlosschleife läuft, müssen folgende Aspekte
|
|
131 | 131 |
geachtet werden: |
132 | 132 |
|
133 | 133 |
=head3 Programmende und Ausnahmen: C<warn>, C<die>, C<exit>, C<carp>, C<confess> |
... | ... | |
139 | 139 |
Gleiche, mit ein paar Extraoptionen. C<warn> und C<exit> hingegen werden nicht |
140 | 140 |
abgefangen. C<warn> wird direkt nach STDERR, also in Server Log eine Nachricht |
141 | 141 |
schreiben (sofern in der Konfiguration nicht die Warnungen in das Lx-Office Log |
142 |
umgeleitet wurden), und C<exit> wird die Ausf?hrung beenden.
|
|
142 |
umgeleitet wurden), und C<exit> wird die Ausführung beenden.
|
|
143 | 143 |
|
144 | 144 |
Prinzipiell ist es kein Beinbruch, wenn sich der Prozess beendet, fcgi wird ihn |
145 | 145 |
sofort neu starten. Allerdings sollte das die Ausnahme sein. Quintessenz: Bitte |
... | ... | |
148 | 148 |
=head3 Globale Variablen |
149 | 149 |
|
150 | 150 |
Um zu vermeiden, dass Informationen von einem Request in einen anderen gelangen, |
151 |
m?ssen alle globalen Variablen vor einem Request sauber initialisiert werden.
|
|
151 |
müssen alle globalen Variablen vor einem Request sauber initialisiert werden.
|
|
152 | 152 |
Das ist besonders wichtig im C<$::cgi> und C<$::auth> Objekt, weil diese nicht |
153 |
gel?scht werden pro Instanz, sondern persistent gehalten werden.
|
|
153 |
gelöscht werden pro Instanz, sondern persistent gehalten werden.
|
|
154 | 154 |
|
155 | 155 |
In C<SL::Dispatcher> gibt es einen sauber abgetrennten Block der alle |
156 |
kanonischen globalen Variablen listet und erkl?rt. Bitte keine anderen
|
|
157 |
einf?hren ohne das sauber zu dokumentieren.
|
|
156 |
kanonischen globalen Variablen listet und erklärt. Bitte keine anderen
|
|
157 |
einführen ohne das sauber zu dokumentieren.
|
|
158 | 158 |
|
159 | 159 |
Datenbankverbindungen wird noch ein Guide verfasst werden, wie man sichergeht, |
160 | 160 |
dass man die richtige erwischt. |
... | ... | |
174 | 174 |
|
175 | 175 |
=head3 Encoding Awareness |
176 | 176 |
|
177 |
UTF-8 kodierte Installationen sind sehr anf?llig gegen fehlerhfate Encodings
|
|
177 |
UTF-8 kodierte Installationen sind sehr anfällig gegen fehlerhfate Encodings
|
|
178 | 178 |
unter FCGI. latin9 Installationen behandeln falsch kodierte Zeichen eher |
179 | 179 |
unwissend, und geben sie einfach weiter. UTF-8 verweigert bei fehlerhaften |
180 | 180 |
Programmpfaden kurzerhand aus ausliefern. Es wird noch daran gearbeitet alles |
doc/excel_templates.txt | ||
---|---|---|
5 | 5 |
1 Zusammenfassung |
6 | 6 |
2 Bedienung |
7 | 7 |
3 Exceltemplate Syntax |
8 |
4 Einschr?nkungen
|
|
8 |
4 Einschränkungen
|
|
9 | 9 |
|
10 | 10 |
|
11 | 11 |
|
... | ... | |
13 | 13 |
--------------- |
14 | 14 |
|
15 | 15 |
Dieses Dokument beschreibt den Mechanismus, mit dem Exceltemplates abgearbeitet |
16 |
werden, und die Einschr?nkungen die damit einhergehen.
|
|
16 |
werden, und die Einschränkungen die damit einhergehen.
|
|
17 | 17 |
|
18 | 18 |
|
19 | 19 |
|
... | ... | |
21 | 21 |
--------- |
22 | 22 |
|
23 | 23 |
Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert werden. Die |
24 |
Konfigurationsoption hei?t:
|
|
24 |
Konfigurationsoption heißt:
|
|
25 | 25 |
|
26 | 26 |
$excel_templates = 1; |
27 | 27 |
|
28 | 28 |
Eine Excelvorlage kann dann unter dem Namen einer beliebigen anderen Vorlage mit |
29 | 29 |
der Endung .xls gespeichert werden. In den normalen Verkaufsmasken taucht nun |
30 |
"Excel" als ausw?hlbares Format auf, und kann von da an bnutzt weren wie Latex
|
|
30 |
"Excel" als auswählbares Format auf, und kann von da an bnutzt weren wie Latex
|
|
31 | 31 |
oder OpenOffice Vorlagen. |
32 | 32 |
|
33 | 33 |
Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls eine |
... | ... | |
42 | 42 |
Einfache Syntax: <<varname>> |
43 | 43 |
|
44 | 44 |
Wobei "<<" und ">>" die Delimiter sind. Da Excel auf festen Breiten besteht, |
45 |
kann der Tag k?nstlich verl?ngert werden, indem weitere "<" oder ">" gegef?gt
|
|
45 |
kann der Tag künstlich verlängert werden, indem weitere "<" oder ">" gegefügt
|
|
46 | 46 |
werden. Der Tag muss nicht symmetrisch sein. |
47 | 47 |
|
48 | 48 |
Beispiel: <<<<<varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
49 | 49 |
|
50 |
Um die Limitierung der festen Breite zu reduzieren, k?nnen weitere Variablen in
|
|
50 |
Um die Limitierung der festen Breite zu reduzieren, können weitere Variablen in
|
|
51 | 51 |
einem Block interpoliert werden. Whitespace wird dazwishen dann erhalten. |
52 | 52 |
|
53 | 53 |
Beispiel: <<<<<varname1 varname2 varname3>>>>>>>>>>>>>>>>>>>>>>>>>> |
54 | 54 |
|
55 |
Die Variablen werden interpoliert, und linksb?ndig mit Leerzeichen auf die
|
|
56 |
gew?nschte L?nge aufgef?llt. Ist der String zu lang, werden ?berz?hlige Zeichen
|
|
55 |
Die Variablen werden interpoliert, und linksbündig mit Leerzeichen auf die
|
|
56 |
gewünschte Länge aufgefüllt. Ist der String zu lang, werden überzählige Zeichen
|
|
57 | 57 |
abgeschnitten. |
58 | 58 |
|
59 |
Es ist ausserdem m?glich Daten rechtsb?ndig darzustellen, wenn der Block mit
|
|
60 |
einem Leerzeichen anf?ngt.
|
|
59 |
Es ist ausserdem möglich Daten rechtsbündig darzustellen, wenn der Block mit
|
|
60 |
einem Leerzeichen anfängt.
|
|
61 | 61 |
|
62 | 62 |
Beispiel: <<<<<< varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
63 | 63 |
|
64 |
w?rde rechtsb?ndig triggern. Wenn bei rechtsb?ndiger Ausrichtung Text
|
|
64 |
würde rechtsbündig triggern. Wenn bei rechtsbündiger Ausrichtung Text
|
|
65 | 65 |
abgeschnitten werden muss, wird er vom linken Ende entfernt. |
66 | 66 |
|
67 | 67 |
|
68 | 68 |
|
69 |
Einschr?nkungen
|
|
69 |
Einschränkungen
|
|
70 | 70 |
--------------- |
71 | 71 |
|
72 |
Das Excelformat bis 2002 ist ein bin?res Format, und kann nicht mit vertretbarem
|
|
73 |
Aufwand editiert werden. Der Templatemechanismus beschr?nkt sich daher darauf,
|
|
72 |
Das Excelformat bis 2002 ist ein binäres Format, und kann nicht mit vertretbarem
|
|
73 |
Aufwand editiert werden. Der Templatemechanismus beschränkt sich daher darauf,
|
|
74 | 74 |
Textstellen _exakt_ durch einen anderen Text zu ersetzen. |
75 | 75 |
|
76 | 76 |
Aus dem gleichen Grund sind die Templatekonstrukte <% if %> und <% foreach %> |
locale/de/Num2text | ||
---|---|---|
36 | 36 |
2 => 'zwei', |
37 | 37 |
3 => 'drei', |
38 | 38 |
4 => 'vier', |
39 |
5 => 'f?nf',
|
|
39 |
5 => 'fünf',
|
|
40 | 40 |
6 => 'sechs', |
41 | 41 |
7 => 'sieben', |
42 | 42 |
8 => 'acht', |
43 | 43 |
9 => 'neun', |
44 | 44 |
10 => 'zehn', |
45 | 45 |
11 => 'elf', |
46 |
12 => 'zw?lf',
|
|
46 |
12 => 'zwölf',
|
|
47 | 47 |
13 => 'dreizehn', |
48 | 48 |
14 => 'vierzehn', |
49 |
15 => 'f?nfzehn',
|
|
49 |
15 => 'fünfzehn',
|
|
50 | 50 |
16 => 'sechzehn', |
51 | 51 |
17 => 'siebzehn', |
52 | 52 |
18 => 'achtzehn', |
... | ... | |
54 | 54 |
20 => 'zwanzig', |
55 | 55 |
30 => 'dreissig', |
56 | 56 |
40 => 'vierzig', |
57 |
50 => 'f?nfzig',
|
|
57 |
50 => 'fünfzig',
|
|
58 | 58 |
60 => 'sechzig', |
59 | 59 |
70 => 'siebzig', |
60 | 60 |
80 => 'achtzig', |
locale/de/all | ||
---|---|---|
1 | 1 |
#!/usr/bin/perl |
2 |
# -*- coding: iso-8859-15; -*-
|
|
3 |
# vim: fenc=ISO-8859-15
|
|
2 |
# -*- coding: utf-8; -*-
|
|
3 |
# vim: fenc=UTF-8
|
|
4 | 4 |
|
5 | 5 |
# These are all the texts to build the translations files. |
6 | 6 |
# The file has the form of 'english text' => 'foreign text', |
... | ... | |
26 | 26 |
'<%total%> -- Amount payable' => '<%total%> -- Noch zu bezahlender Betrag', |
27 | 27 |
'<%total_wo_skonto%> -- Amount payable less discount' => '<%total_wo_skonto%> -- Noch zu bezahlender Betrag abzüglich Skonto', |
28 | 28 |
'*/' => '*/', |
29 |
'---please select---' => '---bitte ausw?hlen---',
|
|
29 |
'---please select---' => '---bitte auswählen---',
|
|
30 | 30 |
'...after loggin in' => '...nach dem Anmelden', |
31 | 31 |
'...done' => '...fertig', |
32 | 32 |
'...on the TODO list' => '...auf der Aufgabenliste', |
... | ... | |
38 | 38 |
'A Buchungsgruppe consists of a descriptive name and the account numbers for the income and expense accounts for those four tax zones as well as the inventory account number.' => 'Eine Buchungsgruppe besteht aus einem deskriptiven Namen, den Erlös- und Aufwandskonten für diese vier Steuerzonen sowie aus einem Inventarkonto.', |
39 | 39 |
'A group named "Full Access" has been created.' => 'Eine Gruppe namens "Vollzugriff" wurde angelegt.', |
40 | 40 |
'A group with that name does already exist.' => 'Eine Gruppe mit diesem Namen gibt es bereits.', |
41 |
'A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.' => 'Die Bedienung von Lx-Office wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit m?glich ist, jeden Aspekt von Lx-Office auch ohne Javascript zu benutzen, empfehlen wir es. In einer zuk?nftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
|
|
41 |
'A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.' => 'Die Bedienung von Lx-Office wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit möglich ist, jeden Aspekt von Lx-Office auch ohne Javascript zu benutzen, empfehlen wir es. In einer zukünftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
|
|
42 | 42 |
'A temporary directory could not be created:' => 'Ein temporäres Verzeichnis konnte nicht erstellt werden:', |
43 |
'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'Eine tempor?re Datei konnte nicht angelegt werden. Bitte stellen Sie sicher, dass das Verzeichnis "#1" vom Webserver beschrieben werden darf.',
|
|
43 |
'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'Eine temporäre Datei konnte nicht angelegt werden. Bitte stellen Sie sicher, dass das Verzeichnis "#1" vom Webserver beschrieben werden darf.',
|
|
44 | 44 |
'A temporary file could not be created:' => 'Eine temporäre Datei konnte nicht erstellt werden:', |
45 | 45 |
'A unit with this name does already exist.' => 'Eine Einheit mit diesem Namen existiert bereits.', |
46 |
'A variable marked as \'editable\' can be changed in each quotation, order, invoice etc.' => 'Eine als \'editierbar\' markierte Variable kann in jedem Angebot, Auftrag, jeder Rechnung etc f?r jede Position ge?ndert werden.',
|
|
47 |
'ADDED' => 'Hinzugef?gt',
|
|
46 |
'A variable marked as \'editable\' can be changed in each quotation, order, invoice etc.' => 'Eine als \'editierbar\' markierte Variable kann in jedem Angebot, Auftrag, jeder Rechnung etc für jede Position geändert werden.',
|
|
47 |
'ADDED' => 'Hinzugefügt',
|
|
48 | 48 |
'AP' => 'Einkauf', |
49 | 49 |
'AP Aging' => 'Offene Verbindlichkeiten', |
50 | 50 |
'AP Transaction' => 'Kreditorenbuchung', |
... | ... | |
52 | 52 |
'AP Transaction Storno (one letter abbreviation)' => 'S', |
53 | 53 |
'AP Transaction with Storno (abbreviation)' => 'K(S)', |
54 | 54 |
'AP Transactions' => 'Kreditorenbuchungen', |
55 |
'AP transactions with sales taxkeys and/or AR transactions with input taxkeys' => 'Kreditorenbuchungen mit Umsatzsteuer-Steuerschl?sseln und/oder Debitorenbuchungen mit Vorsteuer-Steuerschl?sseln',
|
|
55 |
'AP transactions with sales taxkeys and/or AR transactions with input taxkeys' => 'Kreditorenbuchungen mit Umsatzsteuer-Steuerschlüsseln und/oder Debitorenbuchungen mit Vorsteuer-Steuerschlüsseln',
|
|
56 | 56 |
'AR' => 'Verkauf', |
57 | 57 |
'AR Aging' => 'Offene Forderungen', |
58 | 58 |
'AR Transaction' => 'Debitorenbuchung', |
... | ... | |
66 | 66 |
'Account Category C' => 'Kosten', |
67 | 67 |
'Account Category E' => 'Aufwandskonto', |
68 | 68 |
'Account Category G' => '?Gegenkonto?', |
69 |
'Account Category I' => 'Erl?skonto',
|
|
69 |
'Account Category I' => 'Erlöskonto',
|
|
70 | 70 |
'Account Category L' => 'Passiva/Mittelherkunft', |
71 | 71 |
'Account Category Q' => 'Passiva', |
72 | 72 |
'Account Description missing!' => 'Beschreibung fehlt!', |
... | ... | |
75 | 75 |
'Account Link AP_paid' => 'Verbindlichkeiten Zahlungsausgang', |
76 | 76 |
'Account Link AP_tax' => 'Verbindlichkeiten Steuer', |
77 | 77 |
'Account Link AR' => 'Verkauf', |
78 |
'Account Link AR_amount' => 'Forderungen Erl?skonto',
|
|
78 |
'Account Link AR_amount' => 'Forderungen Erlöskonto',
|
|
79 | 79 |
'Account Link AR_paid' => 'Forderungen Zahlungseingang', |
80 | 80 |
'Account Link AR_tax' => 'Forderungen Steuer', |
81 | 81 |
'Account Link CT_tax' => 'Kunde/Lieferant Steuer', |
82 | 82 |
'Account Link IC' => 'Inventar', |
83 | 83 |
'Account Link IC_cogs' => 'Warenliste Aufwandskonto', |
84 | 84 |
'Account Link IC_expense' => 'Dienstleistungen Aufwandskonto', |
85 |
'Account Link IC_income' => 'Dienstleistungen Erl?skonto',
|
|
86 |
'Account Link IC_sale' => 'Warenliste Erl?skonto',
|
|
85 |
'Account Link IC_income' => 'Dienstleistungen Erlöskonto',
|
|
86 |
'Account Link IC_sale' => 'Warenliste Erlöskonto',
|
|
87 | 87 |
'Account Link IC_taxpart' => 'Warenliste Steuer', |
88 | 88 |
'Account Link IC_taxservice' => 'Dienstleistungen Steuer', |
89 | 89 |
'Account Number' => 'Kontonummer', |
... | ... | |
92 | 92 |
'Account Nummer' => 'Kontonummer', |
93 | 93 |
'Account Type' => 'Kontoart', |
94 | 94 |
'Account Type missing!' => 'Kontoart fehlt!', |
95 |
'Account deleted!' => 'Konto gel?scht!',
|
|
95 |
'Account deleted!' => 'Konto gelöscht!',
|
|
96 | 96 |
'Account for fees' => 'Konto für Gebühren', |
97 | 97 |
'Account for interest' => 'Konto für Zinsen', |
98 | 98 |
'Account number' => 'Kontonummer', |
... | ... | |
124 | 124 |
'Add Follow-Up for #1' => 'Wiedervorlage für #1 erstellen', |
125 | 125 |
'Add General Ledger Transaction' => 'Dialogbuchen', |
126 | 126 |
'Add Group' => 'Warengruppe erfassen', |
127 |
'Add Language' => 'Sprache hinzuf?gen',
|
|
127 |
'Add Language' => 'Sprache hinzufügen',
|
|
128 | 128 |
'Add Lead' => 'Kundenquelle erfassen', |
129 | 129 |
'Add License' => 'Lizenz erfassen', |
130 | 130 |
'Add Part' => 'Ware erfassen', |
131 |
'Add Payment Terms' => 'Zahlungskonditionen hinzuf?gen', |
|
131 |
'Add Payment Terms' => 'Zahlungskonditionen hinzufügen', |
Auch abrufbar als: Unified diff
Dateiencodings auf UTF-8 geändert
Fix für Bug 1375.