From: Jan Büren Date: Fri, 12 Oct 2012 15:35:16 +0000 (+0200) Subject: Merge branch 'master' of vc.linet-services.de:public/lx-office-erp X-Git-Tag: release-3.0.0beta1~225 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/c42acfd52669057debdf6a3d4245492ef23384b7?hp=51323d9abf9834bee661fc17eb4a192182509c2f Merge branch 'master' of vc.linet-services.de:public/lx-office-erp --- diff --git a/SL/Auth.pm b/SL/Auth.pm index ed5c84543..52c2dc63d 100644 --- a/SL/Auth.pm +++ b/SL/Auth.pm @@ -194,7 +194,8 @@ sub authenticate { } sub punish_wrong_login { - sleep 5; + my $failed_login_penalty = ($::lx_office_conf{authentication} || {})->{failed_login_penalty}; + sleep $failed_login_penalty if $failed_login_penalty; } sub get_stored_password { diff --git a/SL/CT.pm b/SL/CT.pm index 0019e0601..de10623f2 100644 --- a/SL/CT.pm +++ b/SL/CT.pm @@ -368,21 +368,7 @@ sub save_customer { ); do_query( $form, $dbh, $query, @values ); - $query = undef; - my @columns = qw(cp_title cp_givenname cp_name cp_email cp_phone1 cp_phone2 cp_abteilung cp_fax - cp_mobile1 cp_mobile2 cp_satphone cp_satfax cp_project cp_privatphone cp_privatemail cp_birthday cp_gender - cp_street cp_zipcode cp_city); - @values = map { $_ eq 'cp_gender' ? ($form->{$_} eq 'f' ? 'f' : 'm') : $form->{$_} } @columns; - - if ( $form->{cp_id} ) { - $query = qq|UPDATE contacts SET | . join(', ', map { "${_} = ?" } @columns) . qq| WHERE cp_id = ?|; - push @values, $form->{cp_id}; - - } elsif ( $form->{cp_name} || $form->{cp_givenname} ) { - $query = qq|INSERT INTO contacts (| . join(', ', 'cp_cv_id', @columns) . qq|) VALUES (?, | . join(', ', ('?') x scalar(@columns)) . qq|)|; - unshift @values, $form->{id}; - } - do_query( $form, $dbh, $query, @values ) if ($query); + $form->{cp_id} = $self->_save_contact($form, $dbh); # add shipto $form->add_shipto( $dbh, $form->{id}, "CT" ); @@ -530,76 +516,7 @@ sub save_vendor { ); do_query($form, $dbh, $query, @values); - $query = undef; - if ( $form->{cp_id} ) { - $query = qq|UPDATE contacts SET | . - qq|cp_title = ?, | . - qq|cp_givenname = ?, | . - qq|cp_name = ?, | . - qq|cp_email = ?, | . - qq|cp_phone1 = ?, | . - qq|cp_phone2 = ?, | . - qq|cp_abteilung = ?, | . - qq|cp_fax = ?, | . - qq|cp_mobile1 = ?, | . - qq|cp_mobile2 = ?, | . - qq|cp_satphone = ?, | . - qq|cp_satfax = ?, | . - qq|cp_project = ?, | . - qq|cp_privatphone = ?, | . - qq|cp_privatemail = ?, | . - qq|cp_birthday = ?, | . - qq|cp_gender = ? | . - qq|WHERE cp_id = ?|; - @values = ( - $form->{cp_title}, - $form->{cp_givenname}, - $form->{cp_name}, - $form->{cp_email}, - $form->{cp_phone1}, - $form->{cp_phone2}, - $form->{cp_abteilung}, - $form->{cp_fax}, - $form->{cp_mobile1}, - $form->{cp_mobile2}, - $form->{cp_satphone}, - $form->{cp_satfax}, - $form->{cp_project}, - $form->{cp_privatphone}, - $form->{cp_privatemail}, - $form->{cp_birthday}, - $form->{cp_gender} eq 'f' ? 'f' : 'm', - $form->{cp_id} - ); - } elsif ( $form->{cp_name} || $form->{cp_givenname} ) { - $query = - qq|INSERT INTO contacts ( cp_cv_id, cp_title, cp_givenname, | . - qq| cp_name, cp_email, cp_phone1, cp_phone2, cp_abteilung, cp_fax, cp_mobile1, | . - qq| cp_mobile2, cp_satphone, cp_satfax, cp_project, cp_privatphone, cp_privatemail, | . - qq| cp_birthday, cp_gender) | . - qq|VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|; - @values = ( - $form->{id}, - $form->{cp_title}, - $form->{cp_givenname}, - $form->{cp_name}, - $form->{cp_email}, - $form->{cp_phone1}, - $form->{cp_phone2}, - $form->{cp_abteilung}, - $form->{cp_fax}, - $form->{cp_mobile1}, - $form->{cp_mobile2}, - $form->{cp_satphone}, - $form->{cp_satfax}, - $form->{cp_project}, - $form->{cp_privatphone}, - $form->{cp_privatemail}, - $form->{cp_birthday}, - $form->{cp_gender} - ); - } - do_query($form, $dbh, $query, @values) if ($query); + $form->{cp_id} = $self->_save_contact($form, $dbh); # add shipto $form->add_shipto( $dbh, $form->{id}, "CT" ); @@ -627,6 +544,34 @@ sub save_vendor { return $rc; } +sub _save_contact { + my ($self, $form, $dbh) = @_; + + return undef unless $form->{cp_id} || $form->{cp_name} || $form->{cp_givenname}; + + my @columns = qw(cp_title cp_givenname cp_name cp_email cp_phone1 cp_phone2 cp_abteilung cp_fax + cp_mobile1 cp_mobile2 cp_satphone cp_satfax cp_project cp_privatphone cp_privatemail cp_birthday cp_gender + cp_street cp_zipcode cp_city); + my @values = map { $_ eq 'cp_gender' ? ($form->{$_} eq 'f' ? 'f' : 'm') : $form->{$_} } @columns; + + my ($query, $cp_id); + if ($form->{cp_id}) { + $query = qq|UPDATE contacts SET | . join(', ', map { "${_} = ?" } @columns) . qq| WHERE cp_id = ?|; + push @values, $form->{cp_id}; + $cp_id = $form->{cp_id}; + + } else { + ($cp_id) = selectrow_query($form, $dbh, qq|SELECT nextval('id')|); + + $query = qq|INSERT INTO contacts (| . join(', ', @columns, 'cp_cv_id', 'cp_id') . qq|) VALUES (| . join(', ', ('?') x (2 + scalar @columns)) . qq|)|; + push @values, $form->{id}, $cp_id; + } + + do_query($form, $dbh, $query, @values); + + return $cp_id; +} + sub delete { $main::lxdebug->enter_sub(); diff --git a/SL/DO.pm b/SL/DO.pm index c4303f442..4fbe8020a 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -66,13 +66,16 @@ sub transactions { dord.closed, dord.delivered, dord.shippingpoint, dord.shipvia, dord.transaction_description, pr.projectnumber AS globalprojectnumber, + dep.description AS department, e.name AS employee, sm.name AS salesman FROM delivery_orders dord LEFT JOIN $vc ct ON (dord.${vc}_id = ct.id) LEFT JOIN employee e ON (dord.employee_id = e.id) LEFT JOIN employee sm ON (dord.salesman_id = sm.id) - LEFT JOIN project pr ON (dord.globalproject_id = pr.id)|; + LEFT JOIN project pr ON (dord.globalproject_id = pr.id) + LEFT JOIN department dep ON (dord.department_id = dep.id) +|; push @where, ($form->{type} eq 'sales_delivery_order' ? '' : 'NOT ') . qq|COALESCE(dord.is_sales, FALSE)|; @@ -147,7 +150,8 @@ sub transactions { "employee" => "e.name", "salesman" => "sm.name", "shipvia" => "dord.shipvia", - "transaction_description" => "dord.transaction_description" + "transaction_description" => "dord.transaction_description", + "department" => "lower(dep.description)", ); my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC'; @@ -228,7 +232,7 @@ sub save { } my $project_id; - my $reqdate; + my $items_reqdate; $form->get_lists('price_factors' => 'ALL_PRICE_FACTORS'); my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} }; @@ -284,7 +288,7 @@ sub save { $price_factor = $price_factors{ $form->{"price_factor_id_$i"} } || 1; my $linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"} / $price_factor, 2); - $reqdate = ($form->{"reqdate_$i"}) ? $form->{"reqdate_$i"} : undef; + $items_reqdate = ($form->{"reqdate_$i"}) ? $form->{"reqdate_$i"} : undef; do_statement($form, $h_item_id, $q_item_id); my ($item_id) = $h_item_id->fetchrow_array(); @@ -294,7 +298,7 @@ sub save { $form->{"description_$i"}, $form->{"longdescription_$i"}, $form->{"qty_$i"}, $baseqty, $form->{"sellprice_$i"}, $form->{"discount_$i"} / 100, - $form->{"unit_$i"}, conv_date($reqdate), conv_i($form->{"project_id_$i"}), + $form->{"unit_$i"}, conv_date($items_reqdate), conv_i($form->{"project_id_$i"}), $form->{"serialnumber_$i"}, $form->{"ordnumber_$i"}, conv_date($form->{"transdate_$i"}), $form->{"cusordnumber_$i"}, @@ -327,6 +331,8 @@ sub save { $h_item_stock->finish(); + # reqdate is last items reqdate (?: old behaviour) if not already set + $form->{reqdate} ||= $items_reqdate; # save DO record $query = qq|UPDATE delivery_orders SET @@ -341,7 +347,7 @@ sub save { @values = ($form->{donumber}, $form->{ordnumber}, $form->{cusordnumber}, conv_date($form->{transdate}), conv_i($form->{vendor_id}), conv_i($form->{customer_id}), - conv_date($reqdate), $form->{shippingpoint}, $form->{shipvia}, + conv_date($form->{reqdate}), $form->{shippingpoint}, $form->{shipvia}, $form->{notes}, $form->{intnotes}, $form->{closed} ? 't' : 'f', $form->{delivered} ? "t" : "f", conv_i($form->{department_id}), conv_i($form->{language_id}), conv_i($form->{shipto_id}), @@ -573,9 +579,12 @@ sub retrieve { my $mode = !$params{ids} ? 'default' : ref $params{ids} eq 'ARRAY' ? 'multi' : 'single'; if ($mode eq 'default') { - $ref = selectfirst_hashref_query($form, $dbh, qq|SELECT current_date AS transdate, current_date AS reqdate|); + $ref = selectfirst_hashref_query($form, $dbh, qq|SELECT current_date AS transdate|); map { $form->{$_} = $ref->{$_} } keys %$ref; + # if reqdate is not set from oe-workflow, set it to transdate (which is current date) + $form->{reqdate} ||= $form->{transdate}; + # get last name used $form->lastname_used($dbh, $myconfig, $vc) unless $form->{"${vc}_id"}; diff --git a/SL/IS.pm b/SL/IS.pm index 82226ee52..266e05299 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -258,8 +258,7 @@ sub invoice_details { $subtotal_header = 0; } else { - push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} }, ""; - push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, ""; + push @{ $form->{TEMPLATE_ARRAYS}->{$_} }, "" for qw(discount_sub nodiscount_sub discount_sub_nofmt nodiscount_sub_nofmt); } if (!$form->{"discount_$i"}) { diff --git a/SL/OE.pm b/SL/OE.pm index bdff8cb6b..6648e2242 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -1218,8 +1218,7 @@ sub order_details { $subtotal_header = 0; } else { - push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} }, ""; - push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, ""; + push @{ $form->{TEMPLATE_ARRAYS}->{$_} }, "" for qw(discount_sub nodiscount_sub discount_sub_nofmt nodiscount_sub_nofmt); } if (!$form->{"discount_$i"}) { diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index 1bcf20985..1dc880ef9 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -453,6 +453,7 @@ sub search { $form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 1 }, + "departments" => "ALL_DEPARTMENTS", "$form->{vc}s" => "ALL_VC"); $form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ deleted => 0 ]); @@ -477,6 +478,7 @@ sub orders { my $locale = $main::locale; my $cgi = $::request->{cgi}; + $form->{department_id} = (split /--/, $form->{department})[-1]; ($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} }); report_generator_set_default_sort('transdate', 1); @@ -491,7 +493,7 @@ sub orders { ordnumber customernumber name employee salesman shipvia globalprojectnumber - transaction_description + transaction_description department open delivered ); @@ -525,9 +527,10 @@ sub orders { 'transaction_description' => { 'text' => $locale->text('Transaction description'), }, 'open' => { 'text' => $locale->text('Open'), }, 'delivered' => { 'text' => $locale->text('Delivered'), }, + 'department' => { 'text' => $locale->text('Department'), }, ); - foreach my $name (qw(id transdate donumber ordnumber name employee salesman shipvia transaction_description)) { + foreach my $name (qw(id transdate donumber ordnumber name employee salesman shipvia transaction_description department)) { my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir}; $column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir"; } diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 3324551f6..5edc385c2 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -1331,11 +1331,11 @@ sub generate_report { $row->{description}->{link} = $edit_link; foreach (qw(sellprice listprice lastcost)) { - $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{$_}, -2); + $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{$_}, 2); $row->{"linetotal$_"}{data} = $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{$_}, 2); } foreach ( @pricegroup_columns ) { - $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{"$_"}, -2); + $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{"$_"}, 2); }; diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 56162d543..b08e5dbe0 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -407,7 +407,9 @@ sub form_footer { my ($tax, $subtotal); $form->{taxaccounts_array} = [ split / /, $form->{taxaccounts} ]; + my $paymet_id = $::form->{payment_id}; IS->get_customer(\%myconfig, \%$form) if $form->{type} =~ /sales_(order|quotation)/; + $::form->{payment_id} = $paymet_id; if ( $form->{vc} eq 'customer' && !$form->{taxincluded_changed_by_user} ) { $form->{taxincluded} = defined($form->{taxincluded_checked}) ? $form->{taxincluded_checked} : $myconfig{taxincluded_checked}; @@ -519,7 +521,7 @@ sub update { map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(paid exchangerate); if (!$form->{"forex_$i"}) { #read exchangerate from input field (not hidden) $form->{exchangerate} = $form->{"exchangerate_$i"}; - } + } $form->{"forex_$i"} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{"datepaid_$i"}, 'buy'); $form->{"exchangerate_$i"} = $form->{"forex_$i"} if $form->{"forex_$i"}; } diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 51b3c77ca..9508f736f 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -477,7 +477,9 @@ sub form_footer { $TMPL_VAR{notes} = qq||; $TMPL_VAR{intnotes} = qq||; - IS->get_customer(\%myconfig, \%$form) if $form->{type} =~ /sales_(order|quotation)/; + my $paymet_id = $::form->{payment_id}; + IS->get_customer(\%myconfig, $::form) if $form->{type} =~ /sales_(order|quotation)/; + $::form->{payment_id} = $paymet_id; if ( $form->{vc} eq 'customer' && !$form->{taxincluded_changed_by_user} ) { $form->{taxincluded} = defined($form->{taxincluded_checked}) ? $form->{taxincluded_checked} : $myconfig{taxincluded_checked}; @@ -779,7 +781,7 @@ sub orders { my @columns = ( "transdate", "reqdate", "id", $ordnumber, - "customernumber", + "customernumber", "name", "netamount", "tax", "amount", "curr", "employee", diff --git a/config/kivitendo.conf.default b/config/kivitendo.conf.default index 7a3ad7587..5d6524bf8 100644 --- a/config/kivitendo.conf.default +++ b/config/kivitendo.conf.default @@ -16,6 +16,10 @@ cookie_name = kivitendo_session_id # hours. session_timeout = 480 +# The number of seconds to penalize failed login attempts. 0 disables +# it. +failed_login_penalty = 5 + [authentication/database] # Connection information for the database with the user and group # inforamtion. This information is always needed, even if LDAP is diff --git a/css/kivitendo/main.css b/css/kivitendo/main.css index 4cd3644e9..9714d4ac3 100644 --- a/css/kivitendo/main.css +++ b/css/kivitendo/main.css @@ -166,7 +166,7 @@ body.menu { border-width: thin; } /* Headings */ -.listtop, h1, .tabcontent .listheading { +.listtop, h1 { font-size:125%; background-color: #006400; text-align: left; diff --git a/doc/dokumentation.xml b/doc/dokumentation.xml index b053c3f1b..a23598769 100644 --- a/doc/dokumentation.xml +++ b/doc/dokumentation.xml @@ -861,6 +861,22 @@ insserv kivitendo-task-server Dieselben Optionen können auch für die SystemV-basierenden Runlevel-Scripte benutzt werden (siehe oben). + + Task-Server mit mehreren Mandanten + + Beim Task-Server wird der Login-Name des Benutzers, unter dem der + Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat + man mehrere Mandanten muß man auch mehrere Konfigurationsdateien + anlegen. + + Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf, + wo in der Kategorie [task_server] der gewünschte "login" steht. + + Der alternative Task-Server wird dann mit folgendem Befehl + gestartet: + + ./scripts/task_server.pl -c config/DATEINAME.conf + @@ -4077,7 +4093,7 @@ insserv kivitendo-task-server Mittels != anstelle von == würde auf Ungleichheit getestet. - %if var1 == var2%> + <%if var1 == var2%> Testet die Variable var1 auf übereinstimmung mit der Variablen var2. Mittel diff --git a/doc/html/ch02s06.html b/doc/html/ch02s06.html index bfe4fa5b2..752a47929 100644 --- a/doc/html/ch02s06.html +++ b/doc/html/ch02s06.html @@ -60,4 +60,9 @@ insserv kivitendo-task-server
  • OpenSuSE und Fed status berichtet, ob der Task-Server läuft.

  • Der Task-Server wechselt beim Starten automatisch in das kivitendo-Installationsverzeichnis.

    Dieselben Optionen können auch für die SystemV-basierenden - Runlevel-Scripte benutzt werden (siehe oben).

    \ No newline at end of file + Runlevel-Scripte benutzt werden (siehe oben).

    2.6.4. Task-Server mit mehreren Mandanten

    Beim Task-Server wird der Login-Name des Benutzers, unter dem der + Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat + man mehrere Mandanten muß man auch mehrere Konfigurationsdateien + anlegen.

    Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf, + wo in der Kategorie [task_server] der gewünschte "login" steht.

    Der alternative Task-Server wird dann mit folgendem Befehl + gestartet:

    ./scripts/task_server.pl -c config/DATEINAME.conf
    \ No newline at end of file diff --git a/doc/html/ch03s02.html b/doc/html/ch03s02.html index fbeff8760..321035866 100644 --- a/doc/html/ch03s02.html +++ b/doc/html/ch03s02.html @@ -554,7 +554,7 @@ invdate

    Rechnungsdatum

    invnumber -

    Rechnungsnummer

    3.2.10. Variablen in anderen Vorlagen

    3.2.10.1. Einführung

    Die Variablen in anderen Vorlagen sind ähnlich wie in der +

    Rechnungsnummer

    3.2.10. Variablen in anderen Vorlagen

    3.2.10.1. Einführung

    Die Variablen in anderen Vorlagen sind ähnlich wie in der Rechnung. Allerdings heißen die Variablen, die mit inv beginnen, jetzt anders. Bei den Angeboten fangen sie mit quo für "quotation" an: diff --git a/doc/html/ch04.html b/doc/html/ch04.html index 60bf9a18f..59181c7ec 100644 --- a/doc/html/ch04.html +++ b/doc/html/ch04.html @@ -1,6 +1,6 @@ - Kapitel 4. Entwicklerdokumentation

    Kapitel 4. Entwicklerdokumentation

    4.1. Globale Variablen

    4.1.1. Wie sehen globale Variablen in Perl aus?

    Globale Variablen liegen in einem speziellen namespace namens + Kapitel 4. Entwicklerdokumentation

    Kapitel 4. Entwicklerdokumentation

    4.1. Globale Variablen

    4.1.1. Wie sehen globale Variablen in Perl aus?

    Globale Variablen liegen in einem speziellen namespace namens "main", der von überall erreichbar ist. Darüber hinaus sind bareword globs global und die meisten speziellen Variablen sind... speziell.

    Daraus ergeben sich folgende Formen:

    @@ -25,7 +25,7 @@ $PACKAGE::form.

    local $form

    Alle Änderungen an $form werden am Ende - des scopes zurückgesetzt

    4.1.2. Warum sind globale Variablen ein Problem?

    Das erste Problem ist FCGI™.

    + des scopes zurückgesetzt

    4.1.2. Warum sind globale Variablen ein Problem?

    Das erste Problem ist FCGI™.

    SQL-Ledger™ hat fast alles im globalen namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist. Unter FCGI™ müssen diese Sachen aber wieder @@ -39,7 +39,7 @@ dies hat, seit der Einführung, u.a. schon so manche langwierige Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package angegeben werden, werden die nicht geprüft, und somit kann sich - schnell ein Tippfehler einschleichen.

    4.1.3. Kanonische globale Variablen

    Um dieses Problem im Griff zu halten gibt es einige wenige + schnell ein Tippfehler einschleichen.

    4.1.3. Kanonische globale Variablen

    Um dieses Problem im Griff zu halten gibt es einige wenige globale Variablen, die kanonisch sind, d.h. sie haben bestimmte vorgegebenen Eigenschaften, und alles andere sollte anderweitig umhergereicht werden.

    Diese Variablen sind im Moment die folgenden neun:

    • @@ -62,7 +62,7 @@ $::request

    Damit diese nicht erneut als Müllhalde missbraucht werden, im Folgenden eine kurze Erläuterung der bestimmten vorgegebenen - Eigenschaften (Konventionen):

    4.1.3.1. $::form

    • Ist ein Objekt der Klasse + Eigenschaften (Konventionen):

      4.1.3.1. $::form

      • Ist ein Objekt der Klasse "Form"

      • Wird nach jedem Request gelöscht

      • Muss auch in Tests und Konsolenscripts vorhanden sein.

      • Enthält am Anfang eines Requests die Requestparameter vom User

      • Kann zwar intern über Requestgrenzen ein Datenbankhandle @@ -110,7 +110,7 @@ push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"}; push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"}; # ... -}

      4.1.3.2. %::myconfig

      • Das einzige Hash unter den globalen Variablen

      • Wird spätestens benötigt wenn auf die Datenbank +}

      4.1.3.2. %::myconfig

      • Das einzige Hash unter den globalen Variablen

      • Wird spätestens benötigt wenn auf die Datenbank zugegriffen wird

      • Wird bei jedem Request neu erstellt.

      • Enthält die Userdaten des aktuellen Logins

      • Sollte nicht ohne Filterung irgendwo gedumpt werden oder extern serialisiert werden, weil da auch der Datenbankzugriff für diesen user drinsteht.

      • Enthält unter anderem Listenbegrenzung vclimit, @@ -122,10 +122,10 @@ überwiegend die Daten, die sich unter Programm -> Einstellungen befinden, bzw. die Informationen über den Benutzer die über die - Administrator-Schnittstelle (admin.pl) eingegeben wurden.

      4.1.3.3. $::locale

      • Objekt der Klasse "Locale"

      • Wird pro Request erstellt

      • Muss auch für Tests und Scripte immer verfügbar + Administrator-Schnittstelle (admin.pl) eingegeben wurden.

      4.1.3.3. $::locale

      • Objekt der Klasse "Locale"

      • Wird pro Request erstellt

      • Muss auch für Tests und Scripte immer verfügbar sein.

      • Cached intern über Requestgrenzen hinweg benutzte Locales

      Lokalisierung für den aktuellen User. Alle Übersetzungen, - Zahlen- und Datumsformatierungen laufen über dieses Objekt.

      4.1.3.4. $::lxdebug

      • Objekt der Klasse "LXDebug"

      • Wird global gecached

      • Muss immer verfügbar sein, in nahezu allen + Zahlen- und Datumsformatierungen laufen über dieses Objekt.

      4.1.3.4. $::lxdebug

      • Objekt der Klasse "LXDebug"

      • Wird global gecached

      • Muss immer verfügbar sein, in nahezu allen Funktionen

      $::lxdebug stellt Debuggingfunktionen bereit, wie "enter_sub" und @@ -135,12 +135,12 @@ "message" und "dump" mit denen man flott Informationen ins Log (tmp/kivitendo-debug.log) packen kann.

      Beispielsweise so:

      $main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig));
      -$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});

      4.1.3.5. $::auth

      • Objekt der Klasse "SL::Auth"

      • Wird global gecached

      • Hat eine permanente DB Verbindung zur Authdatenbank

      • Wird nach jedem Request resettet.

      +$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});

      4.1.3.5. $::auth

      • Objekt der Klasse "SL::Auth"

      • Wird global gecached

      • Hat eine permanente DB Verbindung zur Authdatenbank

      • Wird nach jedem Request resettet.

      $::auth stellt Funktionen bereit um die Rechte des aktuellen Users abzufragen. Obwohl diese Informationen vom aktuellen User abhängen wird das Objekt aus Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem - Request kurz resettet.

      4.1.3.6. $::lx_office_conf

      • Objekt der Klasse + Request kurz resettet.

      4.1.3.6. $::lx_office_conf

      • Objekt der Klasse "SL::LxOfficeConf"

      • Global gecached

      • Repräsentation der config/kivitendo.conf[.default]-Dateien

      Globale Konfiguration. Configdateien werden zum Start gelesen und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass @@ -150,16 +150,16 @@ $main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{ file = /tmp/kivitendo-debug.log

      ist der Key file im Programm als $::lx_office_conf->{debug}{file} erreichbar.

      [Warnung]Warnung

      Zugriff auf die Konfiguration erfolgt im Moment über - Hashkeys, sind also nicht gegen Tippfehler abgesichert.

      4.1.3.7. $::instance_conf

      • Objekt der Klasse + Hashkeys, sind also nicht gegen Tippfehler abgesichert.

      4.1.3.7. $::instance_conf

      • Objekt der Klasse "SL::InstanceConfiguration"

      • wird pro Request neu erstellt

      Funktioniert wie $::lx_office_conf, speichert aber Daten die von der Instanz abhängig sind. Eine Instanz ist hier eine Mandantendatenbank. Beispielsweise überprüft

      $::instance_conf->get_inventory_system eq 'perpetual'

      - ob die berüchtigte Bestandsmethode zur Anwendung kommt.

      4.1.3.8. $::dispatcher

      • Objekt der Klasse + ob die berüchtigte Bestandsmethode zur Anwendung kommt.

      4.1.3.8. $::dispatcher

      • Objekt der Klasse "SL::Dispatcher"

      • wird pro Serverprozess erstellt.

      • enthält Informationen über die technische Verbindung zum Server

      Der dritte Punkt ist auch der einzige Grund warum das Objekt global gespeichert wird. Wird vermutlich irgendwann in einem anderen - Objekt untergebracht.

      4.1.3.9. $::request

      • Hashref (evtl später Objekt)

      • Wird pro Request neu initialisiert.

      • Keine Unterstruktur garantiert.

      + Objekt untergebracht.

      4.1.3.9. $::request

      • Hashref (evtl später Objekt)

      • Wird pro Request neu initialisiert.

      • Keine Unterstruktur garantiert.

      $::request ist ein generischer Platz um Daten "für den aktuellen Request" abzulegen. Sollte nicht für action at a distance benutzt werden, sondern um lokales memoizing zu @@ -172,20 +172,20 @@ file = /tmp/kivitendo-debug.log

      ist der Key file$::request

    • Muss ich von anderen Teilen des Programms lesend drauf zugreifen? Dann $::request, aber Zugriff über - Wrappermethode

    4.1.4. Ehemalige globale Variablen

    Die folgenden Variablen waren einmal im Programm, und wurden - entfernt.

    4.1.4.1. $::cgi

    • war nötig, weil cookie Methoden nicht als + Wrappermethode

    4.1.4. Ehemalige globale Variablen

    Die folgenden Variablen waren einmal im Programm, und wurden + entfernt.

    4.1.4.1. $::cgi

    • war nötig, weil cookie Methoden nicht als Klassenfunktionen funktionieren

    • Aufruf als Klasse erzeugt Dummyobjekt was im Klassennamespace gehalten wird und über Requestgrenzen leaked

    • liegt jetzt unter $::request->{cgi} -

    4.1.4.2. $::all_units

    • war nötig, weil einige Funktionen in Schleifen zum Teil +

    4.1.4.2. $::all_units

    • war nötig, weil einige Funktionen in Schleifen zum Teil ein paar hundert mal pro Request eine Liste der Einheiten brauchen, und de als Parameter durch einen Riesenstack von Funktionen geschleift werden müssten.

    • Liegt jetzt unter $::request->{cache}{all_units}

    • Wird nur in AM->retrieve_all_units() gesetzt oder - gelesen.

    4.1.4.3. %::called_subs

    • wurde benutzt um callsub deep recursions + gelesen.

    4.1.4.3. %::called_subs

    • wurde benutzt um callsub deep recursions abzufangen.

    • Wurde entfernt, weil callsub nur einen Bruchteil der möglichen Rekursioenen darstellt, und da nie welche auftreten.

    • komplette recursion protection wurde entfernt.

    \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html index 5a7e9d4f2..90dfddee0 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1,6 +1,6 @@ - kivitendo: Installation, Konfiguration, Entwicklung

    kivitendo: Installation, Konfiguration, Entwicklung


    Inhaltsverzeichnis

    1. Aktuelle Hinweise
    2. Installation und Grundkonfiguration
    2.1. Benötigte Software und Pakete
    2.1.1. Betriebssystem
    2.1.2. Pakete
    2.2. Manuelle Installation des Programmpaketes
    2.3. kivitendo-Konfigurationsdatei
    2.3.1. Einführung
    2.3.2. Abschnitte und Parameter
    2.3.3. Versionen vor 2.6.3
    2.4. Anpassung der PostgreSQL-Konfiguration
    2.4.1. Zeichensätze/die Verwendung von UTF-8
    2.4.2. Änderungen an Konfigurationsdateien
    2.4.3. Erweiterung für servergespeicherte Prozeduren
    2.4.4. Datenbankbenutzer anlegen
    2.5. Webserver-Konfiguration
    2.5.1. Grundkonfiguration mittels CGI
    2.5.2. Konfiguration für FastCGI/FCGI
    2.6. Der Task-Server
    2.6.1. Verfügbare und notwendige Konfigurationsoptionen
    2.6.2. Automatisches Starten des Task-Servers beim Booten
    2.6.3. Wie der Task-Server gestartet und beendet wird
    2.7. Benutzerauthentifizierung und Administratorpasswort
    2.7.1. Grundlagen zur Benutzerauthentifizierung
    2.7.2. Administratorpasswort
    2.7.3. Authentifizierungsdatenbank
    2.7.4. Passwortüberprüfung
    2.7.5. Name des Session-Cookies
    2.7.6. Anlegen der Authentifizierungsdatenbank
    2.8. Benutzer- und Gruppenverwaltung
    2.8.1. Zusammenhänge
    2.8.2. Datenbanken anlegen
    2.8.3. Gruppen anlegen
    2.8.4. Benutzer anlegen
    2.8.5. Gruppenmitgliedschaften verwalten
    2.8.6. Migration alter Installationen
    2.9. Drucken mit kivitendo
    2.10. OpenDocument-Vorlagen
    2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: + kivitendo: Installation, Konfiguration, Entwicklung

    kivitendo: Installation, Konfiguration, Entwicklung


    Inhaltsverzeichnis

    1. Aktuelle Hinweise
    2. Installation und Grundkonfiguration
    2.1. Benötigte Software und Pakete
    2.1.1. Betriebssystem
    2.1.2. Pakete
    2.2. Manuelle Installation des Programmpaketes
    2.3. kivitendo-Konfigurationsdatei
    2.3.1. Einführung
    2.3.2. Abschnitte und Parameter
    2.3.3. Versionen vor 2.6.3
    2.4. Anpassung der PostgreSQL-Konfiguration
    2.4.1. Zeichensätze/die Verwendung von UTF-8
    2.4.2. Änderungen an Konfigurationsdateien
    2.4.3. Erweiterung für servergespeicherte Prozeduren
    2.4.4. Datenbankbenutzer anlegen
    2.5. Webserver-Konfiguration
    2.5.1. Grundkonfiguration mittels CGI
    2.5.2. Konfiguration für FastCGI/FCGI
    2.6. Der Task-Server
    2.6.1. Verfügbare und notwendige Konfigurationsoptionen
    2.6.2. Automatisches Starten des Task-Servers beim Booten
    2.6.3. Wie der Task-Server gestartet und beendet wird
    2.6.4. Task-Server mit mehreren Mandanten
    2.7. Benutzerauthentifizierung und Administratorpasswort
    2.7.1. Grundlagen zur Benutzerauthentifizierung
    2.7.2. Administratorpasswort
    2.7.3. Authentifizierungsdatenbank
    2.7.4. Passwortüberprüfung
    2.7.5. Name des Session-Cookies
    2.7.6. Anlegen der Authentifizierungsdatenbank
    2.8. Benutzer- und Gruppenverwaltung
    2.8.1. Zusammenhänge
    2.8.2. Datenbanken anlegen
    2.8.3. Gruppen anlegen
    2.8.4. Benutzer anlegen
    2.8.5. Gruppenmitgliedschaften verwalten
    2.8.6. Migration alter Installationen
    2.9. Drucken mit kivitendo
    2.10. OpenDocument-Vorlagen
    2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR
    2.11.1. Einführung
    2.11.2. Konfigurationsparameter
    2.11.3. Festlegen der Parameter
    2.11.4. Bemerkungen zu Bestandsmethode
    2.11.5. Bekannte Probleme
    2.12. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb
    2.12.1. Einführung
    2.12.2. Konto 3804 manuell anlegen
    2.13. kivitendo ERP verwenden
    3. Features und Funktionen
    3.1. Wiederkehrende Rechnungen
    3.1.1. Einführung
    3.1.2. Konfiguration
    3.1.3. Auflisten
    3.1.4. Erzeugung der eigentlichen Rechnungen
    3.1.5. Erste Rechnung für aktuellen Monat erstellen
    3.2. Dokumentenvorlagen und verfügbare Variablen
    3.2.1. Einführung
    3.2.2. Variablen ausgeben
    3.2.3. Verwendung in Druckbefehlen
    3.2.4. Anfang und Ende der Tags verändern
    3.2.5. Zuordnung von den Dateinamen zu den Funktionen
    3.2.6. Sprache, Drucker und E-Mail
    3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
    3.2.8. Variablen in Rechnungen
    3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren
    3.2.10. Variablen in anderen Vorlagen
    3.2.11. Blöcke, bedingte Anweisungen und Schleifen
    3.2.12. Markup-Code zur Textformatierung innerhalb von - Formularen
    3.3. Excel-Vorlagen
    3.3.1. Zusammenfassung
    3.3.2. Bedienung
    3.3.3. Variablensyntax
    3.3.4. Einschränkungen
    4. Entwicklerdokumentation
    4.1. Globale Variablen
    4.1.1. Wie sehen globale Variablen in Perl aus?
    4.1.2. Warum sind globale Variablen ein Problem?
    4.1.3. Kanonische globale Variablen
    4.1.4. Ehemalige globale Variablen
    4.2. Entwicklung unter FastCGI
    4.2.1. Allgemeines
    4.2.2. Programmende und Ausnahmen
    4.2.3. Globale Variablen
    4.2.4. Performance und Statistiken
    4.2.5. Bekannte Probleme
    4.3. SQL-Upgradedateien
    4.3.1. Einführung
    4.3.2. Format der Kontrollinformationen
    4.3.3. Hilfsscript dbupgrade2_tool.pl
    4.4. Translations and languages
    4.4.1. Introduction
    4.4.2. File structure
    4.5. Stil-Richtlinien
    4.6. Dokumentation erstellen
    4.6.1. Einführung
    4.6.2. Benötigte Software
    4.6.3. PDFs und HTML-Seiten erstellen
    4.6.4. Einchecken in das Git-Repository
    \ No newline at end of file + Formularen
    3.3. Excel-Vorlagen
    3.3.1. Zusammenfassung
    3.3.2. Bedienung
    3.3.3. Variablensyntax
    3.3.4. Einschränkungen
    4. Entwicklerdokumentation
    4.1. Globale Variablen
    4.1.1. Wie sehen globale Variablen in Perl aus?
    4.1.2. Warum sind globale Variablen ein Problem?
    4.1.3. Kanonische globale Variablen
    4.1.4. Ehemalige globale Variablen
    4.2. Entwicklung unter FastCGI
    4.2.1. Allgemeines
    4.2.2. Programmende und Ausnahmen
    4.2.3. Globale Variablen
    4.2.4. Performance und Statistiken
    4.2.5. Bekannte Probleme
    4.3. SQL-Upgradedateien
    4.3.1. Einführung
    4.3.2. Format der Kontrollinformationen
    4.3.3. Hilfsscript dbupgrade2_tool.pl
    4.4. Translations and languages
    4.4.1. Introduction
    4.4.2. File structure
    4.5. Stil-Richtlinien
    4.6. Dokumentation erstellen
    4.6.1. Einführung
    4.6.2. Benötigte Software
    4.6.3. PDFs und HTML-Seiten erstellen
    4.6.4. Einchecken in das Git-Repository
    \ No newline at end of file diff --git a/doc/kivitendo-Dokumentation.pdf b/doc/kivitendo-Dokumentation.pdf index 5c2a6bd56..33aae98ef 100644 Binary files a/doc/kivitendo-Dokumentation.pdf and b/doc/kivitendo-Dokumentation.pdf differ diff --git a/locale/de/all b/locale/de/all index 9fbd29bbb..1eb8ab644 100644 --- a/locale/de/all +++ b/locale/de/all @@ -425,12 +425,12 @@ $self->{texts} = { 'Confirm!' => 'Bestätigen Sie!', 'Confirmation' => 'Auftragsbestätigung', 'Contact' => 'Kontakt', - 'Contact Person' => 'Ansprechpartner', - 'Contact deleted.' => 'Ansprechpartner gelöscht.', - 'Contact is in use and was flagged invalid.' => 'Ansprechpartner ist noch in Verwendung, und wurde als ungültig markiert.', - 'Contact person (surname)' => 'Ansprechpartner (Nachname)', - 'Contact persons' => 'Ansprechpartner', - 'Contacts' => 'Ansprechpartner', + 'Contact Person' => 'Ansprechperson', + 'Contact deleted.' => 'Ansprechperson gelöscht.', + 'Contact is in use and was flagged invalid.' => 'Die Ansprechperson ist noch in Verwendung und wurde deshalb nur als ungültig markiert.', + 'Contact person (surname)' => 'Ansprechperson (Nachname)', + 'Contact persons' => 'Ansprechpersonen', + 'Contacts' => 'Ansprechpersonen', 'Continue' => 'Weiter', 'Contra' => 'gegen', 'Copies' => 'Kopien', @@ -590,7 +590,7 @@ $self->{texts} = { 'Defaults saved.' => 'Die Standardeinstellungen wurden gespeichert.', 'Delete' => 'Löschen', 'Delete Account' => 'Konto löschen', - 'Delete Contact' => 'Ansprechpartner löschen', + 'Delete Contact' => 'Ansprechperson löschen', 'Delete Dataset' => 'Datenbank löschen', 'Delete Shipto' => 'Lieferadresse löschen', 'Delete delivery order' => 'Lieferschein löschen', @@ -1202,7 +1202,7 @@ $self->{texts} = { 'New Templates' => 'Erzeuge Vorlagen, Name', 'New assembly' => 'Neues Erzeugnis', 'New bank account' => 'Neues Bankkonto', - 'New contact' => 'Neuer Ansprechpartner', + 'New contact' => 'Neue Ansprechperson', 'New customer' => 'Neuer Kunde', 'New invoice' => 'Neue Rechnung', 'New part' => 'Neue Ware', @@ -1229,7 +1229,7 @@ $self->{texts} = { 'No bank information has been entered in this vendor\'s master data entry. You cannot create bank transfers unless you enter bank information.' => 'Für diesen Lieferanten wurden in seinen Stammdaten keine Kontodaten hinterlegt. Solange dies nicht geschehen ist, können Sie keine Überweisungen für den Lieferanten anlegen.', 'No bins have been added to this warehouse yet.' => 'Es wurden zu diesem Lager noch keine Lagerplätze angelegt.', 'No business has been created yet.' => 'Es wurden noch kein Kunden-/Lieferantentyp erfasst.', - 'No contact selected to delete' => 'Kein Ansprechpartner zum Löschen ausgewählt', + 'No contact selected to delete' => 'Keine Ansprechperson zum Löschen ausgewählt', 'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgewählt.', 'No data was found.' => 'Es wurden keine Daten gefunden.', 'No databases have been found on this server.' => 'Auf diesem Server wurden keine Datenbanken gefunden.', @@ -1553,7 +1553,7 @@ $self->{texts} = { 'Report for' => 'Bericht für', 'Reports' => 'Berichte', 'Representative' => 'Vertreter', - 'Reqdate' => 'Lieferdatum', + 'Reqdate' => 'Liefertermin', 'Request for Quotation' => 'Anfrage', 'Request for Quotations' => 'Anfragen', 'Request quotation' => 'Preisanfrage', @@ -1625,7 +1625,7 @@ $self->{texts} = { 'Screen' => 'Bildschirm', 'Search AP Aging' => 'Offene Verbindlichkeiten', 'Search AR Aging' => 'Offene Forderungen', - 'Search contacts' => 'Ansprechpartnersuche', + 'Search contacts' => 'Ansprechpersonensuche', 'Search term' => 'Suchbegriff', 'Searchable' => 'Durchsuchbar', 'Secondary sorting' => 'Untersortierung', @@ -2266,7 +2266,7 @@ $self->{texts} = { 'config/lx_office.conf: Key "authentication/ldap" is missing.' => 'config/lx_office.conf: Der Schlüssel "authentication/ldap" fehlt.', 'config/lx_office.conf: Missing parameters in "authentication/database". Required parameters are "host", "db" and "user".' => 'config/lx_office.conf: Fehlende Parameter in "authentication/database". Benötigte Parameter sind "host", "db" und "user".', 'config/lx_office.conf: Missing parameters in "authentication/ldap". Required parameters are "host", "attribute" and "base_dn".' => 'config/lx_office.conf: Fehlende Parameter in "authentication/ldap". Benötigt werden "host", "attribute" und "base_dn".', - 'contact_list' => 'ansprechpartner_liste', + 'contact_list' => 'ansprechperson_liste', 'continue' => 'weiter', 'correction' => 'Korrektur', 'cp_greeting to cp_gender migration' => 'Datenumwandlung von Titel nach Geschlecht (cp_greeting to cp_gender)', diff --git a/sql/Pg-upgrade2/record_links_post_delete_triggers2.sql b/sql/Pg-upgrade2/record_links_post_delete_triggers2.sql new file mode 100644 index 000000000..70967f9f3 --- /dev/null +++ b/sql/Pg-upgrade2/record_links_post_delete_triggers2.sql @@ -0,0 +1,40 @@ +-- @tag: record_links_post_delete_triggers2 +-- @description: PL/PgSQL Syntax Fix +-- @depends: record_links_post_delete_triggers +-- @encoding: utf8 + +CREATE OR REPLACE FUNCTION clean_up_record_links_before_oe_delete() RETURNS trigger AS $$ + BEGIN + DELETE FROM record_links + WHERE (from_table = 'oe' AND from_id = OLD.id) + OR (to_table = 'oe' AND to_id = OLD.id); + RETURN OLD; + END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION clean_up_record_links_before_delivery_orders_delete() RETURNS trigger AS $$ + BEGIN + DELETE FROM record_links + WHERE (from_table = 'delivery_orders' AND from_id = OLD.id) + OR (to_table = 'delivery_orders' AND to_id = OLD.id); + RETURN OLD; + END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION clean_up_record_links_before_ar_delete() RETURNS trigger AS $$ + BEGIN + DELETE FROM record_links + WHERE (from_table = 'ar' AND from_id = OLD.id) + OR (to_table = 'ar' AND to_id = OLD.id); + RETURN OLD; + END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION clean_up_record_links_before_ap_delete() RETURNS trigger AS $$ + BEGIN + DELETE FROM record_links + WHERE (from_table = 'ap' AND from_id = OLD.id) + OR (to_table = 'ap' AND to_id = OLD.id); + RETURN OLD; + END; +$$ LANGUAGE plpgsql; diff --git a/templates/webpages/acctranscorrections/analyze_filter.html b/templates/webpages/acctranscorrections/analyze_filter.html index 2aa769d3f..db4198e1b 100644 --- a/templates/webpages/acctranscorrections/analyze_filter.html +++ b/templates/webpages/acctranscorrections/analyze_filter.html @@ -2,7 +2,7 @@ [% USE HTML %] [%- USE L %] -

    [% title %]

    +

    [% title %]

    [% 'Earlier versions of kivitendo contained bugs which might have led to wrong entries in the general ledger.' | $T8 %] diff --git a/templates/webpages/acctranscorrections/delete_transaction.html b/templates/webpages/acctranscorrections/delete_transaction.html index 2c461b04f..ad9a07659 100644 --- a/templates/webpages/acctranscorrections/delete_transaction.html +++ b/templates/webpages/acctranscorrections/delete_transaction.html @@ -2,7 +2,7 @@ [% USE HTML %] [% USE LxERP %] -

    [% title %]

    +

    [% title %]

    [%- IF module == 'ar' %] diff --git a/templates/webpages/acctranscorrections/delete_transaction_confirmation.html b/templates/webpages/acctranscorrections/delete_transaction_confirmation.html index c07547135..63181fccc 100644 --- a/templates/webpages/acctranscorrections/delete_transaction_confirmation.html +++ b/templates/webpages/acctranscorrections/delete_transaction_confirmation.html @@ -2,7 +2,7 @@ [% USE HTML %] [% USE LxERP %] -

    [% title %]

    +

    [% title %]

    [%- IF module == 'ar' %] diff --git a/templates/webpages/admin/edit_groups.html b/templates/webpages/admin/edit_groups.html index 6056107e1..d893a5807 100644 --- a/templates/webpages/admin/edit_groups.html +++ b/templates/webpages/admin/edit_groups.html @@ -8,7 +8,8 @@

    [% 'Back' | $T8 %]

    -
    [% 'Add a new group' | $T8 %]
    +

    [% 'Add a new group' | $T8 %]

    +

    @@ -17,13 +18,11 @@

    -
    +

    [% 'Edit and delete a group' | $T8 %]

    -
    [% 'Edit and delete a group' | $T8 %]
    - [% IF num_groups %]

    -

    [% 'User Login' | $T8 %]
    - diff --git a/templates/webpages/am/edit_templates.html b/templates/webpages/am/edit_templates.html index a25abc69e..bbce54414 100644 --- a/templates/webpages/am/edit_templates.html +++ b/templates/webpages/am/edit_templates.html @@ -1,7 +1,7 @@ [%- USE T8 %] [% USE HTML %] -
    [% title %]
    +

    [% title %]

    [% IF type == 'templates' %]

    [[% 'Help Template Variables' | $T8 %]]

    diff --git a/templates/webpages/common/show_vc_details.html b/templates/webpages/common/show_vc_details.html index 49363ea01..a0abdc275 100644 --- a/templates/webpages/common/show_vc_details.html +++ b/templates/webpages/common/show_vc_details.html @@ -31,7 +31,7 @@ [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %] -
    [% 'Billing Address' | $T8 %]
    +

    [% 'Billing Address' | $T8 %]

    [% 'Login Name' | $T8 %]
    @@ -167,7 +167,7 @@ [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %] -
    [% 'Shipping Address' | $T8 %] "[% HTML.escape(row.shiptoname) %]"
    +

    [% 'Shipping Address' | $T8 %] "[% HTML.escape(row.shiptoname) %]"

    @@ -233,7 +233,7 @@ [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %] -
    [% 'Contact Person' | $T8 %] "[% HTML.escape(row.cp_name) %]"
    +

    [% 'Contact Person' | $T8 %] "[% HTML.escape(row.cp_name) %]"

    diff --git a/templates/webpages/csv_import/_form_parts.html b/templates/webpages/csv_import/_form_parts.html index c88b710e9..e499e8014 100644 --- a/templates/webpages/csv_import/_form_parts.html +++ b/templates/webpages/csv_import/_form_parts.html @@ -11,7 +11,7 @@ @@ -54,7 +54,7 @@ diff --git a/templates/webpages/do/form_header.html b/templates/webpages/do/form_header.html index e12f0da9b..848fa898e 100644 --- a/templates/webpages/do/form_header.html +++ b/templates/webpages/do/form_header.html @@ -301,6 +301,15 @@ + + + + + @@ -182,6 +182,18 @@ [% END %] + + + + + + - - @@ -230,4 +237,3 @@ - diff --git a/templates/webpages/ic/form_header.html b/templates/webpages/ic/form_header.html index 31308ba18..1ed3b365a 100644 --- a/templates/webpages/ic/form_header.html +++ b/templates/webpages/ic/form_header.html @@ -169,18 +169,18 @@ - + - + [%- UNLESS is_assembly %] - + [%- END %] diff --git a/templates/webpages/ic/makemodel.html b/templates/webpages/ic/makemodel.html index d610c3956..4daad8134 100644 --- a/templates/webpages/ic/makemodel.html +++ b/templates/webpages/ic/makemodel.html @@ -24,8 +24,8 @@ -%] - + diff --git a/templates/webpages/ic/price_row.html b/templates/webpages/ic/price_row.html index 09a7b6e61..88434230a 100644 --- a/templates/webpages/ic/price_row.html +++ b/templates/webpages/ic/price_row.html @@ -12,7 +12,7 @@ [%- FOREACH row = PRICES %] - + [%- END %] diff --git a/templates/webpages/oe/form_header.html b/templates/webpages/oe/form_header.html index dff98c638..76190766f 100644 --- a/templates/webpages/oe/form_header.html +++ b/templates/webpages/oe/form_header.html @@ -210,7 +210,7 @@ [%- IF is_sales_quo %] [% 'Valid until' | $T8 %] [%- ELSE %] - [% 'Required by' | $T8 %] + [% 'Reqdate' | $T8 %] [%- END %]
    [%- LxERP.t8('Sellprice significant places') %]: - [% L.select_tag('settings.sellprice_places', [ 0, 1, 2, 3, 4, 5 ], default = SELF.profile.get('sellprice_places')), style = 'width: 300px') %] + [% L.select_tag('settings.sellprice_places', [ 0, 1, 2, 3, 4, 5 ], default = SELF.profile.get('sellprice_places'), style = 'width: 300px') %]
    [%- LxERP.t8('Default unit') %]: - [% opts = SELF.all_units, title_key = 'name', value_key = 'name', default = SELF.profile.get('default_unit')) %] + [% opts = SELF.all_units, title_key = 'name', value_key = 'name', default = SELF.profile.get('default_unit') %] [% L.select_tag('settings.default_unit', opts, style => 'width: 300px') %]
    [% 'Reqdate' | $T8 %] + + +
    [% 'Project Number' | $T8 %] diff --git a/templates/webpages/do/search.html b/templates/webpages/do/search.html index 66cd07f4e..f7ab5d591 100644 --- a/templates/webpages/do/search.html +++ b/templates/webpages/do/search.html @@ -62,7 +62,7 @@
    + + + + + +
    @@ -192,11 +204,6 @@ - - -
    [% 'List Price' | $T8 %]
    [% 'Sell Price' | $T8 %]
    [% 'Last Cost' | $T8 %]
    - +
    [% HTML.escape(row.pricegroup) %]
    diff --git a/templates/webpages/report_generator/csv_export_options.html b/templates/webpages/report_generator/csv_export_options.html index 70c39af02..0d49f2821 100644 --- a/templates/webpages/report_generator/csv_export_options.html +++ b/templates/webpages/report_generator/csv_export_options.html @@ -1,7 +1,7 @@ [%- USE T8 %] [% USE HTML %] -
    [% HTML.escape(title) %]
    +

    [% HTML.escape(title) %]

    diff --git a/templates/webpages/report_generator/html_report.html b/templates/webpages/report_generator/html_report.html index a35cfb6a1..332c5ef12 100644 --- a/templates/webpages/report_generator/html_report.html +++ b/templates/webpages/report_generator/html_report.html @@ -18,7 +18,7 @@

    [% MESSAGE %]

    [% END %] -
    [% TITLE %]
    +

    [% TITLE %]

    [% IF TOP_INFO_TEXT %]

    [% TOP_INFO_TEXT %]

    diff --git a/templates/webpages/report_generator/pdf_export_options.html b/templates/webpages/report_generator/pdf_export_options.html index 5af4de810..8956ed7ff 100644 --- a/templates/webpages/report_generator/pdf_export_options.html +++ b/templates/webpages/report_generator/pdf_export_options.html @@ -3,7 +3,7 @@ [%- SET default_margin = LxERP.format_amount(1.5) %] -
    [% HTML.escape(title) %]
    +

    [% HTML.escape(title) %]