From: G. Richardson Date: Thu, 26 Sep 2013 11:45:05 +0000 (+0200) Subject: Merge branch 'master' of github.com:kivitendo/kivitendo-erp X-Git-Tag: release-3.1.0beta1~69 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/e112111e80aafcd8f3c86b4ba2a5c5fe3db4b5c2?hp=5ef8b31028dada9eff3c317fe92c0a9b05ea41a4 Merge branch 'master' of github.com:kivitendo/kivitendo-erp --- diff --git a/SL/Controller/Helper/ReportGenerator.pm b/SL/Controller/Helper/ReportGenerator.pm index 3cf2622a7..0cf376df4 100644 --- a/SL/Controller/Helper/ReportGenerator.pm +++ b/SL/Controller/Helper/ReportGenerator.pm @@ -89,6 +89,7 @@ sub report_generator_list_objects { croak "Parameter 'objects' must exist and be an array reference" if ref($params{objects}) ne 'ARRAY'; croak "Parameter 'report' must exist and be an instance of SL::ReportGenerator" if ref($params{report}) ne 'SL::ReportGenerator'; croak "Parameter 'options', if exists, must be a hash reference" if $params{options} && (ref($params{options}) ne 'HASH'); + $params{layout} //= 1; my $column_defs = $params{report}->{columns}; my @columns = $params{report}->get_visible_columns; @@ -110,7 +111,12 @@ sub report_generator_list_objects { $params{report}->add_data(\%data); } - return $params{report}->generate_with_headers(%{ $params{options} || {}}); + if ($params{layout}) { + return $params{report}->generate_with_headers(%{ $params{options} || {}}); + } else { + my $html = $params{report}->generate_html_content(%{ $params{options} || {}}); + $self->render(\$html , { layout => 0, process => 0 }); + } } 1; diff --git a/SL/Controller/SellPriceInformation.pm b/SL/Controller/SellPriceInformation.pm index 8e0c52d86..ddaf76549 100644 --- a/SL/Controller/SellPriceInformation.pm +++ b/SL/Controller/SellPriceInformation.pm @@ -20,7 +20,7 @@ sub action_list { ); my $db_args = $self->setup_for_list(%list_params); - $self->{pages} = SL::DB::Manager::OrderItem->paginate(%list_params, args => $db_args, per_page => 10); + $self->{pages} = SL::DB::Manager::OrderItem->paginate(%list_params, args => $db_args, per_page => 5); my $bottom = $::form->parse_html_template('price_information/report_bottom', { SELF => $self }); @@ -34,7 +34,7 @@ sub action_list { my $orderitems = SL::DB::Manager::OrderItem->get_all(%$db_args); - $self->report_generator_list_objects(report => $self->{report}, objects => $orderitems, options => { no_layout => 1 }); + $self->report_generator_list_objects(report => $self->{report}, objects => $orderitems, layout => 0, header => 0); } # private functions diff --git a/SL/DB/DeliveryOrderItem.pm b/SL/DB/DeliveryOrderItem.pm index 3c5eef85c..29c85a2cb 100644 --- a/SL/DB/DeliveryOrderItem.pm +++ b/SL/DB/DeliveryOrderItem.pm @@ -4,7 +4,7 @@ use strict; use SL::DB::MetaSetup::DeliveryOrderItem; use SL::DB::Helper::CustomVariables ( - sub_module => 'delivery_order_item', + sub_module => 'delivery_order_items', cvars_alias => 1, overloads => { parts_id => { diff --git a/SL/DB/Helper/CustomVariables.pm b/SL/DB/Helper/CustomVariables.pm index 3c43624db..373a60cf1 100644 --- a/SL/DB/Helper/CustomVariables.pm +++ b/SL/DB/Helper/CustomVariables.pm @@ -42,8 +42,11 @@ sub save_meta_info { sub make_cvar_accessor { my ($caller_package, %params) = @_; - my @module_filter = $params{module} ? - ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) : + my $modules = ('ARRAY' eq ref $params{module}) ? + join ',', @{ $params{module} } : + $params{module}; + my @module_filter = $modules ? + ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module IN ( '$modules' ))" ]) : # " make emacs happy (); $caller_package->meta->add_relationships( diff --git a/SL/TransNumber.pm b/SL/TransNumber.pm index 9d6d2993a..fb715b8eb 100644 --- a/SL/TransNumber.pm +++ b/SL/TransNumber.pm @@ -113,8 +113,6 @@ sub create_unique { my %filters = $self->_get_filters(); $self->dbh->begin_work if $self->dbh->{AutoCommit}; - do_query($form, $self->dbh, qq|LOCK TABLE defaults|); - do_query($form, $self->dbh, qq|LOCK TABLE business|) if $self->business_id; my $where = $filters{where} ? ' WHERE ' . $filters{where} : ''; my $query = <dbh, $query, $filters{trans_number}, 'in_use'); my $business_number; - ($business_number) = selectfirst_array_query($form, $self->dbh, qq|SELECT customernumberinit FROM business WHERE id = ?|, $self->business_id) if $self->business_id; + ($business_number) = selectfirst_array_query($form, $self->dbh, qq|SELECT customernumberinit FROM business WHERE id = ? FOR UPDATE|, $self->business_id) if $self->business_id; my $number = $business_number; - ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults|) if !$number; + ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults FOR UPDATE|) if !$number; if ($filters{numberfield} eq 'assemblynumber' and length($number) < 1) { $filters{numberfield} = 'articlenumber'; - ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults|) if !$number; + ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults FOR UPDATE|) if !$number; } $number ||= ''; my $sequence = SL::PrefixedNumber->new(number => $number); diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 267c427b6..c7cb71b07 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -1354,8 +1354,8 @@ sub generate_report { if ($ref->{module} eq 'oe') { # für oe gibt es vier fälle, jeweils nach kunde oder lieferant unterschiedlich: # - # | ist bestellt | Vom Kunde bestellt | -> edit_oe_ord_link - # | Anfrage | Angebot | -> edit_oe_quo_link + # | ist bestellt | Von Kunden bestellt | -> edit_oe_ord_link + # | Anfrage | Angebot | -> edit_oe_quo_link my $edit_oe_ord_link = build_std_url("script=oe.pl", 'action=edit', 'type=' . E($ref->{cv} eq 'vendor' ? 'purchase_order' : 'sales_order'), 'id=' . E($ref->{trans_id}), 'callback'); my $edit_oe_quo_link = build_std_url("script=oe.pl", 'action=edit', 'type=' . E($ref->{cv} eq 'vendor' ? 'request_quotation' : 'sales_quotation'), 'id=' . E($ref->{trans_id}), 'callback'); diff --git a/doc/dokumentation.xml b/doc/dokumentation.xml index 572290177..27c22fdce 100644 --- a/doc/dokumentation.xml +++ b/doc/dokumentation.xml @@ -5919,11 +5919,11 @@ filenames Alle Tests liegen im Unterverzeichnis t/. - Ein Script (bzw. ein Test) in f/ enthält einen oder mehrere Testfälle. + Ein Script (bzw. ein Test) in t/ enthält einen oder mehrere Testfälle. Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte. - Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in f/, deren + Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in t/, deren Dateiname auf .t endet. @@ -6005,7 +6005,7 @@ filenames Ideen für neue Test-Scripte, die keine konkreten Funktionen testen - Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden: + Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden: Überprüfung auf fehlende symbolische Links @@ -6030,7 +6030,7 @@ filenames Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise bad_function_params.t). - Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen + Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen (beispielsweise background_jobs für Tests rund um Hintergrund-Jobs). Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist diff --git a/doc/html/ch04s05.html b/doc/html/ch04s05.html index 063198e91..17f81cb52 100644 --- a/doc/html/ch04s05.html +++ b/doc/html/ch04s05.html @@ -1,6 +1,6 @@ - 4.5. Die kivitendo-Test-Suite

4.5. Die kivitendo-Test-Suite

4.5.1. Einführung

kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul Test::More.

Die grundlegenden Fakten sind:

  • Alle Tests liegen im Unterverzeichnis t/.

  • Ein Script (bzw. ein Test) in f/ enthält einen oder mehrere Testfälle.

  • Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte.

  • Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in f/, deren + 4.5. Die kivitendo-Test-Suite

    4.5. Die kivitendo-Test-Suite

    4.5.1. Einführung

    kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul Test::More.

    Die grundlegenden Fakten sind:

    • Alle Tests liegen im Unterverzeichnis t/.

    • Ein Script (bzw. ein Test) in t/ enthält einen oder mehrere Testfälle.

    • Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte.

    • Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in t/, deren Dateiname auf .t endet.

    4.5.2. Voraussetzungen

    Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:

    • Test::Deep (Debian-Paketname: libtest-deep-perl; Fedora Core: perl-Test-Deep; openSUSE: perl-Test-Deep)

    • @@ -35,10 +35,10 @@

    Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.

    4.5.5.1. Ideen für neue Test-Scripte, die keine konkreten Funktionen testen -

    Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:

    • Überprüfung auf fehlende symbolische Links

    • Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)

    • Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)

    • Überprüfung auf Leerzeichen am Ende von Zeilen

    • Test, ob alle zu übersetzenden Strings in locale/de/all vorhanden sind

    • Test, ob alle Webseiten-Templates in templates/webpages mit vom Perl-Modul Template compiliert werden können

    4.5.5.2. +

    Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden:

    • Überprüfung auf fehlende symbolische Links

    • Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)

    • Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)

    • Überprüfung auf Leerzeichen am Ende von Zeilen

    • Test, ob alle zu übersetzenden Strings in locale/de/all vorhanden sind

    • Test, ob alle Webseiten-Templates in templates/webpages mit vom Perl-Modul Template compiliert werden können

    4.5.5.2. Konvention für Verzeichnis- und Dateinamen

    Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:

    • Die Dateiendung muss .t lauten.

    • Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise - bad_function_params.t).

    • Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen + bad_function_params.t).

    • Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen (beispielsweise background_jobs für Tests rund um Hintergrund-Jobs).

    • Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.

    4.5.5.3. Minimales Skelett für eigene Scripte diff --git a/doc/kivitendo-Dokumentation.pdf b/doc/kivitendo-Dokumentation.pdf index 198a7f4e3..853b75ea0 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 7aec6c3c4..be01e0c0b 100755 --- a/locale/de/all +++ b/locale/de/all @@ -1421,7 +1421,7 @@ $self->{texts} = { 'Order Number' => 'Auftragsnummer', 'Order Number missing!' => 'Auftragsnummer fehlt!', 'Order deleted!' => 'Auftrag gelöscht!', - 'Ordered' => 'Vom Kunde bestellt', + 'Ordered' => 'Von Kunden bestellt', 'Orders / Delivery Orders deleteable' => 'Aufträge / Lieferscheine löschbar', 'Orientation' => 'Seitenformat', 'Orphaned' => 'Nie benutzt', diff --git a/templates/webpages/ic/sales_price_information.html b/templates/webpages/ic/sales_price_information.html index d7b92bd15..4f5794cb4 100644 --- a/templates/webpages/ic/sales_price_information.html +++ b/templates/webpages/ic/sales_price_information.html @@ -20,9 +20,12 @@ get_report(target, event.target + '', {}); } - $(document).ready(function(){ - get_report('#sales_price_information_sales_order', 'controller.pl', { action: 'SellPriceInformation/list', 'filter.part.id': [% id %], 'filter.order.type': 'sales_order' }); - get_report('#sales_price_information_sales_quotation', 'controller.pl', { action: 'SellPriceInformation/list', 'filter.part.id': [% id %], 'filter.order.type': 'sales_quotation' }); + $('.tabwidget').on('tabsbeforeactivate', function(event, ui){ + if (ui.newPanel.attr('id') == 'sales_price_information') { + get_report('#sales_price_information_sales_order', 'controller.pl', { action: 'SellPriceInformation/list', 'filter.part.id': [% id %], 'filter.order.type': 'sales_order' }); + get_report('#sales_price_information_sales_quotation', 'controller.pl', { action: 'SellPriceInformation/list', 'filter.part.id': [% id %], 'filter.order.type': 'sales_quotation' }); + } + return 1; });