Merge branch 'master' of ssh://git-mbunkus@lx-office.linet-services.de/~/lx-office-erp
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 2 Oct 2009 15:19:55 +0000 (17:19 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 2 Oct 2009 15:19:55 +0000 (17:19 +0200)
284 files changed:
SL/Locale.pm
bin/mozilla/am.pl
bin/mozilla/menuXML.pl
bin/mozilla/menujs.pl
bin/mozilla/menunew.pl
bin/mozilla/menuv3.pl
bin/mozilla/menuv4.pl
locale/de/LANGUAGE
locale/de/all
locale/de/locales.pl
locale/en/COPYING [new file with mode: 0644]
locale/en/LANGUAGE [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.19-2.2.0.20 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.20-2.2.0.21 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.25-2.2.0.26 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.27-2.2.0.28 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.28-2.2.0.29 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.31-2.2.0.32 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.33-2.2.0.34 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.36-2.2.0.37 [new file with mode: 0644]
locale/en/Pg-upgrade-2.2.0.37-2.2.0.38 [new file with mode: 0644]
locale/en/USTVA_abstraction [new file with mode: 0644]
locale/en/USTVA_at [new file with mode: 0644]
locale/en/acctranscorrections [new file with mode: 0644]
locale/en/admin [new file with mode: 0644]
locale/en/all [new file with mode: 0644]
locale/en/am [new file with mode: 0644]
locale/en/amcvar [new file with mode: 0644]
locale/en/amtemplates [new file with mode: 0644]
locale/en/ap [new file with mode: 0644]
locale/en/ar [new file with mode: 0644]
locale/en/arap [new file with mode: 0644]
locale/en/bp [new file with mode: 0644]
locale/en/ca [new file with mode: 0644]
locale/en/common [new file with mode: 0644]
locale/en/cp [new file with mode: 0644]
locale/en/ct [new file with mode: 0644]
locale/en/datev [new file with mode: 0644]
locale/en/dn [new file with mode: 0644]
locale/en/do [new file with mode: 0644]
locale/en/drafts [new file with mode: 0644]
locale/en/fu [new file with mode: 0644]
locale/en/generictranslations [new file with mode: 0644]
locale/en/gl [new file with mode: 0644]
locale/en/globalprojectnumber_ap_ar_oe [new file with mode: 0644]
locale/en/ic [new file with mode: 0644]
locale/en/installationcheck [new file with mode: 0644]
locale/en/io [new file with mode: 0644]
locale/en/ir [new file with mode: 0644]
locale/en/is [new file with mode: 0644]
locale/en/kopf [new file with mode: 0644]
locale/en/licenses [new file with mode: 0644]
locale/en/locales.pl [new file with mode: 0755]
locale/en/login [new file with mode: 0644]
locale/en/lost [new file with mode: 0644]
locale/en/menu [new file with mode: 0644]
locale/en/menuXML [new file with mode: 0644]
locale/en/menujs [new file with mode: 0644]
locale/en/menunew [new file with mode: 0644]
locale/en/menuv3 [new file with mode: 0644]
locale/en/menuv4 [new file with mode: 0644]
locale/en/missing [new file with mode: 0644]
locale/en/oe [new file with mode: 0644]
locale/en/pe [new file with mode: 0644]
locale/en/projects [new file with mode: 0644]
locale/en/rc [new file with mode: 0644]
locale/en/reportgenerator [new file with mode: 0644]
locale/en/rp [new file with mode: 0644]
locale/en/todo [new file with mode: 0644]
locale/en/ustva [new file with mode: 0644]
locale/en/warehouse [new file with mode: 0644]
locale/en/wh [new file with mode: 0644]
locale/en_GB/COPYING [deleted file]
locale/en_GB/LANGUAGE [deleted file]
locale/en_GB/admin [deleted file]
locale/en_GB/all [deleted file]
locale/en_GB/am [deleted file]
locale/en_GB/ap [deleted file]
locale/en_GB/ar [deleted file]
locale/en_GB/arap [deleted file]
locale/en_GB/bp [deleted file]
locale/en_GB/ca [deleted file]
locale/en_GB/cp [deleted file]
locale/en_GB/ct [deleted file]
locale/en_GB/gl [deleted file]
locale/en_GB/ic [deleted file]
locale/en_GB/io [deleted file]
locale/en_GB/ir [deleted file]
locale/en_GB/is [deleted file]
locale/en_GB/login [deleted file]
locale/en_GB/menu [deleted file]
locale/en_GB/oe [deleted file]
locale/en_GB/pe [deleted file]
locale/en_GB/rc [deleted file]
locale/en_GB/rp [deleted file]
locale/fr/LANGUAGE [deleted file]
locale/fr/LANGUAGE.deactivated [new file with mode: 0644]
templates/webpages/acctranscorrections/analyze_filter_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/analyze_overview_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/assistant_for_ap_ar_wrong_taxkeys_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/assistant_for_invoice_inventory_with_taxkeys_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/assistant_for_wrong_taxes_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/assistant_for_wrong_taxkeys_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/delete_transaction_confirmation_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/delete_transaction_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/fix_ap_ar_wrong_taxkeys_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/fix_invoice_inventory_with_taxkeys_en.html [new file with mode: 0644]
templates/webpages/acctranscorrections/fix_wrong_taxkeys_en.html [new file with mode: 0644]
templates/webpages/admin/adminlogin_en.html [new file with mode: 0644]
templates/webpages/admin/backup_dataset_email_done_en.html [new file with mode: 0644]
templates/webpages/admin/backup_dataset_en.html [new file with mode: 0644]
templates/webpages/admin/check_auth_database_en.html [new file with mode: 0644]
templates/webpages/admin/check_auth_tables_en.html [new file with mode: 0644]
templates/webpages/admin/create_dataset_en.html [new file with mode: 0644]
templates/webpages/admin/create_standard_group_ask_en.html [new file with mode: 0644]
templates/webpages/admin/dbadmin_en.html [new file with mode: 0644]
templates/webpages/admin/dbcreate_en.html [new file with mode: 0644]
templates/webpages/admin/dbdelete_en.html [new file with mode: 0644]
templates/webpages/admin/dbupgrade_all_done_en.html [new file with mode: 0644]
templates/webpages/admin/dbupgrade_all_header_en.html [new file with mode: 0644]
templates/webpages/admin/dbupgrade_footer_en.html [new file with mode: 0644]
templates/webpages/admin/dbupgrade_header_en.html [new file with mode: 0644]
templates/webpages/admin/delete_dataset_en.html [new file with mode: 0644]
templates/webpages/admin/delete_group_confirm_en.html [new file with mode: 0644]
templates/webpages/admin/edit_group_en.html [new file with mode: 0644]
templates/webpages/admin/edit_group_membership_en.html [new file with mode: 0644]
templates/webpages/admin/edit_groups_en.html [new file with mode: 0644]
templates/webpages/admin/edit_user_de.html
templates/webpages/admin/edit_user_en.html [new file with mode: 0644]
templates/webpages/admin/edit_user_master.html
templates/webpages/admin/list_users_en.html [new file with mode: 0644]
templates/webpages/admin/restore_dataset_en.html [new file with mode: 0644]
templates/webpages/admin/restore_dataset_start_footer_en.html [new file with mode: 0644]
templates/webpages/admin/restore_dataset_start_header_en.html [new file with mode: 0644]
templates/webpages/admin/test_db_connection_en.html [new file with mode: 0644]
templates/webpages/admin/update_dataset_en.html [new file with mode: 0644]
templates/webpages/admin/user_migration_complete_en.html [new file with mode: 0644]
templates/webpages/admin/user_migration_done_en.html [new file with mode: 0644]
templates/webpages/admin/user_migration_en.html [new file with mode: 0644]
templates/webpages/am/config_de.html
templates/webpages/am/config_en.html [new file with mode: 0644]
templates/webpages/am/config_master.html
templates/webpages/am/confirm_delete_warehouse_en.html [new file with mode: 0644]
templates/webpages/am/edit_accounts_en.html [new file with mode: 0644]
templates/webpages/am/edit_defaults_en.html [new file with mode: 0644]
templates/webpages/am/edit_price_factor_en.html [new file with mode: 0644]
templates/webpages/am/edit_tax_en.html [new file with mode: 0644]
templates/webpages/am/edit_templates_en.html [new file with mode: 0644]
templates/webpages/am/edit_units_en.html [new file with mode: 0644]
templates/webpages/am/edit_warehouse_en.html [new file with mode: 0644]
templates/webpages/am/list_account_details_en.html [new file with mode: 0644]
templates/webpages/am/list_accounts_en.html [new file with mode: 0644]
templates/webpages/am/list_price_factors_en.html [new file with mode: 0644]
templates/webpages/am/list_tax_en.html [new file with mode: 0644]
templates/webpages/am/list_warehouses_en.html [new file with mode: 0644]
templates/webpages/amcvar/display_cvar_config_form_en.html [new file with mode: 0644]
templates/webpages/amcvar/list_cvar_configs_en.html [new file with mode: 0644]
templates/webpages/amcvar/render_checkboxes_en.html [new file with mode: 0644]
templates/webpages/amcvar/render_inputs_en.html [new file with mode: 0644]
templates/webpages/amcvar/search_filter_en.html [new file with mode: 0644]
templates/webpages/amcvar/search_include_en.html [new file with mode: 0644]
templates/webpages/ap/ap_transactions_bottom_en.html [new file with mode: 0644]
templates/webpages/ar/ar_transactions_bottom_en.html [new file with mode: 0644]
templates/webpages/common/search_history_en.html [new file with mode: 0644]
templates/webpages/common/show_history_en.html [new file with mode: 0644]
templates/webpages/common/show_vc_details_en.html [new file with mode: 0644]
templates/webpages/ct/form_footer_en.html [new file with mode: 0644]
templates/webpages/ct/form_header_en.html [new file with mode: 0644]
templates/webpages/ct/get_delivery_en.html [new file with mode: 0644]
templates/webpages/ct/list_names_bottom_en.html [new file with mode: 0644]
templates/webpages/ct/search_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_assemblies_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_assemblies_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_footer_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_header_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_parts_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_parts_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_services_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/buchungsgruppen_services_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/coa_guess_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/error_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/footer_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/header_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/std_buchungsgruppen_unknown_coa_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_error_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_header_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_parts_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_parts_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_services_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_services_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_set_default_done_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/units_set_default_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/update_templates_warnings_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/upgrade_message2_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/warehouse_form_en.html [new file with mode: 0644]
templates/webpages/dbupgrade/warning_en.html [new file with mode: 0644]
templates/webpages/do/delete_en.html [new file with mode: 0644]
templates/webpages/do/form_footer_en.html [new file with mode: 0644]
templates/webpages/do/form_header_en.html [new file with mode: 0644]
templates/webpages/do/orders_bottom_en.html [new file with mode: 0644]
templates/webpages/do/orders_top_en.html [new file with mode: 0644]
templates/webpages/do/search_en.html [new file with mode: 0644]
templates/webpages/do/set_stock_in_out_en.html [new file with mode: 0644]
templates/webpages/do/stock_in_form_en.html [new file with mode: 0644]
templates/webpages/do/stock_out_form_en.html [new file with mode: 0644]
templates/webpages/drafts/load_en.html [new file with mode: 0644]
templates/webpages/drafts/save_new_en.html [new file with mode: 0644]
templates/webpages/dunning/add_en.html [new file with mode: 0644]
templates/webpages/dunning/edit_config_en.html [new file with mode: 0644]
templates/webpages/dunning/search_en.html [new file with mode: 0644]
templates/webpages/dunning/set_email_en.html [new file with mode: 0644]
templates/webpages/dunning/show_dunning_bottom_en.html [new file with mode: 0644]
templates/webpages/dunning/show_dunning_top_en.html [new file with mode: 0644]
templates/webpages/dunning/show_invoices_en.html [new file with mode: 0644]
templates/webpages/fu/add_edit_en.html [new file with mode: 0644]
templates/webpages/fu/close_window_en.html [new file with mode: 0644]
templates/webpages/fu/edit_access_rights_en.html [new file with mode: 0644]
templates/webpages/fu/report_bottom_en.html [new file with mode: 0644]
templates/webpages/fu/report_for_todo_list_en.html [new file with mode: 0644]
templates/webpages/fu/report_top_en.html [new file with mode: 0644]
templates/webpages/fu/search_en.html [new file with mode: 0644]
templates/webpages/generic/calculate_qty_en.html [new file with mode: 0644]
templates/webpages/generic/cov_selection_en.html [new file with mode: 0644]
templates/webpages/generic/edit_email_en.html [new file with mode: 0644]
templates/webpages/generic/error_en.html [new file with mode: 0644]
templates/webpages/generic/information_en.html [new file with mode: 0644]
templates/webpages/generic/new_item_en.html [new file with mode: 0644]
templates/webpages/generic/part_selection_en.html [new file with mode: 0644]
templates/webpages/generic/print_options_en.html [new file with mode: 0644]
templates/webpages/generic/select_delivery_customer_en.html [new file with mode: 0644]
templates/webpages/generic/select_part_en.html [new file with mode: 0644]
templates/webpages/generic/select_vendor_en.html [new file with mode: 0644]
templates/webpages/generic/set_longdescription_en.html [new file with mode: 0644]
templates/webpages/generictranslations/edit_greetings_en.html [new file with mode: 0644]
templates/webpages/gl/form_header_chart_balances_js_en.html [new file with mode: 0644]
templates/webpages/gl/generate_report_bottom_en.html [new file with mode: 0644]
templates/webpages/ic/assembly_row_en.html [new file with mode: 0644]
templates/webpages/ic/choice_en.html [new file with mode: 0644]
templates/webpages/ic/confirm_price_update_en.html [new file with mode: 0644]
templates/webpages/ic/form_footer_en.html [new file with mode: 0644]
templates/webpages/ic/form_header_en.html [new file with mode: 0644]
templates/webpages/ic/generate_report_bottom_en.html [new file with mode: 0644]
templates/webpages/ic/makemodel_en.html [new file with mode: 0644]
templates/webpages/ic/parts_language_selection_en.html [new file with mode: 0644]
templates/webpages/ic/price_row_en.html [new file with mode: 0644]
templates/webpages/ic/search_en.html [new file with mode: 0644]
templates/webpages/ic/search_update_prices_en.html [new file with mode: 0644]
templates/webpages/login/auth_db_unreachable_en.html [new file with mode: 0644]
templates/webpages/login/authentication_pl_missing_en.html [new file with mode: 0644]
templates/webpages/login/company_logo_en.html [new file with mode: 0644]
templates/webpages/login/login_screen_en.html [new file with mode: 0644]
templates/webpages/login/password_error_en.html [new file with mode: 0644]
templates/webpages/menu/menunew_en.html [new file with mode: 0644]
templates/webpages/menu/menuv3_en.html [new file with mode: 0644]
templates/webpages/menu/menuv4_en.html [new file with mode: 0644]
templates/webpages/oe/check_for_direct_delivery_en.html [new file with mode: 0644]
templates/webpages/oe/form_footer_en.html [new file with mode: 0644]
templates/webpages/oe/form_header_en.html [new file with mode: 0644]
templates/webpages/oe/orders_bottom_en.html [new file with mode: 0644]
templates/webpages/oe/orders_top_en.html [new file with mode: 0644]
templates/webpages/oe/report_for_todo_list_en.html [new file with mode: 0644]
templates/webpages/oe/sales_order_en.html [new file with mode: 0644]
templates/webpages/oe/search_en.html [new file with mode: 0644]
templates/webpages/projects/project_form_en.html [new file with mode: 0644]
templates/webpages/projects/search_en.html [new file with mode: 0644]
templates/webpages/report_generator/csv_export_options_en.html [new file with mode: 0644]
templates/webpages/report_generator/html_report_en.html [new file with mode: 0644]
templates/webpages/report_generator/pdf_export_options_en.html [new file with mode: 0644]
templates/webpages/rp/aging_ar_bottom_en.html [new file with mode: 0644]
templates/webpages/rp/aging_ar_top_en.html [new file with mode: 0644]
templates/webpages/rp/balance_sheet_en.html [new file with mode: 0644]
templates/webpages/rp/html_report_susa_en.html [new file with mode: 0644]
templates/webpages/todo/show_todo_list_en.html [new file with mode: 0644]
templates/webpages/ustva/config_step1_en.html [new file with mode: 0644]
templates/webpages/ustva/config_step2_en.html [new file with mode: 0644]
templates/webpages/ustva/generic_taxreport_en.html [new file with mode: 0644]
templates/webpages/ustva/report_en.html [new file with mode: 0644]
templates/webpages/wh/journal_filter_en.html [new file with mode: 0644]
templates/webpages/wh/removal_parts_selection_en.html [new file with mode: 0644]
templates/webpages/wh/report_filter_en.html [new file with mode: 0644]
templates/webpages/wh/transfer_parts_selection_en.html [new file with mode: 0644]
templates/webpages/wh/warehouse_selection_assembly_en.html [new file with mode: 0644]
templates/webpages/wh/warehouse_selection_en.html [new file with mode: 0644]
templates/webpages/wh/warehouse_selection_stock_en.html [new file with mode: 0644]

index 0b535d7..e3ff236 100644 (file)
@@ -66,9 +66,12 @@ sub _init {
   my $country  = shift;
   my $NLS_file = shift;
 
+  $self->{charset}     = Common::DEFAULT_CHARSET;
+  $self->{countrycode} = $country;
+  $self->{NLS_file}    = $NLS_file;
+
   if ($country && -d "locale/$country") {
     local *IN;
-    $self->{countrycode} = $country;
     if (open(IN, "<", "locale/$country/$NLS_file")) {
       my $code = join("", <IN>);
       eval($code);
@@ -80,23 +83,18 @@ sub _init {
       close IN;
 
       chomp $self->{charset};
-
-    } else {
-      $self->{charset} = Common::DEFAULT_CHARSET;
     }
+  }
 
-    my $db_charset            = $main::dbcharset || Common::DEFAULT_CHARSET;
-
-    $self->{iconv}            = Text::Iconv->new($self->{charset}, $db_charset);
-    $self->{iconv_reverse}    = Text::Iconv->new($db_charset,      $self->{charset});
-    $self->{iconv_english}    = Text::Iconv->new('ASCII',          $db_charset);
-    $self->{iconv_iso8859}    = Text::Iconv->new('ISO-8859-15',    $db_charset);
-    $self->{iconv_to_iso8859} = Text::Iconv->new($db_charset,      'ISO-8859-15');
+  my $db_charset            = $main::dbcharset || Common::DEFAULT_CHARSET;
 
-    $self->_read_special_chars_file($country);
-  }
+  $self->{iconv}            = Text::Iconv->new($self->{charset}, $db_charset);
+  $self->{iconv_reverse}    = Text::Iconv->new($db_charset,      $self->{charset});
+  $self->{iconv_english}    = Text::Iconv->new('ASCII',          $db_charset);
+  $self->{iconv_iso8859}    = Text::Iconv->new('ISO-8859-15',    $db_charset);
+  $self->{iconv_to_iso8859} = Text::Iconv->new($db_charset,      'ISO-8859-15');
 
-  $self->{NLS_file} = $NLS_file;
+  $self->_read_special_chars_file($country);
 
   push @{ $self->{LONG_MONTH} },
     ("January",   "February", "March",    "April",
index 0aac5a1..8f380aa 100644 (file)
@@ -2508,7 +2508,6 @@ sub config {
 
   %countrycodes = User->country_codes;
 
-  $countrycodes{""} = "American English";
   $form->{COUNTRYCODES} = [];
   foreach $countrycode (sort { $countrycodes{$a} cmp $countrycodes{$b} } keys %countrycodes) {
     push @{ $form->{COUNTRYCODES} }, {
index 8f2223b..1d9b0ac 100644 (file)
@@ -47,7 +47,7 @@ use URI;
 # end of main
 
 sub display {
-  $locale     = Locale->new($language, "menu");
+  $locale     = Locale->new($myconfig{countrycode}, "menu");
   my $charset = $dbcharset || 'ISO-8859-1';
   my $callback            = $form->unescape($form->{callback});
   $callback               = URI->new($callback)->rel($callback) if $callback;
index fd608fc..b948ef2 100644 (file)
@@ -123,7 +123,7 @@ window.onload=clockon
 }
 
 sub acc_menu {
-  $locale = Locale->new($language, "menu");
+  $locale = Locale->new($myconfig{countrycode}, "menu");
   $mainlevel = $form->{level};
   $mainlevel =~ s/$mainlevel--//g;
   my $menu = new Menu "$menufile";
index 5002b1b..777c38c 100644 (file)
@@ -81,7 +81,7 @@ sub clock_line {
 }
 
 sub acc_menu {
-  $locale = Locale->new($language, "menu");
+  $locale = Locale->new($myconfig{countrycode}, "menu");
 
   my $mainlevel =  $form->{level};
   $mainlevel    =~ s/\Q$mainlevel\E--//g;
index 14753f2..02a465e 100644 (file)
@@ -77,7 +77,7 @@ sub clock_line {
 }
 
 sub acc_menu {
-  $locale = Locale->new($language, "menu");
+  $locale = Locale->new($myconfig{countrycode}, "menu");
 
   $mainlevel = $form->{level};
   $mainlevel =~ s/\Q$mainlevel\E--//g;
index e20c833..0420fee 100644 (file)
@@ -77,7 +77,7 @@ sub clock_line {
 }
 
 sub acc_menu {
-  $locale = Locale->new($language, "menu");
+  $locale = Locale->new($myconfig{countrycode}, "menu");
 
   $mainlevel = $form->{level};
   $mainlevel =~ s/\Q$mainlevel\E--//g;
index fc0b977..4d4d478 100644 (file)
@@ -1 +1 @@
-German
+Deutsch (German)
index e04504e..c949004 100644 (file)
@@ -737,7 +737,6 @@ $self->{texts} = {
   'General ledger and cash'     => 'Finanzbuchhaltung und Zahlungsverkehr',
   'General ledger corrections'  => 'Korrekturen im Hauptbuch',
   'Generic Tax Report'          => 'USTVA Bericht',
-  'German'                      => 'Deutsch',
   'Given Name'                  => 'Vorname',
   'Greeting'                    => 'Anrede',
   'Greetings'                   => 'Anreden',
index a497ee6..7cc3c53 100755 (executable)
@@ -315,7 +315,7 @@ if ($opt_c) {
 
 $per = sprintf("%.1f", ($count - $notext) / $count * 100);
 print "\n$trlanguage - ${per}%";
-print " - $notext missing" if $notext;
+print " - $notext/$count missing" if $notext;
 print "\n";
 
 exit;
@@ -577,7 +577,7 @@ sub scanhtmlfile {
             substr($line, 0, $+[0]) = "";
             $text =~ s/\s+/ /g;
 
-            $copying = 0; 
+            $copying = 0;
             if ($issubmit) {
   #            $submit{$text} = 1;
                $cached{$_[0]}{submit}{$text} = 1;
diff --git a/locale/en/COPYING b/locale/en/COPYING
new file mode 100644 (file)
index 0000000..ceaa769
--- /dev/null
@@ -0,0 +1,23 @@
+######################################################################
+# SQL-Ledger Accounting
+# Copyright (c) 2003
+#
+# British English texts:
+#
+#  Author:
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+#######################################################################
+
diff --git a/locale/en/LANGUAGE b/locale/en/LANGUAGE
new file mode 100644 (file)
index 0000000..fb54c64
--- /dev/null
@@ -0,0 +1 @@
+English
diff --git a/locale/en/Pg-upgrade-2.2.0.19-2.2.0.20 b/locale/en/Pg-upgrade-2.2.0.19-2.2.0.20
new file mode 100644 (file)
index 0000000..ba794ee
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'mydberror'                   => 'mydberror',
+  'mydoquery'                   => 'mydoquery',
+  'update_contacts_add_columns' => 'update_contacts_add_columns',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.20-2.2.0.21 b/locale/en/Pg-upgrade-2.2.0.20-2.2.0.21
new file mode 100644 (file)
index 0000000..c82b4e7
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'mydberror'                   => 'mydberror',
+  'mydoquery'                   => 'mydoquery',
+  'update_contacts_handle_department' => 'update_contacts_handle_department',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.25-2.2.0.26 b/locale/en/Pg-upgrade-2.2.0.25-2.2.0.26
new file mode 100644 (file)
index 0000000..3cf7b50
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A unit with this name does already exist.' => 'A unit with this name does already exist.',
+  'Database update error:'      => 'Database update error:',
+  'The base unit does not exist.' => 'The base unit does not exist.',
+  'The factor is missing.'      => 'The factor is missing.',
+  'The name is missing.'        => 'The name is missing.',
+  'The unit has been saved.'    => 'The unit has been saved.',
+};
+
+$self->{subs} = {
+  'get_base_unit'               => 'get_base_unit',
+  'mydberror'                   => 'mydberror',
+  'myshowerror'                 => 'myshowerror',
+  'retrieve_units'              => 'retrieve_units',
+  'unit_select_data'            => 'unit_select_data',
+  'update_units'                => 'update_units',
+  'update_units_add_unit'       => 'update_units_add_unit',
+  'update_units_assign_known'   => 'update_units_assign_known',
+  'update_units_assign_units'   => 'update_units_assign_units',
+  'update_units_set_default'    => 'update_units_set_default',
+  'update_units_step_3'         => 'update_units_step_3',
+  'update_units_steps_1_2'      => 'update_units_steps_1_2',
+  'add_unit'                    => 'add_unit',
+  'assign_units'                => 'assign_units',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.27-2.2.0.28 b/locale/en/Pg-upgrade-2.2.0.27-2.2.0.28
new file mode 100644 (file)
index 0000000..907e53f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'look_for_accno'              => 'look_for_accno',
+  'mydberror'                   => 'mydberror',
+  'myshowerror'                 => 'myshowerror',
+  'update_defaults_add_coa'     => 'update_defaults_add_coa',
+  'update_defaults_set_coa'     => 'update_defaults_set_coa',
+  'update_guess_chart_of_accounts' => 'update_guess_chart_of_accounts',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.28-2.2.0.29 b/locale/en/Pg-upgrade-2.2.0.28-2.2.0.29
new file mode 100644 (file)
index 0000000..209bfcf
--- /dev/null
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'create_standard_buchungsgruppen' => 'create_standard_buchungsgruppen',
+  'create_standard_buchungsgruppen_skr03' => 'create_standard_buchungsgruppen_skr03',
+  'create_standard_buchungsgruppen_skr04' => 'create_standard_buchungsgruppen_skr04',
+  'fix_skr03'                   => 'fix_skr03',
+  'fix_skr04'                   => 'fix_skr04',
+  'mydberror'                   => 'mydberror',
+  'myshowerror'                 => 'myshowerror',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.31-2.2.0.32 b/locale/en/Pg-upgrade-2.2.0.31-2.2.0.32
new file mode 100644 (file)
index 0000000..97bc660
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'mydberror'                   => 'mydberror',
+  'myshowerror'                 => 'myshowerror',
+  'update_steuersaetze'         => 'update_steuersaetze',
+  'update_steuersaetze_skr03'   => 'update_steuersaetze_skr03',
+  'update_steuersaetze_skr04'   => 'update_steuersaetze_skr04',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.33-2.2.0.34 b/locale/en/Pg-upgrade-2.2.0.33-2.2.0.34
new file mode 100644 (file)
index 0000000..8796ed9
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'assign_buchungsgruppen_for_assemblies' => 'assign_buchungsgruppen_for_assemblies',
+  'create_buchungsgruppen'      => 'create_buchungsgruppen',
+  'display_create_bgs_dialog'   => 'display_create_bgs_dialog',
+  'do_update'                   => 'do_update',
+  'force_inventory_accno_id_for_parts' => 'force_inventory_accno_id_for_parts',
+  'mydberror'                   => 'mydberror',
+  'mydoquery'                   => 'mydoquery',
+  'retrieve_accounts'           => 'retrieve_accounts',
+  'retrieve_buchungsgruppen'    => 'retrieve_buchungsgruppen',
+  'retrieve_std_inventory_accno_id' => 'retrieve_std_inventory_accno_id',
+  'retrieve_unknown_accno_combinations' => 'retrieve_unknown_accno_combinations',
+  'set_ic_links'                => 'set_ic_links',
+  'set_taxzone_ids'             => 'set_taxzone_ids',
+  'update_known_buchungsgruppen' => 'update_known_buchungsgruppen',
+  'create_buchungsgruppen'      => 'create_buchungsgruppen',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.36-2.2.0.37 b/locale/en/Pg-upgrade-2.2.0.36-2.2.0.37
new file mode 100644 (file)
index 0000000..218b700
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+};
+
+$self->{subs} = {
+  'do_update'                   => 'do_update',
+};
+
+1;
diff --git a/locale/en/Pg-upgrade-2.2.0.37-2.2.0.38 b/locale/en/Pg-upgrade-2.2.0.37-2.2.0.38
new file mode 100644 (file)
index 0000000..a7c553c
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Could not copy %s to %s. Reason: %s' => 'Could not copy %s to %s. Reason: %s',
+  'Could not open the file users/members.' => 'Could not open the file users/members.',
+  'Could not rename %s to %s. Reason: %s' => 'Could not rename %s to %s. Reason: %s',
+};
+
+$self->{subs} = {
+  'do_update'                   => 'do_update',
+  'update_templates'            => 'update_templates',
+};
+
+1;
diff --git a/locale/en/USTVA_abstraction b/locale/en/USTVA_abstraction
new file mode 100644 (file)
index 0000000..c19d962
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'create_tables'               => 'create_tables',
+  'do_copy'                     => 'do_copy',
+  'do_query'                    => 'do_query',
+  'mydberror'                   => 'mydberror',
+};
+
+1;
diff --git a/locale/en/USTVA_at b/locale/en/USTVA_at
new file mode 100644 (file)
index 0000000..62c9505
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'check_coa'                   => 'check_coa',
+  'clear_tables'                => 'clear_tables',
+  'coa_is_empty'                => 'coa_is_empty',
+  'do_copy_tax_report_structure' => 'do_copy_tax_report_structure',
+  'do_insert_buchungsgruppen'   => 'do_insert_buchungsgruppen',
+  'do_insert_chart'             => 'do_insert_chart',
+  'do_insert_tax'               => 'do_insert_tax',
+  'do_insert_taxkeys'           => 'do_insert_taxkeys',
+  'do_query'                    => 'do_query',
+  'mydberror'                   => 'mydberror',
+};
+
+1;
diff --git a/locale/en/acctranscorrections b/locale/en/acctranscorrections
new file mode 100644 (file)
index 0000000..cdd0e93
--- /dev/null
@@ -0,0 +1,215 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Assistant for general ledger corrections' => 'Assistant for general ledger corrections',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delete transaction'          => 'Delete transaction',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General Ledger Transaction'  => 'General Ledger Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'General ledger corrections'  => 'General ledger corrections',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No problems were recognized.' => 'No problems were recognized.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => 'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transaction ID missing.'     => 'Transaction ID missing.',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Unknown problem type.'       => 'Unknown problem type.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'analyze'                     => 'analyze',
+  'analyze_filter'              => 'analyze_filter',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'assistant'                   => 'assistant',
+  'assistant_for_ap_ar_wrong_taxkeys' => 'assistant_for_ap_ar_wrong_taxkeys',
+  'assistant_for_invoice_inventory_with_taxkeys' => 'assistant_for_invoice_inventory_with_taxkeys',
+  'assistant_for_wrong_taxes'   => 'assistant_for_wrong_taxes',
+  'assistant_for_wrong_taxkeys' => 'assistant_for_wrong_taxkeys',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete_transaction'          => 'delete_transaction',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'dispatcher'                  => 'dispatcher',
+  'fix_ap_ar_wrong_taxkeys'     => 'fix_ap_ar_wrong_taxkeys',
+  'fix_invoice_inventory_with_taxkeys' => 'fix_invoice_inventory_with_taxkeys',
+  'fix_wrong_taxkeys'           => 'fix_wrong_taxkeys',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'redirect'                    => 'redirect',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete_transaction'          => 'delete_transaction',
+  'fix_transaction'             => 'fix_transaction',
+  'fix_transactions'            => 'fix_transactions',
+  'new_part'                    => 'new_part',
+  're_run_analysis'             => 're_run_analysis',
+  'start_analysis'              => 'start_analysis',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/admin b/locale/en/admin
new file mode 100644 (file)
index 0000000..b5d555a
--- /dev/null
@@ -0,0 +1,315 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A group with that name does already exist.' => 'A group with that name does already exist.',
+  'A temporary directory could not be created:' => 'A temporary directory could not be created:',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'A temporary file could not be created:' => 'A temporary file could not be created:',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Add User'                    => 'Add User',
+  'Address'                     => 'Address',
+  'Administration'              => 'Administration',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Another user with the login #1 does already exist.' => 'Another user with the login #1 does already exist.',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Authentification database creation' => 'Authentification database creation',
+  'Authentification tables creation' => 'Authentification tables creation',
+  'Backup Dataset'              => 'Backup Dataset',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot create Lock!'         => 'Cannot create Lock!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Could not open the old memberfile.' => 'Could not open the old memberfile.',
+  'Create Dataset'              => 'Create Dataset',
+  'Create a standard group'     => 'Create a standard group',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Database Administration'     => 'Database Administration',
+  'Database Connection Test'    => 'Database Connection Test',
+  'Database User missing!'      => 'Database User missing!',
+  'Database backups and restorations are disabled in lx-erp.conf.' => 'Database backups and restorations are disabled in lx-erp.conf.',
+  'Dataset missing!'            => 'Dataset missing!',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delete Dataset'              => 'Delete Dataset',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit User'                   => 'Edit User',
+  'Edit group membership'       => 'Edit group membership',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'Full Access'                 => 'Full Access',
+  'Full access to all functions' => 'Full access to all functions',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Incorrect Password!'         => 'Incorrect Password!',
+  'Invoice'                     => 'Invoice',
+  'Lockfile created!'           => 'Lockfile created!',
+  'Lockfile removed!'           => 'Lockfile removed!',
+  'Login name missing!'         => 'Login name missing!',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Database Drivers available!' => 'No Database Drivers available!',
+  'No Dataset selected!'        => 'No Dataset selected!',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No backup file has been uploaded.' => 'No backup file has been uploaded.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No group has been selected, or the group does not exist anymore.' => 'No group has been selected, or the group does not exist anymore.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No user has been selected.'  => 'No user has been selected.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Nothing to delete!'          => 'Nothing to delete!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Restore Dataset'             => 'Restore Dataset',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The dataset name is missing.' => 'The dataset name is missing.',
+  'The directory "%s" could not be created:\n%s' => 'The directory "%s" could not be created:\n%s',
+  'The directory %s does not exist.' => 'The directory %s does not exist.',
+  'The email address is missing.' => 'The email address is missing.',
+  'The group has been added.'   => 'The group has been added.',
+  'The group has been deleted.' => 'The group has been deleted.',
+  'The group has been saved.'   => 'The group has been saved.',
+  'The group memberships have been saved.' => 'The group memberships have been saved.',
+  'The group name is missing.'  => 'The group name is missing.',
+  'The login is missing.'       => 'The login is missing.',
+  'The pg_dump process could not be started.' => 'The pg_dump process could not be started.',
+  'The pg_restore process could not be started.' => 'The pg_restore process could not be started.',
+  'The selected  PostgreSQL installation uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'The selected  PostgreSQL installation uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'The user has been added to this group.' => 'The user has been added to this group.',
+  'The user has been removed from this group.' => 'The user has been removed from this group.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update Dataset'              => 'Update Dataset',
+  'User data migration'         => 'User data migration',
+  'User deleted!'               => 'User deleted!',
+  'User migration complete'     => 'User migration complete',
+  'User saved!'                 => 'User saved!',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'add_group'                   => 'add_group',
+  'add_to_group'                => 'add_to_group',
+  'add_user'                    => 'add_user',
+  'adminlogin'                  => 'adminlogin',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'back'                        => 'back',
+  'backup_dataset'              => 'backup_dataset',
+  'backup_dataset_start'        => 'backup_dataset_start',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_auth_db_and_tables'    => 'check_auth_db_and_tables',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_auth_db'              => 'create_auth_db',
+  'create_auth_tables'          => 'create_auth_tables',
+  'create_dataset'              => 'create_dataset',
+  'create_standard_group'       => 'create_standard_group',
+  'create_standard_group_ask'   => 'create_standard_group_ask',
+  'dbcreate'                    => 'dbcreate',
+  'dbdelete'                    => 'dbdelete',
+  'dbselect_source'             => 'dbselect_source',
+  'dbupdate'                    => 'dbupdate',
+  'delete'                      => 'delete',
+  'delete_dataset'              => 'delete_dataset',
+  'delete_group'                => 'delete_group',
+  'delete_user'                 => 'delete_user',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'dispatcher'                  => 'dispatcher',
+  'dont_create_standard_group'  => 'dont_create_standard_group',
+  'edit'                        => 'edit',
+  'edit_group'                  => 'edit_group',
+  'edit_group_membership'       => 'edit_group_membership',
+  'edit_groups'                 => 'edit_groups',
+  'edit_user'                   => 'edit_user',
+  'edit_user_form'              => 'edit_user_form',
+  'format_dates'                => 'format_dates',
+  'get_value'                   => 'get_value',
+  'gl_transaction'              => 'gl_transaction',
+  'list_users'                  => 'list_users',
+  'lock_system'                 => 'lock_system',
+  'login'                       => 'login',
+  'login_name'                  => 'login_name',
+  'logout'                      => 'logout',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'migrate_users'               => 'migrate_users',
+  'no'                          => 'no',
+  'part_selection_internal'     => 'part_selection_internal',
+  'pg_database_administration'  => 'pg_database_administration',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove_from_group'           => 'remove_from_group',
+  'restore_dataset'             => 'restore_dataset',
+  'restore_dataset_start'       => 'restore_dataset_start',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_group'                  => 'save_group',
+  'save_group_membership'       => 'save_group_membership',
+  'save_user'                   => 'save_user',
+  'save_user_as_new'            => 'save_user_as_new',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'test_db_connection'          => 'test_db_connection',
+  'unlock_system'               => 'unlock_system',
+  'update_dataset'              => 'update_dataset',
+  'user_migration_complete'     => 'user_migration_complete',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'add'                         => 'add',
+  'add_user'                    => 'add_user',
+  'add_to_group'                => 'add_to_group',
+  'back'                        => 'back',
+  'backup_dataset'              => 'backup_dataset',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'create_dataset'              => 'create_dataset',
+  'create_tables'               => 'create_tables',
+  'delete'                      => 'delete',
+  'delete_dataset'              => 'delete_dataset',
+  'edit'                        => 'edit',
+  'edit_groups'                 => 'edit_groups',
+  'lock_system'                 => 'lock_system',
+  'login'                       => 'login',
+  'logout'                      => 'logout',
+  'new_part'                    => 'new_part',
+  'no'                          => 'no',
+  'pg_database_administration'  => 'pg_database_administration',
+  'remove_from_group'           => 'remove_from_group',
+  'restore_dataset'             => 'restore_dataset',
+  'save'                        => 'save',
+  'unlock_system'               => 'unlock_system',
+  'update_dataset'              => 'update_dataset',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/all b/locale/en/all
new file mode 100644 (file)
index 0000000..4a472a3
--- /dev/null
@@ -0,0 +1,1928 @@
+#!/usr/bin/perl
+
+# These are all the texts to build the translations files.
+# The file has the form of 'english text'  => 'foreign text',
+# you can add the translation in this file or in the 'missing' file
+# run locales.pl from this directory to rebuild the translation files
+
+$self->{texts} = {
+  ' Date missing!'              => '',
+  ' Part Number missing!'       => '',
+  ' missing!'                   => '',
+  '#1 prices were updated.'     => '',
+  '&lt;%account_number%&gt; -- Your account number' => '',
+  '&lt;%bank%&gt; -- Your bank' => '',
+  '&lt;%bank_code%&gt; -- Your bank code' => '',
+  '&lt;%currency%&gt; -- The selected currency' => '',
+  '&lt;%invtotal%&gt; -- Invoice total' => '',
+  '&lt;%invtotal_wo_skonto%&gt; -- Invoice total less discount' => '',
+  '&lt;%netto_date%&gt; -- Date the payment is due in full' => '',
+  '&lt;%skonto_amount%&gt; -- The deductible amount' => '',
+  '&lt;%skonto_date%&gt; -- Date the payment is due with discount' => '',
+  '&lt;%terms_netto%&gt; -- The number of days for full payment' => '',
+  '&lt;%total%&gt; -- Amount payable' => '',
+  '&lt;%total_wo_skonto%&gt; -- Amount payable less discount' => '',
+  '*/'                          => '',
+  '---please select---'         => '',
+  '...after loggin in'          => '',
+  '...done'                     => '',
+  '...on the TODO list'         => '',
+  '1. Quarter'                  => '',
+  '2. Quarter'                  => '',
+  '3. Quarter'                  => '',
+  '4. Quarter'                  => '',
+  '<b>What</b> do you want to look for?' => '',
+  '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.' => '',
+  'A group named &quot;Full Access&quot; has been created.' => '',
+  'A group with that name does already exist.' => '',
+  '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.' => '',
+  'A temporary directory could not be created:' => '',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => '',
+  'A temporary file could not be created:' => '',
+  'A unit with this name does already exist.' => '',
+  'A variable marked as \'editable\' can be changed in each quotation, order, invoice etc.' => '',
+  'ADDED'                       => '',
+  'AP'                          => 'Purchases',
+  'AP Aging'                    => 'Creditor Aging',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AP Transaction (abbreviation)' => '',
+  'AP Transaction Storno (one letter abbreviation)' => '',
+  'AP Transaction with Storno (abbreviation)' => '',
+  'AP Transactions'             => 'Purchase Transactions',
+  'AP transactions with sales taxkeys and/or AR transactions with input taxkeys' => '',
+  'AR'                          => 'Sales',
+  'AR Aging'                    => 'Debtor Aging',
+  'AR Transaction'              => 'Sales Transaction',
+  'AR Transaction (abbreviation)' => '',
+  'AR Transactions'             => 'Sales Transactions',
+  'ASSETS'                      => '',
+  'About'                       => '',
+  'Abrechnungsnummer'           => '',
+  'Abteilung'                   => '',
+  'Account'                     => '',
+  'Account Category A'          => '',
+  'Account Category C'          => '',
+  'Account Category E'          => '',
+  'Account Category G'          => '',
+  'Account Category I'          => '',
+  'Account Category L'          => '',
+  'Account Category Q'          => '',
+  'Account Description missing!' => '',
+  'Account Link AP'             => '',
+  'Account Link AP_amount'      => '',
+  'Account Link AP_paid'        => '',
+  'Account Link AP_tax'         => '',
+  'Account Link AR'             => '',
+  'Account Link AR_amount'      => '',
+  'Account Link AR_paid'        => '',
+  'Account Link AR_tax'         => '',
+  'Account Link CT_tax'         => '',
+  'Account Link IC'             => '',
+  'Account Link IC_cogs'        => '',
+  'Account Link IC_expense'     => '',
+  'Account Link IC_income'      => '',
+  'Account Link IC_sale'        => '',
+  'Account Link IC_taxpart'     => '',
+  'Account Link IC_taxservice'  => '',
+  'Account Number'              => '',
+  'Account Number already used!' => '',
+  'Account Number missing!'     => '',
+  'Account Nummer'              => '',
+  'Account Type'                => '',
+  'Account Type missing!'       => '',
+  'Account deleted!'            => '',
+  'Account for fees'            => '',
+  'Account for interest'        => '',
+  'Account saved!'              => '',
+  'Accounting Group deleted!'   => '',
+  'Accounting Group saved!'     => '',
+  'Accounting Menu'             => '',
+  'Accrual'                     => '',
+  'Active'                      => '',
+  'Active?'                     => '',
+  'Add'                         => '',
+  'Add '                        => '',
+  'Add AP Transaction'          => '',
+  'Add AR Transaction'          => '',
+  'Add Account'                 => '',
+  'Add Accounting Group'        => '',
+  'Add Accounts Payables Transaction' => 'Add Purchase Transaction',
+  'Add Accounts Receivables Transaction' => 'Add Sales Transaction',
+  'Add Assembly'                => '',
+  'Add Buchungsgruppe'          => '',
+  'Add Business'                => '',
+  'Add Credit Note'             => '',
+  'Add Customer'                => '',
+  'Add Delivery Order'          => '',
+  'Add Department'              => '',
+  'Add Dunning'                 => '',
+  'Add Exchangerate'            => '',
+  'Add Follow-Up'               => '',
+  'Add Follow-Up for #1'        => '',
+  'Add General Ledger Transaction' => '',
+  'Add Group'                   => '',
+  'Add Language'                => '',
+  'Add Lead'                    => '',
+  'Add License'                 => '',
+  'Add Part'                    => '',
+  'Add Payment Terms'           => '',
+  'Add Price Factor'            => '',
+  'Add Pricegroup'              => '',
+  'Add Printer'                 => '',
+  'Add Project'                 => '',
+  'Add Purchase Delivery Order' => '',
+  'Add Purchase Order'          => '',
+  'Add Quotation'               => '',
+  'Add RFQ'                     => '',
+  'Add Request for Quotation'   => '',
+  'Add Sales Delivery Order'    => '',
+  'Add Sales Invoice'           => '',
+  'Add Sales Order'             => '',
+  'Add Service'                 => '',
+  'Add Storno Credit Note'      => '',
+  'Add Transaction'             => '',
+  'Add User'                    => '',
+  'Add Vendor'                  => '',
+  'Add Vendor Invoice'          => '',
+  'Add Warehouse'               => '',
+  'Add a new group'             => '',
+  'Add and edit units'          => '',
+  'Add custom variable'         => '',
+  'Add note'                    => '',
+  'Add to group'                => '',
+  'Add unit'                    => '',
+  'Address'                     => '',
+  'Administration'              => '',
+  'Administration area'         => '',
+  'Advance turnover tax return' => '',
+  'Aktion'                      => '',
+  'All'                         => '',
+  'All Accounts'                => '',
+  'All Datasets up to date!'    => '',
+  'All changes in that file have been reverted.' => '',
+  'All database upgrades have been applied.' => '',
+  'All general ledger entries'  => '',
+  'All reports'                 => '',
+  'Allow access'                => '',
+  'Allow the following users access to my follow-ups:' => '',
+  'Alternatively you can create a new part which will then be selected.' => '',
+  'Alternatively you can skip this step and create groups yourself.' => '',
+  'Amended Advance Turnover Tax Return' => '',
+  'Amended Advance Turnover Tax Return (Nr. 10)' => '',
+  'Amount'                      => '',
+  'Amount Due'                  => '',
+  'Annotations'                 => '',
+  'Another user with the login #1 does already exist.' => '',
+  'Ansprechpartner'             => '',
+  'Ap aging on %s'              => '',
+  'Application Error. No Format given' => '',
+  'Application Error. Wrong Format' => '',
+  'Applying [% HTML.escape(file) %]:' => '',
+  'Approximately #1 prices will be updated.' => '',
+  'Apr'                         => '',
+  'April'                       => '',
+  'Ar aging on %s'              => '',
+  'Are you sure you want to delete Delivery Order Number #1?' => '',
+  'Are you sure you want to delete Invoice Number' => '',
+  'Are you sure you want to delete Order Number' => '',
+  'Are you sure you want to delete Quotation Number' => '',
+  'Are you sure you want to delete Transaction' => '',
+  'Are you sure you want to remove the marked entries from the queue?' => '',
+  'Are you sure you want to update the prices' => '',
+  'Article Code'                => '',
+  'Article Code missing!'       => '',
+  'As a result, the saved onhand values of the present goods can be stored into a warehouse designated by you, or will be reset for a proper warehouse tracking' => '',
+  'Assemblies'                  => '',
+  'Assembly Description'        => '',
+  'Assembly Number'             => '',
+  'Assembly Number missing!'    => '',
+  'Asset'                       => '',
+  'Assets'                      => '',
+  'Assign new units'            => '',
+  'Assign units'                => '',
+  'Assistant for general ledger corrections' => '',
+  'Assume Tax Consultant Data in Tax Computation?' => '',
+  'At least'                    => '',
+  'At least one Perl module that Lx-Office ERP requires for running is not installed on your system.' => '',
+  'At most'                     => '',
+  'At the moment the transaction looks like this:' => '',
+  'Attach PDF:'                 => '',
+  'Attachment'                  => '',
+  'Attachment name'             => '',
+  'Attempt to call an undefined sub named \'%s\'' => '',
+  'Audit Control'               => '',
+  'Aug'                         => '',
+  'August'                      => '',
+  'Authentification database creation' => '',
+  'Authentification tables creation' => '',
+  'Auto Send?'                  => '',
+  'Automatically created invoice for fee and interest for dunning %s' => '',
+  'Available qty'               => '',
+  'BALANCE SHEET'               => '',
+  'BIC'                         => '',
+  'BOM'                         => '',
+  'BWA'                         => '',
+  'Back'                        => '',
+  'Backup Dataset'              => '',
+  'Backup file'                 => '',
+  'Backup of dataset'           => '',
+  'Balance'                     => '',
+  'Balance Sheet'               => '',
+  'Bank'                        => '',
+  'Bank Code'                   => '',
+  'Bank Code (long)'            => '',
+  'Bank Code Number'            => '',
+  'Bank Connection Tax Office'  => '',
+  'Bank Connections'            => '',
+  'Base unit'                   => '',
+  'Basic data'                  => '',
+  'Batch Printing'              => '',
+  'Bcc'                         => '',
+  'Belegnummer'                 => '',
+  'Beratername'                 => '',
+  'Beraternummer'               => '',
+  'Bestandskonto'               => '',
+  'Bilanz'                      => '',
+  'Billing Address'             => '',
+  'Billing/shipping address (city)' => '',
+  'Billing/shipping address (street)' => '',
+  'Billing/shipping address (zipcode)' => '',
+  'Bin'                         => '',
+  'Bin From'                    => '',
+  'Bin List'                    => '',
+  'Bin To'                      => '',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => '',
+  'Bins saved.'                 => '',
+  'Bins that have been used in the past cannot be deleted anymore. For these bins there\'s no checkbox in the &quot;Delete&quot; column.' => '',
+  'Birthday'                    => '',
+  'Bis'                         => '',
+  'Bis Konto: '                 => '',
+  'Body'                        => '',
+  'Body:'                       => '',
+  'Books are open'              => '',
+  'Books closed up to'          => '',
+  'Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.' => '',
+  'Both'                        => '',
+  'Bottom'                      => '',
+  'Bought'                      => '',
+  'Buchungsdatum'               => '',
+  'Buchungsgruppe'              => '',
+  'Buchungsgruppen'             => '',
+  'Buchungskonto'               => '',
+  'Buchungsnummer'              => '',
+  'Business Number'             => '',
+  'Business Volume'             => '',
+  'Business deleted!'           => '',
+  'Business saved!'             => '',
+  'CANCELED'                    => '',
+  'CB Transaction'              => '',
+  'CR'                          => '',
+  'CRM admin'                   => '',
+  'CRM create customers, vendors and contacts' => '',
+  'CRM follow up'               => '',
+  'CRM know how'                => '',
+  'CRM notices'                 => '',
+  'CRM opportunity'             => '',
+  'CRM optional software'       => '',
+  'CRM other'                   => '',
+  'CRM search'                  => '',
+  'CRM send email'              => '',
+  'CRM services'                => '',
+  'CRM status'                  => '',
+  'CRM termin'                  => '',
+  'CRM user'                    => '',
+  'CSV export -- options'       => '',
+  'Calculate'                   => '',
+  'Can not create that quantity with current stock' => '',
+  'Cancel'                      => '',
+  'Cancel Accounts Payables Transaction' => '',
+  'Cancel Accounts Receivables Transaction' => '',
+  'Cannot create Lock!'         => '',
+  'Cannot delete account!'      => '',
+  'Cannot delete customer!'     => '',
+  'Cannot delete default account!' => '',
+  'Cannot delete delivery order!' => '',
+  'Cannot delete invoice!'      => '',
+  'Cannot delete item!'         => '',
+  'Cannot delete order!'        => '',
+  'Cannot delete quotation!'    => '',
+  'Cannot delete transaction!'  => '',
+  'Cannot delete vendor!'       => '',
+  'Cannot have a value in both Debit and Credit!' => '',
+  'Cannot post Payment!'        => '',
+  'Cannot post Receipt!'        => '',
+  'Cannot post a transaction without a value!' => '',
+  'Cannot post invoice for a closed period!' => '',
+  'Cannot post invoice!'        => '',
+  'Cannot post payment for a closed period!' => '',
+  'Cannot post payment!'        => '',
+  'Cannot post transaction for a closed period!' => '',
+  'Cannot post transaction with a debit and credit entry for the same account!' => '',
+  'Cannot post transaction!'    => '',
+  'Cannot process payment for a closed period!' => '',
+  'Cannot remove files!'        => '',
+  'Cannot save account!'        => '',
+  'Cannot save order!'          => '',
+  'Cannot save preferences!'    => '',
+  'Cannot save quotation!'      => '',
+  'Cannot storno storno invoice!' => '',
+  'Carry over shipping address' => '',
+  'Cash'                        => '',
+  'Cc'                          => '',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => '',
+  'Charge Number'               => '',
+  'Charge number'               => '',
+  'Chart Type'                  => '',
+  'Chart balance'               => '',
+  'Chart of Accounts'           => '',
+  'Chart of accounts'           => '',
+  'Chartaccounts connected to this Tax:' => '',
+  'Check'                       => 'Cheque',
+  'Check Details'               => '',
+  'Checks'                      => '',
+  'Choose Customer'             => '',
+  'Choose Outputformat'         => '',
+  'Choose Vendor'               => '',
+  'Choose a Tax Number'         => '',
+  'City'                        => '',
+  'Cleared Balance'             => '',
+  'Clearing Tax Received (No 71)' => '',
+  'Click on login name to edit!' => '',
+  'Close'                       => '',
+  'Close Books up to'           => '',
+  'Close Window'                => '',
+  'Closed'                      => '',
+  'Collective Orders only work for orders from one customer!' => '',
+  'Comment'                     => '',
+  'Company'                     => '',
+  'Company Name'                => '',
+  'Compare to'                  => '',
+  'Configuration of individual TODO items' => '',
+  'Confirm'                     => '',
+  'Confirm!'                    => '',
+  'Confirmation'                => '',
+  'Contact'                     => '',
+  'Contact Person'              => '',
+  'Contact person (surname)'    => '',
+  'Contacts'                    => '',
+  'Continue'                    => '',
+  'Contra'                      => '',
+  'Copies'                      => '',
+  'Correct taxkey'              => '',
+  'Corrections'                 => '',
+  'Cost Center'                 => '',
+  'Costs'                       => '',
+  'Could not copy %s to %s. Reason: %s' => '',
+  'Could not open the file users/members.' => '',
+  'Could not open the old memberfile.' => '',
+  'Could not print dunning.'    => '',
+  'Could not rename %s to %s. Reason: %s' => '',
+  'Could not spawn ghostscript.' => '',
+  'Could not spawn the printer command.' => '',
+  'Could not update prices!'    => '',
+  'Country'                     => '',
+  'Create Assembly'             => '',
+  'Create Buchungsgruppen'      => '',
+  'Create Chart of Accounts'    => '',
+  'Create Dataset'              => '',
+  'Create Date'                 => '',
+  'Create a standard group'     => '',
+  'Create and edit RFQs'        => '',
+  'Create and edit customers and vendors' => '',
+  'Create and edit dunnings'    => '',
+  'Create and edit invoices and credit notes' => '',
+  'Create and edit parts, services, assemblies' => '',
+  'Create and edit projects'    => '',
+  'Create and edit purchase delivery orders' => '',
+  'Create and edit purchase orders' => '',
+  'Create and edit sales delivery orders' => '',
+  'Create and edit sales orders' => '',
+  'Create and edit sales quotations' => '',
+  'Create and edit vendor invoices' => '',
+  'Create invoice?'             => '',
+  'Create new'                  => '',
+  'Create tables'               => '',
+  'Created by'                  => '',
+  'Created for'                 => '',
+  'Created on'                  => '',
+  'Credit'                      => '',
+  'Credit (one letter abbreviation)' => '',
+  'Credit Account'              => '',
+  'Credit Limit'                => '',
+  'Credit Limit exceeded!!!'    => '',
+  'Credit Note'                 => '',
+  'Credit Note Date'            => '',
+  'Credit Note Number'          => '',
+  'Credit Starting Balance'     => '',
+  'Credit Tax'                  => '',
+  'Credit Tax Account'          => '',
+  'Credit note (one letter abbreviation)' => '',
+  'Curr'                        => '',
+  'Currencies'                  => '',
+  'Currency'                    => '',
+  'Current / Next Level'        => '',
+  'Current Earnings'            => '',
+  'Current unit'                => '',
+  'Current value:'              => '',
+  'Custom Variables'            => '',
+  'Custom variables for module' => '',
+  'Customer'                    => '',
+  'Customer Number'             => '',
+  'Customer Order Number'       => '',
+  'Customer deleted!'           => '',
+  'Customer details'            => '',
+  'Customer missing!'           => '',
+  'Customer not on file or locked!' => '',
+  'Customer not on file!'       => '',
+  'Customer saved!'             => '',
+  'Customer type'               => '',
+  'Customername'                => '',
+  'Customernumberinit'          => '',
+  'Customers'                   => '',
+  'Customers and vendors'       => '',
+  'Customized Report'           => '',
+  'DATEV - Export Assistent'    => '',
+  'DATEV Angaben'               => '',
+  'DATEV Export'                => '',
+  'DATEX - Export Assistent'    => '',
+  'DELETED'                     => '',
+  'DFV-Kennzeichen'             => '',
+  'DR'                          => '',
+  'DUNNING STARTED'             => '',
+  'DUNS-Nr'                     => '',
+  'Database'                    => '',
+  'Database Administration'     => '',
+  'Database Connection Test'    => '',
+  'Database Host'               => '',
+  'Database User missing!'      => '',
+  'Database backups and restorations are disabled in lx-erp.conf.' => '',
+  'Database name'               => '',
+  'Database template'           => '',
+  'Database update error:'      => '',
+  'Dataset'                     => '',
+  'Dataset missing!'            => '',
+  'Dataset name'                => '',
+  'Dataset upgrade'             => '',
+  'Date'                        => '',
+  'Date Format'                 => '',
+  'Date Paid'                   => '',
+  'Date and timestamp variables: If the default value equals \'NOW\' then the current date/current timestamp will be used. Otherwise the default value is copied as-is.' => '',
+  'Date missing!'               => '',
+  'Datevautomatik'              => '',
+  'Datum von'                   => '',
+  'Debit'                       => '',
+  'Debit (one letter abbreviation)' => '',
+  'Debit Account'               => '',
+  'Debit Starting Balance'      => '',
+  'Debit Tax'                   => '',
+  'Debit Tax Account'           => '',
+  'Debit and credit out of balance!' => '',
+  'Dec'                         => '',
+  'December'                    => '',
+  'Decimalplaces'               => '',
+  'Decrease'                    => '',
+  'Default (no language selected)' => '',
+  'Default Accounts'            => '',
+  'Default output medium'       => '',
+  'Default printer'             => '',
+  'Default template format'     => '',
+  'Default value'               => '',
+  'Defaults saved.'             => '',
+  'Delete'                      => '',
+  'Delete Account'              => '',
+  'Delete Contact'              => '',
+  'Delete Dataset'              => '',
+  'Delete Shipto'               => '',
+  'Delete delivery order'       => '',
+  'Delete drafts'               => '',
+  'Delete group'                => '',
+  'Delete transaction'          => '',
+  'Delivered'                   => '',
+  'Delivery Date'               => '',
+  'Delivery Order'              => '',
+  'Delivery Order Date'         => '',
+  'Delivery Order Date missing!' => '',
+  'Delivery Order Number'       => '',
+  'Delivery Order deleted!'     => '',
+  'Delivery Orders'             => '',
+  'Department'                  => '',
+  'Department deleted!'         => '',
+  'Department saved!'           => '',
+  'Departments'                 => '',
+  'Dependency loop detected:'   => '',
+  'Deposit'                     => '',
+  'Description'                 => '',
+  'Description (Click on Description for details)' => '',
+  'Description missing!'        => '',
+  'Description must not be empty!' => '',
+  'Destination bin'             => '',
+  'Destination warehouse'       => '',
+  'Destination warehouse and bin' => '',
+  'Details (one letter abbreviation)' => '',
+  'Difference'                  => '',
+  'Dimension unit'              => '',
+  'Directory'                   => '',
+  'Discount'                    => '',
+  'Display'                     => '',
+  'Display file'                => '',
+  'Display options'             => '',
+  'Do you really want to delete AP transaction #1?' => '',
+  'Do you really want to delete AR transaction #1?' => '',
+  'Do you really want to delete GL transaction #1?' => '',
+  'Do you really want to delete this group:' => '',
+  'Do you really want to delete this warehouse?' => '',
+  'Do you want Lx-Office to create a group for access to all functions?' => '',
+  'Do you want to <b>limit</b> your search?' => '',
+  'Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?' => '',
+  'Do you want to store the existing onhand values into a new warehouse?' => '',
+  'Document'                    => '',
+  'Documents in the WebDAV repository' => '',
+  'Done'                        => '',
+  'Download the backup'         => '',
+  'Draft saved.'                => '',
+  'Drawing'                     => '',
+  'Driver'                      => '',
+  'Dropdown Limit'              => '',
+  'Due'                         => '',
+  'Due Date'                    => '',
+  'Due Date missing!'           => '',
+  'Duedate +Days'               => '',
+  'Dunning'                     => '',
+  'Dunning Amount'              => '',
+  'Dunning Date'                => '',
+  'Dunning Date from'           => '',
+  'Dunning Description'         => '',
+  'Dunning Description missing in row ' => '',
+  'Dunning Duedate'             => '',
+  'Dunning Level'               => '',
+  'Dunning Level missing in row ' => '',
+  'Dunning Process Config saved!' => '',
+  'Dunning Process started for selected invoices!' => '',
+  'Dunning number'              => '',
+  'Dunning overview'            => '',
+  'Dunnings'                    => '',
+  'During this user migration Lx-Office can create such a group for you and grant all users access to all of Lx-Office\'s functions.' => '',
+  'E-mail'                      => '',
+  'E-mail Statement to'         => '',
+  'E-mail address missing!'     => '',
+  'EAN'                         => '',
+  'EAN-Code'                    => '',
+  'EB-Wert'                     => '',
+  'EK'                          => '',
+  'ELSE'                        => '',
+  'ELSTER Export (Taxbird)'     => '',
+  'ELSTER Export (Winston)'     => '',
+  'ELSTER Export nach Winston'  => '',
+  'ELSTER Tax Number'           => '',
+  'EQUITY'                      => '',
+  'EU with VAT ID'              => '',
+  'EU without VAT ID'           => '',
+  'EUER'                        => '',
+  'EUR'                         => '',
+  'Earlier versions of Lx-Office contained bugs which might have led to wrong entries in the general ledger.' => '',
+  'Edit'                        => '',
+  'Edit '                       => '',
+  'Edit Access Rights'          => '',
+  'Edit Access Rights for Follow-Ups' => '',
+  'Edit Account'                => '',
+  'Edit Accounting Group'       => '',
+  'Edit Accounts Payables Transaction' => 'Edit Creditor Transaction',
+  'Edit Accounts Receivables Transaction' => 'Edit Debtor Transaction',
+  'Edit Assembly'               => '',
+  'Edit Bins'                   => '',
+  'Edit Buchungsgruppe'         => '',
+  'Edit Business'               => '',
+  'Edit Credit Note'            => '',
+  'Edit Customer'               => '',
+  'Edit Department'             => '',
+  'Edit Dunning'                => '',
+  'Edit Dunning Process Config' => '',
+  'Edit Follow-Up'              => '',
+  'Edit Follow-Up for #1'       => '',
+  'Edit General Ledger Transaction' => '',
+  'Edit Group'                  => '',
+  'Edit Language'               => '',
+  'Edit Lead'                   => '',
+  'Edit Part'                   => '',
+  'Edit Payment Terms'          => '',
+  'Edit Preferences for #1'     => '',
+  'Edit Price Factor'           => '',
+  'Edit Pricegroup'             => '',
+  'Edit Printer'                => '',
+  'Edit Project'                => '',
+  'Edit Purchase Delivery Order' => '',
+  'Edit Purchase Order'         => '',
+  'Edit Quotation'              => '',
+  'Edit Request for Quotation'  => '',
+  'Edit Sales Delivery Order'   => '',
+  'Edit Sales Invoice'          => '',
+  'Edit Sales Order'            => '',
+  'Edit Service'                => '',
+  'Edit Storno Credit Note'     => '',
+  'Edit Storno Invoice'         => '',
+  'Edit User'                   => '',
+  'Edit Vendor'                 => '',
+  'Edit Vendor Invoice'         => '',
+  'Edit Warehouse'              => '',
+  'Edit and delete a group'     => '',
+  'Edit custom variable'        => '',
+  'Edit file'                   => '',
+  'Edit greetings'              => '',
+  'Edit group '                 => '',
+  'Edit group membership'       => '',
+  'Edit groups'                 => '',
+  'Edit note'                   => '',
+  'Edit rights'                 => '',
+  'Edit templates'              => '',
+  'Edit the Delivery Order'     => '',
+  'Edit the membership of all users in all groups:' => '',
+  'Edit the purchase_order'     => '',
+  'Edit the request_quotation'  => '',
+  'Edit the sales_order'        => '',
+  'Edit the sales_quotation'    => '',
+  'Edit the stylesheet'         => '',
+  'Edit units'                  => '',
+  'Editable'                    => '',
+  'Element disabled'            => '',
+  'Employee'                    => '',
+  'Empty transaction!'          => '',
+  'Enter a description for this new draft.' => '',
+  'Enter longdescription'       => '',
+  'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => '',
+  'Equity'                      => '',
+  'Error'                       => '',
+  'Error in database control file \'%s\': %s' => '',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => '',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => '',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => '',
+  'Error message from the database driver:' => '',
+  'Error!'                      => '',
+  'Ertrag'                      => '',
+  'Ertrag prozentual'           => '',
+  'Escape character'            => '',
+  'Exact'                       => '',
+  'Exch'                        => '',
+  'Exchangerate'                => '',
+  'Exchangerate Difference'     => '',
+  'Exchangerate for payment missing!' => '',
+  'Exchangerate missing!'       => '',
+  'Existing Buchungsgruppen'    => '',
+  'Existing Datasets'           => '',
+  'Existing pending follow-ups for this item' => '',
+  'Expected Tax'                => '',
+  'Expense'                     => '',
+  'Expense Account'             => '',
+  'Expense accno'               => '',
+  'Expense/Asset'               => '',
+  'Expenses EU with UStId'      => '',
+  'Expenses EU without UStId'   => '',
+  'Expired licenses'            => '',
+  'Expiring in x month(s)'      => '',
+  'Export Buchungsdaten'        => '',
+  'Export Stammdaten'           => '',
+  'Export as CSV'               => '',
+  'Export as PDF'               => '',
+  'Extended'                    => '',
+  'Extension Of Time'           => '',
+  'Factor'                      => '',
+  'Factor missing!'             => '',
+  'Falsches Datumsformat!'      => '',
+  'Favorites'                   => '',
+  'Fax'                         => '',
+  'Feb'                         => '',
+  'February'                    => '',
+  'Fee'                         => '',
+  'File'                        => '',
+  'File name'                   => '',
+  'Files created by Lx-Office\'s &quot;Backup Dataset&quot; function are such files.' => '',
+  'Filter'                      => '',
+  'Finish'                      => '',
+  'Fix transaction'             => '',
+  'Fix transactions'            => '',
+  'Folgekonto'                  => '',
+  'Follow-Up'                   => '',
+  'Follow-Up Date'              => '',
+  'Follow-Up On'                => '',
+  'Follow-Up done'              => '',
+  'Follow-Up for'               => '',
+  'Follow-Up for user'          => '',
+  'Follow-Up saved.'            => '',
+  'Follow-Ups'                  => '',
+  'Follow-up for'               => '',
+  'Font'                        => '',
+  'Font size'                   => '',
+  'For AP transactions it will replace the sales taxkeys with input taxkeys with the same tax rate.' => '',
+  'For AR transactions it will replace the input taxkeys with sales taxkeys with the same tax rate.' => '',
+  'For each unit there\'s either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the &quot;smaller&quot; one. A factor may not be less than 1. Therefore you may define &quot;kg&quot; with the base unit &quot;g&quot; and a factor of &quot;1&quot;, but not the other way round.' => '',
+  'Foreign Exchange Gain'       => '',
+  'Foreign Exchange Loss'       => '',
+  'Foreign Expenses'            => '',
+  'Foreign Revenues'            => '',
+  'Form details (second row)'   => '',
+  'Formula'                     => '',
+  'Free report period'          => '',
+  'Free-form text'              => '',
+  'Fristsetzung'                => '',
+  'From'                        => '',
+  'From Date'                   => '',
+  'Full Access'                 => '',
+  'Full access to all functions' => '',
+  'GL Transaction'              => '',
+  'Gegenkonto'                  => '',
+  'Gender'                      => '',
+  'General Ledger'              => '',
+  'General Ledger Corrections'  => '',
+  'General Ledger Transaction'  => '',
+  'General ledger and cash'     => '',
+  'General ledger corrections'  => '',
+  'Generic Tax Report'          => '',
+  'Given Name'                  => '',
+  'Greeting'                    => '',
+  'Greetings'                   => '',
+  'Group'                       => '',
+  'Group Invoices'              => '',
+  'Group Items'                 => '',
+  'Group deleted!'              => '',
+  'Group membership'            => '',
+  'Group missing!'              => '',
+  'Group saved!'                => '',
+  'Groups'                      => '',
+  'HTML'                        => '',
+  'HTML Templates'              => '',
+  'Has serial number'           => '',
+  'Header'                      => '',
+  'Heading'                     => '',
+  'Help'                        => '',
+  'Here\'s an example command line:' => '',
+  'Hide by default'             => '',
+  'History'                     => '',
+  'History Search'              => '',
+  'History Search Engine'       => '',
+  'Homepage'                    => '',
+  'Host'                        => '',
+  'However, you can create a new part which will then be selected.' => '',
+  'I'                           => '',
+  'IBAN'                        => '',
+  'ID'                          => '',
+  'ID-Nummer'                   => '',
+  'II'                          => '',
+  'III'                         => '',
+  'IV'                          => '',
+  'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => '',
+  'If the database user listed above does not have the right to create a database then enter the name and password of the superuser below:' => '',
+  'If you chose to let Lx-Office do the migration then Lx-Office will also remove the old member file after creating a backup copy of it in the directory &quot;[% HTML.escape(backupdir) %]&quot;.' => '',
+  'If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.' => '',
+  'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => '',
+  'If you want to change any of these parameters then press the &quot;Back&quot; button, edit the file &quot;config/authentication.pl&quot; and login into the admin module again.' => '',
+  'If you want to delete such a dataset you have to edit the user(s) that are using the dataset in question and have them use another dataset.' => '',
+  'If you want to set up the authentication database yourself then log in to the administration panel. Lx-Office will then create the database and tables for you.' => '',
+  'If you yourself want to upgrade the installation then please read the file &quot;doc/UPGRADE&quot; and follow the steps outlined in this file.' => '',
+  'Image'                       => '',
+  'Import CSV'                  => '',
+  'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => '',
+  'In order to do that hit the button "Delete transaction".' => '',
+  'In the latter case the tables needed by Lx-Office will be created in that database.' => '',
+  'In-line'                     => '',
+  'Inactive'                    => '',
+  'Include Exchangerate Difference' => '',
+  'Include column headings'     => '',
+  'Include empty bins'          => '',
+  'Include in Report'           => '',
+  'Include in drop-down menus'  => '',
+  'Includeable in reports'      => '',
+  'Income Statement'            => '',
+  'Income accno'                => '',
+  'Incoming Payments'           => '',
+  'Incoming invoice number'     => '',
+  'Incorrect Password!'         => '',
+  'Incorrect username or password!' => '',
+  'Increase'                    => '',
+  'Individual Items'            => '',
+  'Information'                 => '',
+  'Interest'                    => '',
+  'Interest Rate'               => '',
+  'Internal Notes'              => '',
+  'International'               => '',
+  'Internet'                    => '',
+  'Introduction of Buchungsgruppen' => '',
+  'Introduction of units'       => '',
+  'Inv. Duedate'                => '',
+  'Invalid'                     => '',
+  'Invalid follow-up ID.'       => '',
+  'Invalid quantity.'           => '',
+  'Invdate'                     => '',
+  'Invdate from'                => '',
+  'Inventory'                   => '',
+  'Inventory Account'           => '',
+  'Inventory quantity must be zero before you can set this assembly obsolete!' => '',
+  'Inventory quantity must be zero before you can set this part obsolete!' => '',
+  'Invno.'                      => '',
+  'Invnumber'                   => '',
+  'Invnumber missing!'          => '',
+  'Invoice'                     => '',
+  'Invoice (one letter abbreviation)' => '',
+  'Invoice Date'                => '',
+  'Invoice Date missing!'       => '',
+  'Invoice Duedate'             => '',
+  'Invoice Number'              => '',
+  'Invoice Number missing!'     => '',
+  'Invoice deleted!'            => '',
+  'Invoice for fees'            => '',
+  'Invoice has already been storno\'d!' => '',
+  'Invoice with Storno (abbreviation)' => '',
+  'Invoices'                    => '',
+  'Is this a summary account to record' => '',
+  'It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don\'t match the selected taxkey). Therefore you should re-run the general ledger analysis.' => '',
+  'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => '',
+  'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => '',
+  'It may optionally be compressed with &quot;gzip&quot;.' => '',
+  'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' => '',
+  'Item deleted!'               => '',
+  'Item not on file!'           => '',
+  'Jahresverkehrszahlen neu'    => '',
+  'Jan'                         => '',
+  'January'                     => '',
+  'Journal'                     => '',
+  'Jul'                         => '',
+  'July'                        => '',
+  'Jump to'                     => '',
+  'Jun'                         => '',
+  'June'                        => '',
+  'KNE-Export erfolgreich!'     => '',
+  'KNr. beim Kunden'            => '',
+  'Keine Suchergebnisse gefunden!' => '',
+  'Konten'                      => '',
+  'Kontonummernerweiterung (KNE)' => '',
+  'L'                           => '',
+  'LIABILITIES'                 => '',
+  'LP'                          => '',
+  'LaTeX Templates'             => '',
+  'Landscape'                   => '',
+  'Language'                    => '',
+  'Language Values'             => '',
+  'Language deleted!'           => '',
+  'Language missing!'           => '',
+  'Language saved!'             => '',
+  'Languages'                   => '',
+  'Last Article Number'         => '',
+  'Last Cost'                   => '',
+  'Last Credit Note Number'     => '',
+  'Last Customer Number'        => '',
+  'Last Invoice Number'         => '',
+  'Last Purchase Delivery Order Number' => '',
+  'Last Purchase Order Number'  => '',
+  'Last RFQ Number'             => '',
+  'Last Sales Delivery Order Number' => '',
+  'Last Sales Order Number'     => '',
+  'Last Sales Quotation Number' => '',
+  'Last Service Number'         => '',
+  'Last Transaction'            => '',
+  'Last Vendor Number'          => '',
+  'Lead'                        => '',
+  'Leave host and port field empty unless you want to make a remote connection.' => '',
+  'Left'                        => '',
+  'Liability'                   => '',
+  'License'                     => '',
+  'License key'                 => '',
+  'Licensed to'                 => '',
+  'Licenses'                    => '',
+  'Lieferungen'                 => '',
+  'Limit part selection'        => '',
+  'Line Total'                  => '',
+  'Line endings'                => '',
+  'List'                        => '',
+  'List Accounting Groups'      => '',
+  'List Accounts'               => '',
+  'List Businesses'             => '',
+  'List Departments'            => '',
+  'List Groups'                 => '',
+  'List Languages'              => '',
+  'List Lead'                   => '',
+  'List Payment Terms'          => '',
+  'List Price'                  => '',
+  'List Price Factors'          => '',
+  'List Pricegroups'            => '',
+  'List Printer'                => '',
+  'List Tax'                    => '',
+  'List Transactions'           => '',
+  'List Warehouses'             => '',
+  'List export'                 => '',
+  'List of custom variables'    => '',
+  'Load draft'                  => '',
+  'Local Tax Office Preferences' => '',
+  'Lock System'                 => '',
+  'Lockfile created!'           => '',
+  'Lockfile removed!'           => '',
+  'Login'                       => '',
+  'Login Name'                  => '',
+  'Login name missing!'         => '',
+  'Logout'                      => '',
+  'Long Dates'                  => '',
+  'Long Description'            => '',
+  'Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' => '',
+  'Lx-Office can fix these problems automatically.' => '',
+  'Lx-Office has been switched to group-based access restrictions.' => '',
+  'Lx-Office has found one or more problems in the general ledger.' => '',
+  'Lx-Office is about to update the database <b>[% HTML.escape(dbname) %]</b>. You should create a backup of the database before proceeding because the backup might not be reversible.' => '',
+  'Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system.' => '',
+  'Lx-Office website'           => '',
+  'MAILED'                      => '',
+  'MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES' => '',
+  'Main Preferences'            => '',
+  'Make'                        => '',
+  'Manage license keys'         => '',
+  'Mandantennummer'             => '',
+  'Mar'                         => '',
+  'March'                       => '',
+  'Margins'                     => '',
+  'Mark as paid?'               => '',
+  'Mark closed'                 => '',
+  'Marked as paid'              => '',
+  'Marked entries printed!'     => '',
+  'Master Data'                 => '',
+  'Max. Dunning Level'          => '',
+  'May'                         => '',
+  'May '                        => '',
+  'May set the BCC field when sending emails' => '',
+  'Medium Number'               => '',
+  'Memo'                        => '',
+  'Message'                     => '',
+  'Method'                      => '',
+  'Microfiche'                  => '',
+  'Minimum Amount'              => '',
+  'Miscellaneous'               => '',
+  'Missing \'description\' field.' => '',
+  'Missing \'tag\' field.'      => '',
+  'Missing Method!'             => '',
+  'Missing Tax Authoritys Preferences' => '',
+  'Missing amount'              => '',
+  'Missing parameter #1 in call to sub #2.' => '',
+  'Missing parameter (at least one of #1) in call to sub #2.' => '',
+  'Mitarbeiter'                 => '',
+  'Mobile1'                     => '',
+  'Mobile2'                     => '',
+  'Model'                       => '',
+  'Module'                      => '',
+  'Module home page'            => '',
+  'Module name'                 => '',
+  'Monat'                       => '',
+  'Monthly'                     => '',
+  'More than one control file with the tag \'%s\' exist.' => '',
+  'Multibyte Encoding'          => '',
+  'MwSt. inkl.'                 => '',
+  'Name'                        => '',
+  'Name missing!'               => '',
+  'National'                    => '',
+  'National Expenses'           => '',
+  'National Revenues'           => '',
+  'Netto Terms'                 => '',
+  'New Buchungsgruppe [% loop.count %]' => '',
+  'New Templates'               => '',
+  'New assembly'                => '',
+  'New contact'                 => '',
+  'New customer'                => '',
+  'New invoice'                 => '',
+  'New part'                    => '',
+  'New sales order'             => '',
+  'New service'                 => '',
+  'New unit'                    => '',
+  'New vendor'                  => '',
+  'Next Dunning Level'          => '',
+  'No'                          => '',
+  'No %s was found matching the search parameters.' => '',
+  'No Company Address given'    => '',
+  'No Company Name given'       => '',
+  'No Customer was found matching the search parameters.' => '',
+  'No Database Drivers available!' => '',
+  'No Dataset selected!'        => '',
+  'No Vendor was found matching the search parameters.' => '',
+  'No action defined.'          => '',
+  'No backup file has been uploaded.' => '',
+  'No bins have been added to this warehouse yet.' => '',
+  'No customer has been selected yet.' => '',
+  'No data was found.'          => '',
+  'No databases have been found on this server.' => '',
+  'No datasets have been selected.' => '',
+  'No dunnings have been selected for printing.' => '',
+  'No entries were found which had no unit assigned to them.' => '',
+  'No group has been selected, or the group does not exist anymore.' => '',
+  'No groups have been added yet.' => '',
+  'No licenses were found that match the search criteria.' => '',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => '',
+  'No part was found matching the search parameters.' => '',
+  'No prices will be updated because no prices have been entered.' => '',
+  'No problems were recognized.' => '',
+  'No unknown units where found.' => '',
+  'No user has been selected.'  => '',
+  'No valid number entered for pricegroup "#1".' => '',
+  'No vendor has been selected yet.' => '',
+  'No warehouse has been created yet or the quantity of the bins is not configured yet.' => '',
+  'No.'                         => '',
+  'Non-taxable Purchases'       => '',
+  'Non-taxable Sales'           => '',
+  'None'                        => '',
+  'Not Discountable'            => '',
+  'Not delivered'               => '',
+  'Not done yet'                => '',
+  'Not obsolete'                => '',
+  'Note'                        => '',
+  'Note: Taxkeys must have a "valid from" date, and will not be in effect otherwise.' => '',
+  'Notes'                       => '',
+  'Nothing has been selected for removal.' => '',
+  'Nothing has been selected for transfer.' => '',
+  'Nothing selected!'           => '',
+  'Nothing to delete!'          => '',
+  'Nov'                         => '',
+  'November'                    => '',
+  'Now the user must select a single Buchungsgruppe for each part instead of three distinct accounts.' => '',
+  'Number'                      => '',
+  'Number Format'               => '',
+  'Number missing in Row'       => '',
+  'Number of bins'              => '',
+  'Number of copies'            => '',
+  'Number of new bins'          => '',
+  'Number pages'                => '',
+  'Number variables: \'PRECISION=n\' forces numbers to be shown with exactly n decimal places.' => '',
+  'OB Transaction'              => '',
+  'OBE-Export erfolgreich!'     => '',
+  'Obsolete'                    => '',
+  'Oct'                         => '',
+  'October'                     => '',
+  'Off'                         => '',
+  'Old (on the side)'           => '',
+  'On'                          => '',
+  'On Hand'                     => '',
+  'On Order'                    => '',
+  'One or more Perl modules missing' => '',
+  'Only due follow-ups'         => '',
+  'Open'                        => '',
+  'OpenDocument/OASIS'          => '',
+  'Openings'                    => '',
+  'Optional comment'            => '',
+  'Options'                     => '',
+  'Order'                       => '',
+  'Order Date'                  => '',
+  'Order Date missing!'         => '',
+  'Order Number'                => '',
+  'Order Number missing!'       => '',
+  'Order deleted!'              => '',
+  'Ordered'                     => '',
+  'Orientation'                 => '',
+  'Orphaned'                    => '',
+  'Other users\' follow-ups'    => '',
+  'Other values are ignored.'   => '',
+  'Others'                      => '',
+  'Otherwise all users will only have access to their own settings.' => '',
+  'Otherwise the variable is only available for printing.' => '',
+  'Out of balance transaction!' => '',
+  'Out of balance!'             => '',
+  'Output Number Format'        => '',
+  'Outputformat'                => '',
+  'Overdue sales quotations and requests for quotations' => '',
+  'Own Product'                 => '',
+  'PAYMENT POSTED'              => '',
+  'PDF'                         => '',
+  'PDF (OpenDocument/OASIS)'    => '',
+  'PDF export -- options'       => '',
+  'POSTED'                      => '',
+  'POSTED AS NEW'               => '',
+  'PRINTED'                     => '',
+  'Packing List'                => '',
+  'Packing List Date missing!'  => '',
+  'Packing List Number missing!' => '',
+  'Packing Lists'               => '',
+  'Page #1/#2'                  => '',
+  'Paid'                        => '',
+  'Part'                        => '',
+  'Part Description'            => '',
+  'Part Description missing!'   => '',
+  'Part Number'                 => '',
+  'Part Number missing!'        => '',
+  'Part description'            => '',
+  'Partnumber must not be set to empty!' => '',
+  'Partnumber not unique!'      => '',
+  'Parts'                       => '',
+  'Parts Inventory'             => '',
+  'Parts must have an entry type.' => '',
+  'Parts, services and assemblies' => '',
+  'Password'                    => '',
+  'Payables'                    => '',
+  'Payment'                     => '',
+  'Payment Reminder'            => '',
+  'Payment Terms'               => '',
+  'Payment Terms missing in row ' => '',
+  'Payment Terms saved!'        => '',
+  'Payment date missing!'       => '',
+  'Payment posted!'             => '',
+  'Payment terms deleted!'      => '',
+  'Payments'                    => '',
+  'Period'                      => '',
+  'Period:'                     => '',
+  'Personal settings'           => '',
+  'Pg Database Administration'  => '',
+  'Phone'                       => '',
+  'Phone1'                      => '',
+  'Phone2'                      => '',
+  'Pick List'                   => '',
+  'Please ask your administrator to create warehouses and bins.' => '',
+  'Please enter a license key.' => '',
+  'Please enter a number of licenses.' => '',
+  'Please enter the login for the new user.' => '',
+  'Please enter the name of the database that will be used as the template for the new database:' => '',
+  'Please enter the name of the dataset you want to restore the backup in.' => '',
+  'Please enter the taxnumber in the administration menu userpreferences' => '',
+  'Please enter values'         => '',
+  'Please insert object dimensions below.' => '',
+  'Please insert your language values below' => '',
+  'Please insert your longdescription below' => '',
+  'Please install the below listed modules or ask your system administrator to.' => '',
+  'Please re-run the analysis for broken general ledger entries by clicking this button:' => '',
+  'Please select a customer from the list below.' => '',
+  'Please select a part from the list below.' => '',
+  'Please select a vendor from the list below.' => '',
+  'Please select the chart of accounts this installation is using from the list below.' => '',
+  'Please select the database you want to backup' => '',
+  'Please seletct the dataset you want to delete:' => '',
+  'Please specify a description for the warehouse designated for these goods.' => '',
+  'Plural'                      => '',
+  'Port'                        => '',
+  'Portrait'                    => '',
+  'Post'                        => '',
+  'Post Payment'                => '',
+  'Postscript'                  => '',
+  'Posustva_coa'                => '',
+  'Preferences'                 => '',
+  'Preferences saved!'          => '',
+  'Prefix for the new bins\' names' => '',
+  'Preis'                       => '',
+  'Preisgruppe'                 => '',
+  'Preisklasse'                 => '',
+  'Prepayment'                  => '',
+  'Preview'                     => '',
+  'Previous transdate text'     => '',
+  'Previous transnumber text'   => '',
+  'Price'                       => '',
+  'Price Factor'                => '',
+  'Price Factors'               => '',
+  'Price factor deleted!'       => '',
+  'Price factor saved!'         => '',
+  'Pricegroup'                  => '',
+  'Pricegroup deleted!'         => '',
+  'Pricegroup missing!'         => '',
+  'Pricegroup saved!'           => '',
+  'Pricegroups'                 => '',
+  'Print'                       => '',
+  'Print and Post'              => '',
+  'Print dunnings'              => '',
+  'Print list'                  => '',
+  'Print options'               => '',
+  'Printer'                     => '',
+  'Printer Command'             => '',
+  'Printer Command missing!'    => '',
+  'Printer Description'         => '',
+  'Printer deleted!'            => '',
+  'Printer saved!'              => '',
+  'Printing ... '               => '',
+  'Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' => '',
+  'Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.' => '',
+  'Private E-mail'              => '',
+  'Private Phone'               => '',
+  'Problem'                     => '',
+  'Produce Assembly'            => '',
+  'Productivity'                => '',
+  'Profit Center'               => '',
+  'Proforma Invoice'            => '',
+  'Programm'                    => '',
+  'Project'                     => '',
+  'Project Number'              => '',
+  'Project Number missing!'     => '',
+  'Project Numbers'             => '',
+  'Project Transactions'        => '',
+  'Project deleted!'            => '',
+  'Project not on file!'        => '',
+  'Project saved!'              => '',
+  'Projects'                    => '',
+  'Projecttransactions'         => '',
+  'Prozentual/Absolut'          => '',
+  'Purchase Invoice'            => '',
+  'Purchase Order'              => '',
+  'Purchase Orders'             => '',
+  'Purchase Price'              => '',
+  'Purchase Prices'             => '',
+  'Purchase delivery order'     => '',
+  'Purchase invoices'           => '',
+  'Qty'                         => '',
+  'Qty according to delivery order' => '',
+  'Qty in stock'                => '',
+  'Quantity'                    => '',
+  'Quantity missing.'           => '',
+  'Quartal'                     => '',
+  'Quarter'                     => '',
+  'Quarterly'                   => '',
+  'Queue'                       => '',
+  'Quotation'                   => '',
+  'Quotation Date'              => '',
+  'Quotation Date missing!'     => '',
+  'Quotation Number'            => '',
+  'Quotation Number missing!'   => '',
+  'Quotation deleted!'          => '',
+  'Quotations'                  => '',
+  'Quote chararacter'           => '',
+  'Quoted'                      => '',
+  'RFQ'                         => '',
+  'RFQ Number'                  => '',
+  'RFQs'                        => '',
+  'ROP'                         => '',
+  'Ranges of numbers'           => '',
+  'Ranges of numbers and default accounts' => '',
+  'Re-run analysis'             => '',
+  'Receipt'                     => '',
+  'Receipt posted!'             => '',
+  'Receipt, payment, reconciliation' => '',
+  'Receipts'                    => '',
+  'Receivables'                 => '',
+  'Rechnungsnummer'             => '',
+  'Reconciliation'              => '',
+  'Record in'                   => '',
+  'Recorded Tax'                => '',
+  'Recorded taxkey'             => '',
+  'Reference'                   => '',
+  'Reference missing!'          => '',
+  'Release From Stock'          => '',
+  'Remaining'                   => '',
+  'Removal'                     => '',
+  'Removal from Warehouse'      => '',
+  'Removal from warehouse'      => '',
+  'Removal qty'                 => '',
+  'Remove'                      => '',
+  'Remove Draft'                => '',
+  'Remove draft when posting'   => '',
+  'Remove from group'           => '',
+  'Removed spoolfiles!'         => '',
+  'Removing marked entries from queue ...' => '',
+  'Rename the group'            => '',
+  'Report Positions'            => '',
+  'Report about wareouse contents' => '',
+  'Report about wareouse transactions' => '',
+  'Report and misc. Preferences' => '',
+  'Report for'                  => '',
+  'Reports'                     => '',
+  'Reqdate'                     => '',
+  'Request for Quotation'       => '',
+  'Request for Quotations'      => '',
+  'Request quotation'           => '',
+  'Required by'                 => '',
+  'Restore Dataset'             => '',
+  'Revenue'                     => '',
+  'Revenue Account'             => '',
+  'Revenues EU with UStId'      => '',
+  'Revenues EU without UStId'   => '',
+  'Right'                       => '',
+  'SAVED'                       => '',
+  'SAVED FOR DUNNING'           => '',
+  'SCREENED'                    => '',
+  'Saldo Credit'                => '',
+  'Saldo Debit'                 => '',
+  'Saldo neu'                   => '',
+  'Saldo per'                   => '',
+  'Sale Prices'                 => '',
+  'Sales Invoice'               => '',
+  'Sales Invoices'              => '',
+  'Sales Order'                 => '',
+  'Sales Orders'                => '',
+  'Sales and purchase invoices with inventory transactions with taxkeys' => '',
+  'Sales delivery order'        => '',
+  'Sales invoice number'        => '',
+  'Sales invoices'              => '',
+  'Sales quotation'             => '',
+  'Salesman'                    => '',
+  'Salesperson'                 => '',
+  'Same as the quote character' => '',
+  'Sat. Fax'                    => '',
+  'Sat. Phone'                  => '',
+  'Satz %'                      => '',
+  'Save'                        => '',
+  'Save account first to insert taxkeys' => '',
+  'Save and AP Transaction'     => '',
+  'Save and AR Transaction'     => '',
+  'Save and Close'              => '',
+  'Save and Invoice'            => '',
+  'Save and Order'              => '',
+  'Save and Quotation'          => '',
+  'Save and RFQ'                => '',
+  'Save and close'              => '',
+  'Save as new'                 => '',
+  'Save draft'                  => '',
+  'Saving the file \'%s\' failed. OS error message: %s' => '',
+  'Screen'                      => '',
+  'Searchable'                  => '',
+  'Select'                      => '',
+  'Select a Customer'           => '',
+  'Select a customer'           => '',
+  'Select a part'               => '',
+  'Select a part or assembly'   => '',
+  'Select a period'             => '',
+  'Select a vendor'             => '',
+  'Select all'                  => '',
+  'Select federal state...'     => '',
+  'Select from one of the items below' => '',
+  'Select from one of the names below' => '',
+  'Select from one of the projects below' => '',
+  'Select postscript or PDF!'   => '',
+  'Select tax office...'        => '',
+  'Select the chart of accounts in use' => '',
+  'Select the checkboxes that match users to the groups they should belong to.' => '',
+  'Select type of removal'      => '',
+  'Select type of transfer'     => '',
+  'Selection'                   => '',
+  'Selection fields: The option field must contain the available options for the selection. Options are separated by \'##\', for example \'Early##Normal##Late\'.' => '',
+  'Sell Price'                  => '',
+  'Send the backup via Email'   => '',
+  'Sep'                         => '',
+  'Separator chararacter'       => '',
+  'September'                   => '',
+  'Serial No.'                  => '',
+  'Serial Number'               => '',
+  'Service'                     => '',
+  'Service Items'               => '',
+  'Service Number missing!'     => '',
+  'Service unit'                => '',
+  'Services'                    => '',
+  'Set Language Values'         => '',
+  'Set eMail text'              => '',
+  'Setup Menu'                  => '',
+  'Setup Templates'             => '',
+  'Ship'                        => '',
+  'Ship rcvd'                   => '',
+  'Ship to'                     => '',
+  'Ship via'                    => '',
+  'Shipping Address'            => '',
+  'Shipping Point'              => '',
+  'Shipto'                      => '',
+  'Shopartikel'                 => '',
+  'Short'                       => '',
+  'Show'                        => '',
+  'Show TODO list'              => '',
+  'Show by default'             => '',
+  'Show details'                => '',
+  'Show follow ups...'          => '',
+  'Show old dunnings'           => '',
+  'Show overdue sales quotations and requests for quotations...' => '',
+  'Show your TODO list after loggin in' => '',
+  'Signature'                   => '',
+  'Since bin is not enforced in the parts data, please specify a bin where goods without a specified bin will be put.' => '',
+  'Skip'                        => '',
+  'Skonto'                      => '',
+  'Skonto Terms'                => '',
+  'Sold'                        => '',
+  'Solution'                    => '',
+  'Source'                      => '',
+  'Source bin'                  => '',
+  'Spoolfile'                   => '',
+  'Start Dunning Process'       => '',
+  'Start analysis'              => '',
+  'Start the correction assistant' => '',
+  'Startdate_coa'               => '',
+  'Starting Balance'            => '',
+  'Statement'                   => '',
+  'Statement Balance'           => '',
+  'Statement sent to'           => '',
+  'Statements sent to printer!' => '',
+  'Step 1 of 3: Parts'          => '',
+  'Step 2 of 3: Services'       => '',
+  'Step 3 of 3: Assemblies'     => '',
+  'Step 3 of 3: Default units'  => '',
+  'Steuersatz'                  => '',
+  'Stock'                       => '',
+  'Stock value'                 => '',
+  'Storno'                      => '',
+  'Storno (one letter abbreviation)' => '',
+  'Storno Invoice'              => '',
+  'Storno Packing List'         => '',
+  'Street'                      => '',
+  'Stylesheet'                  => '',
+  'Subject'                     => '',
+  'Subject:'                    => '',
+  'Subtotal'                    => '',
+  'Such entries cannot be exported into the DATEV format and have to be fixed as well.' => '',
+  'Sum Credit'                  => '',
+  'Sum Debit'                   => '',
+  'Sum for'                     => '',
+  'Sum per'                     => '',
+  'Summen- und Saldenliste'     => '',
+  'Superuser name'              => '',
+  'System'                      => '',
+  'TODO list'                   => '',
+  'TODO list options'           => '',
+  'TOP100'                      => '',
+  'TOTAL'                       => '',
+  'Tax'                         => '',
+  'Tax Consultant'              => '',
+  'Tax Included'                => '',
+  'Tax Number'                  => '',
+  'Tax Number / SSN'            => '',
+  'Tax Office'                  => '',
+  'Tax Office Preferences'      => '',
+  'Tax Percent is a number between 0 and 100' => '',
+  'Tax Period'                  => '',
+  'Tax Position'                => '',
+  'Tax collected'               => '',
+  'Tax deleted!'                => '',
+  'Tax number'                  => '',
+  'Tax paid'                    => '',
+  'Tax saved!'                  => '',
+  'Tax-O-Matic'                 => '',
+  'Tax-o-matic Account'         => '',
+  'Taxaccount_coa'              => '',
+  'Taxation'                    => '',
+  'Taxdescription  missing!'    => '',
+  'Taxdescription_coa'          => '',
+  'Taxes'                       => '',
+  'Taxkey'                      => '',
+  'Taxkey  missing!'            => '',
+  'Taxkey_coa'                  => '',
+  'Taxkeys and Taxreport Preferences' => '',
+  'Taxlink_coa'                 => '',
+  'Taxnumber'                   => '',
+  'Taxrate missing!'            => '',
+  'Tel'                         => '',
+  'Tel.'                        => '',
+  'Telephone'                   => '',
+  'Template'                    => '',
+  'Template Code'               => '',
+  'Template Code missing!'      => '',
+  'Template database'           => '',
+  'Templates'                   => '',
+  'Terms missing in row '       => '',
+  'Test connection'             => '',
+  'Text field'                  => '',
+  'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' => '',
+  'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => '',
+  'Text, text field and number variables: The default value will be used as-is.' => '',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => '',
+  'The AP transaction #1 has been deleted.' => '',
+  'The AR transaction #1 has been deleted.' => '',
+  'The GL transaction #1 has been deleted.' => '',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => '',
+  'The access rights have been saved.' => '',
+  'The assembly has been created.' => '',
+  'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => '',
+  'The authentication configuration file &quot;config/authentication.pl&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => '',
+  'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => '',
+  'The available options depend on the varibale type:' => '',
+  'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' => '',
+  'The base unit does not exist or it is about to be deleted in row %d.' => '',
+  'The base unit does not exist.' => '',
+  'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => '',
+  'The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.' => '',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => '',
+  'The config file "config/authentication.pl" was not found.' => '',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => '',
+  'The connection to the authentication database failed:' => '',
+  'The connection to the database could not be established.' => '',
+  'The connection to the template database failed:' => '',
+  'The connection was established successfully.' => '',
+  'The creation of the authentication database failed:' => '',
+  'The custom variable has been deleted.' => '',
+  'The custom variable has been saved.' => '',
+  'The database [% HTML.escape(db) %] has been successfully deleted.' => '',
+  'The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:' => '',
+  'The database update/creation did not succeed. The file [% HTML.escape(file) %] contained the following error:' => '',
+  'The database upgrade for the introduction of Buchungsgruppen is now complete.' => '',
+  'The database upgrade for the introduction of units is now complete.' => '',
+  'The dataset [% HTML.escape(db) %] has been successfully created.' => '',
+  'The dataset backup has been sent via email to [% HTML.escape(to) %].' => '',
+  'The dataset has to exist before a restoration can be started.' => '',
+  'The dataset name is missing.' => '',
+  'The default value depends on the variable type:' => '',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => '',
+  'The description is missing.' => '',
+  'The description is shown on the form. Chose something short and descriptive.' => '',
+  'The directory "%s" could not be created:\n%s' => '',
+  'The directory %s does not exist.' => '',
+  'The dunning process started' => '',
+  'The dunnings have been printed.' => '',
+  'The email address is missing.' => '',
+  'The factor is missing in row %d.' => '',
+  'The factor is missing.'      => '',
+  'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => '',
+  'The follow-up date is missing.' => '',
+  'The following Buchungsgruppen have already been created:' => '',
+  'The following Datasets need to be updated' => '',
+  'The following drafts have been saved and can be loaded.' => '',
+  'The following transaction contains wrong taxes:' => '',
+  'The following transaction contains wrong taxkeys:' => '',
+  'The following units are unknown.' => '',
+  'The following units exist already:' => '',
+  'The following users have been migrated into the authentication database:' => '',
+  'The following warnings occured during an upgrade to the document templates:' => '',
+  'The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>' => '',
+  'The greetings have been saved.' => '',
+  'The group has been added.'   => '',
+  'The group has been deleted.' => '',
+  'The group has been saved.'   => '',
+  'The group memberships have been saved.' => '',
+  'The group name is missing.'  => '',
+  'The licensing module has been deactivated in lx-erp.conf.' => '',
+  'The list has been printed.'  => '',
+  'The login is missing.'       => '',
+  'The name in row %d has already been used before.' => '',
+  'The name is missing in row %d.' => '',
+  'The name is missing.'        => '',
+  'The name must only consist of letters, numbers and underscores and start with a letter.' => '',
+  'The old file containing the user information is still present (&quot;[% HTML.escape(memberfile) %]&quot;). Do you want to migrate these users into the database? If not then you will not be able to log in with any of the users present in the old file. ' => '',
+  'The option field is empty.'  => '',
+  'The parts for this delivery order have already been transferred in.' => '',
+  'The parts for this delivery order have already been transferred out.' => '',
+  'The parts have been removed.' => '',
+  'The parts have been stocked.' => '',
+  'The parts have been transferred.' => '',
+  'The pg_dump process could not be started.' => '',
+  'The pg_restore process could not be started.' => '',
+  'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).' => '',
+  'The program\'s exit code was [% HTML.escape(retval) %] (&quot;0&quot; usually means that everything went OK).' => '',
+  'The project has been added.' => '',
+  'The project has been saved.' => '',
+  'The restoration process has started. Here\'s the output of the &quot;pg_restore&quot; command:' => '',
+  'The restoration process is complete. Please review &quot;pg_restore&quot;\'s output to find out if the restoration was successful.' => '',
+  'The second reason is that Lx-Office allowed the user to enter the tax amount manually regardless of the taxkey used.' => '',
+  'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => '',
+  'The selected  PostgreSQL installation uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => '',
+  'The selected bin does not exist.' => '',
+  'The selected warehouse does not exist.' => '',
+  'The selected warehouse is empty.' => '',
+  'The session is invalid or has expired.' => '',
+  'The source warehouse does not contain any bins.' => '',
+  'The subject is missing.'     => '',
+  'The tables for user management and authentication do not exist. They will be created in the next step in the following database:' => '',
+  'The tabulator character'     => '',
+  'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.' => '',
+  'The transaction is shown below in its current state.' => '',
+  'The unit has been saved.'    => '',
+  'The unit in row %d has been deleted in the meantime.' => '',
+  'The unit in row %d has been used in the meantime and cannot be changed anymore.' => '',
+  'The units have been saved.'  => '',
+  'The user has been added to this group.' => '',
+  'The user has been removed from this group.' => '',
+  'The user is a member in the following group(s):' => '',
+  'The user migration process is complete.' => '',
+  'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => '',
+  'The warehouse could not be deleted because it has already been used.' => '',
+  'The warehouse does not contain any bins.' => '',
+  'The warehouse or the bin is missing.' => '',
+  'The wrong taxkeys for AP and AR transactions have been fixed.' => '',
+  'The wrong taxkeys for inventory transactions for sales and purchase invoices have been fixed.' => '',
+  'The wrong taxkeys have been fixed.' => '',
+  'There are #1 unfinished follow-ups of which #2 are due.' => '',
+  'There are four tax zones.'   => '',
+  'There are no items in stock.' => '',
+  'There are no items on your TODO list at the moment.' => '',
+  'There are still entries in the database for which no unit has been assigned.' => '',
+  'There are usually three ways to install Perl modules.' => '',
+  'There is at least one sales or purchase invoice for which Lx-Office recorded an inventory transaction with taxkeys even though no tax was recorded.' => '',
+  'There is at least one transaction for which the user has chosen a logically wrong taxkey.' => '',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => '',
+  'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.' => '',
+  'There is nothing to do in this step.' => '',
+  'Therefore there\'s no need to create the same article more than once if it is sold or bought in/from another tax zone.' => '',
+  'These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.' => '',
+  'These will only be effective if the account is NOT a summary account AND there exists at least one taxkey. Setting the account as a summary account will erase these settings.' => '',
+  'These wrong entries cannot be fixed automatically.' => '',
+  'This corresponds to Lx-Office\'s behavior prior to version 2.4.4.' => '',
+  'This could have happened for two reasons:' => '',
+  'This customer number is already in use.' => '',
+  'This group will be called &quot;Full Access&quot;.' => '',
+  'This installation uses an unknown chart of accounts (&quot;[% HTML.escape(coa) %]&quot;). This database upgrade cannot create standard buchungsgruppen automatically.' => '',
+  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => '',
+  'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => '',
+  'This means that the user has created an AP transaction and chosen a taxkey for sales taxes, or that he has created an AR transaction and chosen a taxkey for input taxes.' => '',
+  'This module can help you identify and correct such entries by analyzing the general ledger and presenting you likely solutions but also allowing you to fix problems yourself.' => '',
+  'This transaction has to be split into several transactions manually.' => '',
+  'This update will change the nature the onhand of goods is tracked.' => '',
+  'This upgrade script tries to map all existing parts in the database to the newly created Buchungsgruppen.' => '',
+  'This upgrade script tries to map all existing units in the database to the newly created units.' => '',
+  'This vendor number is already in use.' => '',
+  'Time period for the analysis:' => '',
+  'Timestamp'                   => '',
+  'Title'                       => '',
+  'To'                          => '',
+  'To (email)'                  => '',
+  'To (time)'                   => '',
+  'To Date'                     => '',
+  'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => '',
+  'Top'                         => '',
+  'Top (CSS)'                   => '',
+  'Top (CSS) new'               => '',
+  'Top (Javascript)'            => '',
+  'Top (XUL; only for Mozilla Firefox)' => '',
+  'Top 100'                     => '',
+  'Top 100 hinzufuegen'         => '',
+  'Top Level'                   => '',
+  'Total'                       => '',
+  'Total Fees'                  => '',
+  'Total stock value'           => '',
+  'Totals'                      => '',
+  'Trade Discount'              => '',
+  'Trans Id'                    => '',
+  'Trans Type'                  => '',
+  'Transaction'                 => '',
+  'Transaction %d cancelled.'   => '',
+  'Transaction Date missing!'   => '',
+  'Transaction ID missing.'     => '',
+  'Transaction deleted!'        => '',
+  'Transaction description'     => '',
+  'Transaction has already been cancelled!' => '',
+  'Transaction has been split on both the credit and the debit side' => '',
+  'Transaction posted!'         => '',
+  'Transactions, AR transactions, AP transactions' => '',
+  'Transfer'                    => '',
+  'Transfer Quantity'           => '',
+  'Transfer To Stock'           => '',
+  'Transfer from warehouse'     => '',
+  'Transfer in'                 => '',
+  'Transfer out'                => '',
+  'Transfer qty'                => '',
+  'Translation (%s)'            => '',
+  'Trial Balance'               => '',
+  'Trial balance between %s and %s' => '',
+  'Trying to call a sub without a name' => '',
+  'Type'                        => '',
+  'Type of Business'            => '',
+  'USTVA'                       => '',
+  'USTVA 2004'                  => '',
+  'USTVA 2005'                  => '',
+  'USTVA 2006'                  => '',
+  'USTVA 2007'                  => '',
+  'USTVA-Hint: Method'          => '',
+  'USTVA-Hint: Tax Authoritys'  => '',
+  'USt-IdNr.'                   => '',
+  'USt-Konto'                   => '',
+  'UStVA'                       => '',
+  'UStVA (PDF-Dokument)'        => '',
+  'UStVa'                       => '',
+  'UStVa Einstellungen'         => '',
+  'Unbalanced Ledger'           => '',
+  'Unchecked custom variables will not appear in orders and invoices.' => '',
+  'Unfinished follow-ups'       => '',
+  'Unit'                        => '',
+  'Unit missing.'               => '',
+  'Unit of measure'             => '',
+  'Units marked for deletion will be deleted upon saving.' => '',
+  'Units that have already been used (e.g. for parts and services or in invoices or warehouse transactions) cannot be changed.' => '',
+  'Unknown Category'            => '',
+  'Unknown Link'                => '',
+  'Unknown chart of accounts'   => '',
+  'Unknown dependency \'%s\'.'  => '',
+  'Unknown problem type.'       => '',
+  'Unlock System'               => '',
+  'Until'                       => '',
+  'Update'                      => '',
+  'Update Dataset'              => '',
+  'Update Prices'               => '',
+  'Update complete'             => '',
+  'Update prices'               => '',
+  'Update?'                     => '',
+  'Updated'                     => '',
+  'Use As Template'             => '',
+  'Use Templates'               => '',
+  'User'                        => '',
+  'User Config'                 => '',
+  'User data migration'         => '',
+  'User deleted!'               => '',
+  'User migration complete'     => '',
+  'User name'                   => '',
+  'User saved!'                 => '',
+  'Users in<br>this group'      => '',
+  'Users not in this group'     => '',
+  'Ust-IDNr'                    => '',
+  'Valid from'                  => '',
+  'Valid until'                 => '',
+  'Value'                       => '',
+  'Variable'                    => '',
+  'Vendor'                      => '',
+  'Vendor Invoice'              => '',
+  'Vendor Invoices'             => '',
+  'Vendor Number'               => '',
+  'Vendor deleted!'             => '',
+  'Vendor details'              => '',
+  'Vendor missing!'             => '',
+  'Vendor not on file or locked!' => '',
+  'Vendor not on file!'         => '',
+  'Vendor saved!'               => '',
+  'Vendor type'                 => '',
+  'Vendors'                     => '',
+  'Verrechnungseinheit'         => '',
+  'Version'                     => '',
+  'View License'                => '',
+  'View warehouse content'      => '',
+  'Von Konto: '                 => '',
+  'WEBDAV access'               => '',
+  'WHJournal'                   => '',
+  'Warehouse'                   => '',
+  'Warehouse From'              => '',
+  'Warehouse MIgration'         => '',
+  'Warehouse To'                => '',
+  'Warehouse content'           => '',
+  'Warehouse deleted.'          => '',
+  'Warehouse management'        => '',
+  'Warehouse saved.'            => '',
+  'Warehouses'                  => '',
+  'Warnings during template upgrade' => '',
+  'WebDAV link'                 => '',
+  'Weight'                      => '',
+  'Weight unit'                 => '',
+  'What type of item is this?'  => '',
+  'What\'s the <b>term</b> you\'re looking for?' => '',
+  'With Extension Of Time'      => '',
+  'Workflow Delivery Order'     => '',
+  'Workflow purchase_order'     => '',
+  'Workflow request_quotation'  => '',
+  'Workflow sales_order'        => '',
+  'Workflow sales_quotation'    => '',
+  'Wrong Period'                => '',
+  'Wrong date format!'          => '',
+  'Wrong tax keys recorded'     => '',
+  'Wrong taxes recorded'        => '',
+  'YYYY'                        => '',
+  'Year'                        => '',
+  'Year End'                    => '',
+  'Yearly'                      => '',
+  'Yearly taxreport not yet implemented' => '',
+  'Yes'                         => '',
+  'Yes, included by default'    => '',
+  'Yes/No (Checkbox)'           => '',
+  'You are logged out!'         => '',
+  'You can also create new units now.' => '',
+  'You can also delete this transaction and re-enter it manually.' => '',
+  'You can correct this transaction by chosing the correct taxkeys from the drop down boxes and hitting the button "Fix transaction" afterwards.' => '',
+  'You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.' => '',
+  'You can create warehouses and bins via the menu "System -> Warehouses".' => '',
+  'You can declare different translations for singular and plural for each unit (e.g. &quot;day&quot; and &quot;days).' => '',
+  'You can either create a new database or chose an existing database.' => '',
+  'You can only delete datasets that are not in use.' => '',
+  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => '',
+  'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => '',
+  'You cannot continue before all required modules are installed.' => '',
+  'You cannot continue until all unknown units have been mapped to known ones.' => '',
+  'You cannot create an invoice for delivery orders for different customers.' => '',
+  'You cannot create an invoice for delivery orders from different vendors.' => '',
+  'You did not enter a name!'   => '',
+  'You do not have the permissions to access this function.' => '',
+  'You have entered or selected the following shipping address for this customer:' => '',
+  'You have not selected any delivery order.' => '',
+  'You have to chose a dimension unit and a service unit which will then be assigned to those entries.' => '',
+  'You have to chose which unit to save for each of them.' => '',
+  'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' => '',
+  'You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.' => '',
+  'You must chose a user.'      => '',
+  'You will now be forwarded to the administration panel.' => '',
+  'You\'re not editing a file.' => '',
+  'You\'ve already chosen the following limitations:' => '',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => '',
+  'Your TODO list'              => '',
+  'Your browser does not currently support Javascript.' => '',
+  'Your download does not exist anymore. Please re-run the DATEV export assistant.' => '',
+  'Zeitpunkt'                   => '',
+  'Zeitraum'                    => '',
+  'Zero amount posting!'        => '',
+  'Zip, City'                   => '',
+  'Zipcode'                     => '',
+  'Zusatz'                      => '',
+  '[email]'                     => '',
+  'account_description'         => '',
+  'accrual'                     => '',
+  'all entries'                 => '',
+  'ap_aging_list'               => '',
+  'ar_aging_list'               => '',
+  'as at'                       => '',
+  'assembly_list'               => '',
+  'back'                        => '',
+  'bin_list'                    => '',
+  'bis'                         => '',
+  'button'                      => '',
+  'cash'                        => '',
+  'chargenumber #1'             => '',
+  'chart_of_accounts'           => '',
+  'choice'                      => '',
+  'choice part'                 => '',
+  'close'                       => '',
+  'config/authentication.pl: Key "DB_config" is missing.' => '',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => '',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => '',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => '',
+  'continue'                    => '',
+  'correction'                  => '',
+  'customer'                    => '',
+  'customer_list'               => '',
+  'customernumber not unique!'  => '',
+  'debug'                       => '',
+  'delete'                      => '',
+  'deliverydate'                => '',
+  'direct debit'                => '',
+  'disposed'                    => '',
+  'done'                        => '',
+  'down'                        => '',
+  'drucken'                     => '',
+  'dunning_list'                => '',
+  'eMail Send?'                 => '',
+  'eMail?'                      => '',
+  'ea'                          => '',
+  'emailed to'                  => '',
+  'female'                      => '',
+  'follow_up_list'              => '',
+  'for'                         => '',
+  'for Period'                  => '',
+  'found'                       => '',
+  'from (time)'                 => '',
+  'general_ledger_list'         => '',
+  'history'                     => '',
+  'history search engine'       => '',
+  'invoice'                     => '',
+  'invoice_list'                => '',
+  'lead deleted!'               => '',
+  'lead saved!'                 => '',
+  'list'                        => '',
+  'list_of_payments'            => '',
+  'list_of_receipts'            => '',
+  'list_of_transactions'        => '',
+  'logout'                      => '',
+  'male'                        => '',
+  'mark as paid'                => '',
+  'master'                      => '',
+  'missing'                     => '',
+  'month'                       => '',
+  'new Window'                  => '',
+  'no'                          => '',
+  'no chargenumber'             => '',
+  'none (pricegroup)'           => '',
+  'not transferred in yet'      => '',
+  'not transferred out yet'     => '',
+  'number'                      => '',
+  'oe.pl::search called with unknown type' => '',
+  'order'                       => '',
+  'our vendor number at customer' => '',
+  'packing_list'                => '',
+  'part_list'                   => '',
+  'pick_list'                   => '',
+  'plural first char'           => '',
+  'pos_bilanz'                  => '',
+  'pos_bwa'                     => '',
+  'pos_eur'                     => '',
+  'pos_ustva'                   => '',
+  'posted!'                     => '',
+  'print'                       => '',
+  'proforma'                    => '',
+  'project_list'                => '',
+  'purchase_delivery_order_list' => '',
+  'purchase_order'              => '',
+  'purchase_order_list'         => '',
+  'quarter'                     => '',
+  'quotation_list'              => '',
+  'release_material'            => '',
+  'report_generator_dispatch_to is not defined.' => '',
+  'report_generator_nextsub is not defined.' => '',
+  'request_quotation'           => '',
+  'reset'                       => '',
+  'return_material'             => '',
+  'rfq_list'                    => '',
+  'sales tax identification number' => '',
+  'sales_delivery_order_list'   => '',
+  'sales_order'                 => '',
+  'sales_order_list'            => '',
+  'sales_quotation'             => '',
+  'saved'                       => '',
+  'saved!'                      => '',
+  'sent'                        => '',
+  'sent to printer'             => '',
+  'service_list'                => '',
+  'shipped'                     => '',
+  'singular first char'         => '',
+  'soldtotal'                   => '',
+  'stock'                       => '',
+  'submit'                      => '',
+  'tax_chartaccno'              => '',
+  'tax_percent'                 => '',
+  'tax_rate'                    => '',
+  'tax_taxdescription'          => '',
+  'tax_taxkey'                  => '',
+  'taxnumber'                   => '',
+  'to (date)'                   => '',
+  'to (time)'                   => '',
+  'transfer'                    => '',
+  'transferred in'              => '',
+  'transferred out'             => '',
+  'trial_balance'               => '',
+  'up'                          => '',
+  'use program settings'        => '',
+  'used'                        => '',
+  'valid from'                  => '',
+  'vendor'                      => '',
+  'vendor_invoice_list'         => '',
+  'vendor_list'                 => '',
+  'warehouse_journal_list'      => '',
+  'warehouse_report_list'       => '',
+  'wrongformat'                 => '',
+  'yes'                         => '',
+};
+
+1;
diff --git a/locale/en/am b/locale/en/am
new file mode 100644 (file)
index 0000000..48f3f16
--- /dev/null
@@ -0,0 +1,482 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  '&lt;%account_number%&gt; -- Your account number' => '&lt;%account_number%&gt; -- Your account number',
+  '&lt;%bank%&gt; -- Your bank' => '&lt;%bank%&gt; -- Your bank',
+  '&lt;%bank_code%&gt; -- Your bank code' => '&lt;%bank_code%&gt; -- Your bank code',
+  '&lt;%currency%&gt; -- The selected currency' => '&lt;%currency%&gt; -- The selected currency',
+  '&lt;%invtotal%&gt; -- Invoice total' => '&lt;%invtotal%&gt; -- Invoice total',
+  '&lt;%invtotal_wo_skonto%&gt; -- Invoice total less discount' => '&lt;%invtotal_wo_skonto%&gt; -- Invoice total less discount',
+  '&lt;%netto_date%&gt; -- Date the payment is due in full' => '&lt;%netto_date%&gt; -- Date the payment is due in full',
+  '&lt;%skonto_amount%&gt; -- The deductible amount' => '&lt;%skonto_amount%&gt; -- The deductible amount',
+  '&lt;%skonto_date%&gt; -- Date the payment is due with discount' => '&lt;%skonto_date%&gt; -- Date the payment is due with discount',
+  '&lt;%terms_netto%&gt; -- The number of days for full payment' => '&lt;%terms_netto%&gt; -- The number of days for full payment',
+  '&lt;%total%&gt; -- Amount payable' => '&lt;%total%&gt; -- Amount payable',
+  '&lt;%total_wo_skonto%&gt; -- Amount payable less discount' => '&lt;%total_wo_skonto%&gt; -- Amount payable less discount',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'A unit with this name does already exist.' => 'A unit with this name does already exist.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Account'                     => 'Account',
+  'Account Category A'          => 'Account Category A',
+  'Account Category C'          => 'Account Category C',
+  'Account Category E'          => 'Account Category E',
+  'Account Category G'          => 'Account Category G',
+  'Account Category I'          => 'Account Category I',
+  'Account Category L'          => 'Account Category L',
+  'Account Category Q'          => 'Account Category Q',
+  'Account Description missing!' => 'Account Description missing!',
+  'Account Link AP'             => 'Account Link AP',
+  'Account Link AP_amount'      => 'Account Link AP_amount',
+  'Account Link AP_paid'        => 'Account Link AP_paid',
+  'Account Link AP_tax'         => 'Account Link AP_tax',
+  'Account Link AR'             => 'Account Link AR',
+  'Account Link AR_amount'      => 'Account Link AR_amount',
+  'Account Link AR_paid'        => 'Account Link AR_paid',
+  'Account Link AR_tax'         => 'Account Link AR_tax',
+  'Account Link CT_tax'         => 'Account Link CT_tax',
+  'Account Link IC'             => 'Account Link IC',
+  'Account Link IC_cogs'        => 'Account Link IC_cogs',
+  'Account Link IC_expense'     => 'Account Link IC_expense',
+  'Account Link IC_income'      => 'Account Link IC_income',
+  'Account Link IC_sale'        => 'Account Link IC_sale',
+  'Account Link IC_taxpart'     => 'Account Link IC_taxpart',
+  'Account Link IC_taxservice'  => 'Account Link IC_taxservice',
+  'Account Number already used!' => 'Account Number already used!',
+  'Account Number missing!'     => 'Account Number missing!',
+  'Account Type missing!'       => 'Account Type missing!',
+  'Account deleted!'            => 'Account deleted!',
+  'Account saved!'              => 'Account saved!',
+  'Accounting Group deleted!'   => 'Accounting Group deleted!',
+  'Accounting Group saved!'     => 'Accounting Group saved!',
+  'Add'                         => 'Add',
+  'Add Account'                 => 'Add Account',
+  'Add Accounting Group'        => 'Add Accounting Group',
+  'Add Buchungsgruppe'          => 'Add Buchungsgruppe',
+  'Add Business'                => 'Add Business',
+  'Add Department'              => 'Add Department',
+  'Add Language'                => 'Add Language',
+  'Add Lead'                    => 'Add Lead',
+  'Add Payment Terms'           => 'Add Payment Terms',
+  'Add Price Factor'            => 'Add Price Factor',
+  'Add Printer'                 => 'Add Printer',
+  'Add Warehouse'               => 'Add Warehouse',
+  'Add and edit units'          => 'Add and edit units',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Article Code'                => 'Article Code',
+  'Article Code missing!'       => 'Article Code missing!',
+  'Asset'                       => 'Asset',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Audit Control'               => 'Audit Control',
+  'Back'                        => 'Back',
+  'Bcc'                         => 'Bcc',
+  'Bestandskonto'               => 'Bestandskonto',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bins saved.'                 => 'Bins saved.',
+  'Books are open'              => 'Books are open',
+  'Books closed up to'          => 'Books closed up to',
+  'Buchungsgruppe'              => 'Buchungsgruppe',
+  'Buchungsgruppen'             => 'Buchungsgruppen',
+  'Business deleted!'           => 'Business deleted!',
+  'Business saved!'             => 'Business saved!',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot delete account!'      => 'Cannot delete account!',
+  'Cannot delete default account!' => 'Cannot delete default account!',
+  'Cannot save account!'        => 'Cannot save account!',
+  'Cannot save preferences!'    => 'Cannot save preferences!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Chart of Accounts'           => 'Chart of Accounts',
+  'Close Books up to'           => 'Close Books up to',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Cost Center'                 => 'Cost Center',
+  'Costs'                       => 'Costs',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customernumberinit'          => 'Customernumberinit',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Date Format'                 => 'Date Format',
+  'Defaults saved.'             => 'Defaults saved.',
+  'Delete'                      => 'Delete',
+  'Delete Account'              => 'Delete Account',
+  'Delivery Order'              => 'Delivery Order',
+  'Department deleted!'         => 'Department deleted!',
+  'Department saved!'           => 'Department saved!',
+  'Departments'                 => 'Departments',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Description missing!'        => 'Description missing!',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit'                        => 'Edit',
+  'Edit Account'                => 'Edit Account',
+  'Edit Accounting Group'       => 'Edit Accounting Group',
+  'Edit Buchungsgruppe'         => 'Edit Buchungsgruppe',
+  'Edit Business'               => 'Edit Business',
+  'Edit Department'             => 'Edit Department',
+  'Edit Language'               => 'Edit Language',
+  'Edit Lead'                   => 'Edit Lead',
+  'Edit Payment Terms'          => 'Edit Payment Terms',
+  'Edit Preferences for #1'     => 'Edit Preferences for #1',
+  'Edit Price Factor'           => 'Edit Price Factor',
+  'Edit Printer'                => 'Edit Printer',
+  'Edit Warehouse'              => 'Edit Warehouse',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Equity'                      => 'Equity',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Expense'                     => 'Expense',
+  'Expenses EU with UStId'      => 'Expenses EU with UStId',
+  'Expenses EU without UStId'   => 'Expenses EU without UStId',
+  'Factor missing!'             => 'Factor missing!',
+  'File'                        => 'File',
+  'Foreign Expenses'            => 'Foreign Expenses',
+  'Foreign Revenues'            => 'Foreign Revenues',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Header'                      => 'Header',
+  'History'                     => 'History',
+  'History Search'              => 'History Search',
+  'Inventory'                   => 'Inventory',
+  'Invoice'                     => 'Invoice',
+  'Language'                    => 'Language',
+  'Language deleted!'           => 'Language deleted!',
+  'Language missing!'           => 'Language missing!',
+  'Language saved!'             => 'Language saved!',
+  'Languages'                   => 'Languages',
+  'Lead'                        => 'Lead',
+  'Liability'                   => 'Liability',
+  'Long Dates'                  => 'Long Dates',
+  'Long Description'            => 'Long Description',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'National Expenses'           => 'National Expenses',
+  'National Revenues'           => 'National Revenues',
+  'Netto Terms'                 => 'Netto Terms',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'None'                        => 'None',
+  'Number Format'               => 'Number Format',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Terms'               => 'Payment Terms',
+  'Payment Terms saved!'        => 'Payment Terms saved!',
+  'Payment terms deleted!'      => 'Payment terms deleted!',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preferences saved!'          => 'Preferences saved!',
+  'Preview'                     => 'Preview',
+  'Price Factors'               => 'Price Factors',
+  'Price factor deleted!'       => 'Price factor deleted!',
+  'Price factor saved!'         => 'Price factor saved!',
+  'Printer'                     => 'Printer',
+  'Printer Command'             => 'Printer Command',
+  'Printer Command missing!'    => 'Printer Command missing!',
+  'Printer Description'         => 'Printer Description',
+  'Printer deleted!'            => 'Printer deleted!',
+  'Printer saved!'              => 'Printer saved!',
+  'Profit Center'               => 'Profit Center',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Ranges of numbers and default accounts' => 'Ranges of numbers and default accounts',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Revenue'                     => 'Revenue',
+  'Revenues EU with UStId'      => 'Revenues EU with UStId',
+  'Revenues EU without UStId'   => 'Revenues EU without UStId',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Save'                        => 'Save',
+  'Save as new'                 => 'Save as new',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select federal state...'     => 'Select federal state...',
+  'Select tax office...'        => 'Select tax office...',
+  'Skonto'                      => 'Skonto',
+  'Skonto Terms'                => 'Skonto Terms',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Tax Percent is a number between 0 and 100' => 'Tax Percent is a number between 0 and 100',
+  'Tax deleted!'                => 'Tax deleted!',
+  'Tax saved!'                  => 'Tax saved!',
+  'Tax-O-Matic'                 => 'Tax-O-Matic',
+  'Tax-o-matic Account'         => 'Tax-o-matic Account',
+  'Taxdescription  missing!'    => 'Taxdescription  missing!',
+  'Taxkey  missing!'            => 'Taxkey  missing!',
+  'Taxrate missing!'            => 'Taxrate missing!',
+  'Template Code'               => 'Template Code',
+  'Template Code missing!'      => 'Template Code missing!',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The base unit does not exist or it is about to be deleted in row %d.' => 'The base unit does not exist or it is about to be deleted in row %d.',
+  'The base unit does not exist.' => 'The base unit does not exist.',
+  'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => 'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The factor is missing in row %d.' => 'The factor is missing in row %d.',
+  'The factor is missing.'      => 'The factor is missing.',
+  'The name in row %d has already been used before.' => 'The name in row %d has already been used before.',
+  'The name is missing in row %d.' => 'The name is missing in row %d.',
+  'The name is missing.'        => 'The name is missing.',
+  'The unit has been saved.'    => 'The unit has been saved.',
+  'The unit in row %d has been deleted in the meantime.' => 'The unit in row %d has been deleted in the meantime.',
+  'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'The unit in row %d has been used in the meantime and cannot be changed anymore.',
+  'The units have been saved.'  => 'The units have been saved.',
+  'The warehouse could not be deleted because it has already been used.' => 'The warehouse could not be deleted because it has already been used.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Translation (%s)'            => 'Translation (%s)',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Type of Business'            => 'Type of Business',
+  'Unit'                        => 'Unit',
+  'Unknown Category'            => 'Unknown Category',
+  'Unknown Link'                => 'Unknown Link',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse deleted.'          => 'Warehouse deleted.',
+  'Warehouse management'        => 'Warehouse management',
+  'Warehouse saved.'            => 'Warehouse saved.',
+  'Warehouses'                  => 'Warehouses',
+  'Yes'                         => 'Yes',
+  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => 'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'down'                        => 'down',
+  'invoice'                     => 'invoice',
+  'lead deleted!'               => 'lead deleted!',
+  'lead saved!'                 => 'lead saved!',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'up'                          => 'up',
+  'use program settings'        => 'use program settings',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_build_cfg_options'          => '_build_cfg_options',
+  '_get_taxaccount_selection{
+' => '_get_taxaccount_selection{
+',
+  'account_header'              => 'account_header',
+  'add'                         => 'add',
+  'add_account'                 => 'add_account',
+  'add_buchungsgruppe'          => 'add_buchungsgruppe',
+  'add_business'                => 'add_business',
+  'add_department'              => 'add_department',
+  'add_language'                => 'add_language',
+  'add_lead'                    => 'add_lead',
+  'add_payment'                 => 'add_payment',
+  'add_price_factor'            => 'add_price_factor',
+  'add_printer'                 => 'add_printer',
+  'add_tax'                     => 'add_tax',
+  'add_unit'                    => 'add_unit',
+  'add_warehouse'               => 'add_warehouse',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'audit_control'               => 'audit_control',
+  'buchungsgruppe_header'       => 'buchungsgruppe_header',
+  'build_std_url'               => 'build_std_url',
+  'business_header'             => 'business_header',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'config'                      => 'config',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete'                      => 'delete',
+  'delete_account'              => 'delete_account',
+  'delete_buchungsgruppe'       => 'delete_buchungsgruppe',
+  'delete_business'             => 'delete_business',
+  'delete_department'           => 'delete_department',
+  'delete_language'             => 'delete_language',
+  'delete_lead'                 => 'delete_lead',
+  'delete_payment'              => 'delete_payment',
+  'delete_price_factor'         => 'delete_price_factor',
+  'delete_printer'              => 'delete_printer',
+  'delete_tax'                  => 'delete_tax',
+  'delete_warehouse'            => 'delete_warehouse',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'department_header'           => 'department_header',
+  'doclose'                     => 'doclose',
+  'edit'                        => 'edit',
+  'edit_account'                => 'edit_account',
+  'edit_buchungsgruppe'         => 'edit_buchungsgruppe',
+  'edit_business'               => 'edit_business',
+  'edit_defaults'               => 'edit_defaults',
+  'edit_department'             => 'edit_department',
+  'edit_language'               => 'edit_language',
+  'edit_lead'                   => 'edit_lead',
+  'edit_payment'                => 'edit_payment',
+  'edit_price_factor'           => 'edit_price_factor',
+  'edit_printer'                => 'edit_printer',
+  'edit_tax'                    => 'edit_tax',
+  'edit_units'                  => 'edit_units',
+  'edit_warehouse'              => 'edit_warehouse',
+  'form_footer'                 => 'form_footer',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'language_header'             => 'language_header',
+  'lead_header'                 => 'lead_header',
+  'list_account'                => 'list_account',
+  'list_account_details'        => 'list_account_details',
+  'list_buchungsgruppe'         => 'list_buchungsgruppe',
+  'list_business'               => 'list_business',
+  'list_department'             => 'list_department',
+  'list_language'               => 'list_language',
+  'list_lead'                   => 'list_lead',
+  'list_payment'                => 'list_payment',
+  'list_price_factors'          => 'list_price_factors',
+  'list_printer'                => 'list_printer',
+  'list_tax'                    => 'list_tax',
+  'list_warehouses'             => 'list_warehouses',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'payment_header'              => 'payment_header',
+  'printer_header'              => 'printer_header',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_account'                => 'save_account',
+  'save_as_new'                 => 'save_as_new',
+  'save_as_new_account'         => 'save_as_new_account',
+  'save_bin'                    => 'save_bin',
+  'save_buchungsgruppe'         => 'save_buchungsgruppe',
+  'save_business'               => 'save_business',
+  'save_defaults'               => 'save_defaults',
+  'save_department'             => 'save_department',
+  'save_language'               => 'save_language',
+  'save_lead'                   => 'save_lead',
+  'save_payment'                => 'save_payment',
+  'save_preferences'            => 'save_preferences',
+  'save_price_factor'           => 'save_price_factor',
+  'save_printer'                => 'save_printer',
+  'save_tax'                    => 'save_tax',
+  'save_unit'                   => 'save_unit',
+  'save_warehouse'              => 'save_warehouse',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'set_unit_languages'          => 'set_unit_languages',
+  'show_am_history'             => 'show_am_history',
+  'show_history'                => 'show_history',
+  'show_history_search'         => 'show_history_search',
+  'show_vc_details'             => 'show_vc_details',
+  'swap_buchungsgruppen'        => 'swap_buchungsgruppen',
+  'swap_payment_terms'          => 'swap_payment_terms',
+  'swap_price_factors'          => 'swap_price_factors',
+  'swap_units'                  => 'swap_units',
+  'swap_warehouses'             => 'swap_warehouses',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'add_account'                 => 'add_account',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'edit_account'                => 'edit_account',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'submit'                      => 'submit',
+};
+
+1;
diff --git a/locale/en/amcvar b/locale/en/amcvar
new file mode 100644 (file)
index 0000000..7e699bc
--- /dev/null
@@ -0,0 +1,221 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Add custom variable'         => 'Add custom variable',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customers and vendors'       => 'Customers and vendors',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit custom variable'        => 'Edit custom variable',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'Free-form text'              => 'Free-form text',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'List of custom variables'    => 'List of custom variables',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Number'                      => 'Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Parts, services and assemblies' => 'Parts, services and assemblies',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Projects'                    => 'Projects',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Selection'                   => 'Selection',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Text field'                  => 'Text field',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The custom variable has been deleted.' => 'The custom variable has been deleted.',
+  'The custom variable has been saved.' => 'The custom variable has been saved.',
+  'The description is missing.' => 'The description is missing.',
+  'The name is missing.'        => 'The name is missing.',
+  'The name must only consist of letters, numbers and underscores and start with a letter.' => 'The name must only consist of letters, numbers and underscores and start with a letter.',
+  'The option field is empty.'  => 'The option field is empty.',
+  'Timestamp'                   => 'Timestamp',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'Yes/No (Checkbox)'           => 'Yes/No (Checkbox)',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_is_valid_module'            => '_is_valid_module',
+  'add'                         => 'add',
+  'add_cvar_config'             => 'add_cvar_config',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete'                      => 'delete',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'dispatcher'                  => 'dispatcher',
+  'display_cvar_config_form'    => 'display_cvar_config_form',
+  'edit'                        => 'edit',
+  'edit_cvar_config'            => 'edit_cvar_config',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'list_cvar_configs'           => 'list_cvar_configs',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'swap_cvar_configs'           => 'swap_cvar_configs',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'show'                        => 'show',
+};
+
+1;
diff --git a/locale/en/amtemplates b/locale/en/amtemplates
new file mode 100644 (file)
index 0000000..1d92f23
--- /dev/null
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'BWA'                         => 'BWA',
+  'Balance Sheet'               => 'Balance Sheet',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Check'                       => 'Cheque',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit templates'              => 'Edit templates',
+  'Edit the stylesheet'         => 'Edit the stylesheet',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Income Statement'            => 'Income Statement',
+  'Invoice'                     => 'Invoice',
+  'Invoice for fees'            => 'Invoice for fees',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Reminder'            => 'Payment Reminder',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt'                     => 'Receipt',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Saving the file \'%s\' failed. OS error message: %s' => 'Saving the file \'%s\' failed. OS error message: %s',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Statement'                   => 'Statement',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'USTVA'                       => 'USTVA',
+  'USTVA 2004'                  => 'USTVA 2004',
+  'USTVA 2005'                  => 'USTVA 2005',
+  'USTVA 2006'                  => 'USTVA 2006',
+  'USTVA 2007'                  => 'USTVA 2007',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You\'re not editing a file.' => 'You\'re not editing a file.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display'                     => 'display',
+  'display_template'            => 'display_template',
+  'display_template_form'       => 'display_template_form',
+  'edit'                        => 'edit',
+  'edit_template'               => 'edit_template',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_template'               => 'save_template',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'display'                     => 'display',
+  'edit'                        => 'edit',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+};
+
+1;
diff --git a/locale/en/ap b/locale/en/ap
new file mode 100644 (file)
index 0000000..130e80b
--- /dev/null
@@ -0,0 +1,387 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AP Transaction (abbreviation)' => 'AP Transaction (abbreviation)',
+  'AP Transaction Storno (one letter abbreviation)' => 'AP Transaction Storno (one letter abbreviation)',
+  'AP Transaction with Storno (abbreviation)' => 'AP Transaction with Storno (abbreviation)',
+  'AP Transactions'             => 'Purchase Transactions',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Account'                     => 'Account',
+  'Add Accounts Payables Transaction' => 'Add Purchase Transaction',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Amount Due'                  => 'Amount Due',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'Buchungskonto'               => 'Buchungskonto',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cancel Accounts Payables Transaction' => 'Cancel Accounts Payables Transaction',
+  'Cannot delete transaction!'  => 'Cannot delete transaction!',
+  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
+  'Cannot post payment!'        => 'Cannot post payment!',
+  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
+  'Cannot post transaction!'    => 'Cannot post transaction!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Closed'                      => 'Closed',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Limit'                => 'Credit Limit',
+  'Credit Note'                 => 'Credit Note',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Date Paid'                   => 'Date Paid',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete'                      => 'Delete',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Details (one letter abbreviation)' => 'Details (one letter abbreviation)',
+  'Directory'                   => 'Directory',
+  'Draft saved.'                => 'Draft saved.',
+  'Due Date'                    => 'Due Date',
+  'Due Date missing!'           => 'Due Date missing!',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit Accounts Payables Transaction' => 'Edit Creditor Transaction',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Exch'                        => 'Exch',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up'                   => 'Follow-Up',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'Include in Report'           => 'Include in Report',
+  'Invoice'                     => 'Invoice',
+  'Invoice (one letter abbreviation)' => 'Invoice (one letter abbreviation)',
+  'Invoice Date'                => 'Invoice Date',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number'              => 'Invoice Number',
+  'Invoice with Storno (abbreviation)' => 'Invoice with Storno (abbreviation)',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing amount'              => 'Missing amount',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Open'                        => 'Open',
+  'Order'                       => 'Order',
+  'Order Number'                => 'Order Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Paid'                        => 'Paid',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Terms'               => 'Payment Terms',
+  'Payment date missing!'       => 'Payment date missing!',
+  'Payment posted!'             => 'Payment posted!',
+  'Payments'                    => 'Payments',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Post Payment'                => 'Post Payment',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Remaining'                   => 'Remaining',
+  'Remove draft when posting'   => 'Remove draft when posting',
+  'Reports'                     => 'Reports',
+  'Request quotation'           => 'Request quotation',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesperson'                 => 'Salesperson',
+  'Save draft'                  => 'Save draft',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Skip'                        => 'Skip',
+  'Source'                      => 'Source',
+  'Steuersatz'                  => 'Steuersatz',
+  'Storno'                      => 'Storno',
+  'Storno (one letter abbreviation)' => 'Storno (one letter abbreviation)',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax'                         => 'Tax',
+  'Tax Included'                => 'Tax Included',
+  'Taxkey'                      => 'Taxkey',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'There are #1 unfinished follow-ups of which #2 are due.' => 'There are #1 unfinished follow-ups of which #2 are due.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transaction %d cancelled.'   => 'Transaction %d cancelled.',
+  'Transaction deleted!'        => 'Transaction deleted!',
+  'Transaction description'     => 'Transaction description',
+  'Transaction has already been cancelled!' => 'Transaction has already been cancelled!',
+  'Transaction posted!'         => 'Transaction posted!',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Type'                        => 'Type',
+  'USt-IdNr.'                   => 'USt-IdNr.',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Use As Template'             => 'Use As Template',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zero amount posting!'        => 'Zero amount posting!',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'history'                     => 'history',
+  'invoice'                     => 'invoice',
+  'mark as paid'                => 'mark as paid',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'vendor_invoice_list'         => 'vendor_invoice_list',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ap_transactions'             => 'ap_transactions',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_links'                => 'create_links',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'edit'                        => 'edit',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid'                => 'mark_as_paid',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post'                        => 'post',
+  'post_as_new'                 => 'post_as_new',
+  'post_payment'                => 'post_payment',
+  'project_selected'            => 'project_selected',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove_draft'                => 'remove_draft',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'search'                      => 'search',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'purchase_transaction'        => 'ap_transaction',
+  'add_purchase_transaction'    => 'add_accounts_payables_transaction',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'edit_creditor_transaction'   => 'edit_accounts_payables_transaction',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'post'                        => 'post',
+  'post_payment'                => 'post_payment',
+  'save_draft'                  => 'save_draft',
+  'skip'                        => 'skip',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'vendor_invoice'              => 'vendor_invoice',
+  'yes'                         => 'yes',
+  'mark_as_paid'                => 'mark_as_paid',
+};
+
+1;
diff --git a/locale/en/ar b/locale/en/ar
new file mode 100644 (file)
index 0000000..60cc426
--- /dev/null
@@ -0,0 +1,392 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'AR Transaction (abbreviation)' => 'AR Transaction (abbreviation)',
+  'AR Transactions'             => 'Sales Transactions',
+  'Account'                     => 'Account',
+  'Accounting Menu'             => 'Accounting Menu',
+  'Add Accounts Receivables Transaction' => 'Add Sales Transaction',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Amount Due'                  => 'Amount Due',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'Buchungskonto'               => 'Buchungskonto',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cancel Accounts Receivables Transaction' => 'Cancel Accounts Receivables Transaction',
+  'Cannot delete transaction!'  => 'Cannot delete transaction!',
+  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
+  'Cannot post payment!'        => 'Cannot post payment!',
+  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
+  'Cannot post transaction!'    => 'Cannot post transaction!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Closed'                      => 'Closed',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Limit'                => 'Credit Limit',
+  'Credit Note'                 => 'Credit Note',
+  'Credit note (one letter abbreviation)' => 'Credit note (one letter abbreviation)',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Date Paid'                   => 'Date Paid',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete'                      => 'Delete',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Details (one letter abbreviation)' => 'Details (one letter abbreviation)',
+  'Directory'                   => 'Directory',
+  'Draft saved.'                => 'Draft saved.',
+  'Due Date'                    => 'Due Date',
+  'Due Date missing!'           => 'Due Date missing!',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit Accounts Receivables Transaction' => 'Edit Debtor Transaction',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Ertrag prozentual'           => 'Ertrag prozentual',
+  'Exch'                        => 'Exch',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up'                   => 'Follow-Up',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'Include in Report'           => 'Include in Report',
+  'Incoming Payments'           => 'Incoming Payments',
+  'Invoice'                     => 'Invoice',
+  'Invoice (one letter abbreviation)' => 'Invoice (one letter abbreviation)',
+  'Invoice Date'                => 'Invoice Date',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number'              => 'Invoice Number',
+  'Invoice with Storno (abbreviation)' => 'Invoice with Storno (abbreviation)',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing amount'              => 'Missing amount',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Open'                        => 'Open',
+  'Order'                       => 'Order',
+  'Order Number'                => 'Order Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Paid'                        => 'Paid',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Terms'               => 'Payment Terms',
+  'Payment date missing!'       => 'Payment date missing!',
+  'Payment posted!'             => 'Payment posted!',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Post Payment'                => 'Post Payment',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Remaining'                   => 'Remaining',
+  'Remove draft when posting'   => 'Remove draft when posting',
+  'Reports'                     => 'Reports',
+  'Request quotation'           => 'Request quotation',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesperson'                 => 'Salesperson',
+  'Save draft'                  => 'Save draft',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Ship via'                    => 'Ship via',
+  'Shipping Point'              => 'Shipping Point',
+  'Skip'                        => 'Skip',
+  'Source'                      => 'Source',
+  'Steuersatz'                  => 'Steuersatz',
+  'Storno'                      => 'Storno',
+  'Storno (one letter abbreviation)' => 'Storno (one letter abbreviation)',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax'                         => 'Tax',
+  'Tax Included'                => 'Tax Included',
+  'Taxkey'                      => 'Taxkey',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'There are #1 unfinished follow-ups of which #2 are due.' => 'There are #1 unfinished follow-ups of which #2 are due.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transaction %d cancelled.'   => 'Transaction %d cancelled.',
+  'Transaction deleted!'        => 'Transaction deleted!',
+  'Transaction description'     => 'Transaction description',
+  'Transaction has already been cancelled!' => 'Transaction has already been cancelled!',
+  'Transaction posted!'         => 'Transaction posted!',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Type'                        => 'Type',
+  'USt-IdNr.'                   => 'USt-IdNr.',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Use As Template'             => 'Use As Template',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor details'              => 'Vendor details',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zero amount posting!'        => 'Zero amount posting!',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'history'                     => 'history',
+  'invoice'                     => 'invoice',
+  'invoice_list'                => 'invoice_list',
+  'mark as paid'                => 'mark as paid',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_post'                       => '_post',
+  'acc_menu'                    => 'acc_menu',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'ar_transactions'             => 'ar_transactions',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_links'                => 'create_links',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display'                     => 'display',
+  'display_form'                => 'display_form',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'edit'                        => 'edit',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid'                => 'mark_as_paid',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post'                        => 'post',
+  'post_as_new'                 => 'post_as_new',
+  'post_payment'                => 'post_payment',
+  'project_selected'            => 'project_selected',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove_draft'                => 'remove_draft',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'search'                      => 'search',
+  'section_menu'                => 'section_menu',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'sales_transaction'           => 'ar_transaction',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'post'                        => 'post',
+  'post_payment'                => 'post_payment',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'skip'                        => 'skip',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'yes'                         => 'yes',
+  'mark_as_paid'                => 'mark_as_paid',
+};
+
+1;
diff --git a/locale/en/arap b/locale/en/arap
new file mode 100644 (file)
index 0000000..0e68efa
--- /dev/null
@@ -0,0 +1,204 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Number'                      => 'Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'part_selection_internal'     => 'part_selection_internal',
+  'project_selected'            => 'project_selected',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+};
+
+1;
diff --git a/locale/en/bp b/locale/en/bp
new file mode 100644 (file)
index 0000000..9c8f302
--- /dev/null
@@ -0,0 +1,233 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Account'                     => 'Account',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Are you sure you want to remove the marked entries from the queue?' => 'Are you sure you want to remove the marked entries from the queue?',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot remove files!'        => 'Cannot remove files!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Checks'                      => 'Checks',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'File'                        => 'File',
+  'From'                        => 'From',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'Invoice Number'              => 'Invoice Number',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Marked entries printed!'     => 'Marked entries printed!',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Order'                       => 'Order',
+  'Order Number'                => 'Order Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing Lists'               => 'Packing Lists',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Print'                       => 'Print',
+  'Printing ... '               => 'Printing ... ',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Quotation'                   => 'Quotation',
+  'Quotation Number'            => 'Quotation Number',
+  'Quotations'                  => 'Quotations',
+  'RFQ'                         => 'RFQ',
+  'RFQs'                        => 'RFQs',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Receipts'                    => 'Receipts',
+  'Reference'                   => 'Reference',
+  'Remove'                      => 'Remove',
+  'Removed spoolfiles!'         => 'Removed spoolfiles!',
+  'Removing marked entries from queue ...' => 'Removing marked entries from queue ...',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoices'              => 'Sales Invoices',
+  'Sales Orders'                => 'Sales Orders',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select all'                  => 'Select all',
+  'Spoolfile'                   => 'Spoolfile',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To'                          => 'To',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'done'                        => 'done',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'assert_bp_access'            => 'assert_bp_access',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'list_spool'                  => 'list_spool',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'print'                       => 'print',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove'                      => 'remove',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'search'                      => 'search',
+  'select_all'                  => 'select_all',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+  'print'                       => 'print',
+  'remove'                      => 'remove',
+  'select_all'                  => 'select_all',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/ca b/locale/en/ca
new file mode 100644 (file)
index 0000000..afc8dbe
--- /dev/null
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Account'                     => 'Account',
+  'Accrual'                     => 'Accrual',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Balance'                     => 'Balance',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Chart of Accounts'           => 'Chart of Accounts',
+  'Company'                     => 'Company',
+  'Confirmation'                => 'Confirmation',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create Date'                 => 'Create Date',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit'                      => 'Credit',
+  'Credit (one letter abbreviation)' => 'Credit (one letter abbreviation)',
+  'Credit Note'                 => 'Credit Note',
+  'Customized Report'           => 'Customized Report',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Debit'                       => 'Debit',
+  'Debit (one letter abbreviation)' => 'Debit (one letter abbreviation)',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Decimalplaces'               => 'Decimalplaces',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'EB-Wert'                     => 'EB-Wert',
+  'ELSE'                        => 'ELSE',
+  'EUR'                         => 'EUR',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Free report period'          => 'Free report period',
+  'From'                        => 'From',
+  'Gegenkonto'                  => 'Gegenkonto',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Invoice'                     => 'Invoice',
+  'Jahresverkehrszahlen neu'    => 'Jahresverkehrszahlen neu',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'List Transactions'           => 'List Transactions',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Method'                      => 'Method',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Monthly'                     => 'Monthly',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Pick List'                   => 'Pick List',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project Number'              => 'Project Number',
+  'Purchase Order'              => 'Purchase Order',
+  'Quarter'                     => 'Quarter',
+  'Quarterly'                   => 'Quarterly',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reference'                   => 'Reference',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Saldo neu'                   => 'Saldo neu',
+  'Satz %'                      => 'Satz %',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'USt-Konto'                   => 'USt-Konto',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'YYYY'                        => 'YYYY',
+  'Year'                        => 'Year',
+  'Yearly'                      => 'Yearly',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'chart_of_accounts'           => 'chart_of_accounts',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'invoice'                     => 'invoice',
+  'list_of_transactions'        => 'list_of_transactions',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'wrongformat'                 => 'wrongformat',
+};
+
+$self->{subs} = {
+  'chart_of_accounts'           => 'chart_of_accounts',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'format_debit_credit'         => 'format_debit_credit',
+  'list'                        => 'list',
+  'list_transactions'           => 'list_transactions',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'back'                        => 'back',
+  'continue'                    => 'continue',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'list_transactions'           => 'list_transactions',
+};
+
+1;
diff --git a/locale/en/common b/locale/en/common
new file mode 100644 (file)
index 0000000..cd09930
--- /dev/null
@@ -0,0 +1,185 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+};
+
+1;
diff --git a/locale/en/cp b/locale/en/cp
new file mode 100644 (file)
index 0000000..e0928c4
--- /dev/null
@@ -0,0 +1,251 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Account'                     => 'Account',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot post Payment!'        => 'Cannot post Payment!',
+  'Cannot post Receipt!'        => 'Cannot post Receipt!',
+  'Cannot post payment!'        => 'Cannot post payment!',
+  'Cannot process payment for a closed period!' => 'Cannot process payment for a closed period!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Date missing!'               => 'Date missing!',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Deposit'                     => 'Deposit',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Due'                         => 'Due',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'Invoices'                    => 'Invoices',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Number'                      => 'Number',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment'                     => 'Payment',
+  'Payment posted!'             => 'Payment posted!',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Postscript'                  => 'Postscript',
+  'Prepayment'                  => 'Prepayment',
+  'Preview'                     => 'Preview',
+  'Print'                       => 'Print',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt'                     => 'Receipt',
+  'Receipt posted!'             => 'Receipt posted!',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Screen'                      => 'Screen',
+  'Select'                      => 'Select',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Source'                      => 'Source',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor details'              => 'Vendor details',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zero amount posting!'        => 'Zero amount posting!',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'list_invoices'               => 'list_invoices',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'part_selection_internal'     => 'part_selection_internal',
+  'payment'                     => 'payment',
+  'post'                        => 'post',
+  'print'                       => 'print',
+  'project_selected'            => 'project_selected',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+  'post'                        => 'post',
+  'print'                       => 'print',
+  'update'                      => 'update',
+};
+
+1;
diff --git a/locale/en/ct b/locale/en/ct
new file mode 100644 (file)
index 0000000..e28432c
--- /dev/null
@@ -0,0 +1,285 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Customer'                => 'Add Customer',
+  'Add Vendor'                  => 'Add Vendor',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Billing/shipping address (city)' => 'Billing/shipping address (city)',
+  'Billing/shipping address (street)' => 'Billing/shipping address (street)',
+  'Billing/shipping address (zipcode)' => 'Billing/shipping address (zipcode)',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete customer!'     => 'Cannot delete customer!',
+  'Cannot delete vendor!'       => 'Cannot delete vendor!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Contact person (surname)'    => 'Contact person (surname)',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer deleted!'           => 'Customer deleted!',
+  'Customer details'            => 'Customer details',
+  'Customer saved!'             => 'Customer saved!',
+  'Customers'                   => 'Customers',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'ELSE'                        => 'ELSE',
+  'Edit Customer'               => 'Edit Customer',
+  'Edit Vendor'                 => 'Edit Vendor',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Fax'                         => 'Fax',
+  'File'                        => 'File',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'Name missing!'               => 'Name missing!',
+  'New contact'                 => 'New contact',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Number'                      => 'Number',
+  'Orphaned'                    => 'Orphaned',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Tax Number'                  => 'Tax Number',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'This customer number is already in use.' => 'This customer number is already in use.',
+  'This vendor number is already in use.' => 'This vendor number is already in use.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Type of Business'            => 'Type of Business',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor deleted!'             => 'Vendor deleted!',
+  'Vendor details'              => 'Vendor details',
+  'Vendor saved!'               => 'Vendor saved!',
+  'Vendors'                     => 'Vendors',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'customer_list'               => 'customer_list',
+  'customernumber not unique!'  => 'customernumber not unique!',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'vendor_list'                 => 'vendor_list',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'add_transaction'             => 'add_transaction',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete'                      => 'delete',
+  'delete_contact'              => 'delete_contact',
+  'delete_shipto'               => 'delete_shipto',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display'                     => 'display',
+  'edit'                        => 'edit',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'get_contact'                 => 'get_contact',
+  'get_delivery'                => 'get_delivery',
+  'get_shipto'                  => 'get_shipto',
+  'gl_transaction'              => 'gl_transaction',
+  'list_names'                  => 'list_names',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_and_ap_transaction'     => 'save_and_ap_transaction',
+  'save_and_ar_transaction'     => 'save_and_ar_transaction',
+  'save_and_close'              => 'save_and_close',
+  'save_and_invoice'            => 'save_and_invoice',
+  'save_and_order'              => 'save_and_order',
+  'save_and_quotation'          => 'save_and_quotation',
+  'save_and_rfq'                => 'save_and_rfq',
+  'search'                      => 'search',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delete_contact'              => 'delete_contact',
+  'delete_shipto'               => 'delete_shipto',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'save_and_ap_transaction'     => 'save_and_ap_transaction',
+  'save_and_ar_transaction'     => 'save_and_ar_transaction',
+  'save_and_close'              => 'save_and_close',
+  'save_and_invoice'            => 'save_and_invoice',
+  'save_and_order'              => 'save_and_order',
+  'save_and_quotation'          => 'save_and_quotation',
+  'save_and_rfq'                => 'save_and_rfq',
+};
+
+1;
diff --git a/locale/en/datev b/locale/en/datev
new file mode 100644 (file)
index 0000000..9677c3e
--- /dev/null
@@ -0,0 +1,232 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Abrechnungsnummer'           => 'Abrechnungsnummer',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'April'                       => 'April',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Beratername'                 => 'Beratername',
+  'Beraternummer'               => 'Beraternummer',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis Konto: '                 => 'Bis Konto: ',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Angaben'               => 'DATEV Angaben',
+  'DATEV Export'                => 'DATEV Export',
+  'DATEX - Export Assistent'    => 'DATEX - Export Assistent',
+  'DELETED'                     => 'DELETED',
+  'DFV-Kennzeichen'             => 'DFV-Kennzeichen',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Datum von'                   => 'Datum von',
+  'December'                    => 'December',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Export Buchungsdaten'        => 'Export Buchungsdaten',
+  'Export Stammdaten'           => 'Export Stammdaten',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'I'                           => 'I',
+  'II'                          => 'II',
+  'III'                         => 'III',
+  'IV'                          => 'IV',
+  'Invoice'                     => 'Invoice',
+  'January'                     => 'January',
+  'July'                        => 'July',
+  'June'                        => 'June',
+  'KNE-Export erfolgreich!'     => 'KNE-Export erfolgreich!',
+  'Konten'                      => 'Konten',
+  'Kontonummernerweiterung (KNE)' => 'Kontonummernerweiterung (KNE)',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mandantennummer'             => 'Mandantennummer',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Medium Number'               => 'Medium Number',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Monat'                       => 'Monat',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'November'                    => 'November',
+  'OBE-Export erfolgreich!'     => 'OBE-Export erfolgreich!',
+  'October'                     => 'October',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Password'                    => 'Password',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quartal'                     => 'Quartal',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'September'                   => 'September',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Von Konto: '                 => 'Von Konto: ',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Your download does not exist anymore. Please re-run the DATEV export assistant.' => 'Your download does not exist anymore. Please re-run the DATEV export assistant.',
+  'Zeitraum'                    => 'Zeitraum',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'bis'                         => 'bis',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'download'                    => 'download',
+  'export'                      => 'export',
+  'export2'                     => 'export2',
+  'export3'                     => 'export3',
+  'export_bewegungsdaten'       => 'export_bewegungsdaten',
+  'export_stammdaten'           => 'export_stammdaten',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+};
+
+1;
diff --git a/locale/en/dn b/locale/en/dn
new file mode 100644 (file)
index 0000000..0689bbe
--- /dev/null
@@ -0,0 +1,381 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Automatically created invoice for fee and interest for dunning %s' => 'Automatically created invoice for fee and interest for dunning %s',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Company Name'                => 'Company Name',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not print dunning.'    => 'Could not print dunning.',
+  'Could not spawn ghostscript.' => 'Could not spawn ghostscript.',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customername'                => 'Customername',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Dunning'                     => 'Dunning',
+  'Dunning Date'                => 'Dunning Date',
+  'Dunning Description missing in row ' => 'Dunning Description missing in row ',
+  'Dunning Duedate'             => 'Dunning Duedate',
+  'Dunning Level'               => 'Dunning Level',
+  'Dunning Level missing in row ' => 'Dunning Level missing in row ',
+  'Dunning Process Config saved!' => 'Dunning Process Config saved!',
+  'Dunning Process started for selected invoices!' => 'Dunning Process started for selected invoices!',
+  'Dunning overview'            => 'Dunning overview',
+  'Dunnings'                    => 'Dunnings',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Dunning Process Config' => 'Edit Dunning Process Config',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'In-line'                     => 'In-line',
+  'Interest'                    => 'Interest',
+  'Invdate'                     => 'Invdate',
+  'Invnumber'                   => 'Invnumber',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Duedate'             => 'Invoice Duedate',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No dunnings have been selected for printing.' => 'No dunnings have been selected for printing.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Terms missing in row ' => 'Payment Terms missing in row ',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Print dunnings'              => 'Print dunnings',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Purchase Order'              => 'Purchase Order',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Set eMail text'              => 'Set eMail text',
+  'Ship to'                     => 'Ship to',
+  'Shipping Address'            => 'Shipping Address',
+  'Start Dunning Process'       => 'Start Dunning Process',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Terms missing in row '       => 'Terms missing in row ',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The dunnings have been printed.' => 'The dunnings have been printed.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'To (email)'                  => 'To (email)',
+  'Total Fees'                  => 'Total Fees',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'dunning_list'                => 'dunning_list',
+  'emailed to'                  => 'emailed to',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'customer_details'            => 'customer_details',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_row'                 => 'display_row',
+  'edit_config'                 => 'edit_config',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'order'                       => 'order',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post_as_new'                 => 'post_as_new',
+  'print'                       => 'print',
+  'print_dunning'               => 'print_dunning',
+  'print_form'                  => 'print_form',
+  'print_multiple'              => 'print_multiple',
+  'print_options'               => 'print_options',
+  'quotation'                   => 'quotation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_dunning'                => 'save_dunning',
+  'search'                      => 'search',
+  'select_item'                 => 'select_item',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_email'                   => 'set_email',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'ship_to'                     => 'ship_to',
+  'show_dunning'                => 'show_dunning',
+  'show_history'                => 'show_history',
+  'show_invoices'               => 'show_invoices',
+  'show_vc_details'             => 'show_vc_details',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'print'                       => 'print',
+  'save'                        => 'save',
+};
+
+1;
diff --git a/locale/en/do b/locale/en/do
new file mode 100644 (file)
index 0000000..29fa9fc
--- /dev/null
@@ -0,0 +1,448 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  ' missing!'                   => ' missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Purchase Delivery Order' => 'Add Purchase Delivery Order',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Delivery Order'    => 'Add Sales Delivery Order',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete delivery order!' => 'Cannot delete delivery order!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Closed'                      => 'Closed',
+  'Company Name'                => 'Company Name',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete delivery order'       => 'Delete delivery order',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Delivery Order Date missing!' => 'Delivery Order Date missing!',
+  'Delivery Order Number'       => 'Delivery Order Number',
+  'Delivery Order deleted!'     => 'Delivery Order deleted!',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Purchase Delivery Order' => 'Edit Purchase Delivery Order',
+  'Edit Sales Delivery Order'   => 'Edit Sales Delivery Order',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => 'Error in row #1: The quantity you entered is bigger than the stocked quantity.',
+  'Ertrag'                      => 'Ertrag',
+  'Extended'                    => 'Extended',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'In-line'                     => 'In-line',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Not delivered'               => 'Not delivered',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'Open'                        => 'Open',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order'                       => 'Order',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesperson'                 => 'Salesperson',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Ship via'                    => 'Ship via',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Stock'                       => 'Stock',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => 'The delivery order has not been marked as delivered. The warehouse contents have not changed.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The parts for this delivery order have already been transferred in.' => 'The parts for this delivery order have already been transferred in.',
+  'The parts for this delivery order have already been transferred out.' => 'The parts for this delivery order have already been transferred out.',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => 'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.',
+  'To (email)'                  => 'To (email)',
+  'Transaction description'     => 'Transaction description',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You cannot create an invoice for delivery orders for different customers.' => 'You cannot create an invoice for delivery orders for different customers.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'You cannot create an invoice for delivery orders from different vendors.',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You have not selected any delivery order.' => 'You have not selected any delivery order.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'chargenumber #1'             => 'chargenumber #1',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'no chargenumber'             => 'no chargenumber',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_delivery_order_list' => 'purchase_delivery_order_list',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_delivery_order_list'   => 'sales_delivery_order_list',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'calculate_stock_in_out'      => 'calculate_stock_in_out',
+  'call_sub'                    => 'call_sub',
+  'check_do_access'             => 'check_do_access',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_delivery_order'       => 'delete_delivery_order',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'dispatcher'                  => 'dispatcher',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'display_stock_in_form'       => 'display_stock_in_form',
+  'e_mail'                      => 'e_mail',
+  'edit'                        => 'edit',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'mark_closed'                 => 'mark_closed',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'no'                          => 'no',
+  'order'                       => 'order',
+  'order_links'                 => 'order_links',
+  'orders'                      => 'orders',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post_as_new'                 => 'post_as_new',
+  'prepare_order'               => 'prepare_order',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'quotation'                   => 'quotation',
+  'redo_stock_info'             => 'redo_stock_info',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'search'                      => 'search',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_headings'                => 'set_headings',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'set_stock_in'                => 'set_stock_in',
+  'set_stock_out'               => 'set_stock_out',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'stock_in_form'               => 'stock_in_form',
+  'stock_in_out_form'           => 'stock_in_out_form',
+  'stock_out_form'              => 'stock_out_form',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'update_delivery_order'       => 'update_delivery_order',
+  'update_stock_in'             => 'update_stock_in',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'e_mail'                      => 'e_mail',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'invoice'                     => 'invoice',
+  'mark_closed'                 => 'mark_closed',
+  'new_part'                    => 'new_part',
+  'no'                          => 'no',
+  'print'                       => 'print',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'ship_to'                     => 'ship_to',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/drafts b/locale/en/drafts
new file mode 100644 (file)
index 0000000..c9f5af0
--- /dev/null
@@ -0,0 +1,198 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Draft saved.'                => 'Draft saved.',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Skip'                        => 'Skip',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove_draft'                => 'remove_draft',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete_drafts'               => 'delete_drafts',
+  'new_part'                    => 'new_part',
+  'save_draft'                  => 'save_draft',
+  'skip'                        => 'skip',
+};
+
+1;
diff --git a/locale/en/fu b/locale/en/fu
new file mode 100644 (file)
index 0000000..5d3b9d3
--- /dev/null
@@ -0,0 +1,199 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Follow-Up'               => 'Add Follow-Up',
+  'Add Follow-Up for #1'        => 'Add Follow-Up for #1',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Body'                        => 'Body',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Created by'                  => 'Created by',
+  'Created for'                 => 'Created for',
+  'Created on'                  => 'Created on',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Done'                        => 'Done',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit Access Rights for Follow-Ups' => 'Edit Access Rights for Follow-Ups',
+  'Edit Follow-Up'              => 'Edit Follow-Up',
+  'Edit Follow-Up for #1'       => 'Edit Follow-Up for #1',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'Follow-Up Date'              => 'Follow-Up Date',
+  'Follow-Up saved.'            => 'Follow-Up saved.',
+  'Follow-Ups'                  => 'Follow-Ups',
+  'Follow-up for'               => 'Follow-up for',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Invalid follow-up ID.'       => 'Invalid follow-up ID.',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No'                          => 'No',
+  'No action defined.'          => 'No action defined.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Not done yet'                => 'Not done yet',
+  'Only due follow-ups'         => 'Only due follow-ups',
+  'Other users\' follow-ups'    => 'Other users\' follow-ups',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Pick List'                   => 'Pick List',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reference'                   => 'Reference',
+  'Reports'                     => 'Reports',
+  'Request quotation'           => 'Request quotation',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The access rights have been saved.' => 'The access rights have been saved.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The follow-up date is missing.' => 'The follow-up date is missing.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The subject is missing.'     => 'The subject is missing.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You must chose a user.'      => 'You must chose a user.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'follow_up_list'              => 'follow_up_list',
+  'invoice'                     => 'invoice',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+};
+
+$self->{subs} = {
+  '_collect_links'              => '_collect_links',
+  'add'                         => 'add',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'dispatcher'                  => 'dispatcher',
+  'display_form'                => 'display_form',
+  'edit'                        => 'edit',
+  'edit_access_rights'          => 'edit_access_rights',
+  'finish'                      => 'finish',
+  'report'                      => 'report',
+  'report_for_todo_list'        => 'report_for_todo_list',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'save'                        => 'save',
+  'save_access_rights'          => 'save_access_rights',
+  'save_follow_up'              => 'save_follow_up',
+  'search'                      => 'search',
+  'update'                      => 'update',
+  'back'                        => 'back',
+  'cancel'                      => 'cancel',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'finish'                      => 'finish',
+  'save'                        => 'save',
+};
+
+1;
diff --git a/locale/en/generictranslations b/locale/en/generictranslations
new file mode 100644 (file)
index 0000000..8c9fa62
--- /dev/null
@@ -0,0 +1,131 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit greetings'              => 'Edit greetings',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Pick List'                   => 'Pick List',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The greetings have been saved.' => 'The greetings have been saved.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'invoice'                     => 'invoice',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+};
+
+$self->{subs} = {
+  'edit_greetings'              => 'edit_greetings',
+  'save_greetings'              => 'save_greetings',
+  'continue'                    => 'continue',
+  'save'                        => 'save',
+};
+
+1;
diff --git a/locale/en/gl b/locale/en/gl
new file mode 100644 (file)
index 0000000..bf4cb7f
--- /dev/null
@@ -0,0 +1,356 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Account'                     => 'Account',
+  'Add General Ledger Transaction' => 'Add General Ledger Transaction',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
+  'Asset'                       => 'Asset',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Balance'                     => 'Balance',
+  'Bcc'                         => 'Bcc',
+  'Belegnummer'                 => 'Belegnummer',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'Buchungsdatum'               => 'Buchungsdatum',
+  'Buchungsnummer'              => 'Buchungsnummer',
+  'CANCELED'                    => 'CANCELED',
+  'CB Transaction'              => 'CB Transaction',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cancel Accounts Receivables Transaction' => 'Cancel Accounts Receivables Transaction',
+  'Cannot delete transaction!'  => 'Cannot delete transaction!',
+  'Cannot have a value in both Debit and Credit!' => 'Cannot have a value in both Debit and Credit!',
+  'Cannot post a transaction without a value!' => 'Cannot post a transaction without a value!',
+  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
+  'Cannot post transaction with a debit and credit entry for the same account!' => 'Cannot post transaction with a debit and credit entry for the same account!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Chart balance'               => 'Chart balance',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Contra'                      => 'Contra',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit'                      => 'Credit',
+  'Credit Account'              => 'Credit Account',
+  'Credit Note'                 => 'Credit Note',
+  'Credit Tax'                  => 'Credit Tax',
+  'Credit Tax Account'          => 'Credit Tax Account',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Debit'                       => 'Debit',
+  'Debit Account'               => 'Debit Account',
+  'Debit Tax'                   => 'Debit Tax',
+  'Debit Tax Account'           => 'Debit Tax Account',
+  'Debit and credit out of balance!' => 'Debit and credit out of balance!',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete'                      => 'Delete',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Description missing!'        => 'Description missing!',
+  'Directory'                   => 'Directory',
+  'Draft saved.'                => 'Draft saved.',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit General Ledger Transaction' => 'Edit General Ledger Transaction',
+  'Empty transaction!'          => 'Empty transaction!',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Equity'                      => 'Equity',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Expense'                     => 'Expense',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up'                   => 'Follow-Up',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'Include in Report'           => 'Include in Report',
+  'Invoice'                     => 'Invoice',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Journal'                     => 'Journal',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'Liability'                   => 'Liability',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Mitarbeiter'                 => 'Mitarbeiter',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'MwSt. inkl.'                 => 'MwSt. inkl.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'OB Transaction'              => 'OB Transaction',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Others'                      => 'Others',
+  'Out of balance transaction!' => 'Out of balance transaction!',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Preview'                     => 'Preview',
+  'Previous transdate text'     => 'Previous transdate text',
+  'Previous transnumber text'   => 'Previous transnumber text',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project Number'              => 'Project Number',
+  'Project Numbers'             => 'Project Numbers',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reference'                   => 'Reference',
+  'Reference missing!'          => 'Reference missing!',
+  'Remove Draft'                => 'Remove Draft',
+  'Reports'                     => 'Reports',
+  'Request quotation'           => 'Request quotation',
+  'Revenue'                     => 'Revenue',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Save draft'                  => 'Save draft',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Show details'                => 'Show details',
+  'Skip'                        => 'Skip',
+  'Source'                      => 'Source',
+  'Storno'                      => 'Storno',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax'                         => 'Tax',
+  'Taxkey'                      => 'Taxkey',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'There are #1 unfinished follow-ups of which #2 are due.' => 'There are #1 unfinished follow-ups of which #2 are due.',
+  'To (email)'                  => 'To (email)',
+  'To (time)'                   => 'To (time)',
+  'Transaction %d cancelled.'   => 'Transaction %d cancelled.',
+  'Transaction Date missing!'   => 'Transaction Date missing!',
+  'Transaction deleted!'        => 'Transaction deleted!',
+  'Transaction has already been cancelled!' => 'Transaction has already been cancelled!',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unbalanced Ledger'           => 'Unbalanced Ledger',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'general_ledger_list'         => 'general_ledger_list',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'display_rows'                => 'display_rows',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'edit'                        => 'edit',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'generate_report'             => 'generate_report',
+  'gl_transaction'              => 'gl_transaction',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post'                        => 'post',
+  'post_as_new'                 => 'post_as_new',
+  'post_transaction'            => 'post_transaction',
+  'prepare_transaction'         => 'prepare_transaction',
+  'reformat_numbers'            => 'reformat_numbers',
+  'remove_draft'                => 'remove_draft',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'search'                      => 'search',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'purchase_transaction'        => 'ap_transaction',
+  'sales_transaction'           => 'ar_transaction',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'gl_transaction'              => 'gl_transaction',
+  'new_part'                    => 'new_part',
+  'post'                        => 'post',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'skip'                        => 'skip',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/globalprojectnumber_ap_ar_oe b/locale/en/globalprojectnumber_ap_ar_oe
new file mode 100644 (file)
index 0000000..ec02bb2
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'do_query'                    => 'do_query',
+  'do_update'                   => 'do_update',
+  'mydberror'                   => 'mydberror',
+};
+
+1;
diff --git a/locale/en/ic b/locale/en/ic
new file mode 100644 (file)
index 0000000..a035bac
--- /dev/null
@@ -0,0 +1,461 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  ' Part Number missing!'       => ' Part Number missing!',
+  '#1 prices were updated.'     => '#1 prices were updated.',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Active'                      => 'Active',
+  'Add '                        => 'Add ',
+  'Add Assembly'                => 'Add Assembly',
+  'Add Part'                    => 'Add Part',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Service'                 => 'Add Service',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Assemblies'                  => 'Assemblies',
+  'Assembly Number missing!'    => 'Assembly Number missing!',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'BOM'                         => 'BOM',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bought'                      => 'Bought',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete item!'         => 'Cannot delete item!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Company Name'                => 'Company Name',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Could not update prices!'    => 'Could not update prices!',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description must not be empty!' => 'Description must not be empty!',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Drawing'                     => 'Drawing',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EAN'                         => 'EAN',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit '                       => 'Edit ',
+  'Edit Assembly'               => 'Edit Assembly',
+  'Edit Part'                   => 'Edit Part',
+  'Edit Service'                => 'Edit Service',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Extended'                    => 'Extended',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => 'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.',
+  'Image'                       => 'Image',
+  'In-line'                     => 'In-line',
+  'Inventory quantity must be zero before you can set this assembly obsolete!' => 'Inventory quantity must be zero before you can set this assembly obsolete!',
+  'Inventory quantity must be zero before you can set this part obsolete!' => 'Inventory quantity must be zero before you can set this part obsolete!',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number'              => 'Invoice Number',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Item deleted!'               => 'Item deleted!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'Language Values'             => 'Language Values',
+  'Last Cost'                   => 'Last Cost',
+  'License'                     => 'License',
+  'List Price'                  => 'List Price',
+  'Long Description'            => 'Long Description',
+  'MAILED'                      => 'MAILED',
+  'Make'                        => 'Make',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Microfiche'                  => 'Microfiche',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Model'                       => 'Model',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No prices will be updated because no prices have been entered.' => 'No prices will be updated because no prices have been entered.',
+  'No valid number entered for pricegroup "#1".' => 'No valid number entered for pricegroup "#1".',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Obsolete'                    => 'Obsolete',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'On Order'                    => 'On Order',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Options'                     => 'Options',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Ordered'                     => 'Ordered',
+  'Orphaned'                    => 'Orphaned',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Description missing!'   => 'Part Description missing!',
+  'Part Number'                 => 'Part Number',
+  'Part Number missing!'        => 'Part Number missing!',
+  'Part description'            => 'Part description',
+  'Partnumber must not be set to empty!' => 'Partnumber must not be set to empty!',
+  'Partnumber not unique!'      => 'Partnumber not unique!',
+  'Parts'                       => 'Parts',
+  'Parts must have an entry type.' => 'Parts must have an entry type.',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase Prices'             => 'Purchase Prices',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'Quoted'                      => 'Quoted',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sale Prices'                 => 'Sale Prices',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sell Price'                  => 'Sell Price',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Serial Number'               => 'Serial Number',
+  'Service Number missing!'     => 'Service Number missing!',
+  'Services'                    => 'Services',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Shipping Address'            => 'Shipping Address',
+  'Short'                       => 'Short',
+  'Show details'                => 'Show details',
+  'Sold'                        => 'Sold',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'TOP100'                      => 'TOP100',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'To'                          => 'To',
+  'To (email)'                  => 'To (email)',
+  'To (time)'                   => 'To (time)',
+  'Top 100'                     => 'Top 100',
+  'Top 100 hinzufuegen'         => 'Top 100 hinzufuegen',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unit of measure'             => 'Unit of measure',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Updated'                     => 'Updated',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Weight'                      => 'Weight',
+  'Yes'                         => 'Yes',
+  'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => 'You cannot adjust the price for pricegroup "#1" by a negative percentage.',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'assembly_list'               => 'assembly_list',
+  'bin_list'                    => 'bin_list',
+  'choice'                      => 'choice',
+  'choice part'                 => 'choice part',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'deliverydate'                => 'deliverydate',
+  'ea'                          => 'ea',
+  'emailed to'                  => 'emailed to',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'number'                      => 'number',
+  'packing_list'                => 'packing_list',
+  'part_list'                   => 'part_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'service_list'                => 'service_list',
+  'soldtotal'                   => 'soldtotal',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'addtop100'                   => 'addtop100',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'assembly_row'                => 'assembly_row',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'confirm_price_update'        => 'confirm_price_update',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'edit'                        => 'edit',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'generate_report'             => 'generate_report',
+  'gl_transaction'              => 'gl_transaction',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'link_part'                   => 'link_part',
+  'makemodel_row'               => 'makemodel_row',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'order'                       => 'order',
+  'part_selection_internal'     => 'part_selection_internal',
+  'parts_language_selection'    => 'parts_language_selection',
+  'parts_subtotal'              => 'parts_subtotal',
+  'post_as_new'                 => 'post_as_new',
+  'price_row'                   => 'price_row',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'quotation'                   => 'quotation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'search'                      => 'search',
+  'search_update_prices'        => 'search_update_prices',
+  'select_item'                 => 'select_item',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'top100'                      => 'top100',
+  'update'                      => 'update',
+  'update_prices'               => 'update_prices',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'add_assembly'                => 'add_assembly',
+  'add_part'                    => 'add_part',
+  'add_service'                 => 'add_service',
+  'assembly_number_missing!'    => 'assembly_number_missing!',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'edit_assembly'               => 'edit_assembly',
+  'edit_part'                   => 'edit_part',
+  'edit_service'                => 'edit_service',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'inventory_quantity_must_be_zero_before_you_can_set_this_assembly_obsolete!' => 'inventory_quantity_must_be_zero_before_you_can_set_this_assembly_obsolete!',
+  'inventory_quantity_must_be_zero_before_you_can_set_this_part_obsolete!' => 'inventory_quantity_must_be_zero_before_you_can_set_this_part_obsolete!',
+  'new_part'                    => 'new_part',
+  'part_number_missing!'        => 'part_number_missing!',
+  'parts'                       => 'parts',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'service_number_missing!'     => 'service_number_missing!',
+  'services'                    => 'services',
+  'top100'                      => 'top100',
+  'update'                      => 'update',
+  'choice'                      => 'choice',
+  'ea'                          => 'ea',
+  'list'                        => 'list',
+};
+
+1;
diff --git a/locale/en/installationcheck b/locale/en/installationcheck
new file mode 100644 (file)
index 0000000..6778c9a
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'At least one Perl module that Lx-Office ERP requires for running is not installed on your system.' => 'At least one Perl module that Lx-Office ERP requires for running is not installed on your system.',
+  'Bcc'                         => 'Bcc',
+  'Cc'                          => 'Cc',
+  'Date'                        => 'Date',
+  'Directory'                   => 'Directory',
+  'File'                        => 'File',
+  'Here\'s an example command line:' => 'Here\'s an example command line:',
+  'Message'                     => 'Message',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Module home page'            => 'Module home page',
+  'Module name'                 => 'Module name',
+  'One or more Perl modules missing' => 'One or more Perl modules missing',
+  'Please install the below listed modules or ask your system administrator to.' => 'Please install the below listed modules or ask your system administrator to.',
+  'Subject'                     => 'Subject',
+  'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).' => 'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).',
+  'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => 'The second way is to use Perl\'s CPAN module and let it download and install the module for you.',
+  'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.' => 'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.',
+  'There are usually three ways to install Perl modules.' => 'There are usually three ways to install Perl modules.',
+  'To (email)'                  => 'To (email)',
+  'You cannot continue before all required modules are installed.' => 'You cannot continue before all required modules are installed.',
+  '[email]'                     => '[email]',
+};
+
+$self->{subs} = {
+  'verify_installation'         => 'verify_installation',
+};
+
+1;
diff --git a/locale/en/io b/locale/en/io
new file mode 100644 (file)
index 0000000..9325123
--- /dev/null
@@ -0,0 +1,326 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Company Name'                => 'Company Name',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Extended'                    => 'Extended',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'In-line'                     => 'In-line',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Purchase Order'              => 'Purchase Order',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'customer_details'            => 'customer_details',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'order'                       => 'order',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post_as_new'                 => 'post_as_new',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'quotation'                   => 'quotation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_item'                 => 'select_item',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+};
+
+1;
diff --git a/locale/en/ir b/locale/en/ir
new file mode 100644 (file)
index 0000000..cd54583
--- /dev/null
@@ -0,0 +1,438 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Account'                     => 'Account',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Invoice Number' => 'Are you sure you want to delete Invoice Number',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot delete invoice!'      => 'Cannot delete invoice!',
+  'Cannot post invoice for a closed period!' => 'Cannot post invoice for a closed period!',
+  'Cannot post invoice!'        => 'Cannot post invoice!',
+  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
+  'Cannot post payment!'        => 'Cannot post payment!',
+  'Cannot storno storno invoice!' => 'Cannot storno storno invoice!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Company Name'                => 'Company Name',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Contact Person'              => 'Contact Person',
+  'Continue'                    => 'Continue',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Limit'                => 'Credit Limit',
+  'Credit Note'                 => 'Credit Note',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete'                      => 'Delete',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Details (one letter abbreviation)' => 'Details (one letter abbreviation)',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Draft saved.'                => 'Draft saved.',
+  'Due Date'                    => 'Due Date',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Vendor Invoice'         => 'Edit Vendor Invoice',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Exch'                        => 'Exch',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up'                   => 'Follow-Up',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'In-line'                     => 'In-line',
+  'Internal Notes'              => 'Internal Notes',
+  'Invnumber missing!'          => 'Invnumber missing!',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date'                => 'Invoice Date',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number'              => 'Invoice Number',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Invoice deleted!'            => 'Invoice deleted!',
+  'Invoice has already been storno\'d!' => 'Invoice has already been storno\'d!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing amount'              => 'Missing amount',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order Date'                  => 'Order Date',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment date missing!'       => 'Payment date missing!',
+  'Payment posted!'             => 'Payment posted!',
+  'Payments'                    => 'Payments',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Post Payment'                => 'Post Payment',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date'              => 'Quotation Date',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Rechnungsnummer'             => 'Rechnungsnummer',
+  'Record in'                   => 'Record in',
+  'Release From Stock'          => 'Release From Stock',
+  'Remaining'                   => 'Remaining',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Save draft'                  => 'Save draft',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Skip'                        => 'Skip',
+  'Source'                      => 'Source',
+  'Steuersatz'                  => 'Steuersatz',
+  'Storno'                      => 'Storno',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax Included'                => 'Tax Included',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'There are #1 unfinished follow-ups of which #2 are due.' => 'There are #1 unfinished follow-ups of which #2 are due.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Use As Template'             => 'Use As Template',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'history'                     => 'history',
+  'invoice'                     => 'invoice',
+  'mark as paid'                => 'mark as paid',
+  'no'                          => 'no',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'posted!'                     => 'posted!',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'edit'                        => 'edit',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice_links'               => 'invoice_links',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid'                => 'mark_as_paid',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'order'                       => 'order',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post'                        => 'post',
+  'post_as_new'                 => 'post_as_new',
+  'post_payment'                => 'post_payment',
+  'prepare_invoice'             => 'prepare_invoice',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'quotation'                   => 'quotation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'remove_draft'                => 'remove_draft',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_duedate_vendor'          => 'set_duedate_vendor',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'new_part'                    => 'new_part',
+  'post'                        => 'post',
+  'post_payment'                => 'post_payment',
+  'save_draft'                  => 'save_draft',
+  'skip'                        => 'skip',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'yes'                         => 'yes',
+  'mark_as_paid'                => 'mark_as_paid',
+};
+
+1;
diff --git a/locale/en/is b/locale/en/is
new file mode 100644 (file)
index 0000000..6117730
--- /dev/null
@@ -0,0 +1,473 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Account'                     => 'Account',
+  'Add Credit Note'             => 'Add Credit Note',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Storno Credit Note'      => 'Add Storno Credit Note',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Invoice Number' => 'Are you sure you want to delete Invoice Number',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cannot delete invoice!'      => 'Cannot delete invoice!',
+  'Cannot post invoice for a closed period!' => 'Cannot post invoice for a closed period!',
+  'Cannot post invoice!'        => 'Cannot post invoice!',
+  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
+  'Cannot post payment!'        => 'Cannot post payment!',
+  'Cannot storno storno invoice!' => 'Cannot storno storno invoice!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Choose Customer'             => 'Choose Customer',
+  'Choose Vendor'               => 'Choose Vendor',
+  'City'                        => 'City',
+  'Company Name'                => 'Company Name',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Contact Person'              => 'Contact Person',
+  'Continue'                    => 'Continue',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Limit'                => 'Credit Limit',
+  'Credit Limit exceeded!!!'    => 'Credit Limit exceeded!!!',
+  'Credit Note'                 => 'Credit Note',
+  'Credit Note Date'            => 'Credit Note Date',
+  'Credit Note Number'          => 'Credit Note Number',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer Order Number'       => 'Customer Order Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'Customer type'               => 'Customer type',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete'                      => 'Delete',
+  'Delete drafts'               => 'Delete drafts',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Delivery Order Number'       => 'Delivery Order Number',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Details (one letter abbreviation)' => 'Details (one letter abbreviation)',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Draft saved.'                => 'Draft saved.',
+  'Due Date'                    => 'Due Date',
+  'Dunning'                     => 'Dunning',
+  'Dunning Amount'              => 'Dunning Amount',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Credit Note'            => 'Edit Credit Note',
+  'Edit Sales Invoice'          => 'Edit Sales Invoice',
+  'Edit Storno Credit Note'     => 'Edit Storno Credit Note',
+  'Edit Storno Invoice'         => 'Edit Storno Invoice',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Ertrag'                      => 'Ertrag',
+  'Ertrag prozentual'           => 'Ertrag prozentual',
+  'Exch'                        => 'Exch',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up'                   => 'Follow-Up',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'In-line'                     => 'In-line',
+  'Incoming Payments'           => 'Incoming Payments',
+  'Internal Notes'              => 'Internal Notes',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date'                => 'Invoice Date',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number'              => 'Invoice Number',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Invoice deleted!'            => 'Invoice deleted!',
+  'Invoice has already been storno\'d!' => 'Invoice has already been storno\'d!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'Max. Dunning Level'          => 'Max. Dunning Level',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing amount'              => 'Missing amount',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order'                       => 'Order',
+  'Order Date'                  => 'Order Date',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment Terms'               => 'Payment Terms',
+  'Payment date missing!'       => 'Payment date missing!',
+  'Payment posted!'             => 'Payment posted!',
+  'Payments'                    => 'Payments',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Post'                        => 'Post',
+  'Post Payment'                => 'Post Payment',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Print'                       => 'Print',
+  'Print and Post'              => 'Print and Post',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date'              => 'Quotation Date',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number'            => 'Quotation Number',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'RFQ'                         => 'RFQ',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Record in'                   => 'Record in',
+  'Release From Stock'          => 'Release From Stock',
+  'Remaining'                   => 'Remaining',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesman'                    => 'Salesman',
+  'Save draft'                  => 'Save draft',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Ship via'                    => 'Ship via',
+  'Shipping Address'            => 'Shipping Address',
+  'Shipping Point'              => 'Shipping Point',
+  'Show details'                => 'Show details',
+  'Skip'                        => 'Skip',
+  'Source'                      => 'Source',
+  'Steuersatz'                  => 'Steuersatz',
+  'Storno'                      => 'Storno',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax Included'                => 'Tax Included',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'There are #1 unfinished follow-ups of which #2 are due.' => 'There are #1 unfinished follow-ups of which #2 are due.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Trade Discount'              => 'Trade Discount',
+  'Transaction description'     => 'Transaction description',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Use As Template'             => 'Use As Template',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'history'                     => 'history',
+  'invoice'                     => 'invoice',
+  'mark as paid'                => 'mark as paid',
+  'no'                          => 'no',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'posted!'                     => 'posted!',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'credit_note'                 => 'credit_note',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'dont_load_draft'             => 'dont_load_draft',
+  'draft_action_dispatcher'     => 'draft_action_dispatcher',
+  'e_mail'                      => 'e_mail',
+  'edit'                        => 'edit',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice_links'               => 'invoice_links',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'load_draft'                  => 'load_draft',
+  'load_draft_maybe'            => 'load_draft_maybe',
+  'mark_as_paid'                => 'mark_as_paid',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'order'                       => 'order',
+  'part_selection_internal'     => 'part_selection_internal',
+  'post'                        => 'post',
+  'post_as_new'                 => 'post_as_new',
+  'post_payment'                => 'post_payment',
+  'prepare_invoice'             => 'prepare_invoice',
+  'preview'                     => 'preview',
+  'print'                       => 'print',
+  'print_and_post'              => 'print_and_post',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'quotation'                   => 'quotation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'remove_draft'                => 'remove_draft',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save_draft'                  => 'save_draft',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'credit_note'                 => 'credit_note',
+  'delete'                      => 'delete',
+  'delete_drafts'               => 'delete_drafts',
+  'e_mail'                      => 'e_mail',
+  'new_part'                    => 'new_part',
+  'order'                       => 'order',
+  'post'                        => 'post',
+  'post_payment'                => 'post_payment',
+  'preview'                     => 'preview',
+  'print'                       => 'print',
+  'print_and_post'              => 'print_and_post',
+  'save_draft'                  => 'save_draft',
+  'ship_to'                     => 'ship_to',
+  'skip'                        => 'skip',
+  'storno'                      => 'storno',
+  'update'                      => 'update',
+  'use_as_template'             => 'use_as_template',
+  'yes'                         => 'yes',
+  'mark_as_paid'                => 'mark_as_paid',
+};
+
+1;
diff --git a/locale/en/kopf b/locale/en/kopf
new file mode 100644 (file)
index 0000000..29e9dde
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Logout'                      => 'Logout',
+  'drucken'                     => 'drucken',
+};
+
+$self->{subs} = {
+};
+
+1;
diff --git a/locale/en/licenses b/locale/en/licenses
new file mode 100644 (file)
index 0000000..4e65c94
--- /dev/null
@@ -0,0 +1,234 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Add'                         => 'Add',
+  'Add License'                 => 'Add License',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Comment'                     => 'Comment',
+  'Company Name'                => 'Company Name',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Expired licenses'            => 'Expired licenses',
+  'Expiring in x month(s)'      => 'Expiring in x month(s)',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Include in Report'           => 'Include in Report',
+  'Invoice'                     => 'Invoice',
+  'Invoice Number'              => 'Invoice Number',
+  'License key'                 => 'License key',
+  'Licenses'                    => 'Licenses',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No licenses were found that match the search criteria.' => 'No licenses were found that match the search criteria.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'Own Product'                 => 'Own Product',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter a license key.' => 'Please enter a license key.',
+  'Please enter a number of licenses.' => 'Please enter a number of licenses.',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quantity'                    => 'Quantity',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Save'                        => 'Save',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The licensing module has been deactivated in lx-erp.conf.' => 'The licensing module has been deactivated in lx-erp.conf.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update'                      => 'Update',
+  'Valid until'                 => 'Valid until',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View License'                => 'View License',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'details'                     => 'details',
+  'do_add'                      => 'do_add',
+  'do_search'                   => 'do_search',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'print_customer_selection'    => 'print_customer_selection',
+  'print_license_form'          => 'print_license_form',
+  'print_part_selection'        => 'print_part_selection',
+  'quot'                        => 'quot',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'search'                      => 'search',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'set_std_hidden'              => 'set_std_hidden',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'update'                      => 'update',
+};
+
+1;
diff --git a/locale/en/locales.pl b/locale/en/locales.pl
new file mode 100755 (executable)
index 0000000..7cc3c53
--- /dev/null
@@ -0,0 +1,765 @@
+#!/usr/bin/perl
+
+# -n do not include custom_ scripts
+# -v verbose mode, shows progress stuff
+
+# this version of locles processes not only all required .pl files
+# but also all parse_html_templated files.
+
+use Data::Dumper;
+use FileHandle;
+use Getopt::Long;
+use List::Util qw(first);
+use POSIX;
+use Pod::Usage;
+
+$| = 1;
+
+$basedir  = "../..";
+$bindir   = "$basedir/bin/mozilla";
+$dbupdir  = "$basedir/sql/Pg-upgrade";
+$dbupdir2 = "$basedir/sql/Pg-upgrade2";
+$menufile = "menu.ini";
+$submitsearch = qr/type\s*=\s*[\"\']?submit/i;
+
+%referenced_html_files = ();
+
+my $opt_v = 0;
+my $opt_n = 0;
+my $opt_c = 0;
+
+sub parse_args {
+  my ($help, $man);
+
+  GetOptions('no-custom-files' => \$opt_n,
+             'check-files'     => \$opt_c,
+             'verbose'         => \$opt_v,
+             'help'            => \$help,
+             'man'             => \$man,);
+
+  if ($help) {
+    pod2usage(1);
+    exit 0;
+  }
+
+  if ($man) {
+    pod2usage(-exitstatus => 0, -verbose => 2);
+    exit 0;
+  }
+}
+
+parse_args();
+
+opendir DIR, "$bindir" or die "$!";
+@progfiles = grep { /\.pl$/ && !/(_|^\.)/ } readdir DIR;
+seekdir DIR, 0;
+@customfiles = grep /_/, readdir DIR;
+closedir DIR;
+
+# put customized files into @customfiles
+
+if ($opt_n) {
+  @customfiles = ();
+  @menufiles   = ($menufile);
+} else {
+  opendir DIR, "$basedir" or die "$!";
+  @menufiles = grep { /.*?_$menufile$/ } readdir DIR;
+  closedir DIR;
+  unshift @menufiles, $menufile;
+}
+
+opendir DIR, $dbupdir or die "$!";
+@dbplfiles = grep { /\.pl$/ } readdir DIR;
+closedir DIR;
+
+opendir DIR, $dbupdir2 or die "$!";
+@dbplfiles2 = grep { /\.pl$/ } readdir DIR;
+closedir DIR;
+
+# slurp the translations in
+if (-f 'all') {
+  require "all";
+}
+
+my %old_texts = %{ $self->{texts} };
+
+# Read HTML templates.
+#%htmllocale = ();
+#@htmltemplates = <../../templates/webpages/*/*_master.html>;
+#foreach $file (@htmltemplates) {
+#  scanhtmlfile($file);
+#}
+
+map({ handle_file($_, $bindir); } @progfiles);
+map({ handle_file($_, $dbupdir); } @dbplfiles);
+map({ handle_file($_, $dbupdir2); } @dbplfiles2);
+
+sub handle_file {
+  my ($file, $dir) = @_;
+  print "\n$file" if $opt_v;
+  %locale = ();
+  %submit = ();
+  %subrt  = ();
+
+  &scanfile("$dir/$file");
+
+  # scan custom_{module}.pl or {login}_{module}.pl files
+  foreach $customfile (@customfiles) {
+    if ($customfile =~ /_$file/) {
+      if (-f "$dir/$customfile") {
+        &scanfile("$dir/$customfile");
+      }
+    }
+  }
+
+  # if this is the menu.pl file
+  if ($file eq 'menu.pl') {
+    foreach $item (@menufiles) {
+      &scanmenu("$basedir/$item");
+    }
+  }
+
+  if ($file eq 'menunew.pl') {
+    foreach $item (@menufiles) {
+      &scanmenu("$basedir/$item");
+      print "." if $opt_v;
+    }
+  }
+
+  $file =~ s/\.pl//;
+
+  eval { require 'missing'; };
+  unlink 'missing';
+
+  foreach $text (keys %$missing) {
+    if ($locale{$text} || $htmllocale{$text}) {
+      unless ($self->{texts}{$text}) {
+        $self->{texts}{$text} = $missing->{$text};
+      }
+    }
+  }
+
+  open FH, ">$file" or die "$! : $file";
+
+  print FH q|#!/usr/bin/perl
+
+$self->{texts} = {
+|;
+
+  foreach $key (sort keys %locale) {
+    if ($self->{texts}{$key}) {
+      $text = $self->{texts}{$key};
+    } else {
+      $text = $key;
+    }
+    $text =~ s/'/\\'/g;
+    $text =~ s/\\$/\\\\/;
+
+    $keytext = $key;
+    $keytext =~ s/'/\\'/g;
+    $keytext =~ s/\\$/\\\\/;
+
+    print FH qq|  '$keytext'|
+      . (' ' x (27 - length($keytext)))
+      . qq| => '$text',\n|;
+  }
+
+  print FH q|};
+
+$self->{subs} = {
+|;
+
+  foreach $key (sort keys %subrt) {
+    $text = $key;
+    $text =~ s/'/\\'/g;
+    $text =~ s/\\$/\\\\/;
+    print FH qq|  '$text'| . (' ' x (27 - length($text))) . qq| => '$text',\n|;
+  }
+
+  foreach $key (sort keys %submit) {
+    $text = ($self->{texts}{$key}) ? $self->{texts}{$key} : $key;
+    $text =~ s/'/\\'/g;
+    $text =~ s/\\$/\\\\/;
+
+    $english_sub = $key;
+    $english_sub =~ s/'/\\'/g;
+    $english_sub =~ s/\\$/\\\\/;
+    $english_sub = lc $key;
+
+    $translated_sub = lc $text;
+    $english_sub    =~ s/( |-|,)/_/g;
+    $translated_sub =~ s/( |-|,)/_/g;
+    print FH qq|  '$translated_sub'|
+      . (' ' x (27 - length($translated_sub)))
+      . qq| => '$english_sub',\n|;
+  }
+
+  print FH q|};
+
+1;
+|;
+
+  close FH;
+
+}
+
+#foreach $file (@htmltemplates) {
+#  converthtmlfile($file);
+#}
+
+# now print out all
+
+open FH, ">all" or die "$! : all";
+
+print FH q|#!/usr/bin/perl
+
+# These are all the texts to build the translations files.
+# The file has the form of 'english text'  => 'foreign text',
+# you can add the translation in this file or in the 'missing' file
+# run locales.pl from this directory to rebuild the translation files
+
+$self->{texts} = {
+|;
+
+foreach $key (sort keys %alllocales) {
+  $text = $self->{texts}{$key};
+
+  $count++;
+
+  $text =~ s/'/\\'/g;
+  $text =~ s/\\$/\\\\/;
+  $key  =~ s/'/\\'/g;
+  $key  =~ s/\\$/\\\\/;
+
+  unless ($text) {
+    $notext++;
+    push @missing, $key;
+  }
+
+  print FH qq|  '$key'| . (' ' x (27 - length($key))) . qq| => '$text',\n|;
+
+}
+
+print FH q|};
+
+1;
+|;
+
+close FH;
+
+if (@missing) {
+  open FH, ">missing" or die "$! : missing";
+
+  print FH q|#!/usr/bin/perl
+
+# add the missing texts and run locales.pl to rebuild
+
+$missing = {
+|;
+
+  foreach $text (@missing) {
+    print FH qq|  '$text'| . (' ' x (27 - length($text))) . qq| => '',\n|;
+  }
+
+  print FH q|};
+
+1;
+|;
+
+  close FH;
+
+}
+
+@lost = ();
+
+if (-f "lost") {
+  require "lost";
+  unlink "lost";
+}
+
+while (($text, $translation) = each %old_texts) {
+  next if ($alllocales{$text});
+
+  push @lost, { 'text' => $text, 'translation' => $translation };
+}
+
+if (scalar @lost) {
+  splice @lost, 0, (scalar @lost - 50) if (scalar @lost > 50);
+
+  open FH, ">lost";
+  print FH "#!/usr/bin/perl\n\n" .
+    "# The last 50 texts that have been removed.\n" .
+    "# This file will be auto-generated by locales.pl. Do not edit it.\n\n" .
+    "\@lost = (\n";
+
+  foreach $entry (@lost) {
+    $entry->{text}        =~ s/\'/\\\'/g;
+    $entry->{translation} =~ s/\'/\\\'/g;
+    print FH "  { 'text' => '$entry->{text}', 'translation' => '$entry->{translation}' },\n";
+  }
+
+  print FH ");\n\n1;\n";
+  close FH;
+}
+
+open(FH, "LANGUAGE");
+@language = <FH>;
+close(FH);
+$trlanguage = $language[0];
+chomp $trlanguage;
+
+if ($opt_c) {
+  search_unused_htmlfiles();
+  search_translated_htmlfiles_wo_master();
+}
+
+$per = sprintf("%.1f", ($count - $notext) / $count * 100);
+print "\n$trlanguage - ${per}%";
+print " - $notext/$count missing" if $notext;
+print "\n";
+
+exit;
+
+# eom
+
+sub extract_text_between_parenthesis {
+  my ($fh, $line) = @_;
+  my ($inside_string, $pos, $text, $quote_next) = (undef, 0, "", 0);
+
+  while (1) {
+    if (length($line) <= $pos) {
+      $line = <$fh>;
+      return ($text, "") unless ($line);
+      $pos = 0;
+    }
+
+    my $cur_char = substr($line, $pos, 1);
+
+    if (!$inside_string) {
+      if ((length($line) >= ($pos + 3)) && (substr($line, $pos, 2)) eq "qq") {
+        $inside_string = substr($line, $pos + 2, 1);
+        $pos += 2;
+
+      } elsif ((length($line) >= ($pos + 2)) &&
+               (substr($line, $pos, 1) eq "q")) {
+        $inside_string = substr($line, $pos + 1, 1);
+        $pos++;
+
+      } elsif (($cur_char eq '"') || ($cur_char eq '\'')) {
+        $inside_string = $cur_char;
+
+      } elsif (($cur_char eq ")") || ($cur_char eq ',')) {
+        return ($text, substr($line, $pos + 1));
+      }
+
+    } else {
+      if ($quote_next) {
+        $text .= $cur_char;
+        $quote_next = 0;
+
+      } elsif ($cur_char eq '\\') {
+        $text .= $cur_char;
+        $quote_next = 1;
+
+      } elsif ($cur_char eq $inside_string) {
+        undef($inside_string);
+
+      } else {
+        $text .= $cur_char;
+
+      }
+    }
+    $pos++;
+  }
+}
+
+sub scanfile {
+  my $file = shift;
+  my $dont_include_subs = shift;
+  my $scanned_files = shift;
+
+  # sanitize file
+  $file =~ s=/+=/=g;
+
+  $scanned_files = {} unless ($scanned_files);
+  return if ($scanned_files->{$file});
+  $scanned_files->{$file} = 1;
+
+  if (!defined $cached{$file}) {
+
+    return unless (-f "$file");
+
+    my $fh = new FileHandle;
+    open $fh, "$file" or die "$! : $file";
+
+    my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
+
+    while (<$fh>) {
+      $line_no++;
+
+      # is this another file
+      if (/require\s+\W.*\.pl/) {
+        my $newfile = $&;
+        $newfile =~ s/require\s+\W//;
+        $newfile =~ s|bin/mozilla||;
+#         &scanfile("$bindir/$newfile", 0, $scanned_files);
+         $cached{$file}{scan}{"$bindir/$newfile"} = 1;
+      } elsif (/use\s+SL::(.*?);/) {
+        my $module =  $1;
+        $module    =~ s|::|/|g;
+#         &scanfile("../../SL/${1}.pm", 1, $scanned_files);
+        $cached{$file}{scannosubs}{"../../SL/${module}.pm"} = 1;
+      }
+
+      # is this a template call?
+      if (/parse_html_template2?\s*\(\s*[\"\']([\w\/]+)\s*[\"\']/) {
+        my $newfile = "$basedir/templates/webpages/$1_master.html";
+        if (/parse_html_template2/) {
+          print "E: " . strip_base($file) . " is still using 'parse_html_template2' for " . strip_base($newfile) . ".\n";
+        }
+        if (-f $newfile) {
+#           &scanhtmlfile($newfile);
+#           &converthtmlfile($newfile);
+           $cached{$file}{scanh}{$newfile} = 1;
+          print "." if $opt_v;
+        } elsif ($opt_c) {
+          print "W: missing HTML template: " . strip_base($newfile) . " (referenced from " . strip_base($file) . ")\n";
+        }
+      }
+
+      # is this a sub ?
+      if (/^sub /) {
+        next if ($dont_include_subs);
+        ($null, $subrt) = split / +/;
+#        $subrt{$subrt} = 1;
+        $cached{$file}{subr}{$subrt} = 1;
+        next;
+      }
+
+      my $rc = 1;
+
+      while ($rc) {
+        if (/Locale/) {
+          unless (/^use /) {
+            my ($null, $country) = split /,/;
+            $country =~ s/^ +[\"\']//;
+            $country =~ s/[\"\'].*//;
+          }
+        }
+
+        my $postmatch = "";
+
+        # is it a submit button before $locale->
+        if (/$submitsearch/) {
+          $postmatch = "$'";
+          if ($` !~ /locale->text/) {
+            $is_submit   = 1;
+            $sub_line_no = $line_no;
+          }
+        }
+
+        my ($found) = /locale->text.*?\(/;
+        my $postmatch = "$'";
+
+        if ($found) {
+          my $string;
+          ($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
+          $postmatch = $_;
+
+          # if there is no $ in the string record it
+          unless (($string =~ /\$\D.*/) || ("" eq $string)) {
+
+            # this guarantees one instance of string
+#            $locale{$string} = 1;
+            $cached{$file}{locale}{$string} = 1;
+
+            # this one is for all the locales
+#            $alllocales{$string} = 1;
+            $cached{$file}{all}{$string} = 1;
+
+            # is it a submit button before $locale->
+            if ($is_submit) {
+#              $submit{$string} = 1;
+              $cached{$file}{submit}{$string} = 1;
+            }
+          }
+        } elsif ($postmatch =~ />/) {
+          $is_submit = 0;
+        }
+
+        # exit loop if there are no more locales on this line
+        ($rc) = ($postmatch =~ /locale->text/);
+
+        if (   ($postmatch =~ />/)
+            || (!$found && ($sub_line_no != $line_no) && />/)) {
+          $is_submit = 0;
+        }
+      }
+    }
+
+    close($fh);
+
+  }
+
+  map { $alllocales{$_} = 1 }   keys %{$cached{$file}{all}};
+  map { $locale{$_} = 1 }       keys %{$cached{$file}{locale}};
+  map { $submit{$_} = 1 }       keys %{$cached{$file}{submit}};
+  map { $subrt{$_} = 1 }        keys %{$cached{$file}{subr}};
+  map { &scanfile($_, 0, $scanned_files) } keys %{$cached{$file}{scan}};
+  map { &scanfile($_, 1, $scanned_files) } keys %{$cached{$file}{scannosubs}};
+  map { &scanhtmlfile($_)  }    keys %{$cached{$file}{scanh}};
+
+  @referenced_html_files{keys %{$cached{$file}{scanh}}} = (1) x scalar keys %{$cached{$file}{scanh}};
+}
+
+sub scanmenu {
+  my $file = shift;
+
+  my $fh = new FileHandle;
+  open $fh, "$file" or die "$! : $file";
+
+  my @a = grep m/^\[/, <$fh>;
+  close($fh);
+
+  # strip []
+  grep { s/(\[|\])//g } @a;
+
+  foreach my $item (@a) {
+    @b = split /--/, $item;
+    foreach $string (@b) {
+      chomp $string;
+      $locale{$string}     = 1;
+      $alllocales{$string} = 1;
+    }
+  }
+
+}
+
+sub scanhtmlfile {
+  local *IN;
+
+  if (!defined $cached{$_[0]}) {
+    my %plugins = ( 'loaded' => { }, 'needed' => { } );
+
+    open(IN, $_[0]) || die $_[0];
+
+    my $copying = 0;
+    my $issubmit = 0;
+    my $text = "";
+    while (my $line = <IN>) {
+      chomp($line);
+
+      while ($line =~ m/\[\%[^\w]*use[^\w]+(\w+)[^\w]*?\%\]/gi) {
+        $plugins{loaded}->{$1} = 1;
+      }
+
+      while ($line =~ m/\[\%[^\w]*(\w+)\.\w+\(/g) {
+        my $plugin = $1;
+        $plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator));
+      }
+
+      while ("" ne $line) {
+        if (!$copying) {
+          if ($line =~ m|<translate>|i) {
+            my $eom = $+[0];
+            if ($` =~ /$submitsearch/) {
+              $issubmit = 1
+            }
+            substr($line, 0, $eom) = "";
+            $copying = 1;
+          } else {
+            $line = "";
+          }
+
+        } else {
+          if ($line =~ m|</translate>|i) {
+            $text .= $`;
+            substr($line, 0, $+[0]) = "";
+            $text =~ s/\s+/ /g;
+
+            $copying = 0;
+            if ($issubmit) {
+  #            $submit{$text} = 1;
+               $cached{$_[0]}{submit}{$text} = 1;
+              $issubmit = 0;
+            }
+  #          $alllocales{$text} = 1;
+             $cached{$_[0]}{all}{$text} = 1;
+  #          $htmllocale{$text} = 1;
+             $cached{$_[0]}{html}{$text} = 1;
+            $text = "";
+
+          } else {
+            $text .= $line;
+            $line = "";
+          }
+        }
+      }
+    }
+
+    close(IN);
+
+    foreach my $plugin (keys %{ $plugins{needed} }) {
+      next if ($plugins{loaded}->{$plugin});
+      print "E: " . strip_base($_[0]) . " requires the Template plugin '$plugin', but is not loaded with '[\% USE $plugin \%]'.\n";
+    }
+
+    &converthtmlfile($_[0]);
+  }
+
+  # copy back into global arrays
+  map { $alllocales{$_} = 1 }  keys %{$cached{$_[0]}{all}};
+  map { $htmllocales{$_} = 1 } keys %{$cached{$_[0]}{html}};
+  map { $submit{$_} = 1 }      keys %{$cached{$_[0]}{submit}};
+}
+
+sub converthtmlfile {
+  local *IN;
+  local *OUT;
+
+  my $file = shift;
+
+  open(IN, $file) || die;
+
+  my $langcode = (split("/", getcwd()))[-1];
+  $file =~ s/_master.html$/_${langcode}.html/;
+
+  open(OUT, ">$file") || die;
+
+  my $copying = 0;
+  my $text = "";
+  while (my $line = <IN>) {
+    chomp($line);
+    if ("" eq $line) {
+      print(OUT "\n");
+      next;
+    }
+
+    while ("" ne $line) {
+      if (!$copying) {
+        if ($line =~ m|<translate>|i) {
+          print(OUT $`);
+          substr($line, 0, $+[0]) = "";
+          $copying = 1;
+          print(OUT "\n") if ("" eq $line);
+
+        } else {
+          print(OUT "${line}\n");
+          $line = "";
+        }
+
+      } else {
+        if ($line =~ m|</translate>|i) {
+          $text .= $`;
+          substr($line, 0, $+[0]) = "";
+          $text =~ s/\s+/ /g;
+          $copying = 0;
+          $alllocales{$text} = 1;
+          $htmllocale{$text} = 1;
+          print(OUT $self->{"texts"}{$text} || $text);
+          print(OUT "\n") if ("" eq $line);
+          $text = "";
+
+        } else {
+          $text .= $line;
+          $line = "";
+        }
+      }
+    }
+  }
+
+  close(IN);
+  close(OUT);
+}
+
+sub search_unused_htmlfiles {
+  my @unscanned_dirs = ('../../templates/webpages');
+
+  while (scalar @unscanned_dirs) {
+    my $dir = shift @unscanned_dirs;
+
+    foreach my $entry (<$dir/*>) {
+      if (-d $entry) {
+        push @unscanned_dirs, $entry;
+
+      } elsif (($entry =~ /_master.html$/) && -f $entry && !$referenced_html_files{$entry}) {
+        print "W: unused HTML template: " . strip_base($entry) . "\n";
+
+      }
+    }
+  }
+}
+
+sub search_translated_htmlfiles_wo_master {
+  my @unscanned_dirs = ('../../templates/webpages');
+
+  while (scalar @unscanned_dirs) {
+    my $dir = shift @unscanned_dirs;
+
+    foreach my $entry (<$dir/*>) {
+      if (-d $entry) {
+        push @unscanned_dirs, $entry;
+
+      } elsif (($entry =~ /_[a-z]+\.html$/) && ($entry !~ /_master.html$/) && -f $entry) {
+        my $master =  $entry;
+        $master    =~ s/[a-z]+\.html$/master.html/;
+        if (! -f $master) {
+          print "W: translated HTML template without master: " . strip_base($entry) . "\n";
+        }
+      }
+    }
+  }
+}
+
+sub strip_base {
+  my $s =  "$_[0]";             # Create a copy of the string.
+
+  $s    =~ s|^../../||;
+  $s    =~ s|templates/webpages/||;
+
+  return $s;
+}
+
+__END__
+
+=head1 NAME
+
+locales.pl - Collect strings for translation in Lx-Office
+
+=head1 SYNOPSIS
+
+locales.pl [options]
+
+ Options:
+  -n, --no-custom-files  Do not process files whose name contains "_"
+  -c, --check-files      Run extended checks on HTML files
+  -v, --verbose          Be more verbose
+  -h, --help             Show this help
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-n>, B<--no-custom-files>
+
+Do not process files whose name contains "_", e.g. "custom_io.pl".
+
+=item B<-c>, B<--check-files>
+
+Run extended checks on the usage of templates. This can be used to
+discover HTML templates that are never used as well as the usage of
+non-existing HTML templates.
+
+=item B<-v>, B<--verbose>
+
+Be more verbose.
+
+=back
+
+=head1 DESCRIPTION
+
+This script collects strings from Perl files, the menu.ini file and
+HTML templates and puts them into the file "all" for translation.  It
+also distributes those translations back to the individual files.
+
+=cut
diff --git a/locale/en/login b/locale/en/login
new file mode 100644 (file)
index 0000000..7578046
--- /dev/null
@@ -0,0 +1,573 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  ' missing!'                   => ' missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'About'                       => 'About',
+  'Add Exchangerate'            => 'Add Exchangerate',
+  'Add Follow-Up'               => 'Add Follow-Up',
+  'Add Follow-Up for #1'        => 'Add Follow-Up for #1',
+  'Add Purchase Delivery Order' => 'Add Purchase Delivery Order',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Delivery Order'    => 'Add Sales Delivery Order',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Order Number' => 'Are you sure you want to delete Order Number',
+  'Are you sure you want to delete Quotation Number' => 'Are you sure you want to delete Quotation Number',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'Body'                        => 'Body',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete delivery order!' => 'Cannot delete delivery order!',
+  'Cannot delete order!'        => 'Cannot delete order!',
+  'Cannot delete quotation!'    => 'Cannot delete quotation!',
+  'Cannot save order!'          => 'Cannot save order!',
+  'Cannot save quotation!'      => 'Cannot save quotation!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Closed'                      => 'Closed',
+  'Collective Orders only work for orders from one customer!' => 'Collective Orders only work for orders from one customer!',
+  'Company Name'                => 'Company Name',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Created by'                  => 'Created by',
+  'Created for'                 => 'Created for',
+  'Created on'                  => 'Created on',
+  'Credit Limit exceeded!!!'    => 'Credit Limit exceeded!!!',
+  'Credit Note'                 => 'Credit Note',
+  'Curr'                        => 'Curr',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'Customer type'               => 'Customer type',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete delivery order'       => 'Delete delivery order',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Delivery Order Date missing!' => 'Delivery Order Date missing!',
+  'Delivery Order Number'       => 'Delivery Order Number',
+  'Delivery Order deleted!'     => 'Delivery Order deleted!',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Done'                        => 'Done',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Access Rights for Follow-Ups' => 'Edit Access Rights for Follow-Ups',
+  'Edit Follow-Up'              => 'Edit Follow-Up',
+  'Edit Follow-Up for #1'       => 'Edit Follow-Up for #1',
+  'Edit Purchase Delivery Order' => 'Edit Purchase Delivery Order',
+  'Edit Purchase Order'         => 'Edit Purchase Order',
+  'Edit Quotation'              => 'Edit Quotation',
+  'Edit Request for Quotation'  => 'Edit Request for Quotation',
+  'Edit Sales Delivery Order'   => 'Edit Sales Delivery Order',
+  'Edit Sales Order'            => 'Edit Sales Order',
+  'Edit the purchase_order'     => 'Edit the purchase_order',
+  'Edit the request_quotation'  => 'Edit the request_quotation',
+  'Edit the sales_order'        => 'Edit the sales_order',
+  'Edit the sales_quotation'    => 'Edit the sales_quotation',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => 'Error in row #1: The quantity you entered is bigger than the stocked quantity.',
+  'Ertrag'                      => 'Ertrag',
+  'Ertrag prozentual'           => 'Ertrag prozentual',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up Date'              => 'Follow-Up Date',
+  'Follow-Up saved.'            => 'Follow-Up saved.',
+  'Follow-Ups'                  => 'Follow-Ups',
+  'Follow-up for'               => 'Follow-up for',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'In-line'                     => 'In-line',
+  'Incorrect Password!'         => 'Incorrect Password!',
+  'Incorrect username or password!' => 'Incorrect username or password!',
+  'Invalid follow-up ID.'       => 'Invalid follow-up ID.',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Not delivered'               => 'Not delivered',
+  'Not done yet'                => 'Not done yet',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'Only due follow-ups'         => 'Only due follow-ups',
+  'Open'                        => 'Open',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order'                       => 'Order',
+  'Order Date'                  => 'Order Date',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Order deleted!'              => 'Order deleted!',
+  'Other users\' follow-ups'    => 'Other users\' follow-ups',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number'            => 'Quotation Number',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'Quotation deleted!'          => 'Quotation deleted!',
+  'Quotations'                  => 'Quotations',
+  'RFQ'                         => 'RFQ',
+  'RFQ Number'                  => 'RFQ Number',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reference'                   => 'Reference',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request for Quotations'      => 'Request for Quotations',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales Orders'                => 'Sales Orders',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesman'                    => 'Salesman',
+  'Salesperson'                 => 'Salesperson',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Ship via'                    => 'Ship via',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Stock'                       => 'Stock',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'TODO list'                   => 'TODO list',
+  'Tax'                         => 'Tax',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The access rights have been saved.' => 'The access rights have been saved.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => 'The delivery order has not been marked as delivered. The warehouse contents have not changed.',
+  'The follow-up date is missing.' => 'The follow-up date is missing.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The parts for this delivery order have already been transferred in.' => 'The parts for this delivery order have already been transferred in.',
+  'The parts for this delivery order have already been transferred out.' => 'The parts for this delivery order have already been transferred out.',
+  'The session is invalid or has expired.' => 'The session is invalid or has expired.',
+  'The subject is missing.'     => 'The subject is missing.',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => 'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transaction description'     => 'Transaction description',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'USt-IdNr.'                   => 'USt-IdNr.',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'Vendor type'                 => 'Vendor type',
+  'Version'                     => 'Version',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Workflow purchase_order'     => 'Workflow purchase_order',
+  'Workflow request_quotation'  => 'Workflow request_quotation',
+  'Workflow sales_order'        => 'Workflow sales_order',
+  'Workflow sales_quotation'    => 'Workflow sales_quotation',
+  'Yes'                         => 'Yes',
+  'You are logged out!'         => 'You are logged out!',
+  'You cannot create an invoice for delivery orders for different customers.' => 'You cannot create an invoice for delivery orders for different customers.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'You cannot create an invoice for delivery orders from different vendors.',
+  'You did not enter a name!'   => 'You did not enter a name!',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You have not selected any delivery order.' => 'You have not selected any delivery order.',
+  'You must chose a user.'      => 'You must chose a user.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'chargenumber #1'             => 'chargenumber #1',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'follow_up_list'              => 'follow_up_list',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'no chargenumber'             => 'no chargenumber',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'oe.pl::search called with unknown type' => 'oe.pl::search called with unknown type',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_delivery_order_list' => 'purchase_delivery_order_list',
+  'purchase_order'              => 'purchase_order',
+  'purchase_order_list'         => 'purchase_order_list',
+  'quotation_list'              => 'quotation_list',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'rfq_list'                    => 'rfq_list',
+  'sales_delivery_order_list'   => 'sales_delivery_order_list',
+  'sales_order'                 => 'sales_order',
+  'sales_order_list'            => 'sales_order_list',
+  'sales_quotation'             => 'sales_quotation',
+  'saved!'                      => 'saved!',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_collect_links'              => '_collect_links',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'backorder_exchangerate'      => 'backorder_exchangerate',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'calculate_stock_in_out'      => 'calculate_stock_in_out',
+  'call_sub'                    => 'call_sub',
+  'check_delivered_flag'        => 'check_delivered_flag',
+  'check_do_access'             => 'check_do_access',
+  'check_for_direct_delivery'   => 'check_for_direct_delivery',
+  'check_for_direct_delivery_no' => 'check_for_direct_delivery_no',
+  'check_for_direct_delivery_yes' => 'check_for_direct_delivery_yes',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_oe_access'             => 'check_oe_access',
+  'check_project'               => 'check_project',
+  'company_logo'                => 'company_logo',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_backorder'            => 'create_backorder',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'create_todo_list'            => 'create_todo_list',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_delivery_order'       => 'delete_delivery_order',
+  'delete_order_quotation'      => 'delete_order_quotation',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'delivery_order'              => 'delivery_order',
+  'dispatcher'                  => 'dispatcher',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'display_stock_in_form'       => 'display_stock_in_form',
+  'e_mail'                      => 'e_mail',
+  'edit'                        => 'edit',
+  'edit_access_rights'          => 'edit_access_rights',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'finish'                      => 'finish',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'login'                       => 'login',
+  'login_screen'                => 'login_screen',
+  'logout'                      => 'logout',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'mark_closed'                 => 'mark_closed',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'no'                          => 'no',
+  'order'                       => 'order',
+  'order_links'                 => 'order_links',
+  'orders'                      => 'orders',
+  'part_selection_internal'     => 'part_selection_internal',
+  'poso'                        => 'poso',
+  'post_as_new'                 => 'post_as_new',
+  'prepare_order'               => 'prepare_order',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'redo_stock_info'             => 'redo_stock_info',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report'                      => 'report',
+  'report_for_todo_list'        => 'report_for_todo_list',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_access_rights'          => 'save_access_rights',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'save_exchangerate'           => 'save_exchangerate',
+  'save_follow_up'              => 'save_follow_up',
+  'search'                      => 'search',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_headings'                => 'set_headings',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'set_stock_in'                => 'set_stock_in',
+  'set_stock_out'               => 'set_stock_out',
+  'ship_to'                     => 'ship_to',
+  'show_error'                  => 'show_error',
+  'show_history'                => 'show_history',
+  'show_todo_list'              => 'show_todo_list',
+  'show_vc_details'             => 'show_vc_details',
+  'stock_in_form'               => 'stock_in_form',
+  'stock_in_out_form'           => 'stock_in_out_form',
+  'stock_out_form'              => 'stock_out_form',
+  'todo_list_follow_ups'        => 'todo_list_follow_ups',
+  'todo_list_overdue_sales_quotations' => 'todo_list_overdue_sales_quotations',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'update_delivery_order'       => 'update_delivery_order',
+  'update_stock_in'             => 'update_stock_in',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'back'                        => 'back',
+  'cancel'                      => 'cancel',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delivery_order'              => 'delivery_order',
+  'e_mail'                      => 'e_mail',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'finish'                      => 'finish',
+  'invoice'                     => 'invoice',
+  'login'                       => 'login',
+  'mark_closed'                 => 'mark_closed',
+  'new_part'                    => 'new_part',
+  'no'                          => 'no',
+  'print'                       => 'print',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'request_for_quotation'       => 'request_for_quotation',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'ship_to'                     => 'ship_to',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/lost b/locale/en/lost
new file mode 100644 (file)
index 0000000..05a7378
--- /dev/null
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+
+# The last 50 texts that have been removed.
+# This file will be auto-generated by locales.pl. Do not edit it.
+
+@lost = (
+  { 'text' => 'Receipt printing failed!', 'translation' => '' },
+  { 'text' => 'successfully deleted!', 'translation' => '' },
+  { 'text' => 'C', 'translation' => '' },
+  { 'text' => 'Sales', 'translation' => '' },
+  { 'text' => 'collected on sales', 'translation' => '' },
+  { 'text' => 'GIFI deleted!', 'translation' => '' },
+  { 'text' => 'Assemblies restocked!', 'translation' => '' },
+  { 'text' => 'Amount does not equal applied!', 'translation' => '' },
+  { 'text' => 'Post as new', 'translation' => '' },
+  { 'text' => 'Amount missing!', 'translation' => '' },
+  { 'text' => 'Edit Template', 'translation' => '' },
+  { 'text' => 'Applied', 'translation' => '' },
+  { 'text' => 'Paid in full', 'translation' => '' },
+  { 'text' => 'Cannot stock assemblies!', 'translation' => '' },
+  { 'text' => 'Access Control', 'translation' => '' },
+  { 'text' => 'Password changed!', 'translation' => '' },
+  { 'text' => 'Check printing failed!', 'translation' => '' },
+  { 'text' => 'Oracle Database Administration', 'translation' => '' },
+  { 'text' => 'Check printed!', 'translation' => '' },
+  { 'text' => 'Edit Preferences for', 'translation' => '' },
+  { 'text' => 'Include this account on the customer/vendor forms to flag customer/vendor as taxable?', 'translation' => 'Include this account on debtor/creditor forms to set debtor/creditor taxable?' },
+  { 'text' => 'DBI not installed!', 'translation' => '' },
+  { 'text' => 'successfully created!', 'translation' => '' },
+  { 'text' => 'Order saved!', 'translation' => '' },
+  { 'text' => 'is not a member!', 'translation' => '' },
+  { 'text' => 'Standard', 'translation' => '' },
+  { 'text' => 'Weight Unit', 'translation' => '' },
+  { 'text' => 'Tax Accounts', 'translation' => '' },
+  { 'text' => 'localhost', 'translation' => '' },
+  { 'text' => 'to', 'translation' => '' },
+  { 'text' => 'Hostname missing!', 'translation' => '' },
+  { 'text' => 'Last Numbers & Default Accounts', 'translation' => '' },
+  { 'text' => 'Link', 'translation' => '' },
+  { 'text' => 'Transactions exist, cannot delete customer!', 'translation' => '' },
+  { 'text' => 'Order Entry', 'translation' => '' },
+  { 'text' => 'GIFI missing!', 'translation' => '' },
+  { 'text' => 'Recd', 'translation' => '' },
+  { 'text' => 'Receipt printed!', 'translation' => '' },
+  { 'text' => 'Stock Assembly', 'translation' => '' },
+  { 'text' => 'Administrator', 'translation' => '' },
+  { 'text' => 'Dataset updated!', 'translation' => '' },
+  { 'text' => 'Change Password', 'translation' => '' },
+  { 'text' => 'The following Datasets are not in use and can be deleted', 'translation' => '' },
+  { 'text' => 'hr', 'translation' => '' },
+  { 'text' => 'paid on purchases', 'translation' => '' },
+  { 'text' => 'is already a member!', 'translation' => '' },
+  { 'text' => 'Edit GIFI', 'translation' => '' },
+  { 'text' => 'O', 'translation' => '' },
+  { 'text' => 'Accounts', 'translation' => '' },
+  { 'text' => 'Retained Earnings', 'translation' => '' },
+);
+
+1;
diff --git a/locale/en/menu b/locale/en/menu
new file mode 100644 (file)
index 0000000..551a553
--- /dev/null
@@ -0,0 +1,223 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AP Aging'                    => 'Creditor Aging',
+  'AR'                          => 'Sales',
+  'AR Aging'                    => 'Debtor Aging',
+  'Accounting Menu'             => 'Accounting Menu',
+  'Add'                         => 'Add',
+  'Add AP Transaction'          => 'Add AP Transaction',
+  'Add AR Transaction'          => 'Add AR Transaction',
+  'Add Account'                 => 'Add Account',
+  'Add Accounting Group'        => 'Add Accounting Group',
+  'Add Assembly'                => 'Add Assembly',
+  'Add Business'                => 'Add Business',
+  'Add Credit Note'             => 'Add Credit Note',
+  'Add Customer'                => 'Add Customer',
+  'Add Delivery Order'          => 'Add Delivery Order',
+  'Add Department'              => 'Add Department',
+  'Add Dunning'                 => 'Add Dunning',
+  'Add Follow-Up'               => 'Add Follow-Up',
+  'Add Group'                   => 'Add Group',
+  'Add Language'                => 'Add Language',
+  'Add Lead'                    => 'Add Lead',
+  'Add License'                 => 'Add License',
+  'Add Part'                    => 'Add Part',
+  'Add Payment Terms'           => 'Add Payment Terms',
+  'Add Price Factor'            => 'Add Price Factor',
+  'Add Pricegroup'              => 'Add Pricegroup',
+  'Add Printer'                 => 'Add Printer',
+  'Add Project'                 => 'Add Project',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add RFQ'                     => 'Add RFQ',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Service'                 => 'Add Service',
+  'Add Transaction'             => 'Add Transaction',
+  'Add Vendor'                  => 'Add Vendor',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Add Warehouse'               => 'Add Warehouse',
+  'Administration area'         => 'Administration area',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Assemblies'                  => 'Assemblies',
+  'Audit Control'               => 'Audit Control',
+  'BWA'                         => 'BWA',
+  'Balance Sheet'               => 'Balance Sheet',
+  'Batch Printing'              => 'Batch Printing',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Buchungsgruppen'             => 'Buchungsgruppen',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cash'                        => 'Cash',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Chart of Accounts'           => 'Chart of Accounts',
+  'Checks'                      => 'Checks',
+  'Contacts'                    => 'Contacts',
+  'Corrections'                 => 'Corrections',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Custom Variables'            => 'Custom Variables',
+  'Customer'                    => 'Customer',
+  'Customers'                   => 'Customers',
+  'DATEV - Export Assistent'    => 'DATEV - Export Assistent',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Departments'                 => 'Departments',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunnings'                    => 'Dunnings',
+  'Edit Access Rights'          => 'Edit Access Rights',
+  'Edit Dunning'                => 'Edit Dunning',
+  'Edit units'                  => 'Edit units',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'Follow-Ups'                  => 'Follow-Ups',
+  'General Ledger'              => 'General Ledger',
+  'General Ledger Corrections'  => 'General Ledger Corrections',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Greetings'                   => 'Greetings',
+  'Groups'                      => 'Groups',
+  'HTML Templates'              => 'HTML Templates',
+  'History Search Engine'       => 'History Search Engine',
+  'Import CSV'                  => 'Import CSV',
+  'Income Statement'            => 'Income Statement',
+  'Invoices'                    => 'Invoices',
+  'Journal'                     => 'Journal',
+  'LaTeX Templates'             => 'LaTeX Templates',
+  'Languages'                   => 'Languages',
+  'Lead'                        => 'Lead',
+  'Licenses'                    => 'Licenses',
+  'List'                        => 'List',
+  'List Accounting Groups'      => 'List Accounting Groups',
+  'List Accounts'               => 'List Accounts',
+  'List Businesses'             => 'List Businesses',
+  'List Departments'            => 'List Departments',
+  'List Groups'                 => 'List Groups',
+  'List Languages'              => 'List Languages',
+  'List Lead'                   => 'List Lead',
+  'List Payment Terms'          => 'List Payment Terms',
+  'List Price Factors'          => 'List Price Factors',
+  'List Pricegroups'            => 'List Pricegroups',
+  'List Printer'                => 'List Printer',
+  'List Tax'                    => 'List Tax',
+  'List Warehouses'             => 'List Warehouses',
+  'Logout'                      => 'Logout',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Packing Lists'               => 'Packing Lists',
+  'Parts'                       => 'Parts',
+  'Payment'                     => 'Payment',
+  'Payment Terms'               => 'Payment Terms',
+  'Payments'                    => 'Payments',
+  'Preferences'                 => 'Preferences',
+  'Price Factors'               => 'Price Factors',
+  'Pricegroups'                 => 'Pricegroups',
+  'Printer'                     => 'Printer',
+  'Produce Assembly'            => 'Produce Assembly',
+  'Productivity'                => 'Productivity',
+  'Programm'                    => 'Programm',
+  'Projects'                    => 'Projects',
+  'Projecttransactions'         => 'Projecttransactions',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Quotations'                  => 'Quotations',
+  'RFQs'                        => 'RFQs',
+  'Ranges of numbers and default accounts' => 'Ranges of numbers and default accounts',
+  'Receipt'                     => 'Receipt',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Receipts'                    => 'Receipts',
+  'Reconciliation'              => 'Reconciliation',
+  'Removal'                     => 'Removal',
+  'Reports'                     => 'Reports',
+  'Sales Invoices'              => 'Sales Invoices',
+  'Sales Orders'                => 'Sales Orders',
+  'Services'                    => 'Services',
+  'Shipto'                      => 'Shipto',
+  'Show TODO list'              => 'Show TODO list',
+  'Stock'                       => 'Stock',
+  'Stylesheet'                  => 'Stylesheet',
+  'Subject'                     => 'Subject',
+  'System'                      => 'System',
+  'Taxes'                       => 'Taxes',
+  'Templates'                   => 'Templates',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer'                    => 'Transfer',
+  'Trial Balance'               => 'Trial Balance',
+  'Type of Business'            => 'Type of Business',
+  'UStVa'                       => 'UStVa',
+  'UStVa Einstellungen'         => 'UStVa Einstellungen',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update Prices'               => 'Update Prices',
+  'Vendor Invoices'             => 'Vendor Invoices',
+  'Vendors'                     => 'Vendors',
+  'Version'                     => 'Version',
+  'View warehouse content'      => 'View warehouse content',
+  'WHJournal'                   => 'WHJournal',
+  'Warehouse'                   => 'Warehouse',
+  'Warehouse content'           => 'Warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Warehouses'                  => 'Warehouses',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'display'                     => 'display',
+  'section_menu'                => 'section_menu',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/menuXML b/locale/en/menuXML
new file mode 100644 (file)
index 0000000..35b47a1
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'display'                     => 'display',
+  'print_menu'                  => 'print_menu',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/menujs b/locale/en/menujs
new file mode 100644 (file)
index 0000000..8eed108
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Logout'                      => 'Logout',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'clock_line'                  => 'clock_line',
+  'display'                     => 'display',
+  'section_menu'                => 'section_menu',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/menunew b/locale/en/menunew
new file mode 100644 (file)
index 0000000..3739518
--- /dev/null
@@ -0,0 +1,224 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AP Aging'                    => 'Creditor Aging',
+  'AR'                          => 'Sales',
+  'AR Aging'                    => 'Debtor Aging',
+  'Add'                         => 'Add',
+  'Add AP Transaction'          => 'Add AP Transaction',
+  'Add AR Transaction'          => 'Add AR Transaction',
+  'Add Account'                 => 'Add Account',
+  'Add Accounting Group'        => 'Add Accounting Group',
+  'Add Assembly'                => 'Add Assembly',
+  'Add Business'                => 'Add Business',
+  'Add Credit Note'             => 'Add Credit Note',
+  'Add Customer'                => 'Add Customer',
+  'Add Delivery Order'          => 'Add Delivery Order',
+  'Add Department'              => 'Add Department',
+  'Add Dunning'                 => 'Add Dunning',
+  'Add Follow-Up'               => 'Add Follow-Up',
+  'Add Group'                   => 'Add Group',
+  'Add Language'                => 'Add Language',
+  'Add Lead'                    => 'Add Lead',
+  'Add License'                 => 'Add License',
+  'Add Part'                    => 'Add Part',
+  'Add Payment Terms'           => 'Add Payment Terms',
+  'Add Price Factor'            => 'Add Price Factor',
+  'Add Pricegroup'              => 'Add Pricegroup',
+  'Add Printer'                 => 'Add Printer',
+  'Add Project'                 => 'Add Project',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add RFQ'                     => 'Add RFQ',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Service'                 => 'Add Service',
+  'Add Transaction'             => 'Add Transaction',
+  'Add Vendor'                  => 'Add Vendor',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Add Warehouse'               => 'Add Warehouse',
+  'Administration area'         => 'Administration area',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Assemblies'                  => 'Assemblies',
+  'Audit Control'               => 'Audit Control',
+  'BWA'                         => 'BWA',
+  'Balance Sheet'               => 'Balance Sheet',
+  'Batch Printing'              => 'Batch Printing',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Buchungsgruppen'             => 'Buchungsgruppen',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cash'                        => 'Cash',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Chart of Accounts'           => 'Chart of Accounts',
+  'Checks'                      => 'Checks',
+  'Contacts'                    => 'Contacts',
+  'Corrections'                 => 'Corrections',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Custom Variables'            => 'Custom Variables',
+  'Customer'                    => 'Customer',
+  'Customers'                   => 'Customers',
+  'DATEV - Export Assistent'    => 'DATEV - Export Assistent',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Departments'                 => 'Departments',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunnings'                    => 'Dunnings',
+  'Edit Access Rights'          => 'Edit Access Rights',
+  'Edit Dunning'                => 'Edit Dunning',
+  'Edit units'                  => 'Edit units',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'Follow-Ups'                  => 'Follow-Ups',
+  'General Ledger'              => 'General Ledger',
+  'General Ledger Corrections'  => 'General Ledger Corrections',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Greetings'                   => 'Greetings',
+  'Groups'                      => 'Groups',
+  'HTML Templates'              => 'HTML Templates',
+  'History Search Engine'       => 'History Search Engine',
+  'Import CSV'                  => 'Import CSV',
+  'Income Statement'            => 'Income Statement',
+  'Invoices'                    => 'Invoices',
+  'Journal'                     => 'Journal',
+  'LaTeX Templates'             => 'LaTeX Templates',
+  'Languages'                   => 'Languages',
+  'Lead'                        => 'Lead',
+  'Licenses'                    => 'Licenses',
+  'List'                        => 'List',
+  'List Accounting Groups'      => 'List Accounting Groups',
+  'List Accounts'               => 'List Accounts',
+  'List Businesses'             => 'List Businesses',
+  'List Departments'            => 'List Departments',
+  'List Groups'                 => 'List Groups',
+  'List Languages'              => 'List Languages',
+  'List Lead'                   => 'List Lead',
+  'List Payment Terms'          => 'List Payment Terms',
+  'List Price Factors'          => 'List Price Factors',
+  'List Pricegroups'            => 'List Pricegroups',
+  'List Printer'                => 'List Printer',
+  'List Tax'                    => 'List Tax',
+  'List Warehouses'             => 'List Warehouses',
+  'Logout'                      => 'Logout',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Packing Lists'               => 'Packing Lists',
+  'Parts'                       => 'Parts',
+  'Payment'                     => 'Payment',
+  'Payment Terms'               => 'Payment Terms',
+  'Payments'                    => 'Payments',
+  'Preferences'                 => 'Preferences',
+  'Price Factors'               => 'Price Factors',
+  'Pricegroups'                 => 'Pricegroups',
+  'Printer'                     => 'Printer',
+  'Produce Assembly'            => 'Produce Assembly',
+  'Productivity'                => 'Productivity',
+  'Programm'                    => 'Programm',
+  'Projects'                    => 'Projects',
+  'Projecttransactions'         => 'Projecttransactions',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Quotations'                  => 'Quotations',
+  'RFQs'                        => 'RFQs',
+  'Ranges of numbers and default accounts' => 'Ranges of numbers and default accounts',
+  'Receipt'                     => 'Receipt',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Receipts'                    => 'Receipts',
+  'Reconciliation'              => 'Reconciliation',
+  'Removal'                     => 'Removal',
+  'Reports'                     => 'Reports',
+  'Sales Invoices'              => 'Sales Invoices',
+  'Sales Orders'                => 'Sales Orders',
+  'Services'                    => 'Services',
+  'Shipto'                      => 'Shipto',
+  'Show TODO list'              => 'Show TODO list',
+  'Stock'                       => 'Stock',
+  'Stylesheet'                  => 'Stylesheet',
+  'Subject'                     => 'Subject',
+  'System'                      => 'System',
+  'Taxes'                       => 'Taxes',
+  'Templates'                   => 'Templates',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer'                    => 'Transfer',
+  'Trial Balance'               => 'Trial Balance',
+  'Type of Business'            => 'Type of Business',
+  'UStVa'                       => 'UStVa',
+  'UStVa Einstellungen'         => 'UStVa Einstellungen',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Update Prices'               => 'Update Prices',
+  'Vendor Invoices'             => 'Vendor Invoices',
+  'Vendors'                     => 'Vendors',
+  'Version'                     => 'Version',
+  'View warehouse content'      => 'View warehouse content',
+  'WHJournal'                   => 'WHJournal',
+  'Warehouse'                   => 'Warehouse',
+  'Warehouse content'           => 'Warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Warehouses'                  => 'Warehouses',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'calculate_width'             => 'calculate_width',
+  'clock_line'                  => 'clock_line',
+  'create_menu'                 => 'create_menu',
+  'display'                     => 'display',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/menuv3 b/locale/en/menuv3
new file mode 100644 (file)
index 0000000..56bc093
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'clock_line'                  => 'clock_line',
+  'display'                     => 'display',
+  'print_menu'                  => 'print_menu',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/menuv4 b/locale/en/menuv4
new file mode 100644 (file)
index 0000000..56bc093
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'DATEV Export'                => 'DATEV Export',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+};
+
+$self->{subs} = {
+  'acc_menu'                    => 'acc_menu',
+  'clock_line'                  => 'clock_line',
+  'display'                     => 'display',
+  'print_menu'                  => 'print_menu',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/missing b/locale/en/missing
new file mode 100644 (file)
index 0000000..8ee0961
--- /dev/null
@@ -0,0 +1,1912 @@
+#!/usr/bin/perl
+
+# add the missing texts and run locales.pl to rebuild
+
+$missing = {
+  ' Date missing!'              => '',
+  ' Part Number missing!'       => '',
+  ' missing!'                   => '',
+  '#1 prices were updated.'     => '',
+  '&lt;%account_number%&gt; -- Your account number' => '',
+  '&lt;%bank%&gt; -- Your bank' => '',
+  '&lt;%bank_code%&gt; -- Your bank code' => '',
+  '&lt;%currency%&gt; -- The selected currency' => '',
+  '&lt;%invtotal%&gt; -- Invoice total' => '',
+  '&lt;%invtotal_wo_skonto%&gt; -- Invoice total less discount' => '',
+  '&lt;%netto_date%&gt; -- Date the payment is due in full' => '',
+  '&lt;%skonto_amount%&gt; -- The deductible amount' => '',
+  '&lt;%skonto_date%&gt; -- Date the payment is due with discount' => '',
+  '&lt;%terms_netto%&gt; -- The number of days for full payment' => '',
+  '&lt;%total%&gt; -- Amount payable' => '',
+  '&lt;%total_wo_skonto%&gt; -- Amount payable less discount' => '',
+  '*/'                          => '',
+  '---please select---'         => '',
+  '...after loggin in'          => '',
+  '...done'                     => '',
+  '...on the TODO list'         => '',
+  '1. Quarter'                  => '',
+  '2. Quarter'                  => '',
+  '3. Quarter'                  => '',
+  '4. Quarter'                  => '',
+  '<b>What</b> do you want to look for?' => '',
+  '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.' => '',
+  'A group named &quot;Full Access&quot; has been created.' => '',
+  'A group with that name does already exist.' => '',
+  '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.' => '',
+  'A temporary directory could not be created:' => '',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => '',
+  'A temporary file could not be created:' => '',
+  'A unit with this name does already exist.' => '',
+  'A variable marked as \'editable\' can be changed in each quotation, order, invoice etc.' => '',
+  'ADDED'                       => '',
+  'AP Transaction (abbreviation)' => '',
+  'AP Transaction Storno (one letter abbreviation)' => '',
+  'AP Transaction with Storno (abbreviation)' => '',
+  'AP transactions with sales taxkeys and/or AR transactions with input taxkeys' => '',
+  'AR Transaction (abbreviation)' => '',
+  'ASSETS'                      => '',
+  'About'                       => '',
+  'Abrechnungsnummer'           => '',
+  'Abteilung'                   => '',
+  'Account'                     => '',
+  'Account Category A'          => '',
+  'Account Category C'          => '',
+  'Account Category E'          => '',
+  'Account Category G'          => '',
+  'Account Category I'          => '',
+  'Account Category L'          => '',
+  'Account Category Q'          => '',
+  'Account Description missing!' => '',
+  'Account Link AP'             => '',
+  'Account Link AP_amount'      => '',
+  'Account Link AP_paid'        => '',
+  'Account Link AP_tax'         => '',
+  'Account Link AR'             => '',
+  'Account Link AR_amount'      => '',
+  'Account Link AR_paid'        => '',
+  'Account Link AR_tax'         => '',
+  'Account Link CT_tax'         => '',
+  'Account Link IC'             => '',
+  'Account Link IC_cogs'        => '',
+  'Account Link IC_expense'     => '',
+  'Account Link IC_income'      => '',
+  'Account Link IC_sale'        => '',
+  'Account Link IC_taxpart'     => '',
+  'Account Link IC_taxservice'  => '',
+  'Account Number'              => '',
+  'Account Number already used!' => '',
+  'Account Number missing!'     => '',
+  'Account Nummer'              => '',
+  'Account Type'                => '',
+  'Account Type missing!'       => '',
+  'Account deleted!'            => '',
+  'Account for fees'            => '',
+  'Account for interest'        => '',
+  'Account saved!'              => '',
+  'Accounting Group deleted!'   => '',
+  'Accounting Group saved!'     => '',
+  'Accounting Menu'             => '',
+  'Accrual'                     => '',
+  'Active'                      => '',
+  'Active?'                     => '',
+  'Add'                         => '',
+  'Add '                        => '',
+  'Add AP Transaction'          => '',
+  'Add AR Transaction'          => '',
+  'Add Account'                 => '',
+  'Add Accounting Group'        => '',
+  'Add Assembly'                => '',
+  'Add Buchungsgruppe'          => '',
+  'Add Business'                => '',
+  'Add Credit Note'             => '',
+  'Add Customer'                => '',
+  'Add Delivery Order'          => '',
+  'Add Department'              => '',
+  'Add Dunning'                 => '',
+  'Add Exchangerate'            => '',
+  'Add Follow-Up'               => '',
+  'Add Follow-Up for #1'        => '',
+  'Add General Ledger Transaction' => '',
+  'Add Group'                   => '',
+  'Add Language'                => '',
+  'Add Lead'                    => '',
+  'Add License'                 => '',
+  'Add Part'                    => '',
+  'Add Payment Terms'           => '',
+  'Add Price Factor'            => '',
+  'Add Pricegroup'              => '',
+  'Add Printer'                 => '',
+  'Add Project'                 => '',
+  'Add Purchase Delivery Order' => '',
+  'Add Purchase Order'          => '',
+  'Add Quotation'               => '',
+  'Add RFQ'                     => '',
+  'Add Request for Quotation'   => '',
+  'Add Sales Delivery Order'    => '',
+  'Add Sales Invoice'           => '',
+  'Add Sales Order'             => '',
+  'Add Service'                 => '',
+  'Add Storno Credit Note'      => '',
+  'Add Transaction'             => '',
+  'Add User'                    => '',
+  'Add Vendor'                  => '',
+  'Add Vendor Invoice'          => '',
+  'Add Warehouse'               => '',
+  'Add a new group'             => '',
+  'Add and edit units'          => '',
+  'Add custom variable'         => '',
+  'Add note'                    => '',
+  'Add to group'                => '',
+  'Add unit'                    => '',
+  'Address'                     => '',
+  'Administration'              => '',
+  'Administration area'         => '',
+  'Advance turnover tax return' => '',
+  'Aktion'                      => '',
+  'All'                         => '',
+  'All Accounts'                => '',
+  'All Datasets up to date!'    => '',
+  'All changes in that file have been reverted.' => '',
+  'All database upgrades have been applied.' => '',
+  'All general ledger entries'  => '',
+  'All reports'                 => '',
+  'Allow access'                => '',
+  'Allow the following users access to my follow-ups:' => '',
+  'Alternatively you can create a new part which will then be selected.' => '',
+  'Alternatively you can skip this step and create groups yourself.' => '',
+  'Amended Advance Turnover Tax Return' => '',
+  'Amended Advance Turnover Tax Return (Nr. 10)' => '',
+  'Amount'                      => '',
+  'Amount Due'                  => '',
+  'Annotations'                 => '',
+  'Another user with the login #1 does already exist.' => '',
+  'Ansprechpartner'             => '',
+  'Ap aging on %s'              => '',
+  'Application Error. No Format given' => '',
+  'Application Error. Wrong Format' => '',
+  'Applying [% HTML.escape(file) %]:' => '',
+  'Approximately #1 prices will be updated.' => '',
+  'Apr'                         => '',
+  'April'                       => '',
+  'Ar aging on %s'              => '',
+  'Are you sure you want to delete Delivery Order Number #1?' => '',
+  'Are you sure you want to delete Invoice Number' => '',
+  'Are you sure you want to delete Order Number' => '',
+  'Are you sure you want to delete Quotation Number' => '',
+  'Are you sure you want to delete Transaction' => '',
+  'Are you sure you want to remove the marked entries from the queue?' => '',
+  'Are you sure you want to update the prices' => '',
+  'Article Code'                => '',
+  'Article Code missing!'       => '',
+  'As a result, the saved onhand values of the present goods can be stored into a warehouse designated by you, or will be reset for a proper warehouse tracking' => '',
+  'Assemblies'                  => '',
+  'Assembly Description'        => '',
+  'Assembly Number'             => '',
+  'Assembly Number missing!'    => '',
+  'Asset'                       => '',
+  'Assets'                      => '',
+  'Assign new units'            => '',
+  'Assign units'                => '',
+  'Assistant for general ledger corrections' => '',
+  'Assume Tax Consultant Data in Tax Computation?' => '',
+  'At least'                    => '',
+  'At least one Perl module that Lx-Office ERP requires for running is not installed on your system.' => '',
+  'At most'                     => '',
+  'At the moment the transaction looks like this:' => '',
+  'Attach PDF:'                 => '',
+  'Attachment'                  => '',
+  'Attachment name'             => '',
+  'Attempt to call an undefined sub named \'%s\'' => '',
+  'Audit Control'               => '',
+  'Aug'                         => '',
+  'August'                      => '',
+  'Authentification database creation' => '',
+  'Authentification tables creation' => '',
+  'Auto Send?'                  => '',
+  'Automatically created invoice for fee and interest for dunning %s' => '',
+  'Available qty'               => '',
+  'BALANCE SHEET'               => '',
+  'BIC'                         => '',
+  'BOM'                         => '',
+  'BWA'                         => '',
+  'Back'                        => '',
+  'Backup Dataset'              => '',
+  'Backup file'                 => '',
+  'Backup of dataset'           => '',
+  'Balance'                     => '',
+  'Balance Sheet'               => '',
+  'Bank'                        => '',
+  'Bank Code'                   => '',
+  'Bank Code (long)'            => '',
+  'Bank Code Number'            => '',
+  'Bank Connection Tax Office'  => '',
+  'Bank Connections'            => '',
+  'Base unit'                   => '',
+  'Basic data'                  => '',
+  'Batch Printing'              => '',
+  'Bcc'                         => '',
+  'Belegnummer'                 => '',
+  'Beratername'                 => '',
+  'Beraternummer'               => '',
+  'Bestandskonto'               => '',
+  'Bilanz'                      => '',
+  'Billing Address'             => '',
+  'Billing/shipping address (city)' => '',
+  'Billing/shipping address (street)' => '',
+  'Billing/shipping address (zipcode)' => '',
+  'Bin'                         => '',
+  'Bin From'                    => '',
+  'Bin List'                    => '',
+  'Bin To'                      => '',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => '',
+  'Bins saved.'                 => '',
+  'Bins that have been used in the past cannot be deleted anymore. For these bins there\'s no checkbox in the &quot;Delete&quot; column.' => '',
+  'Birthday'                    => '',
+  'Bis'                         => '',
+  'Bis Konto: '                 => '',
+  'Body'                        => '',
+  'Body:'                       => '',
+  'Books are open'              => '',
+  'Books closed up to'          => '',
+  'Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.' => '',
+  'Both'                        => '',
+  'Bottom'                      => '',
+  'Bought'                      => '',
+  'Buchungsdatum'               => '',
+  'Buchungsgruppe'              => '',
+  'Buchungsgruppen'             => '',
+  'Buchungskonto'               => '',
+  'Buchungsnummer'              => '',
+  'Business Number'             => '',
+  'Business Volume'             => '',
+  'Business deleted!'           => '',
+  'Business saved!'             => '',
+  'CANCELED'                    => '',
+  'CB Transaction'              => '',
+  'CR'                          => '',
+  'CRM admin'                   => '',
+  'CRM create customers, vendors and contacts' => '',
+  'CRM follow up'               => '',
+  'CRM know how'                => '',
+  'CRM notices'                 => '',
+  'CRM opportunity'             => '',
+  'CRM optional software'       => '',
+  'CRM other'                   => '',
+  'CRM search'                  => '',
+  'CRM send email'              => '',
+  'CRM services'                => '',
+  'CRM status'                  => '',
+  'CRM termin'                  => '',
+  'CRM user'                    => '',
+  'CSV export -- options'       => '',
+  'Calculate'                   => '',
+  'Can not create that quantity with current stock' => '',
+  'Cancel'                      => '',
+  'Cancel Accounts Payables Transaction' => '',
+  'Cancel Accounts Receivables Transaction' => '',
+  'Cannot create Lock!'         => '',
+  'Cannot delete account!'      => '',
+  'Cannot delete customer!'     => '',
+  'Cannot delete default account!' => '',
+  'Cannot delete delivery order!' => '',
+  'Cannot delete invoice!'      => '',
+  'Cannot delete item!'         => '',
+  'Cannot delete order!'        => '',
+  'Cannot delete quotation!'    => '',
+  'Cannot delete transaction!'  => '',
+  'Cannot delete vendor!'       => '',
+  'Cannot have a value in both Debit and Credit!' => '',
+  'Cannot post Payment!'        => '',
+  'Cannot post Receipt!'        => '',
+  'Cannot post a transaction without a value!' => '',
+  'Cannot post invoice for a closed period!' => '',
+  'Cannot post invoice!'        => '',
+  'Cannot post payment for a closed period!' => '',
+  'Cannot post payment!'        => '',
+  'Cannot post transaction for a closed period!' => '',
+  'Cannot post transaction with a debit and credit entry for the same account!' => '',
+  'Cannot post transaction!'    => '',
+  'Cannot process payment for a closed period!' => '',
+  'Cannot remove files!'        => '',
+  'Cannot save account!'        => '',
+  'Cannot save order!'          => '',
+  'Cannot save preferences!'    => '',
+  'Cannot save quotation!'      => '',
+  'Cannot storno storno invoice!' => '',
+  'Carry over shipping address' => '',
+  'Cash'                        => '',
+  'Cc'                          => '',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => '',
+  'Charge Number'               => '',
+  'Charge number'               => '',
+  'Chart Type'                  => '',
+  'Chart balance'               => '',
+  'Chart of Accounts'           => '',
+  'Chart of accounts'           => '',
+  'Chartaccounts connected to this Tax:' => '',
+  'Check Details'               => '',
+  'Checks'                      => '',
+  'Choose Customer'             => '',
+  'Choose Outputformat'         => '',
+  'Choose Vendor'               => '',
+  'Choose a Tax Number'         => '',
+  'City'                        => '',
+  'Cleared Balance'             => '',
+  'Clearing Tax Received (No 71)' => '',
+  'Click on login name to edit!' => '',
+  'Close'                       => '',
+  'Close Books up to'           => '',
+  'Close Window'                => '',
+  'Closed'                      => '',
+  'Collective Orders only work for orders from one customer!' => '',
+  'Comment'                     => '',
+  'Company'                     => '',
+  'Company Name'                => '',
+  'Compare to'                  => '',
+  'Configuration of individual TODO items' => '',
+  'Confirm'                     => '',
+  'Confirm!'                    => '',
+  'Confirmation'                => '',
+  'Contact'                     => '',
+  'Contact Person'              => '',
+  'Contact person (surname)'    => '',
+  'Contacts'                    => '',
+  'Continue'                    => '',
+  'Contra'                      => '',
+  'Copies'                      => '',
+  'Correct taxkey'              => '',
+  'Corrections'                 => '',
+  'Cost Center'                 => '',
+  'Costs'                       => '',
+  'Could not copy %s to %s. Reason: %s' => '',
+  'Could not open the file users/members.' => '',
+  'Could not open the old memberfile.' => '',
+  'Could not print dunning.'    => '',
+  'Could not rename %s to %s. Reason: %s' => '',
+  'Could not spawn ghostscript.' => '',
+  'Could not spawn the printer command.' => '',
+  'Could not update prices!'    => '',
+  'Country'                     => '',
+  'Create Assembly'             => '',
+  'Create Buchungsgruppen'      => '',
+  'Create Chart of Accounts'    => '',
+  'Create Dataset'              => '',
+  'Create Date'                 => '',
+  'Create a standard group'     => '',
+  'Create and edit RFQs'        => '',
+  'Create and edit customers and vendors' => '',
+  'Create and edit dunnings'    => '',
+  'Create and edit invoices and credit notes' => '',
+  'Create and edit parts, services, assemblies' => '',
+  'Create and edit projects'    => '',
+  'Create and edit purchase delivery orders' => '',
+  'Create and edit purchase orders' => '',
+  'Create and edit sales delivery orders' => '',
+  'Create and edit sales orders' => '',
+  'Create and edit sales quotations' => '',
+  'Create and edit vendor invoices' => '',
+  'Create invoice?'             => '',
+  'Create new'                  => '',
+  'Create tables'               => '',
+  'Created by'                  => '',
+  'Created for'                 => '',
+  'Created on'                  => '',
+  'Credit'                      => '',
+  'Credit (one letter abbreviation)' => '',
+  'Credit Account'              => '',
+  'Credit Limit'                => '',
+  'Credit Limit exceeded!!!'    => '',
+  'Credit Note'                 => '',
+  'Credit Note Date'            => '',
+  'Credit Note Number'          => '',
+  'Credit Starting Balance'     => '',
+  'Credit Tax'                  => '',
+  'Credit Tax Account'          => '',
+  'Credit note (one letter abbreviation)' => '',
+  'Curr'                        => '',
+  'Currencies'                  => '',
+  'Currency'                    => '',
+  'Current / Next Level'        => '',
+  'Current Earnings'            => '',
+  'Current unit'                => '',
+  'Current value:'              => '',
+  'Custom Variables'            => '',
+  'Custom variables for module' => '',
+  'Customer'                    => '',
+  'Customer Number'             => '',
+  'Customer Order Number'       => '',
+  'Customer deleted!'           => '',
+  'Customer details'            => '',
+  'Customer missing!'           => '',
+  'Customer not on file or locked!' => '',
+  'Customer not on file!'       => '',
+  'Customer saved!'             => '',
+  'Customer type'               => '',
+  'Customername'                => '',
+  'Customernumberinit'          => '',
+  'Customers'                   => '',
+  'Customers and vendors'       => '',
+  'Customized Report'           => '',
+  'DATEV - Export Assistent'    => '',
+  'DATEV Angaben'               => '',
+  'DATEV Export'                => '',
+  'DATEX - Export Assistent'    => '',
+  'DELETED'                     => '',
+  'DFV-Kennzeichen'             => '',
+  'DR'                          => '',
+  'DUNNING STARTED'             => '',
+  'DUNS-Nr'                     => '',
+  'Database'                    => '',
+  'Database Administration'     => '',
+  'Database Connection Test'    => '',
+  'Database Host'               => '',
+  'Database User missing!'      => '',
+  'Database backups and restorations are disabled in lx-erp.conf.' => '',
+  'Database name'               => '',
+  'Database template'           => '',
+  'Database update error:'      => '',
+  'Dataset'                     => '',
+  'Dataset missing!'            => '',
+  'Dataset name'                => '',
+  'Dataset upgrade'             => '',
+  'Date'                        => '',
+  'Date Format'                 => '',
+  'Date Paid'                   => '',
+  'Date and timestamp variables: If the default value equals \'NOW\' then the current date/current timestamp will be used. Otherwise the default value is copied as-is.' => '',
+  'Date missing!'               => '',
+  'Datevautomatik'              => '',
+  'Datum von'                   => '',
+  'Debit'                       => '',
+  'Debit (one letter abbreviation)' => '',
+  'Debit Account'               => '',
+  'Debit Starting Balance'      => '',
+  'Debit Tax'                   => '',
+  'Debit Tax Account'           => '',
+  'Debit and credit out of balance!' => '',
+  'Dec'                         => '',
+  'December'                    => '',
+  'Decimalplaces'               => '',
+  'Decrease'                    => '',
+  'Default (no language selected)' => '',
+  'Default Accounts'            => '',
+  'Default output medium'       => '',
+  'Default printer'             => '',
+  'Default template format'     => '',
+  'Default value'               => '',
+  'Defaults saved.'             => '',
+  'Delete'                      => '',
+  'Delete Account'              => '',
+  'Delete Contact'              => '',
+  'Delete Dataset'              => '',
+  'Delete Shipto'               => '',
+  'Delete delivery order'       => '',
+  'Delete drafts'               => '',
+  'Delete group'                => '',
+  'Delete transaction'          => '',
+  'Delivered'                   => '',
+  'Delivery Date'               => '',
+  'Delivery Order'              => '',
+  'Delivery Order Date'         => '',
+  'Delivery Order Date missing!' => '',
+  'Delivery Order Number'       => '',
+  'Delivery Order deleted!'     => '',
+  'Delivery Orders'             => '',
+  'Department'                  => '',
+  'Department deleted!'         => '',
+  'Department saved!'           => '',
+  'Departments'                 => '',
+  'Dependency loop detected:'   => '',
+  'Deposit'                     => '',
+  'Description'                 => '',
+  'Description (Click on Description for details)' => '',
+  'Description missing!'        => '',
+  'Description must not be empty!' => '',
+  'Destination bin'             => '',
+  'Destination warehouse'       => '',
+  'Destination warehouse and bin' => '',
+  'Details (one letter abbreviation)' => '',
+  'Difference'                  => '',
+  'Dimension unit'              => '',
+  'Directory'                   => '',
+  'Discount'                    => '',
+  'Display'                     => '',
+  'Display file'                => '',
+  'Display options'             => '',
+  'Do you really want to delete AP transaction #1?' => '',
+  'Do you really want to delete AR transaction #1?' => '',
+  'Do you really want to delete GL transaction #1?' => '',
+  'Do you really want to delete this group:' => '',
+  'Do you really want to delete this warehouse?' => '',
+  'Do you want Lx-Office to create a group for access to all functions?' => '',
+  'Do you want to <b>limit</b> your search?' => '',
+  'Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?' => '',
+  'Do you want to store the existing onhand values into a new warehouse?' => '',
+  'Document'                    => '',
+  'Documents in the WebDAV repository' => '',
+  'Done'                        => '',
+  'Download the backup'         => '',
+  'Draft saved.'                => '',
+  'Drawing'                     => '',
+  'Driver'                      => '',
+  'Dropdown Limit'              => '',
+  'Due'                         => '',
+  'Due Date'                    => '',
+  'Due Date missing!'           => '',
+  'Duedate +Days'               => '',
+  'Dunning'                     => '',
+  'Dunning Amount'              => '',
+  'Dunning Date'                => '',
+  'Dunning Date from'           => '',
+  'Dunning Description'         => '',
+  'Dunning Description missing in row ' => '',
+  'Dunning Duedate'             => '',
+  'Dunning Level'               => '',
+  'Dunning Level missing in row ' => '',
+  'Dunning Process Config saved!' => '',
+  'Dunning Process started for selected invoices!' => '',
+  'Dunning number'              => '',
+  'Dunning overview'            => '',
+  'Dunnings'                    => '',
+  'During this user migration Lx-Office can create such a group for you and grant all users access to all of Lx-Office\'s functions.' => '',
+  'E-mail'                      => '',
+  'E-mail Statement to'         => '',
+  'E-mail address missing!'     => '',
+  'EAN'                         => '',
+  'EAN-Code'                    => '',
+  'EB-Wert'                     => '',
+  'EK'                          => '',
+  'ELSE'                        => '',
+  'ELSTER Export (Taxbird)'     => '',
+  'ELSTER Export (Winston)'     => '',
+  'ELSTER Export nach Winston'  => '',
+  'ELSTER Tax Number'           => '',
+  'EQUITY'                      => '',
+  'EU with VAT ID'              => '',
+  'EU without VAT ID'           => '',
+  'EUER'                        => '',
+  'EUR'                         => '',
+  'Earlier versions of Lx-Office contained bugs which might have led to wrong entries in the general ledger.' => '',
+  'Edit'                        => '',
+  'Edit '                       => '',
+  'Edit Access Rights'          => '',
+  'Edit Access Rights for Follow-Ups' => '',
+  'Edit Account'                => '',
+  'Edit Accounting Group'       => '',
+  'Edit Assembly'               => '',
+  'Edit Bins'                   => '',
+  'Edit Buchungsgruppe'         => '',
+  'Edit Business'               => '',
+  'Edit Credit Note'            => '',
+  'Edit Customer'               => '',
+  'Edit Department'             => '',
+  'Edit Dunning'                => '',
+  'Edit Dunning Process Config' => '',
+  'Edit Follow-Up'              => '',
+  'Edit Follow-Up for #1'       => '',
+  'Edit General Ledger Transaction' => '',
+  'Edit Group'                  => '',
+  'Edit Language'               => '',
+  'Edit Lead'                   => '',
+  'Edit Part'                   => '',
+  'Edit Payment Terms'          => '',
+  'Edit Preferences for #1'     => '',
+  'Edit Price Factor'           => '',
+  'Edit Pricegroup'             => '',
+  'Edit Printer'                => '',
+  'Edit Project'                => '',
+  'Edit Purchase Delivery Order' => '',
+  'Edit Purchase Order'         => '',
+  'Edit Quotation'              => '',
+  'Edit Request for Quotation'  => '',
+  'Edit Sales Delivery Order'   => '',
+  'Edit Sales Invoice'          => '',
+  'Edit Sales Order'            => '',
+  'Edit Service'                => '',
+  'Edit Storno Credit Note'     => '',
+  'Edit Storno Invoice'         => '',
+  'Edit User'                   => '',
+  'Edit Vendor'                 => '',
+  'Edit Vendor Invoice'         => '',
+  'Edit Warehouse'              => '',
+  'Edit and delete a group'     => '',
+  'Edit custom variable'        => '',
+  'Edit file'                   => '',
+  'Edit greetings'              => '',
+  'Edit group '                 => '',
+  'Edit group membership'       => '',
+  'Edit groups'                 => '',
+  'Edit note'                   => '',
+  'Edit rights'                 => '',
+  'Edit templates'              => '',
+  'Edit the Delivery Order'     => '',
+  'Edit the membership of all users in all groups:' => '',
+  'Edit the purchase_order'     => '',
+  'Edit the request_quotation'  => '',
+  'Edit the sales_order'        => '',
+  'Edit the sales_quotation'    => '',
+  'Edit the stylesheet'         => '',
+  'Edit units'                  => '',
+  'Editable'                    => '',
+  'Element disabled'            => '',
+  'Employee'                    => '',
+  'Empty transaction!'          => '',
+  'Enter a description for this new draft.' => '',
+  'Enter longdescription'       => '',
+  'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => '',
+  'Equity'                      => '',
+  'Error'                       => '',
+  'Error in database control file \'%s\': %s' => '',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => '',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => '',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => '',
+  'Error message from the database driver:' => '',
+  'Error!'                      => '',
+  'Ertrag'                      => '',
+  'Ertrag prozentual'           => '',
+  'Escape character'            => '',
+  'Exact'                       => '',
+  'Exch'                        => '',
+  'Exchangerate'                => '',
+  'Exchangerate Difference'     => '',
+  'Exchangerate for payment missing!' => '',
+  'Exchangerate missing!'       => '',
+  'Existing Buchungsgruppen'    => '',
+  'Existing Datasets'           => '',
+  'Existing pending follow-ups for this item' => '',
+  'Expected Tax'                => '',
+  'Expense'                     => '',
+  'Expense Account'             => '',
+  'Expense accno'               => '',
+  'Expense/Asset'               => '',
+  'Expenses EU with UStId'      => '',
+  'Expenses EU without UStId'   => '',
+  'Expired licenses'            => '',
+  'Expiring in x month(s)'      => '',
+  'Export Buchungsdaten'        => '',
+  'Export Stammdaten'           => '',
+  'Export as CSV'               => '',
+  'Export as PDF'               => '',
+  'Extended'                    => '',
+  'Extension Of Time'           => '',
+  'Factor'                      => '',
+  'Factor missing!'             => '',
+  'Falsches Datumsformat!'      => '',
+  'Favorites'                   => '',
+  'Fax'                         => '',
+  'Feb'                         => '',
+  'February'                    => '',
+  'Fee'                         => '',
+  'File'                        => '',
+  'File name'                   => '',
+  'Files created by Lx-Office\'s &quot;Backup Dataset&quot; function are such files.' => '',
+  'Filter'                      => '',
+  'Finish'                      => '',
+  'Fix transaction'             => '',
+  'Fix transactions'            => '',
+  'Folgekonto'                  => '',
+  'Follow-Up'                   => '',
+  'Follow-Up Date'              => '',
+  'Follow-Up On'                => '',
+  'Follow-Up done'              => '',
+  'Follow-Up for'               => '',
+  'Follow-Up for user'          => '',
+  'Follow-Up saved.'            => '',
+  'Follow-Ups'                  => '',
+  'Follow-up for'               => '',
+  'Font'                        => '',
+  'Font size'                   => '',
+  'For AP transactions it will replace the sales taxkeys with input taxkeys with the same tax rate.' => '',
+  'For AR transactions it will replace the input taxkeys with sales taxkeys with the same tax rate.' => '',
+  'For each unit there\'s either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the &quot;smaller&quot; one. A factor may not be less than 1. Therefore you may define &quot;kg&quot; with the base unit &quot;g&quot; and a factor of &quot;1&quot;, but not the other way round.' => '',
+  'Foreign Exchange Gain'       => '',
+  'Foreign Exchange Loss'       => '',
+  'Foreign Expenses'            => '',
+  'Foreign Revenues'            => '',
+  'Form details (second row)'   => '',
+  'Formula'                     => '',
+  'Free report period'          => '',
+  'Free-form text'              => '',
+  'Fristsetzung'                => '',
+  'From'                        => '',
+  'From Date'                   => '',
+  'Full Access'                 => '',
+  'Full access to all functions' => '',
+  'GL Transaction'              => '',
+  'Gegenkonto'                  => '',
+  'Gender'                      => '',
+  'General Ledger'              => '',
+  'General Ledger Corrections'  => '',
+  'General Ledger Transaction'  => '',
+  'General ledger and cash'     => '',
+  'General ledger corrections'  => '',
+  'Generic Tax Report'          => '',
+  'Given Name'                  => '',
+  'Greeting'                    => '',
+  'Greetings'                   => '',
+  'Group'                       => '',
+  'Group Invoices'              => '',
+  'Group Items'                 => '',
+  'Group deleted!'              => '',
+  'Group membership'            => '',
+  'Group missing!'              => '',
+  'Group saved!'                => '',
+  'Groups'                      => '',
+  'HTML'                        => '',
+  'HTML Templates'              => '',
+  'Has serial number'           => '',
+  'Header'                      => '',
+  'Heading'                     => '',
+  'Help'                        => '',
+  'Here\'s an example command line:' => '',
+  'Hide by default'             => '',
+  'History'                     => '',
+  'History Search'              => '',
+  'History Search Engine'       => '',
+  'Homepage'                    => '',
+  'Host'                        => '',
+  'However, you can create a new part which will then be selected.' => '',
+  'I'                           => '',
+  'IBAN'                        => '',
+  'ID'                          => '',
+  'ID-Nummer'                   => '',
+  'II'                          => '',
+  'III'                         => '',
+  'IV'                          => '',
+  'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => '',
+  'If the database user listed above does not have the right to create a database then enter the name and password of the superuser below:' => '',
+  'If you chose to let Lx-Office do the migration then Lx-Office will also remove the old member file after creating a backup copy of it in the directory &quot;[% HTML.escape(backupdir) %]&quot;.' => '',
+  'If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.' => '',
+  'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => '',
+  'If you want to change any of these parameters then press the &quot;Back&quot; button, edit the file &quot;config/authentication.pl&quot; and login into the admin module again.' => '',
+  'If you want to delete such a dataset you have to edit the user(s) that are using the dataset in question and have them use another dataset.' => '',
+  'If you want to set up the authentication database yourself then log in to the administration panel. Lx-Office will then create the database and tables for you.' => '',
+  'If you yourself want to upgrade the installation then please read the file &quot;doc/UPGRADE&quot; and follow the steps outlined in this file.' => '',
+  'Image'                       => '',
+  'Import CSV'                  => '',
+  'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => '',
+  'In order to do that hit the button "Delete transaction".' => '',
+  'In the latter case the tables needed by Lx-Office will be created in that database.' => '',
+  'In-line'                     => '',
+  'Inactive'                    => '',
+  'Include Exchangerate Difference' => '',
+  'Include column headings'     => '',
+  'Include empty bins'          => '',
+  'Include in Report'           => '',
+  'Include in drop-down menus'  => '',
+  'Includeable in reports'      => '',
+  'Income Statement'            => '',
+  'Income accno'                => '',
+  'Incoming Payments'           => '',
+  'Incoming invoice number'     => '',
+  'Incorrect Password!'         => '',
+  'Incorrect username or password!' => '',
+  'Increase'                    => '',
+  'Individual Items'            => '',
+  'Information'                 => '',
+  'Interest'                    => '',
+  'Interest Rate'               => '',
+  'Internal Notes'              => '',
+  'International'               => '',
+  'Internet'                    => '',
+  'Introduction of Buchungsgruppen' => '',
+  'Introduction of units'       => '',
+  'Inv. Duedate'                => '',
+  'Invalid'                     => '',
+  'Invalid follow-up ID.'       => '',
+  'Invalid quantity.'           => '',
+  'Invdate'                     => '',
+  'Invdate from'                => '',
+  'Inventory'                   => '',
+  'Inventory Account'           => '',
+  'Inventory quantity must be zero before you can set this assembly obsolete!' => '',
+  'Inventory quantity must be zero before you can set this part obsolete!' => '',
+  'Invno.'                      => '',
+  'Invnumber'                   => '',
+  'Invnumber missing!'          => '',
+  'Invoice'                     => '',
+  'Invoice (one letter abbreviation)' => '',
+  'Invoice Date'                => '',
+  'Invoice Date missing!'       => '',
+  'Invoice Duedate'             => '',
+  'Invoice Number'              => '',
+  'Invoice Number missing!'     => '',
+  'Invoice deleted!'            => '',
+  'Invoice for fees'            => '',
+  'Invoice has already been storno\'d!' => '',
+  'Invoice with Storno (abbreviation)' => '',
+  'Invoices'                    => '',
+  'Is this a summary account to record' => '',
+  'It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don\'t match the selected taxkey). Therefore you should re-run the general ledger analysis.' => '',
+  'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => '',
+  'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => '',
+  'It may optionally be compressed with &quot;gzip&quot;.' => '',
+  'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' => '',
+  'Item deleted!'               => '',
+  'Item not on file!'           => '',
+  'Jahresverkehrszahlen neu'    => '',
+  'Jan'                         => '',
+  'January'                     => '',
+  'Journal'                     => '',
+  'Jul'                         => '',
+  'July'                        => '',
+  'Jump to'                     => '',
+  'Jun'                         => '',
+  'June'                        => '',
+  'KNE-Export erfolgreich!'     => '',
+  'KNr. beim Kunden'            => '',
+  'Keine Suchergebnisse gefunden!' => '',
+  'Konten'                      => '',
+  'Kontonummernerweiterung (KNE)' => '',
+  'L'                           => '',
+  'LIABILITIES'                 => '',
+  'LP'                          => '',
+  'LaTeX Templates'             => '',
+  'Landscape'                   => '',
+  'Language'                    => '',
+  'Language Values'             => '',
+  'Language deleted!'           => '',
+  'Language missing!'           => '',
+  'Language saved!'             => '',
+  'Languages'                   => '',
+  'Last Article Number'         => '',
+  'Last Cost'                   => '',
+  'Last Credit Note Number'     => '',
+  'Last Customer Number'        => '',
+  'Last Invoice Number'         => '',
+  'Last Purchase Delivery Order Number' => '',
+  'Last Purchase Order Number'  => '',
+  'Last RFQ Number'             => '',
+  'Last Sales Delivery Order Number' => '',
+  'Last Sales Order Number'     => '',
+  'Last Sales Quotation Number' => '',
+  'Last Service Number'         => '',
+  'Last Transaction'            => '',
+  'Last Vendor Number'          => '',
+  'Lead'                        => '',
+  'Leave host and port field empty unless you want to make a remote connection.' => '',
+  'Left'                        => '',
+  'Liability'                   => '',
+  'License'                     => '',
+  'License key'                 => '',
+  'Licensed to'                 => '',
+  'Licenses'                    => '',
+  'Lieferungen'                 => '',
+  'Limit part selection'        => '',
+  'Line Total'                  => '',
+  'Line endings'                => '',
+  'List'                        => '',
+  'List Accounting Groups'      => '',
+  'List Accounts'               => '',
+  'List Businesses'             => '',
+  'List Departments'            => '',
+  'List Groups'                 => '',
+  'List Languages'              => '',
+  'List Lead'                   => '',
+  'List Payment Terms'          => '',
+  'List Price'                  => '',
+  'List Price Factors'          => '',
+  'List Pricegroups'            => '',
+  'List Printer'                => '',
+  'List Tax'                    => '',
+  'List Transactions'           => '',
+  'List Warehouses'             => '',
+  'List export'                 => '',
+  'List of custom variables'    => '',
+  'Load draft'                  => '',
+  'Local Tax Office Preferences' => '',
+  'Lock System'                 => '',
+  'Lockfile created!'           => '',
+  'Lockfile removed!'           => '',
+  'Login'                       => '',
+  'Login Name'                  => '',
+  'Login name missing!'         => '',
+  'Logout'                      => '',
+  'Long Dates'                  => '',
+  'Long Description'            => '',
+  'Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' => '',
+  'Lx-Office can fix these problems automatically.' => '',
+  'Lx-Office has been switched to group-based access restrictions.' => '',
+  'Lx-Office has found one or more problems in the general ledger.' => '',
+  'Lx-Office is about to update the database <b>[% HTML.escape(dbname) %]</b>. You should create a backup of the database before proceeding because the backup might not be reversible.' => '',
+  'Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system.' => '',
+  'Lx-Office website'           => '',
+  'MAILED'                      => '',
+  'MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES' => '',
+  'Main Preferences'            => '',
+  'Make'                        => '',
+  'Manage license keys'         => '',
+  'Mandantennummer'             => '',
+  'Mar'                         => '',
+  'March'                       => '',
+  'Margins'                     => '',
+  'Mark as paid?'               => '',
+  'Mark closed'                 => '',
+  'Marked as paid'              => '',
+  'Marked entries printed!'     => '',
+  'Master Data'                 => '',
+  'Max. Dunning Level'          => '',
+  'May'                         => '',
+  'May '                        => '',
+  'May set the BCC field when sending emails' => '',
+  'Medium Number'               => '',
+  'Memo'                        => '',
+  'Message'                     => '',
+  'Method'                      => '',
+  'Microfiche'                  => '',
+  'Minimum Amount'              => '',
+  'Miscellaneous'               => '',
+  'Missing \'description\' field.' => '',
+  'Missing \'tag\' field.'      => '',
+  'Missing Method!'             => '',
+  'Missing Tax Authoritys Preferences' => '',
+  'Missing amount'              => '',
+  'Missing parameter #1 in call to sub #2.' => '',
+  'Missing parameter (at least one of #1) in call to sub #2.' => '',
+  'Mitarbeiter'                 => '',
+  'Mobile1'                     => '',
+  'Mobile2'                     => '',
+  'Model'                       => '',
+  'Module'                      => '',
+  'Module home page'            => '',
+  'Module name'                 => '',
+  'Monat'                       => '',
+  'Monthly'                     => '',
+  'More than one control file with the tag \'%s\' exist.' => '',
+  'Multibyte Encoding'          => '',
+  'MwSt. inkl.'                 => '',
+  'Name'                        => '',
+  'Name missing!'               => '',
+  'National'                    => '',
+  'National Expenses'           => '',
+  'National Revenues'           => '',
+  'Netto Terms'                 => '',
+  'New Buchungsgruppe [% loop.count %]' => '',
+  'New Templates'               => '',
+  'New assembly'                => '',
+  'New contact'                 => '',
+  'New customer'                => '',
+  'New invoice'                 => '',
+  'New part'                    => '',
+  'New sales order'             => '',
+  'New service'                 => '',
+  'New unit'                    => '',
+  'New vendor'                  => '',
+  'Next Dunning Level'          => '',
+  'No'                          => '',
+  'No %s was found matching the search parameters.' => '',
+  'No Company Address given'    => '',
+  'No Company Name given'       => '',
+  'No Customer was found matching the search parameters.' => '',
+  'No Database Drivers available!' => '',
+  'No Dataset selected!'        => '',
+  'No Vendor was found matching the search parameters.' => '',
+  'No action defined.'          => '',
+  'No backup file has been uploaded.' => '',
+  'No bins have been added to this warehouse yet.' => '',
+  'No customer has been selected yet.' => '',
+  'No data was found.'          => '',
+  'No databases have been found on this server.' => '',
+  'No datasets have been selected.' => '',
+  'No dunnings have been selected for printing.' => '',
+  'No entries were found which had no unit assigned to them.' => '',
+  'No group has been selected, or the group does not exist anymore.' => '',
+  'No groups have been added yet.' => '',
+  'No licenses were found that match the search criteria.' => '',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => '',
+  'No part was found matching the search parameters.' => '',
+  'No prices will be updated because no prices have been entered.' => '',
+  'No problems were recognized.' => '',
+  'No unknown units where found.' => '',
+  'No user has been selected.'  => '',
+  'No valid number entered for pricegroup "#1".' => '',
+  'No vendor has been selected yet.' => '',
+  'No warehouse has been created yet or the quantity of the bins is not configured yet.' => '',
+  'No.'                         => '',
+  'Non-taxable Purchases'       => '',
+  'Non-taxable Sales'           => '',
+  'None'                        => '',
+  'Not Discountable'            => '',
+  'Not delivered'               => '',
+  'Not done yet'                => '',
+  'Not obsolete'                => '',
+  'Note'                        => '',
+  'Note: Taxkeys must have a "valid from" date, and will not be in effect otherwise.' => '',
+  'Notes'                       => '',
+  'Nothing has been selected for removal.' => '',
+  'Nothing has been selected for transfer.' => '',
+  'Nothing selected!'           => '',
+  'Nothing to delete!'          => '',
+  'Nov'                         => '',
+  'November'                    => '',
+  'Now the user must select a single Buchungsgruppe for each part instead of three distinct accounts.' => '',
+  'Number'                      => '',
+  'Number Format'               => '',
+  'Number missing in Row'       => '',
+  'Number of bins'              => '',
+  'Number of copies'            => '',
+  'Number of new bins'          => '',
+  'Number pages'                => '',
+  'Number variables: \'PRECISION=n\' forces numbers to be shown with exactly n decimal places.' => '',
+  'OB Transaction'              => '',
+  'OBE-Export erfolgreich!'     => '',
+  'Obsolete'                    => '',
+  'Oct'                         => '',
+  'October'                     => '',
+  'Off'                         => '',
+  'Old (on the side)'           => '',
+  'On'                          => '',
+  'On Hand'                     => '',
+  'On Order'                    => '',
+  'One or more Perl modules missing' => '',
+  'Only due follow-ups'         => '',
+  'Open'                        => '',
+  'OpenDocument/OASIS'          => '',
+  'Openings'                    => '',
+  'Optional comment'            => '',
+  'Options'                     => '',
+  'Order'                       => '',
+  'Order Date'                  => '',
+  'Order Date missing!'         => '',
+  'Order Number'                => '',
+  'Order Number missing!'       => '',
+  'Order deleted!'              => '',
+  'Ordered'                     => '',
+  'Orientation'                 => '',
+  'Orphaned'                    => '',
+  'Other users\' follow-ups'    => '',
+  'Other values are ignored.'   => '',
+  'Others'                      => '',
+  'Otherwise all users will only have access to their own settings.' => '',
+  'Otherwise the variable is only available for printing.' => '',
+  'Out of balance transaction!' => '',
+  'Out of balance!'             => '',
+  'Output Number Format'        => '',
+  'Outputformat'                => '',
+  'Overdue sales quotations and requests for quotations' => '',
+  'Own Product'                 => '',
+  'PAYMENT POSTED'              => '',
+  'PDF'                         => '',
+  'PDF (OpenDocument/OASIS)'    => '',
+  'PDF export -- options'       => '',
+  'POSTED'                      => '',
+  'POSTED AS NEW'               => '',
+  'PRINTED'                     => '',
+  'Packing List'                => '',
+  'Packing List Date missing!'  => '',
+  'Packing List Number missing!' => '',
+  'Packing Lists'               => '',
+  'Page #1/#2'                  => '',
+  'Paid'                        => '',
+  'Part'                        => '',
+  'Part Description'            => '',
+  'Part Description missing!'   => '',
+  'Part Number'                 => '',
+  'Part Number missing!'        => '',
+  'Part description'            => '',
+  'Partnumber must not be set to empty!' => '',
+  'Partnumber not unique!'      => '',
+  'Parts'                       => '',
+  'Parts Inventory'             => '',
+  'Parts must have an entry type.' => '',
+  'Parts, services and assemblies' => '',
+  'Password'                    => '',
+  'Payables'                    => '',
+  'Payment'                     => '',
+  'Payment Reminder'            => '',
+  'Payment Terms'               => '',
+  'Payment Terms missing in row ' => '',
+  'Payment Terms saved!'        => '',
+  'Payment date missing!'       => '',
+  'Payment posted!'             => '',
+  'Payment terms deleted!'      => '',
+  'Payments'                    => '',
+  'Period'                      => '',
+  'Period:'                     => '',
+  'Personal settings'           => '',
+  'Pg Database Administration'  => '',
+  'Phone'                       => '',
+  'Phone1'                      => '',
+  'Phone2'                      => '',
+  'Pick List'                   => '',
+  'Please ask your administrator to create warehouses and bins.' => '',
+  'Please enter a license key.' => '',
+  'Please enter a number of licenses.' => '',
+  'Please enter the login for the new user.' => '',
+  'Please enter the name of the database that will be used as the template for the new database:' => '',
+  'Please enter the name of the dataset you want to restore the backup in.' => '',
+  'Please enter the taxnumber in the administration menu userpreferences' => '',
+  'Please enter values'         => '',
+  'Please insert object dimensions below.' => '',
+  'Please insert your language values below' => '',
+  'Please insert your longdescription below' => '',
+  'Please install the below listed modules or ask your system administrator to.' => '',
+  'Please re-run the analysis for broken general ledger entries by clicking this button:' => '',
+  'Please select a customer from the list below.' => '',
+  'Please select a part from the list below.' => '',
+  'Please select a vendor from the list below.' => '',
+  'Please select the chart of accounts this installation is using from the list below.' => '',
+  'Please select the database you want to backup' => '',
+  'Please seletct the dataset you want to delete:' => '',
+  'Please specify a description for the warehouse designated for these goods.' => '',
+  'Plural'                      => '',
+  'Port'                        => '',
+  'Portrait'                    => '',
+  'Post'                        => '',
+  'Post Payment'                => '',
+  'Postscript'                  => '',
+  'Posustva_coa'                => '',
+  'Preferences'                 => '',
+  'Preferences saved!'          => '',
+  'Prefix for the new bins\' names' => '',
+  'Preis'                       => '',
+  'Preisgruppe'                 => '',
+  'Preisklasse'                 => '',
+  'Prepayment'                  => '',
+  'Preview'                     => '',
+  'Previous transdate text'     => '',
+  'Previous transnumber text'   => '',
+  'Price'                       => '',
+  'Price Factor'                => '',
+  'Price Factors'               => '',
+  'Price factor deleted!'       => '',
+  'Price factor saved!'         => '',
+  'Pricegroup'                  => '',
+  'Pricegroup deleted!'         => '',
+  'Pricegroup missing!'         => '',
+  'Pricegroup saved!'           => '',
+  'Pricegroups'                 => '',
+  'Print'                       => '',
+  'Print and Post'              => '',
+  'Print dunnings'              => '',
+  'Print list'                  => '',
+  'Print options'               => '',
+  'Printer'                     => '',
+  'Printer Command'             => '',
+  'Printer Command missing!'    => '',
+  'Printer Description'         => '',
+  'Printer deleted!'            => '',
+  'Printer saved!'              => '',
+  'Printing ... '               => '',
+  'Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' => '',
+  'Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.' => '',
+  'Private E-mail'              => '',
+  'Private Phone'               => '',
+  'Problem'                     => '',
+  'Produce Assembly'            => '',
+  'Productivity'                => '',
+  'Profit Center'               => '',
+  'Proforma Invoice'            => '',
+  'Programm'                    => '',
+  'Project'                     => '',
+  'Project Number'              => '',
+  'Project Number missing!'     => '',
+  'Project Numbers'             => '',
+  'Project Transactions'        => '',
+  'Project deleted!'            => '',
+  'Project not on file!'        => '',
+  'Project saved!'              => '',
+  'Projects'                    => '',
+  'Projecttransactions'         => '',
+  'Prozentual/Absolut'          => '',
+  'Purchase Invoice'            => '',
+  'Purchase Order'              => '',
+  'Purchase Orders'             => '',
+  'Purchase Price'              => '',
+  'Purchase Prices'             => '',
+  'Purchase delivery order'     => '',
+  'Purchase invoices'           => '',
+  'Qty'                         => '',
+  'Qty according to delivery order' => '',
+  'Qty in stock'                => '',
+  'Quantity'                    => '',
+  'Quantity missing.'           => '',
+  'Quartal'                     => '',
+  'Quarter'                     => '',
+  'Quarterly'                   => '',
+  'Queue'                       => '',
+  'Quotation'                   => '',
+  'Quotation Date'              => '',
+  'Quotation Date missing!'     => '',
+  'Quotation Number'            => '',
+  'Quotation Number missing!'   => '',
+  'Quotation deleted!'          => '',
+  'Quotations'                  => '',
+  'Quote chararacter'           => '',
+  'Quoted'                      => '',
+  'RFQ'                         => '',
+  'RFQ Number'                  => '',
+  'RFQs'                        => '',
+  'ROP'                         => '',
+  'Ranges of numbers'           => '',
+  'Ranges of numbers and default accounts' => '',
+  'Re-run analysis'             => '',
+  'Receipt'                     => '',
+  'Receipt posted!'             => '',
+  'Receipt, payment, reconciliation' => '',
+  'Receipts'                    => '',
+  'Receivables'                 => '',
+  'Rechnungsnummer'             => '',
+  'Reconciliation'              => '',
+  'Record in'                   => '',
+  'Recorded Tax'                => '',
+  'Recorded taxkey'             => '',
+  'Reference'                   => '',
+  'Reference missing!'          => '',
+  'Release From Stock'          => '',
+  'Remaining'                   => '',
+  'Removal'                     => '',
+  'Removal from Warehouse'      => '',
+  'Removal from warehouse'      => '',
+  'Removal qty'                 => '',
+  'Remove'                      => '',
+  'Remove Draft'                => '',
+  'Remove draft when posting'   => '',
+  'Remove from group'           => '',
+  'Removed spoolfiles!'         => '',
+  'Removing marked entries from queue ...' => '',
+  'Rename the group'            => '',
+  'Report Positions'            => '',
+  'Report about wareouse contents' => '',
+  'Report about wareouse transactions' => '',
+  'Report and misc. Preferences' => '',
+  'Report for'                  => '',
+  'Reports'                     => '',
+  'Reqdate'                     => '',
+  'Request for Quotation'       => '',
+  'Request for Quotations'      => '',
+  'Request quotation'           => '',
+  'Required by'                 => '',
+  'Restore Dataset'             => '',
+  'Revenue'                     => '',
+  'Revenue Account'             => '',
+  'Revenues EU with UStId'      => '',
+  'Revenues EU without UStId'   => '',
+  'Right'                       => '',
+  'SAVED'                       => '',
+  'SAVED FOR DUNNING'           => '',
+  'SCREENED'                    => '',
+  'Saldo Credit'                => '',
+  'Saldo Debit'                 => '',
+  'Saldo neu'                   => '',
+  'Saldo per'                   => '',
+  'Sale Prices'                 => '',
+  'Sales Invoice'               => '',
+  'Sales Invoices'              => '',
+  'Sales Order'                 => '',
+  'Sales Orders'                => '',
+  'Sales and purchase invoices with inventory transactions with taxkeys' => '',
+  'Sales delivery order'        => '',
+  'Sales invoice number'        => '',
+  'Sales invoices'              => '',
+  'Sales quotation'             => '',
+  'Salesman'                    => '',
+  'Salesperson'                 => '',
+  'Same as the quote character' => '',
+  'Sat. Fax'                    => '',
+  'Sat. Phone'                  => '',
+  'Satz %'                      => '',
+  'Save'                        => '',
+  'Save account first to insert taxkeys' => '',
+  'Save and AP Transaction'     => '',
+  'Save and AR Transaction'     => '',
+  'Save and Close'              => '',
+  'Save and Invoice'            => '',
+  'Save and Order'              => '',
+  'Save and Quotation'          => '',
+  'Save and RFQ'                => '',
+  'Save and close'              => '',
+  'Save as new'                 => '',
+  'Save draft'                  => '',
+  'Saving the file \'%s\' failed. OS error message: %s' => '',
+  'Screen'                      => '',
+  'Searchable'                  => '',
+  'Select'                      => '',
+  'Select a Customer'           => '',
+  'Select a customer'           => '',
+  'Select a part'               => '',
+  'Select a part or assembly'   => '',
+  'Select a period'             => '',
+  'Select a vendor'             => '',
+  'Select all'                  => '',
+  'Select federal state...'     => '',
+  'Select from one of the items below' => '',
+  'Select from one of the names below' => '',
+  'Select from one of the projects below' => '',
+  'Select postscript or PDF!'   => '',
+  'Select tax office...'        => '',
+  'Select the chart of accounts in use' => '',
+  'Select the checkboxes that match users to the groups they should belong to.' => '',
+  'Select type of removal'      => '',
+  'Select type of transfer'     => '',
+  'Selection'                   => '',
+  'Selection fields: The option field must contain the available options for the selection. Options are separated by \'##\', for example \'Early##Normal##Late\'.' => '',
+  'Sell Price'                  => '',
+  'Send the backup via Email'   => '',
+  'Sep'                         => '',
+  'Separator chararacter'       => '',
+  'September'                   => '',
+  'Serial No.'                  => '',
+  'Serial Number'               => '',
+  'Service'                     => '',
+  'Service Items'               => '',
+  'Service Number missing!'     => '',
+  'Service unit'                => '',
+  'Services'                    => '',
+  'Set Language Values'         => '',
+  'Set eMail text'              => '',
+  'Setup Menu'                  => '',
+  'Setup Templates'             => '',
+  'Ship'                        => '',
+  'Ship rcvd'                   => '',
+  'Ship to'                     => '',
+  'Ship via'                    => '',
+  'Shipping Address'            => '',
+  'Shipping Point'              => '',
+  'Shipto'                      => '',
+  'Shopartikel'                 => '',
+  'Short'                       => '',
+  'Show'                        => '',
+  'Show TODO list'              => '',
+  'Show by default'             => '',
+  'Show details'                => '',
+  'Show follow ups...'          => '',
+  'Show old dunnings'           => '',
+  'Show overdue sales quotations and requests for quotations...' => '',
+  'Show your TODO list after loggin in' => '',
+  'Signature'                   => '',
+  'Since bin is not enforced in the parts data, please specify a bin where goods without a specified bin will be put.' => '',
+  'Skip'                        => '',
+  'Skonto'                      => '',
+  'Skonto Terms'                => '',
+  'Sold'                        => '',
+  'Solution'                    => '',
+  'Source'                      => '',
+  'Source bin'                  => '',
+  'Spoolfile'                   => '',
+  'Start Dunning Process'       => '',
+  'Start analysis'              => '',
+  'Start the correction assistant' => '',
+  'Startdate_coa'               => '',
+  'Starting Balance'            => '',
+  'Statement'                   => '',
+  'Statement Balance'           => '',
+  'Statement sent to'           => '',
+  'Statements sent to printer!' => '',
+  'Step 1 of 3: Parts'          => '',
+  'Step 2 of 3: Services'       => '',
+  'Step 3 of 3: Assemblies'     => '',
+  'Step 3 of 3: Default units'  => '',
+  'Steuersatz'                  => '',
+  'Stock'                       => '',
+  'Stock value'                 => '',
+  'Storno'                      => '',
+  'Storno (one letter abbreviation)' => '',
+  'Storno Invoice'              => '',
+  'Storno Packing List'         => '',
+  'Street'                      => '',
+  'Stylesheet'                  => '',
+  'Subject'                     => '',
+  'Subject:'                    => '',
+  'Subtotal'                    => '',
+  'Such entries cannot be exported into the DATEV format and have to be fixed as well.' => '',
+  'Sum Credit'                  => '',
+  'Sum Debit'                   => '',
+  'Sum for'                     => '',
+  'Sum per'                     => '',
+  'Summen- und Saldenliste'     => '',
+  'Superuser name'              => '',
+  'System'                      => '',
+  'TODO list'                   => '',
+  'TODO list options'           => '',
+  'TOP100'                      => '',
+  'TOTAL'                       => '',
+  'Tax'                         => '',
+  'Tax Consultant'              => '',
+  'Tax Included'                => '',
+  'Tax Number'                  => '',
+  'Tax Number / SSN'            => '',
+  'Tax Office'                  => '',
+  'Tax Office Preferences'      => '',
+  'Tax Percent is a number between 0 and 100' => '',
+  'Tax Period'                  => '',
+  'Tax Position'                => '',
+  'Tax collected'               => '',
+  'Tax deleted!'                => '',
+  'Tax number'                  => '',
+  'Tax paid'                    => '',
+  'Tax saved!'                  => '',
+  'Tax-O-Matic'                 => '',
+  'Tax-o-matic Account'         => '',
+  'Taxaccount_coa'              => '',
+  'Taxation'                    => '',
+  'Taxdescription  missing!'    => '',
+  'Taxdescription_coa'          => '',
+  'Taxes'                       => '',
+  'Taxkey'                      => '',
+  'Taxkey  missing!'            => '',
+  'Taxkey_coa'                  => '',
+  'Taxkeys and Taxreport Preferences' => '',
+  'Taxlink_coa'                 => '',
+  'Taxnumber'                   => '',
+  'Taxrate missing!'            => '',
+  'Tel'                         => '',
+  'Tel.'                        => '',
+  'Telephone'                   => '',
+  'Template'                    => '',
+  'Template Code'               => '',
+  'Template Code missing!'      => '',
+  'Template database'           => '',
+  'Templates'                   => '',
+  'Terms missing in row '       => '',
+  'Test connection'             => '',
+  'Text field'                  => '',
+  'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' => '',
+  'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => '',
+  'Text, text field and number variables: The default value will be used as-is.' => '',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => '',
+  'The AP transaction #1 has been deleted.' => '',
+  'The AR transaction #1 has been deleted.' => '',
+  'The GL transaction #1 has been deleted.' => '',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => '',
+  'The access rights have been saved.' => '',
+  'The assembly has been created.' => '',
+  'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => '',
+  'The authentication configuration file &quot;config/authentication.pl&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => '',
+  'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => '',
+  'The available options depend on the varibale type:' => '',
+  'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' => '',
+  'The base unit does not exist or it is about to be deleted in row %d.' => '',
+  'The base unit does not exist.' => '',
+  'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => '',
+  'The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.' => '',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => '',
+  'The config file "config/authentication.pl" was not found.' => '',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => '',
+  'The connection to the authentication database failed:' => '',
+  'The connection to the database could not be established.' => '',
+  'The connection to the template database failed:' => '',
+  'The connection was established successfully.' => '',
+  'The creation of the authentication database failed:' => '',
+  'The custom variable has been deleted.' => '',
+  'The custom variable has been saved.' => '',
+  'The database [% HTML.escape(db) %] has been successfully deleted.' => '',
+  'The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:' => '',
+  'The database update/creation did not succeed. The file [% HTML.escape(file) %] contained the following error:' => '',
+  'The database upgrade for the introduction of Buchungsgruppen is now complete.' => '',
+  'The database upgrade for the introduction of units is now complete.' => '',
+  'The dataset [% HTML.escape(db) %] has been successfully created.' => '',
+  'The dataset backup has been sent via email to [% HTML.escape(to) %].' => '',
+  'The dataset has to exist before a restoration can be started.' => '',
+  'The dataset name is missing.' => '',
+  'The default value depends on the variable type:' => '',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => '',
+  'The description is missing.' => '',
+  'The description is shown on the form. Chose something short and descriptive.' => '',
+  'The directory "%s" could not be created:\n%s' => '',
+  'The directory %s does not exist.' => '',
+  'The dunning process started' => '',
+  'The dunnings have been printed.' => '',
+  'The email address is missing.' => '',
+  'The factor is missing in row %d.' => '',
+  'The factor is missing.'      => '',
+  'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => '',
+  'The follow-up date is missing.' => '',
+  'The following Buchungsgruppen have already been created:' => '',
+  'The following Datasets need to be updated' => '',
+  'The following drafts have been saved and can be loaded.' => '',
+  'The following transaction contains wrong taxes:' => '',
+  'The following transaction contains wrong taxkeys:' => '',
+  'The following units are unknown.' => '',
+  'The following units exist already:' => '',
+  'The following users have been migrated into the authentication database:' => '',
+  'The following warnings occured during an upgrade to the document templates:' => '',
+  'The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>' => '',
+  'The greetings have been saved.' => '',
+  'The group has been added.'   => '',
+  'The group has been deleted.' => '',
+  'The group has been saved.'   => '',
+  'The group memberships have been saved.' => '',
+  'The group name is missing.'  => '',
+  'The licensing module has been deactivated in lx-erp.conf.' => '',
+  'The list has been printed.'  => '',
+  'The login is missing.'       => '',
+  'The name in row %d has already been used before.' => '',
+  'The name is missing in row %d.' => '',
+  'The name is missing.'        => '',
+  'The name must only consist of letters, numbers and underscores and start with a letter.' => '',
+  'The old file containing the user information is still present (&quot;[% HTML.escape(memberfile) %]&quot;). Do you want to migrate these users into the database? If not then you will not be able to log in with any of the users present in the old file. ' => '',
+  'The option field is empty.'  => '',
+  'The parts for this delivery order have already been transferred in.' => '',
+  'The parts for this delivery order have already been transferred out.' => '',
+  'The parts have been removed.' => '',
+  'The parts have been stocked.' => '',
+  'The parts have been transferred.' => '',
+  'The pg_dump process could not be started.' => '',
+  'The pg_restore process could not be started.' => '',
+  'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).' => '',
+  'The program\'s exit code was [% HTML.escape(retval) %] (&quot;0&quot; usually means that everything went OK).' => '',
+  'The project has been added.' => '',
+  'The project has been saved.' => '',
+  'The restoration process has started. Here\'s the output of the &quot;pg_restore&quot; command:' => '',
+  'The restoration process is complete. Please review &quot;pg_restore&quot;\'s output to find out if the restoration was successful.' => '',
+  'The second reason is that Lx-Office allowed the user to enter the tax amount manually regardless of the taxkey used.' => '',
+  'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => '',
+  'The selected  PostgreSQL installation uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => '',
+  'The selected bin does not exist.' => '',
+  'The selected warehouse does not exist.' => '',
+  'The selected warehouse is empty.' => '',
+  'The session is invalid or has expired.' => '',
+  'The source warehouse does not contain any bins.' => '',
+  'The subject is missing.'     => '',
+  'The tables for user management and authentication do not exist. They will be created in the next step in the following database:' => '',
+  'The tabulator character'     => '',
+  'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.' => '',
+  'The transaction is shown below in its current state.' => '',
+  'The unit has been saved.'    => '',
+  'The unit in row %d has been deleted in the meantime.' => '',
+  'The unit in row %d has been used in the meantime and cannot be changed anymore.' => '',
+  'The units have been saved.'  => '',
+  'The user has been added to this group.' => '',
+  'The user has been removed from this group.' => '',
+  'The user is a member in the following group(s):' => '',
+  'The user migration process is complete.' => '',
+  'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => '',
+  'The warehouse could not be deleted because it has already been used.' => '',
+  'The warehouse does not contain any bins.' => '',
+  'The warehouse or the bin is missing.' => '',
+  'The wrong taxkeys for AP and AR transactions have been fixed.' => '',
+  'The wrong taxkeys for inventory transactions for sales and purchase invoices have been fixed.' => '',
+  'The wrong taxkeys have been fixed.' => '',
+  'There are #1 unfinished follow-ups of which #2 are due.' => '',
+  'There are four tax zones.'   => '',
+  'There are no items in stock.' => '',
+  'There are no items on your TODO list at the moment.' => '',
+  'There are still entries in the database for which no unit has been assigned.' => '',
+  'There are usually three ways to install Perl modules.' => '',
+  'There is at least one sales or purchase invoice for which Lx-Office recorded an inventory transaction with taxkeys even though no tax was recorded.' => '',
+  'There is at least one transaction for which the user has chosen a logically wrong taxkey.' => '',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => '',
+  'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.' => '',
+  'There is nothing to do in this step.' => '',
+  'Therefore there\'s no need to create the same article more than once if it is sold or bought in/from another tax zone.' => '',
+  'These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.' => '',
+  'These will only be effective if the account is NOT a summary account AND there exists at least one taxkey. Setting the account as a summary account will erase these settings.' => '',
+  'These wrong entries cannot be fixed automatically.' => '',
+  'This corresponds to Lx-Office\'s behavior prior to version 2.4.4.' => '',
+  'This could have happened for two reasons:' => '',
+  'This customer number is already in use.' => '',
+  'This group will be called &quot;Full Access&quot;.' => '',
+  'This installation uses an unknown chart of accounts (&quot;[% HTML.escape(coa) %]&quot;). This database upgrade cannot create standard buchungsgruppen automatically.' => '',
+  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => '',
+  'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => '',
+  'This means that the user has created an AP transaction and chosen a taxkey for sales taxes, or that he has created an AR transaction and chosen a taxkey for input taxes.' => '',
+  'This module can help you identify and correct such entries by analyzing the general ledger and presenting you likely solutions but also allowing you to fix problems yourself.' => '',
+  'This transaction has to be split into several transactions manually.' => '',
+  'This update will change the nature the onhand of goods is tracked.' => '',
+  'This upgrade script tries to map all existing parts in the database to the newly created Buchungsgruppen.' => '',
+  'This upgrade script tries to map all existing units in the database to the newly created units.' => '',
+  'This vendor number is already in use.' => '',
+  'Time period for the analysis:' => '',
+  'Timestamp'                   => '',
+  'Title'                       => '',
+  'To'                          => '',
+  'To (email)'                  => '',
+  'To (time)'                   => '',
+  'To Date'                     => '',
+  'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => '',
+  'Top'                         => '',
+  'Top (CSS)'                   => '',
+  'Top (CSS) new'               => '',
+  'Top (Javascript)'            => '',
+  'Top (XUL; only for Mozilla Firefox)' => '',
+  'Top 100'                     => '',
+  'Top 100 hinzufuegen'         => '',
+  'Top Level'                   => '',
+  'Total'                       => '',
+  'Total Fees'                  => '',
+  'Total stock value'           => '',
+  'Totals'                      => '',
+  'Trade Discount'              => '',
+  'Trans Id'                    => '',
+  'Trans Type'                  => '',
+  'Transaction'                 => '',
+  'Transaction %d cancelled.'   => '',
+  'Transaction Date missing!'   => '',
+  'Transaction ID missing.'     => '',
+  'Transaction deleted!'        => '',
+  'Transaction description'     => '',
+  'Transaction has already been cancelled!' => '',
+  'Transaction has been split on both the credit and the debit side' => '',
+  'Transaction posted!'         => '',
+  'Transactions, AR transactions, AP transactions' => '',
+  'Transfer'                    => '',
+  'Transfer Quantity'           => '',
+  'Transfer To Stock'           => '',
+  'Transfer from warehouse'     => '',
+  'Transfer in'                 => '',
+  'Transfer out'                => '',
+  'Transfer qty'                => '',
+  'Translation (%s)'            => '',
+  'Trial Balance'               => '',
+  'Trial balance between %s and %s' => '',
+  'Trying to call a sub without a name' => '',
+  'Type'                        => '',
+  'Type of Business'            => '',
+  'USTVA'                       => '',
+  'USTVA 2004'                  => '',
+  'USTVA 2005'                  => '',
+  'USTVA 2006'                  => '',
+  'USTVA 2007'                  => '',
+  'USTVA-Hint: Method'          => '',
+  'USTVA-Hint: Tax Authoritys'  => '',
+  'USt-IdNr.'                   => '',
+  'USt-Konto'                   => '',
+  'UStVA'                       => '',
+  'UStVA (PDF-Dokument)'        => '',
+  'UStVa'                       => '',
+  'UStVa Einstellungen'         => '',
+  'Unbalanced Ledger'           => '',
+  'Unchecked custom variables will not appear in orders and invoices.' => '',
+  'Unfinished follow-ups'       => '',
+  'Unit'                        => '',
+  'Unit missing.'               => '',
+  'Unit of measure'             => '',
+  'Units marked for deletion will be deleted upon saving.' => '',
+  'Units that have already been used (e.g. for parts and services or in invoices or warehouse transactions) cannot be changed.' => '',
+  'Unknown Category'            => '',
+  'Unknown Link'                => '',
+  'Unknown chart of accounts'   => '',
+  'Unknown dependency \'%s\'.'  => '',
+  'Unknown problem type.'       => '',
+  'Unlock System'               => '',
+  'Until'                       => '',
+  'Update'                      => '',
+  'Update Dataset'              => '',
+  'Update Prices'               => '',
+  'Update complete'             => '',
+  'Update prices'               => '',
+  'Update?'                     => '',
+  'Updated'                     => '',
+  'Use As Template'             => '',
+  'Use Templates'               => '',
+  'User'                        => '',
+  'User Config'                 => '',
+  'User data migration'         => '',
+  'User deleted!'               => '',
+  'User migration complete'     => '',
+  'User name'                   => '',
+  'User saved!'                 => '',
+  'Users in<br>this group'      => '',
+  'Users not in this group'     => '',
+  'Ust-IDNr'                    => '',
+  'Valid from'                  => '',
+  'Valid until'                 => '',
+  'Value'                       => '',
+  'Variable'                    => '',
+  'Vendor'                      => '',
+  'Vendor Invoice'              => '',
+  'Vendor Invoices'             => '',
+  'Vendor Number'               => '',
+  'Vendor deleted!'             => '',
+  'Vendor details'              => '',
+  'Vendor missing!'             => '',
+  'Vendor not on file or locked!' => '',
+  'Vendor not on file!'         => '',
+  'Vendor saved!'               => '',
+  'Vendor type'                 => '',
+  'Vendors'                     => '',
+  'Verrechnungseinheit'         => '',
+  'Version'                     => '',
+  'View License'                => '',
+  'View warehouse content'      => '',
+  'Von Konto: '                 => '',
+  'WEBDAV access'               => '',
+  'WHJournal'                   => '',
+  'Warehouse'                   => '',
+  'Warehouse From'              => '',
+  'Warehouse MIgration'         => '',
+  'Warehouse To'                => '',
+  'Warehouse content'           => '',
+  'Warehouse deleted.'          => '',
+  'Warehouse management'        => '',
+  'Warehouse saved.'            => '',
+  'Warehouses'                  => '',
+  'Warnings during template upgrade' => '',
+  'WebDAV link'                 => '',
+  'Weight'                      => '',
+  'Weight unit'                 => '',
+  'What type of item is this?'  => '',
+  'What\'s the <b>term</b> you\'re looking for?' => '',
+  'With Extension Of Time'      => '',
+  'Workflow Delivery Order'     => '',
+  'Workflow purchase_order'     => '',
+  'Workflow request_quotation'  => '',
+  'Workflow sales_order'        => '',
+  'Workflow sales_quotation'    => '',
+  'Wrong Period'                => '',
+  'Wrong date format!'          => '',
+  'Wrong tax keys recorded'     => '',
+  'Wrong taxes recorded'        => '',
+  'YYYY'                        => '',
+  'Year'                        => '',
+  'Year End'                    => '',
+  'Yearly'                      => '',
+  'Yearly taxreport not yet implemented' => '',
+  'Yes'                         => '',
+  'Yes, included by default'    => '',
+  'Yes/No (Checkbox)'           => '',
+  'You are logged out!'         => '',
+  'You can also create new units now.' => '',
+  'You can also delete this transaction and re-enter it manually.' => '',
+  'You can correct this transaction by chosing the correct taxkeys from the drop down boxes and hitting the button "Fix transaction" afterwards.' => '',
+  'You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.' => '',
+  'You can create warehouses and bins via the menu "System -> Warehouses".' => '',
+  'You can declare different translations for singular and plural for each unit (e.g. &quot;day&quot; and &quot;days).' => '',
+  'You can either create a new database or chose an existing database.' => '',
+  'You can only delete datasets that are not in use.' => '',
+  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => '',
+  'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => '',
+  'You cannot continue before all required modules are installed.' => '',
+  'You cannot continue until all unknown units have been mapped to known ones.' => '',
+  'You cannot create an invoice for delivery orders for different customers.' => '',
+  'You cannot create an invoice for delivery orders from different vendors.' => '',
+  'You did not enter a name!'   => '',
+  'You do not have the permissions to access this function.' => '',
+  'You have entered or selected the following shipping address for this customer:' => '',
+  'You have not selected any delivery order.' => '',
+  'You have to chose a dimension unit and a service unit which will then be assigned to those entries.' => '',
+  'You have to chose which unit to save for each of them.' => '',
+  'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' => '',
+  'You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.' => '',
+  'You must chose a user.'      => '',
+  'You will now be forwarded to the administration panel.' => '',
+  'You\'re not editing a file.' => '',
+  'You\'ve already chosen the following limitations:' => '',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => '',
+  'Your TODO list'              => '',
+  'Your browser does not currently support Javascript.' => '',
+  'Your download does not exist anymore. Please re-run the DATEV export assistant.' => '',
+  'Zeitpunkt'                   => '',
+  'Zeitraum'                    => '',
+  'Zero amount posting!'        => '',
+  'Zip, City'                   => '',
+  'Zipcode'                     => '',
+  'Zusatz'                      => '',
+  '[email]'                     => '',
+  'account_description'         => '',
+  'accrual'                     => '',
+  'all entries'                 => '',
+  'ap_aging_list'               => '',
+  'ar_aging_list'               => '',
+  'as at'                       => '',
+  'assembly_list'               => '',
+  'back'                        => '',
+  'bin_list'                    => '',
+  'bis'                         => '',
+  'button'                      => '',
+  'cash'                        => '',
+  'chargenumber #1'             => '',
+  'chart_of_accounts'           => '',
+  'choice'                      => '',
+  'choice part'                 => '',
+  'close'                       => '',
+  'config/authentication.pl: Key "DB_config" is missing.' => '',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => '',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => '',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => '',
+  'continue'                    => '',
+  'correction'                  => '',
+  'customer'                    => '',
+  'customer_list'               => '',
+  'customernumber not unique!'  => '',
+  'debug'                       => '',
+  'delete'                      => '',
+  'deliverydate'                => '',
+  'direct debit'                => '',
+  'disposed'                    => '',
+  'done'                        => '',
+  'down'                        => '',
+  'drucken'                     => '',
+  'dunning_list'                => '',
+  'eMail Send?'                 => '',
+  'eMail?'                      => '',
+  'ea'                          => '',
+  'emailed to'                  => '',
+  'female'                      => '',
+  'follow_up_list'              => '',
+  'for'                         => '',
+  'for Period'                  => '',
+  'found'                       => '',
+  'from (time)'                 => '',
+  'general_ledger_list'         => '',
+  'history'                     => '',
+  'history search engine'       => '',
+  'invoice'                     => '',
+  'invoice_list'                => '',
+  'lead deleted!'               => '',
+  'lead saved!'                 => '',
+  'list'                        => '',
+  'list_of_payments'            => '',
+  'list_of_receipts'            => '',
+  'list_of_transactions'        => '',
+  'logout'                      => '',
+  'male'                        => '',
+  'mark as paid'                => '',
+  'master'                      => '',
+  'missing'                     => '',
+  'month'                       => '',
+  'new Window'                  => '',
+  'no'                          => '',
+  'no chargenumber'             => '',
+  'none (pricegroup)'           => '',
+  'not transferred in yet'      => '',
+  'not transferred out yet'     => '',
+  'number'                      => '',
+  'oe.pl::search called with unknown type' => '',
+  'order'                       => '',
+  'our vendor number at customer' => '',
+  'packing_list'                => '',
+  'part_list'                   => '',
+  'pick_list'                   => '',
+  'plural first char'           => '',
+  'pos_bilanz'                  => '',
+  'pos_bwa'                     => '',
+  'pos_eur'                     => '',
+  'pos_ustva'                   => '',
+  'posted!'                     => '',
+  'print'                       => '',
+  'proforma'                    => '',
+  'project_list'                => '',
+  'purchase_delivery_order_list' => '',
+  'purchase_order'              => '',
+  'purchase_order_list'         => '',
+  'quarter'                     => '',
+  'quotation_list'              => '',
+  'release_material'            => '',
+  'report_generator_dispatch_to is not defined.' => '',
+  'report_generator_nextsub is not defined.' => '',
+  'request_quotation'           => '',
+  'reset'                       => '',
+  'return_material'             => '',
+  'rfq_list'                    => '',
+  'sales tax identification number' => '',
+  'sales_delivery_order_list'   => '',
+  'sales_order'                 => '',
+  'sales_order_list'            => '',
+  'sales_quotation'             => '',
+  'saved'                       => '',
+  'saved!'                      => '',
+  'sent'                        => '',
+  'sent to printer'             => '',
+  'service_list'                => '',
+  'shipped'                     => '',
+  'singular first char'         => '',
+  'soldtotal'                   => '',
+  'stock'                       => '',
+  'submit'                      => '',
+  'tax_chartaccno'              => '',
+  'tax_percent'                 => '',
+  'tax_rate'                    => '',
+  'tax_taxdescription'          => '',
+  'tax_taxkey'                  => '',
+  'taxnumber'                   => '',
+  'to (date)'                   => '',
+  'to (time)'                   => '',
+  'transfer'                    => '',
+  'transferred in'              => '',
+  'transferred out'             => '',
+  'trial_balance'               => '',
+  'up'                          => '',
+  'use program settings'        => '',
+  'used'                        => '',
+  'valid from'                  => '',
+  'vendor'                      => '',
+  'vendor_invoice_list'         => '',
+  'vendor_list'                 => '',
+  'warehouse_journal_list'      => '',
+  'warehouse_report_list'       => '',
+  'wrongformat'                 => '',
+  'yes'                         => '',
+};
+
+1;
diff --git a/locale/en/oe b/locale/en/oe
new file mode 100644 (file)
index 0000000..1626976
--- /dev/null
@@ -0,0 +1,523 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  ' missing!'                   => ' missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Exchangerate'            => 'Add Exchangerate',
+  'Add Purchase Delivery Order' => 'Add Purchase Delivery Order',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Delivery Order'    => 'Add Sales Delivery Order',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Order Number' => 'Are you sure you want to delete Order Number',
+  'Are you sure you want to delete Quotation Number' => 'Are you sure you want to delete Quotation Number',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete delivery order!' => 'Cannot delete delivery order!',
+  'Cannot delete order!'        => 'Cannot delete order!',
+  'Cannot delete quotation!'    => 'Cannot delete quotation!',
+  'Cannot save order!'          => 'Cannot save order!',
+  'Cannot save quotation!'      => 'Cannot save quotation!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Closed'                      => 'Closed',
+  'Collective Orders only work for orders from one customer!' => 'Collective Orders only work for orders from one customer!',
+  'Company Name'                => 'Company Name',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Limit exceeded!!!'    => 'Credit Limit exceeded!!!',
+  'Credit Note'                 => 'Credit Note',
+  'Curr'                        => 'Curr',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'Customer type'               => 'Customer type',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete delivery order'       => 'Delete delivery order',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Delivery Order Date missing!' => 'Delivery Order Date missing!',
+  'Delivery Order Number'       => 'Delivery Order Number',
+  'Delivery Order deleted!'     => 'Delivery Order deleted!',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Purchase Delivery Order' => 'Edit Purchase Delivery Order',
+  'Edit Purchase Order'         => 'Edit Purchase Order',
+  'Edit Quotation'              => 'Edit Quotation',
+  'Edit Request for Quotation'  => 'Edit Request for Quotation',
+  'Edit Sales Delivery Order'   => 'Edit Sales Delivery Order',
+  'Edit Sales Order'            => 'Edit Sales Order',
+  'Edit the purchase_order'     => 'Edit the purchase_order',
+  'Edit the request_quotation'  => 'Edit the request_quotation',
+  'Edit the sales_order'        => 'Edit the sales_order',
+  'Edit the sales_quotation'    => 'Edit the sales_quotation',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => 'Error in row #1: The quantity you entered is bigger than the stocked quantity.',
+  'Ertrag'                      => 'Ertrag',
+  'Ertrag prozentual'           => 'Ertrag prozentual',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'In-line'                     => 'In-line',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Not delivered'               => 'Not delivered',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'Open'                        => 'Open',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order'                       => 'Order',
+  'Order Date'                  => 'Order Date',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Order deleted!'              => 'Order deleted!',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number'            => 'Quotation Number',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'Quotation deleted!'          => 'Quotation deleted!',
+  'Quotations'                  => 'Quotations',
+  'RFQ'                         => 'RFQ',
+  'RFQ Number'                  => 'RFQ Number',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request for Quotations'      => 'Request for Quotations',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales Orders'                => 'Sales Orders',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesman'                    => 'Salesman',
+  'Salesperson'                 => 'Salesperson',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Ship via'                    => 'Ship via',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Stock'                       => 'Stock',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Tax'                         => 'Tax',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => 'The delivery order has not been marked as delivered. The warehouse contents have not changed.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The parts for this delivery order have already been transferred in.' => 'The parts for this delivery order have already been transferred in.',
+  'The parts for this delivery order have already been transferred out.' => 'The parts for this delivery order have already been transferred out.',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => 'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transaction description'     => 'Transaction description',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'USt-IdNr.'                   => 'USt-IdNr.',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'Vendor type'                 => 'Vendor type',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Workflow purchase_order'     => 'Workflow purchase_order',
+  'Workflow request_quotation'  => 'Workflow request_quotation',
+  'Workflow sales_order'        => 'Workflow sales_order',
+  'Workflow sales_quotation'    => 'Workflow sales_quotation',
+  'Yes'                         => 'Yes',
+  'You cannot create an invoice for delivery orders for different customers.' => 'You cannot create an invoice for delivery orders for different customers.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'You cannot create an invoice for delivery orders from different vendors.',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You have not selected any delivery order.' => 'You have not selected any delivery order.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'chargenumber #1'             => 'chargenumber #1',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'no chargenumber'             => 'no chargenumber',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'oe.pl::search called with unknown type' => 'oe.pl::search called with unknown type',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_delivery_order_list' => 'purchase_delivery_order_list',
+  'purchase_order'              => 'purchase_order',
+  'purchase_order_list'         => 'purchase_order_list',
+  'quotation_list'              => 'quotation_list',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'rfq_list'                    => 'rfq_list',
+  'sales_delivery_order_list'   => 'sales_delivery_order_list',
+  'sales_order'                 => 'sales_order',
+  'sales_order_list'            => 'sales_order_list',
+  'sales_quotation'             => 'sales_quotation',
+  'saved!'                      => 'saved!',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'backorder_exchangerate'      => 'backorder_exchangerate',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'calculate_stock_in_out'      => 'calculate_stock_in_out',
+  'call_sub'                    => 'call_sub',
+  'check_delivered_flag'        => 'check_delivered_flag',
+  'check_do_access'             => 'check_do_access',
+  'check_for_direct_delivery'   => 'check_for_direct_delivery',
+  'check_for_direct_delivery_no' => 'check_for_direct_delivery_no',
+  'check_for_direct_delivery_yes' => 'check_for_direct_delivery_yes',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_oe_access'             => 'check_oe_access',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_backorder'            => 'create_backorder',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_delivery_order'       => 'delete_delivery_order',
+  'delete_order_quotation'      => 'delete_order_quotation',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'delivery_order'              => 'delivery_order',
+  'dispatcher'                  => 'dispatcher',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'display_stock_in_form'       => 'display_stock_in_form',
+  'e_mail'                      => 'e_mail',
+  'edit'                        => 'edit',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'mark_closed'                 => 'mark_closed',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'no'                          => 'no',
+  'order'                       => 'order',
+  'order_links'                 => 'order_links',
+  'orders'                      => 'orders',
+  'part_selection_internal'     => 'part_selection_internal',
+  'poso'                        => 'poso',
+  'post_as_new'                 => 'post_as_new',
+  'prepare_order'               => 'prepare_order',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'redo_stock_info'             => 'redo_stock_info',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report_for_todo_list'        => 'report_for_todo_list',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'save_exchangerate'           => 'save_exchangerate',
+  'search'                      => 'search',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_headings'                => 'set_headings',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'set_stock_in'                => 'set_stock_in',
+  'set_stock_out'               => 'set_stock_out',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'stock_in_form'               => 'stock_in_form',
+  'stock_in_out_form'           => 'stock_in_out_form',
+  'stock_out_form'              => 'stock_out_form',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'update_delivery_order'       => 'update_delivery_order',
+  'update_stock_in'             => 'update_stock_in',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delivery_order'              => 'delivery_order',
+  'e_mail'                      => 'e_mail',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'invoice'                     => 'invoice',
+  'mark_closed'                 => 'mark_closed',
+  'new_part'                    => 'new_part',
+  'no'                          => 'no',
+  'print'                       => 'print',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'request_for_quotation'       => 'request_for_quotation',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'ship_to'                     => 'ship_to',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/pe b/locale/en/pe
new file mode 100644 (file)
index 0000000..b03a1b5
--- /dev/null
@@ -0,0 +1,221 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Add'                         => 'Add',
+  'Add Group'                   => 'Add Group',
+  'Add Pricegroup'              => 'Add Pricegroup',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delete'                      => 'Delete',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit Group'                  => 'Edit Group',
+  'Edit Pricegroup'             => 'Edit Pricegroup',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'Group deleted!'              => 'Group deleted!',
+  'Group missing!'              => 'Group missing!',
+  'Group saved!'                => 'Group saved!',
+  'Groups'                      => 'Groups',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Orphaned'                    => 'Orphaned',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preisgruppe'                 => 'Preisgruppe',
+  'Preview'                     => 'Preview',
+  'Pricegroup'                  => 'Pricegroup',
+  'Pricegroup deleted!'         => 'Pricegroup deleted!',
+  'Pricegroup missing!'         => 'Pricegroup missing!',
+  'Pricegroup saved!'           => 'Pricegroup saved!',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Save'                        => 'Save',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'history'                     => 'history',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete'                      => 'delete',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'edit'                        => 'edit',
+  'form_partsgroup_footer'      => 'form_partsgroup_footer',
+  'form_partsgroup_header'      => 'form_partsgroup_header',
+  'form_pricegroup_footer'      => 'form_pricegroup_footer',
+  'form_pricegroup_header'      => 'form_pricegroup_header',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'partsgroup_report'           => 'partsgroup_report',
+  'pricegroup_report'           => 'pricegroup_report',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'search'                      => 'search',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'add'                         => 'add',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+};
+
+1;
diff --git a/locale/en/projects b/locale/en/projects
new file mode 100644 (file)
index 0000000..146fb6c
--- /dev/null
@@ -0,0 +1,231 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Active'                      => 'Active',
+  'Add Project'                 => 'Add Project',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All'                         => 'All',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Edit Project'                => 'Edit Project',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Inactive'                    => 'Inactive',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Number'                      => 'Number',
+  'Orphaned'                    => 'Orphaned',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project Number'              => 'Project Number',
+  'Project Number missing!'     => 'Project Number missing!',
+  'Project deleted!'            => 'Project deleted!',
+  'Project saved!'              => 'Project saved!',
+  'Projects'                    => 'Projects',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The project has been added.' => 'The project has been added.',
+  'The project has been saved.' => 'The project has been saved.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'project_list'                => 'project_list',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delete'                      => 'delete',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_project_form'        => 'display_project_form',
+  'edit'                        => 'edit',
+  'format_dates'                => 'format_dates',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'project_report'              => 'project_report',
+  'reformat_numbers'            => 'reformat_numbers',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+  'search'                      => 'search',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'save_as_new'                 => 'save_as_new',
+};
+
+1;
diff --git a/locale/en/rc b/locale/en/rc
new file mode 100644 (file)
index 0000000..a7d15d9
--- /dev/null
@@ -0,0 +1,216 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Account'                     => 'Account',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Balance'                     => 'Balance',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Cleared Balance'             => 'Cleared Balance',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Decrease'                    => 'Decrease',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Deposit'                     => 'Deposit',
+  'Description'                 => 'Description',
+  'Difference'                  => 'Difference',
+  'Directory'                   => 'Directory',
+  'Done'                        => 'Done',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Exchangerate Difference'     => 'Exchangerate Difference',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'File'                        => 'File',
+  'From'                        => 'From',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Increase'                    => 'Increase',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Others'                      => 'Others',
+  'Out of balance!'             => 'Out of balance!',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payment'                     => 'Payment',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reconciliation'              => 'Reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select all'                  => 'Select all',
+  'Source'                      => 'Source',
+  'Statement Balance'           => 'Statement Balance',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Until'                       => 'Until',
+  'Update'                      => 'Update',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'display_form'                => 'display_form',
+  'done'                        => 'done',
+  'format_dates'                => 'format_dates',
+  'get_payments'                => 'get_payments',
+  'gl_transaction'              => 'gl_transaction',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reconciliation'              => 'reconciliation',
+  'reformat_numbers'            => 'reformat_numbers',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_all'                  => 'select_all',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'done'                        => 'done',
+  'new_part'                    => 'new_part',
+  'select_all'                  => 'select_all',
+  'update'                      => 'update',
+};
+
+1;
diff --git a/locale/en/reportgenerator b/locale/en/reportgenerator
new file mode 100644 (file)
index 0000000..cfff57a
--- /dev/null
@@ -0,0 +1,142 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Confirmation'                => 'Confirmation',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Pick List'                   => 'Pick List',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'invoice'                     => 'invoice',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+};
+
+$self->{subs} = {
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'back'                        => 'back',
+  'continue'                    => 'continue',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+};
+
+1;
diff --git a/locale/en/rp b/locale/en/rp
new file mode 100644 (file)
index 0000000..e46c1fe
--- /dev/null
@@ -0,0 +1,364 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Aging'                    => 'Creditor Aging',
+  'AR'                          => 'Sales',
+  'AR Aging'                    => 'Debtor Aging',
+  'Account'                     => 'Account',
+  'Account Number'              => 'Account Number',
+  'Accrual'                     => 'Accrual',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All Accounts'                => 'All Accounts',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Ap aging on %s'              => 'Ap aging on %s',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Ar aging on %s'              => 'Ar aging on %s',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Balance'                     => 'Balance',
+  'Balance Sheet'               => 'Balance Sheet',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Company'                     => 'Company',
+  'Compare to'                  => 'Compare to',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Copies'                      => 'Copies',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create Date'                 => 'Create Date',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit'                      => 'Credit',
+  'Credit Note'                 => 'Credit Note',
+  'Credit Starting Balance'     => 'Credit Starting Balance',
+  'Current Earnings'            => 'Current Earnings',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'Customized Report'           => 'Customized Report',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Debit'                       => 'Debit',
+  'Debit Starting Balance'      => 'Debit Starting Balance',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Decimalplaces'               => 'Decimalplaces',
+  'Delivery Order'              => 'Delivery Order',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Due'                         => 'Due',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail Statement to'         => 'E-mail Statement to',
+  'ELSE'                        => 'ELSE',
+  'EUR'                         => 'EUR',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Free report period'          => 'Free report period',
+  'From'                        => 'From',
+  'General ledger and cash'     => 'General ledger and cash',
+  'HTML'                        => 'HTML',
+  'Heading'                     => 'Heading',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'In-line'                     => 'In-line',
+  'Include Exchangerate Difference' => 'Include Exchangerate Difference',
+  'Include in Report'           => 'Include in Report',
+  'Income Statement'            => 'Income Statement',
+  'Invoice'                     => 'Invoice',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'Last Transaction'            => 'Last Transaction',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Memo'                        => 'Memo',
+  'Message'                     => 'Message',
+  'Method'                      => 'Method',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'Monthly'                     => 'Monthly',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Non-taxable Purchases'       => 'Non-taxable Purchases',
+  'Non-taxable Sales'           => 'Non-taxable Sales',
+  'Nothing selected!'           => 'Nothing selected!',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Open'                        => 'Open',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Payments'                    => 'Payments',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project Transactions'        => 'Project Transactions',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Quarter'                     => 'Quarter',
+  'Quarterly'                   => 'Quarterly',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Receipts'                    => 'Receipts',
+  'Reference'                   => 'Reference',
+  'Report for'                  => 'Report for',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Saldo Credit'                => 'Saldo Credit',
+  'Saldo Debit'                 => 'Saldo Debit',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Source'                      => 'Source',
+  'Statement'                   => 'Statement',
+  'Statement sent to'           => 'Statement sent to',
+  'Statements sent to printer!' => 'Statements sent to printer!',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'Sum Credit'                  => 'Sum Credit',
+  'Sum Debit'                   => 'Sum Debit',
+  'Tax'                         => 'Tax',
+  'Tax collected'               => 'Tax collected',
+  'Tax paid'                    => 'Tax paid',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trial Balance'               => 'Trial Balance',
+  'Trial balance between %s and %s' => 'Trial balance between %s and %s',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor details'              => 'Vendor details',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'YYYY'                        => 'YYYY',
+  'Year'                        => 'Year',
+  'Yearly'                      => 'Yearly',
+  'Yes'                         => 'Yes',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'ap_aging_list'               => 'ap_aging_list',
+  'ar_aging_list'               => 'ar_aging_list',
+  'as at'                       => 'as at',
+  'bin_list'                    => 'bin_list',
+  'bis'                         => 'bis',
+  'button'                      => 'button',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'for Period'                  => 'for Period',
+  'invoice'                     => 'invoice',
+  'list_of_payments'            => 'list_of_payments',
+  'list_of_receipts'            => 'list_of_receipts',
+  'list_of_transactions'        => 'list_of_transactions',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'trial_balance'               => 'trial_balance',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'aging'                       => 'aging',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'check_name'                  => 'check_name',
+  'check_project'               => 'check_project',
+  'check_rp_access'             => 'check_rp_access',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_aging_subtotal_row'   => 'create_aging_subtotal_row',
+  'create_list_accounts_subtotal_row' => 'create_list_accounts_subtotal_row',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'e_mail'                      => 'e_mail',
+  'format_dates'                => 'format_dates',
+  'generate_ap_aging'           => 'generate_ap_aging',
+  'generate_ar_aging'           => 'generate_ar_aging',
+  'generate_balance_sheet'      => 'generate_balance_sheet',
+  'generate_bwa'                => 'generate_bwa',
+  'generate_income_statement'   => 'generate_income_statement',
+  'generate_projects'           => 'generate_projects',
+  'generate_tax_report'         => 'generate_tax_report',
+  'generate_trial_balance'      => 'generate_trial_balance',
+  'get_project'                 => 'get_project',
+  'gl_transaction'              => 'gl_transaction',
+  'list_accounts'               => 'list_accounts',
+  'list_payments'               => 'list_payments',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'name_selected'               => 'name_selected',
+  'part_selection_internal'     => 'part_selection_internal',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'reformat_numbers'            => 'reformat_numbers',
+  'report'                      => 'report',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_all'                  => 'select_all',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_vc_details'             => 'show_vc_details',
+  'statement_details'           => 'statement_details',
+  'tax_subtotal'                => 'tax_subtotal',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'e_mail'                      => 'e_mail',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'print'                       => 'print',
+  'select_all'                  => 'select_all',
+};
+
+1;
diff --git a/locale/en/todo b/locale/en/todo
new file mode 100644 (file)
index 0000000..e78ff7d
--- /dev/null
@@ -0,0 +1,560 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  ' Date missing!'              => ' Date missing!',
+  ' missing!'                   => ' missing!',
+  '*/'                          => '*/',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Add Exchangerate'            => 'Add Exchangerate',
+  'Add Follow-Up'               => 'Add Follow-Up',
+  'Add Follow-Up for #1'        => 'Add Follow-Up for #1',
+  'Add Purchase Delivery Order' => 'Add Purchase Delivery Order',
+  'Add Purchase Order'          => 'Add Purchase Order',
+  'Add Quotation'               => 'Add Quotation',
+  'Add Request for Quotation'   => 'Add Request for Quotation',
+  'Add Sales Delivery Order'    => 'Add Sales Delivery Order',
+  'Add Sales Invoice'           => 'Add Sales Invoice',
+  'Add Sales Order'             => 'Add Sales Order',
+  'Add Vendor Invoice'          => 'Add Vendor Invoice',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amount'                      => 'Amount',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Are you sure you want to delete Order Number' => 'Are you sure you want to delete Order Number',
+  'Are you sure you want to delete Quotation Number' => 'Are you sure you want to delete Quotation Number',
+  'Attachment'                  => 'Attachment',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Bcc'                         => 'Bcc',
+  'Billing Address'             => 'Billing Address',
+  'Bin'                         => 'Bin',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'Bis'                         => 'Bis',
+  'Body'                        => 'Body',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Cannot delete delivery order!' => 'Cannot delete delivery order!',
+  'Cannot delete order!'        => 'Cannot delete order!',
+  'Cannot delete quotation!'    => 'Cannot delete quotation!',
+  'Cannot save order!'          => 'Cannot save order!',
+  'Cannot save quotation!'      => 'Cannot save quotation!',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'City'                        => 'City',
+  'Closed'                      => 'Closed',
+  'Collective Orders only work for orders from one customer!' => 'Collective Orders only work for orders from one customer!',
+  'Company Name'                => 'Company Name',
+  'Confirm!'                    => 'Confirm!',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Continue'                    => 'Continue',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Country'                     => 'Country',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Created by'                  => 'Created by',
+  'Created for'                 => 'Created for',
+  'Created on'                  => 'Created on',
+  'Credit Limit exceeded!!!'    => 'Credit Limit exceeded!!!',
+  'Credit Note'                 => 'Credit Note',
+  'Curr'                        => 'Curr',
+  'Currency'                    => 'Currency',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'Customer missing!'           => 'Customer missing!',
+  'Customer not on file or locked!' => 'Customer not on file or locked!',
+  'Customer not on file!'       => 'Customer not on file!',
+  'Customer type'               => 'Customer type',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delete delivery order'       => 'Delete delivery order',
+  'Delivered'                   => 'Delivered',
+  'Delivery Date'               => 'Delivery Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Delivery Order Date missing!' => 'Delivery Order Date missing!',
+  'Delivery Order Number'       => 'Delivery Order Number',
+  'Delivery Order deleted!'     => 'Delivery Order deleted!',
+  'Delivery Orders'             => 'Delivery Orders',
+  'Department'                  => 'Department',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Discount'                    => 'Discount',
+  'Done'                        => 'Done',
+  'Dunning'                     => 'Dunning',
+  'E-mail'                      => 'E-mail',
+  'E-mail address missing!'     => 'E-mail address missing!',
+  'EK'                          => 'EK',
+  'ELSE'                        => 'ELSE',
+  'Edit Access Rights for Follow-Ups' => 'Edit Access Rights for Follow-Ups',
+  'Edit Follow-Up'              => 'Edit Follow-Up',
+  'Edit Follow-Up for #1'       => 'Edit Follow-Up for #1',
+  'Edit Purchase Delivery Order' => 'Edit Purchase Delivery Order',
+  'Edit Purchase Order'         => 'Edit Purchase Order',
+  'Edit Quotation'              => 'Edit Quotation',
+  'Edit Request for Quotation'  => 'Edit Request for Quotation',
+  'Edit Sales Delivery Order'   => 'Edit Sales Delivery Order',
+  'Edit Sales Order'            => 'Edit Sales Order',
+  'Edit the purchase_order'     => 'Edit the purchase_order',
+  'Edit the request_quotation'  => 'Edit the request_quotation',
+  'Edit the sales_order'        => 'Edit the sales_order',
+  'Edit the sales_quotation'    => 'Edit the sales_quotation',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no stock at all or the full quantity of #2 #3.',
+  'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.' => 'Error in position #1: You must either assign no transfer at all or the full quantity of #2 #3.',
+  'Error in row #1: The quantity you entered is bigger than the stocked quantity.' => 'Error in row #1: The quantity you entered is bigger than the stocked quantity.',
+  'Ertrag'                      => 'Ertrag',
+  'Ertrag prozentual'           => 'Ertrag prozentual',
+  'Exchangerate'                => 'Exchangerate',
+  'Exchangerate missing!'       => 'Exchangerate missing!',
+  'Extended'                    => 'Extended',
+  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
+  'Fax'                         => 'Fax',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'Follow-Up Date'              => 'Follow-Up Date',
+  'Follow-Up saved.'            => 'Follow-Up saved.',
+  'Follow-Ups'                  => 'Follow-Ups',
+  'Follow-up for'               => 'Follow-up for',
+  'From'                        => 'From',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'Group'                       => 'Group',
+  'History'                     => 'History',
+  'ID'                          => 'ID',
+  'In-line'                     => 'In-line',
+  'Invalid follow-up ID.'       => 'Invalid follow-up ID.',
+  'Invoice'                     => 'Invoice',
+  'Invoice Date missing!'       => 'Invoice Date missing!',
+  'Invoice Number missing!'     => 'Invoice Number missing!',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'L'                           => 'L',
+  'LP'                          => 'LP',
+  'License'                     => 'License',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No action defined.'          => 'No action defined.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No.'                         => 'No.',
+  'Not delivered'               => 'Not delivered',
+  'Not done yet'                => 'Not done yet',
+  'Notes'                       => 'Notes',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Number'                      => 'Number',
+  'Number missing in Row'       => 'Number missing in Row',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'On Hand'                     => 'On Hand',
+  'Only due follow-ups'         => 'Only due follow-ups',
+  'Open'                        => 'Open',
+  'OpenDocument/OASIS'          => 'OpenDocument/OASIS',
+  'Order'                       => 'Order',
+  'Order Date'                  => 'Order Date',
+  'Order Date missing!'         => 'Order Date missing!',
+  'Order Number'                => 'Order Number',
+  'Order Number missing!'       => 'Order Number missing!',
+  'Order deleted!'              => 'Order deleted!',
+  'Other users\' follow-ups'    => 'Other users\' follow-ups',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF'                         => 'PDF',
+  'PDF (OpenDocument/OASIS)'    => 'PDF (OpenDocument/OASIS)',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Packing List Date missing!'  => 'Packing List Date missing!',
+  'Packing List Number missing!' => 'Packing List Number missing!',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Description'            => 'Part Description',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Phone'                       => 'Phone',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Postscript'                  => 'Postscript',
+  'Preview'                     => 'Preview',
+  'Price'                       => 'Price',
+  'Price Factor'                => 'Price Factor',
+  'Pricegroup'                  => 'Pricegroup',
+  'Printer'                     => 'Printer',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project'                     => 'Project',
+  'Project Number'              => 'Project Number',
+  'Project not on file!'        => 'Project not on file!',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase Orders'             => 'Purchase Orders',
+  'Qty'                         => 'Qty',
+  'Queue'                       => 'Queue',
+  'Quotation'                   => 'Quotation',
+  'Quotation Date missing!'     => 'Quotation Date missing!',
+  'Quotation Number'            => 'Quotation Number',
+  'Quotation Number missing!'   => 'Quotation Number missing!',
+  'Quotation deleted!'          => 'Quotation deleted!',
+  'Quotations'                  => 'Quotations',
+  'RFQ'                         => 'RFQ',
+  'RFQ Number'                  => 'RFQ Number',
+  'ROP'                         => 'ROP',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reference'                   => 'Reference',
+  'Release From Stock'          => 'Release From Stock',
+  'Reports'                     => 'Reports',
+  'Reqdate'                     => 'Reqdate',
+  'Request for Quotation'       => 'Request for Quotation',
+  'Request for Quotations'      => 'Request for Quotations',
+  'Request quotation'           => 'Request quotation',
+  'Required by'                 => 'Required by',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales Orders'                => 'Sales Orders',
+  'Sales quotation'             => 'Sales quotation',
+  'Salesman'                    => 'Salesman',
+  'Salesperson'                 => 'Salesperson',
+  'Screen'                      => 'Screen',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Select from one of the items below' => 'Select from one of the items below',
+  'Select from one of the names below' => 'Select from one of the names below',
+  'Select from one of the projects below' => 'Select from one of the projects below',
+  'Select postscript or PDF!'   => 'Select postscript or PDF!',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Serial No.'                  => 'Serial No.',
+  'Ship'                        => 'Ship',
+  'Ship rcvd'                   => 'Ship rcvd',
+  'Ship to'                     => 'Ship to',
+  'Ship via'                    => 'Ship via',
+  'Shipping Address'            => 'Shipping Address',
+  'Show details'                => 'Show details',
+  'Stock'                       => 'Stock',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Street'                      => 'Street',
+  'Subject'                     => 'Subject',
+  'Subtotal'                    => 'Subtotal',
+  'TODO list'                   => 'TODO list',
+  'Tax'                         => 'Tax',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The access rights have been saved.' => 'The access rights have been saved.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => 'The delivery order has not been marked as delivered. The warehouse contents have not changed.',
+  'The follow-up date is missing.' => 'The follow-up date is missing.',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The parts for this delivery order have already been transferred in.' => 'The parts for this delivery order have already been transferred in.',
+  'The parts for this delivery order have already been transferred out.' => 'The parts for this delivery order have already been transferred out.',
+  'The subject is missing.'     => 'The subject is missing.',
+  'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => 'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.',
+  'To (email)'                  => 'To (email)',
+  'Total'                       => 'Total',
+  'Transaction description'     => 'Transaction description',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer To Stock'           => 'Transfer To Stock',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'USt-IdNr.'                   => 'USt-IdNr.',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor Number'               => 'Vendor Number',
+  'Vendor details'              => 'Vendor details',
+  'Vendor missing!'             => 'Vendor missing!',
+  'Vendor not on file or locked!' => 'Vendor not on file or locked!',
+  'Vendor not on file!'         => 'Vendor not on file!',
+  'Vendor type'                 => 'Vendor type',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Workflow purchase_order'     => 'Workflow purchase_order',
+  'Workflow request_quotation'  => 'Workflow request_quotation',
+  'Workflow sales_order'        => 'Workflow sales_order',
+  'Workflow sales_quotation'    => 'Workflow sales_quotation',
+  'Yes'                         => 'Yes',
+  'You cannot create an invoice for delivery orders for different customers.' => 'You cannot create an invoice for delivery orders for different customers.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'You cannot create an invoice for delivery orders from different vendors.',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'You have not selected any delivery order.' => 'You have not selected any delivery order.',
+  'You must chose a user.'      => 'You must chose a user.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  'Zipcode'                     => 'Zipcode',
+  '[email]'                     => '[email]',
+  'bin_list'                    => 'bin_list',
+  'chargenumber #1'             => 'chargenumber #1',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'emailed to'                  => 'emailed to',
+  'follow_up_list'              => 'follow_up_list',
+  'invoice'                     => 'invoice',
+  'no'                          => 'no',
+  'no chargenumber'             => 'no chargenumber',
+  'none (pricegroup)'           => 'none (pricegroup)',
+  'oe.pl::search called with unknown type' => 'oe.pl::search called with unknown type',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_delivery_order_list' => 'purchase_delivery_order_list',
+  'purchase_order'              => 'purchase_order',
+  'purchase_order_list'         => 'purchase_order_list',
+  'quotation_list'              => 'quotation_list',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'rfq_list'                    => 'rfq_list',
+  'sales_delivery_order_list'   => 'sales_delivery_order_list',
+  'sales_order'                 => 'sales_order',
+  'sales_order_list'            => 'sales_order_list',
+  'sales_quotation'             => 'sales_quotation',
+  'saved!'                      => 'saved!',
+  'sent'                        => 'sent',
+  'sent to printer'             => 'sent to printer',
+  'vendor'                      => 'vendor',
+  'wrongformat'                 => 'wrongformat',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  '_check_io_auth'              => '_check_io_auth',
+  '_collect_links'              => '_collect_links',
+  '_render_custom_variables_inputs' => '_render_custom_variables_inputs',
+  '_update_custom_variables'    => '_update_custom_variables',
+  '_update_part_information'    => '_update_part_information',
+  '_update_ship'                => '_update_ship',
+  'add'                         => 'add',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'backorder_exchangerate'      => 'backorder_exchangerate',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'calculate_stock_in_out'      => 'calculate_stock_in_out',
+  'call_sub'                    => 'call_sub',
+  'check_delivered_flag'        => 'check_delivered_flag',
+  'check_do_access'             => 'check_do_access',
+  'check_for_direct_delivery'   => 'check_for_direct_delivery',
+  'check_for_direct_delivery_no' => 'check_for_direct_delivery_no',
+  'check_for_direct_delivery_yes' => 'check_for_direct_delivery_yes',
+  'check_form'                  => 'check_form',
+  'check_name'                  => 'check_name',
+  'check_oe_access'             => 'check_oe_access',
+  'check_project'               => 'check_project',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_backorder'            => 'create_backorder',
+  'create_subtotal_row'         => 'create_subtotal_row',
+  'create_todo_list'            => 'create_todo_list',
+  'customer_details'            => 'customer_details',
+  'delete'                      => 'delete',
+  'delete_delivery_order'       => 'delete_delivery_order',
+  'delete_order_quotation'      => 'delete_order_quotation',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'delivery_order'              => 'delivery_order',
+  'dispatcher'                  => 'dispatcher',
+  'display_form'                => 'display_form',
+  'display_row'                 => 'display_row',
+  'display_stock_in_form'       => 'display_stock_in_form',
+  'e_mail'                      => 'e_mail',
+  'edit'                        => 'edit',
+  'edit_access_rights'          => 'edit_access_rights',
+  'edit_e_mail'                 => 'edit_e_mail',
+  'finish'                      => 'finish',
+  'form_footer'                 => 'form_footer',
+  'form_header'                 => 'form_header',
+  'format_dates'                => 'format_dates',
+  'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
+  'gl_transaction'              => 'gl_transaction',
+  'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
+  'invoicetotal'                => 'invoicetotal',
+  'item_selected'               => 'item_selected',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'mark_closed'                 => 'mark_closed',
+  'name_selected'               => 'name_selected',
+  'new_item'                    => 'new_item',
+  'new_license'                 => 'new_license',
+  'no'                          => 'no',
+  'order'                       => 'order',
+  'order_links'                 => 'order_links',
+  'orders'                      => 'orders',
+  'part_selection_internal'     => 'part_selection_internal',
+  'poso'                        => 'poso',
+  'post_as_new'                 => 'post_as_new',
+  'prepare_order'               => 'prepare_order',
+  'print'                       => 'print',
+  'print_form'                  => 'print_form',
+  'print_options'               => 'print_options',
+  'project_selected'            => 'project_selected',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'redo_stock_info'             => 'redo_stock_info',
+  'reformat_numbers'            => 'reformat_numbers',
+  'relink_accounts'             => 'relink_accounts',
+  'report'                      => 'report',
+  'report_for_todo_list'        => 'report_for_todo_list',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'request_for_quotation'       => 'request_for_quotation',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_access_rights'          => 'save_access_rights',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'save_exchangerate'           => 'save_exchangerate',
+  'save_follow_up'              => 'save_follow_up',
+  'search'                      => 'search',
+  'select_item'                 => 'select_item',
+  'select_name'                 => 'select_name',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'select_project'              => 'select_project',
+  'send_email'                  => 'send_email',
+  'set_duedate'                 => 'set_duedate',
+  'set_headings'                => 'set_headings',
+  'set_longdescription'         => 'set_longdescription',
+  'set_pricegroup'              => 'set_pricegroup',
+  'set_stock_in'                => 'set_stock_in',
+  'set_stock_out'               => 'set_stock_out',
+  'ship_to'                     => 'ship_to',
+  'show_history'                => 'show_history',
+  'show_todo_list'              => 'show_todo_list',
+  'show_vc_details'             => 'show_vc_details',
+  'stock_in_form'               => 'stock_in_form',
+  'stock_in_out_form'           => 'stock_in_out_form',
+  'stock_out_form'              => 'stock_out_form',
+  'todo_list_follow_ups'        => 'todo_list_follow_ups',
+  'todo_list_overdue_sales_quotations' => 'todo_list_overdue_sales_quotations',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'update_delivery_order'       => 'update_delivery_order',
+  'update_stock_in'             => 'update_stock_in',
+  'validate_items'              => 'validate_items',
+  'vendor_details'              => 'vendor_details',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'yes'                         => 'yes',
+  'back'                        => 'back',
+  'cancel'                      => 'cancel',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'delete'                      => 'delete',
+  'delivery_order'              => 'delivery_order',
+  'e_mail'                      => 'e_mail',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'finish'                      => 'finish',
+  'invoice'                     => 'invoice',
+  'mark_closed'                 => 'mark_closed',
+  'new_part'                    => 'new_part',
+  'no'                          => 'no',
+  'print'                       => 'print',
+  'purchase_order'              => 'purchase_order',
+  'quotation'                   => 'quotation',
+  'request_for_quotation'       => 'request_for_quotation',
+  'sales_order'                 => 'sales_order',
+  'save'                        => 'save',
+  'save_and_close'              => 'save_and_close',
+  'save_as_new'                 => 'save_as_new',
+  'ship_to'                     => 'ship_to',
+  'transfer_in'                 => 'transfer_in',
+  'transfer_out'                => 'transfer_out',
+  'update'                      => 'update',
+  'yes'                         => 'yes',
+};
+
+1;
diff --git a/locale/en/ustva b/locale/en/ustva
new file mode 100644 (file)
index 0000000..7999bd0
--- /dev/null
@@ -0,0 +1,263 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  '1. Quarter'                  => '1. Quarter',
+  '2. Quarter'                  => '2. Quarter',
+  '3. Quarter'                  => '3. Quarter',
+  '4. Quarter'                  => '4. Quarter',
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AR'                          => 'Sales',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Amended Advance Turnover Tax Return' => 'Amended Advance Turnover Tax Return',
+  'Amended Advance Turnover Tax Return (Nr. 10)' => 'Amended Advance Turnover Tax Return (Nr. 10)',
+  'Application Error. No Format given' => 'Application Error. No Format given',
+  'Application Error. Wrong Format' => 'Application Error. Wrong Format',
+  'Apr'                         => 'Apr',
+  'April'                       => 'April',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Aug'                         => 'Aug',
+  'August'                      => 'August',
+  'Back'                        => 'Back',
+  'Bcc'                         => 'Bcc',
+  'Bin List'                    => 'Bin List',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Check Details'               => 'Check Details',
+  'Choose Outputformat'         => 'Choose Outputformat',
+  'Choose a Tax Number'         => 'Choose a Tax Number',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Dec'                         => 'Dec',
+  'December'                    => 'December',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Directory'                   => 'Directory',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'ELSTER Export (Taxbird)'     => 'ELSTER Export (Taxbird)',
+  'ELSTER Export (Winston)'     => 'ELSTER Export (Winston)',
+  'ELSTER Export nach Winston'  => 'ELSTER Export nach Winston',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'Feb'                         => 'Feb',
+  'February'                    => 'February',
+  'File'                        => 'File',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invoice'                     => 'Invoice',
+  'Jan'                         => 'Jan',
+  'January'                     => 'January',
+  'Jul'                         => 'Jul',
+  'July'                        => 'July',
+  'Jun'                         => 'Jun',
+  'June'                        => 'June',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mar'                         => 'Mar',
+  'March'                       => 'March',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May'                         => 'May',
+  'May '                        => 'May ',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing Method!'             => 'Missing Method!',
+  'Missing Tax Authoritys Preferences' => 'Missing Tax Authoritys Preferences',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Company Address given'    => 'No Company Address given',
+  'No Company Name given'       => 'No Company Name given',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'Nov'                         => 'Nov',
+  'November'                    => 'November',
+  'Oct'                         => 'Oct',
+  'October'                     => 'October',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Reports'                     => 'Reports',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a period'             => 'Select a period',
+  'Select a vendor'             => 'Select a vendor',
+  'Select federal state...'     => 'Select federal state...',
+  'Select tax office...'        => 'Select tax office...',
+  'Sep'                         => 'Sep',
+  'September'                   => 'September',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'Tax Office Preferences'      => 'Tax Office Preferences',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'To (email)'                  => 'To (email)',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'USTVA-Hint: Method'          => 'USTVA-Hint: Method',
+  'USTVA-Hint: Tax Authoritys'  => 'USTVA-Hint: Tax Authoritys',
+  'UStVA'                       => 'UStVA',
+  'UStVA (PDF-Dokument)'        => 'UStVA (PDF-Dokument)',
+  'Unit'                        => 'Unit',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'Warehouse management'        => 'Warehouse management',
+  'Wrong Period'                => 'Wrong Period',
+  'Year'                        => 'Year',
+  'Yearly'                      => 'Yearly',
+  'Yearly taxreport not yet implemented' => 'Yearly taxreport not yet implemented',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'accrual'                     => 'accrual',
+  'bin_list'                    => 'bin_list',
+  'cash'                        => 'cash',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'customer'                    => 'customer',
+  'for Period'                  => 'for Period',
+  'invoice'                     => 'invoice',
+  'month'                       => 'month',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'quarter'                     => 'quarter',
+  'request_quotation'           => 'request_quotation',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'saved'                       => 'saved',
+  'to (date)'                   => 'to (date)',
+  'vendor'                      => 'vendor',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'back'                        => 'back',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'config_step1'                => 'config_step1',
+  'config_step2'                => 'config_step2',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_steuernummer'         => 'create_steuernummer',
+  'debug'                       => 'debug',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'format_dates'                => 'format_dates',
+  'generate_ustva'              => 'generate_ustva',
+  'gl_transaction'              => 'gl_transaction',
+  'help'                        => 'help',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'report'                      => 'report',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'save'                        => 'save',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show'                        => 'show',
+  'show_history'                => 'show_history',
+  'show_options'                => 'show_options',
+  'show_vc_details'             => 'show_vc_details',
+  'ustva_vorauswahl'            => 'ustva_vorauswahl',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'new_part'                    => 'new_part',
+  'save'                        => 'save',
+  'show'                        => 'show',
+  'back'                        => 'back',
+};
+
+1;
diff --git a/locale/en/warehouse b/locale/en/warehouse
new file mode 100644 (file)
index 0000000..5078616
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'Database update error:'      => 'Database update error:',
+};
+
+$self->{subs} = {
+  'do_query'                    => 'do_query',
+  'do_update'                   => 'do_update',
+  'mydberror'                   => 'mydberror',
+  'print_question'              => 'print_question',
+  'continue'                    => 'continue',
+};
+
+1;
diff --git a/locale/en/wh b/locale/en/wh
new file mode 100644 (file)
index 0000000..5eb5e65
--- /dev/null
@@ -0,0 +1,299 @@
+#!/usr/bin/perl
+
+$self->{texts} = {
+  'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.',
+  'ADDED'                       => 'ADDED',
+  'AP'                          => 'Purchases',
+  'AP Transaction'              => 'Purchase Transaction',
+  'AR'                          => 'Sales',
+  'AR Transaction'              => 'Sales Transaction',
+  'Address'                     => 'Address',
+  'Advance turnover tax return' => 'Advance turnover tax return',
+  'All reports'                 => 'All reports',
+  'Attempt to call an undefined sub named \'%s\'' => 'Attempt to call an undefined sub named \'%s\'',
+  'Bcc'                         => 'Bcc',
+  'Bin'                         => 'Bin',
+  'Bin From'                    => 'Bin From',
+  'Bin List'                    => 'Bin List',
+  'Bin To'                      => 'Bin To',
+  'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.',
+  'CANCELED'                    => 'CANCELED',
+  'CR'                          => 'CR',
+  'CRM admin'                   => 'CRM admin',
+  'CRM create customers, vendors and contacts' => 'CRM create customers, vendors and contacts',
+  'CRM follow up'               => 'CRM follow up',
+  'CRM know how'                => 'CRM know how',
+  'CRM notices'                 => 'CRM notices',
+  'CRM opportunity'             => 'CRM opportunity',
+  'CRM optional software'       => 'CRM optional software',
+  'CRM other'                   => 'CRM other',
+  'CRM search'                  => 'CRM search',
+  'CRM send email'              => 'CRM send email',
+  'CRM services'                => 'CRM services',
+  'CRM status'                  => 'CRM status',
+  'CRM termin'                  => 'CRM termin',
+  'CRM user'                    => 'CRM user',
+  'CSV export -- options'       => 'CSV export -- options',
+  'Can not create that quantity with current stock' => 'Can not create that quantity with current stock',
+  'Cc'                          => 'Cc',
+  'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Change Lx-Office installation settings (all menu entries beneath \'System\')',
+  'Charge Number'               => 'Charge Number',
+  'Comment'                     => 'Comment',
+  'Confirmation'                => 'Confirmation',
+  'Contact'                     => 'Contact',
+  'Could not spawn the printer command.' => 'Could not spawn the printer command.',
+  'Create and edit RFQs'        => 'Create and edit RFQs',
+  'Create and edit customers and vendors' => 'Create and edit customers and vendors',
+  'Create and edit dunnings'    => 'Create and edit dunnings',
+  'Create and edit invoices and credit notes' => 'Create and edit invoices and credit notes',
+  'Create and edit parts, services, assemblies' => 'Create and edit parts, services, assemblies',
+  'Create and edit projects'    => 'Create and edit projects',
+  'Create and edit purchase delivery orders' => 'Create and edit purchase delivery orders',
+  'Create and edit purchase orders' => 'Create and edit purchase orders',
+  'Create and edit sales delivery orders' => 'Create and edit sales delivery orders',
+  'Create and edit sales orders' => 'Create and edit sales orders',
+  'Create and edit sales quotations' => 'Create and edit sales quotations',
+  'Create and edit vendor invoices' => 'Create and edit vendor invoices',
+  'Credit Note'                 => 'Credit Note',
+  'Customer'                    => 'Customer',
+  'Customer Number'             => 'Customer Number',
+  'Customer details'            => 'Customer details',
+  'DATEV Export'                => 'DATEV Export',
+  'DELETED'                     => 'DELETED',
+  'DR'                          => 'DR',
+  'DUNNING STARTED'             => 'DUNNING STARTED',
+  'Dataset upgrade'             => 'Dataset upgrade',
+  'Date'                        => 'Date',
+  'Delivery Order'              => 'Delivery Order',
+  'Dependency loop detected:'   => 'Dependency loop detected:',
+  'Description'                 => 'Description',
+  'Directory'                   => 'Directory',
+  'Document'                    => 'Document',
+  'Dunning'                     => 'Dunning',
+  'ELSE'                        => 'ELSE',
+  'Employee'                    => 'Employee',
+  'Enter longdescription'       => 'Enter longdescription',
+  'Error in database control file \'%s\': %s' => 'Error in database control file \'%s\': %s',
+  'File'                        => 'File',
+  'GL Transaction'              => 'GL Transaction',
+  'General ledger and cash'     => 'General ledger and cash',
+  'History'                     => 'History',
+  'Invalid quantity.'           => 'Invalid quantity.',
+  'Invoice'                     => 'Invoice',
+  'MAILED'                      => 'MAILED',
+  'Manage license keys'         => 'Manage license keys',
+  'Mark as paid?'               => 'Mark as paid?',
+  'Marked as paid'              => 'Marked as paid',
+  'Master Data'                 => 'Master Data',
+  'May set the BCC field when sending emails' => 'May set the BCC field when sending emails',
+  'Message'                     => 'Message',
+  'Missing \'description\' field.' => 'Missing \'description\' field.',
+  'Missing \'tag\' field.'      => 'Missing \'tag\' field.',
+  'Missing parameter #1 in call to sub #2.' => 'Missing parameter #1 in call to sub #2.',
+  'Missing parameter (at least one of #1) in call to sub #2.' => 'Missing parameter (at least one of #1) in call to sub #2.',
+  'More than one control file with the tag \'%s\' exist.' => 'More than one control file with the tag \'%s\' exist.',
+  'Name'                        => 'Name',
+  'No'                          => 'No',
+  'No %s was found matching the search parameters.' => 'No %s was found matching the search parameters.',
+  'No Customer was found matching the search parameters.' => 'No Customer was found matching the search parameters.',
+  'No Vendor was found matching the search parameters.' => 'No Vendor was found matching the search parameters.',
+  'No customer has been selected yet.' => 'No customer has been selected yet.',
+  'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'No or an unknown authenticantion module specified in "config/authentication.pl".',
+  'No part was found matching the search parameters.' => 'No part was found matching the search parameters.',
+  'No vendor has been selected yet.' => 'No vendor has been selected yet.',
+  'No warehouse has been created yet or the quantity of the bins is not configured yet.' => 'No warehouse has been created yet or the quantity of the bins is not configured yet.',
+  'Nothing has been selected for removal.' => 'Nothing has been selected for removal.',
+  'Nothing has been selected for transfer.' => 'Nothing has been selected for transfer.',
+  'Others'                      => 'Others',
+  'PAYMENT POSTED'              => 'PAYMENT POSTED',
+  'PDF export -- options'       => 'PDF export -- options',
+  'POSTED'                      => 'POSTED',
+  'POSTED AS NEW'               => 'POSTED AS NEW',
+  'PRINTED'                     => 'PRINTED',
+  'Packing List'                => 'Packing List',
+  'Page #1/#2'                  => 'Page #1/#2',
+  'Part Number'                 => 'Part Number',
+  'Part description'            => 'Part description',
+  'Pick List'                   => 'Pick List',
+  'Please ask your administrator to create warehouses and bins.' => 'Please ask your administrator to create warehouses and bins.',
+  'Please enter values'         => 'Please enter values',
+  'Preview'                     => 'Preview',
+  'Produce Assembly'            => 'Produce Assembly',
+  'Proforma Invoice'            => 'Proforma Invoice',
+  'Project Number'              => 'Project Number',
+  'Purchase Invoice'            => 'Purchase Invoice',
+  'Purchase Order'              => 'Purchase Order',
+  'Purchase delivery order'     => 'Purchase delivery order',
+  'Qty'                         => 'Qty',
+  'Quantity missing.'           => 'Quantity missing.',
+  'Quotation'                   => 'Quotation',
+  'RFQ'                         => 'RFQ',
+  'Receipt, payment, reconciliation' => 'Receipt, payment, reconciliation',
+  'Removal'                     => 'Removal',
+  'Removal from Warehouse'      => 'Removal from Warehouse',
+  'Report about wareouse contents' => 'Report about wareouse contents',
+  'Reports'                     => 'Reports',
+  'Request quotation'           => 'Request quotation',
+  'SAVED'                       => 'SAVED',
+  'SAVED FOR DUNNING'           => 'SAVED FOR DUNNING',
+  'SCREENED'                    => 'SCREENED',
+  'Sales Invoice'               => 'Sales Invoice',
+  'Sales Order'                 => 'Sales Order',
+  'Sales delivery order'        => 'Sales delivery order',
+  'Sales quotation'             => 'Sales quotation',
+  'Select a Customer'           => 'Select a Customer',
+  'Select a customer'           => 'Select a customer',
+  'Select a part'               => 'Select a part',
+  'Select a vendor'             => 'Select a vendor',
+  'Stock'                       => 'Stock',
+  'Stock value'                 => 'Stock value',
+  'Storno Invoice'              => 'Storno Invoice',
+  'Storno Packing List'         => 'Storno Packing List',
+  'Subject'                     => 'Subject',
+  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )',
+  'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.',
+  'The assembly has been created.' => 'The assembly has been created.',
+  'The config file "config/authentication.pl" contained invalid Perl code:' => 'The config file "config/authentication.pl" contained invalid Perl code:',
+  'The config file "config/authentication.pl" was not found.' => 'The config file "config/authentication.pl" was not found.',
+  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.',
+  'The connection to the authentication database failed:' => 'The connection to the authentication database failed:',
+  'The connection to the template database failed:' => 'The connection to the template database failed:',
+  'The creation of the authentication database failed:' => 'The creation of the authentication database failed:',
+  'The list has been printed.'  => 'The list has been printed.',
+  'The parts have been removed.' => 'The parts have been removed.',
+  'The parts have been stocked.' => 'The parts have been stocked.',
+  'The parts have been transferred.' => 'The parts have been transferred.',
+  'The selected bin does not exist.' => 'The selected bin does not exist.',
+  'The selected warehouse does not exist.' => 'The selected warehouse does not exist.',
+  'The selected warehouse is empty.' => 'The selected warehouse is empty.',
+  'The source warehouse does not contain any bins.' => 'The source warehouse does not contain any bins.',
+  'The warehouse does not contain any bins.' => 'The warehouse does not contain any bins.',
+  'The warehouse or the bin is missing.' => 'The warehouse or the bin is missing.',
+  'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.' => 'There is not enough left of \'#1\' in bin \'#2\' for the removal of #3.',
+  'To (email)'                  => 'To (email)',
+  'Total stock value'           => 'Total stock value',
+  'Trans Id'                    => 'Trans Id',
+  'Trans Type'                  => 'Trans Type',
+  'Transactions, AR transactions, AP transactions' => 'Transactions, AR transactions, AP transactions',
+  'Transfer'                    => 'Transfer',
+  'Trying to call a sub without a name' => 'Trying to call a sub without a name',
+  'Unit'                        => 'Unit',
+  'Unit missing.'               => 'Unit missing.',
+  'Unknown dependency \'%s\'.'  => 'Unknown dependency \'%s\'.',
+  'Value'                       => 'Value',
+  'Variable'                    => 'Variable',
+  'Vendor'                      => 'Vendor',
+  'Vendor Invoice'              => 'Vendor Invoice',
+  'Vendor details'              => 'Vendor details',
+  'View warehouse content'      => 'View warehouse content',
+  'WHJournal'                   => 'WHJournal',
+  'Warehouse'                   => 'Warehouse',
+  'Warehouse From'              => 'Warehouse From',
+  'Warehouse To'                => 'Warehouse To',
+  'Warehouse management'        => 'Warehouse management',
+  'Yes'                         => 'Yes',
+  'You can create warehouses and bins via the menu "System -> Warehouses".' => 'You can create warehouses and bins via the menu "System -> Warehouses".',
+  'You do not have the permissions to access this function.' => 'You do not have the permissions to access this function.',
+  'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.',
+  '[email]'                     => '[email]',
+  'back'                        => 'back',
+  'bin_list'                    => 'bin_list',
+  'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Key "DB_config" is missing.',
+  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Key "LDAP_config" is missing.',
+  'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".',
+  'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".',
+  'correction'                  => 'correction',
+  'customer'                    => 'customer',
+  'disposed'                    => 'disposed',
+  'found'                       => 'found',
+  'invoice'                     => 'invoice',
+  'missing'                     => 'missing',
+  'no'                          => 'no',
+  'packing_list'                => 'packing_list',
+  'pick_list'                   => 'pick_list',
+  'proforma'                    => 'proforma',
+  'purchase_order'              => 'purchase_order',
+  'release_material'            => 'release_material',
+  'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to is not defined.',
+  'report_generator_nextsub is not defined.' => 'report_generator_nextsub is not defined.',
+  'request_quotation'           => 'request_quotation',
+  'return_material'             => 'return_material',
+  'sales_order'                 => 'sales_order',
+  'sales_quotation'             => 'sales_quotation',
+  'shipped'                     => 'shipped',
+  'stock'                       => 'stock',
+  'transfer'                    => 'transfer',
+  'used'                        => 'used',
+  'vendor'                      => 'vendor',
+  'warehouse_journal_list'      => 'warehouse_journal_list',
+  'warehouse_report_list'       => 'warehouse_report_list',
+  'yes'                         => 'yes',
+};
+
+$self->{subs} = {
+  'E'                           => 'E',
+  'H'                           => 'H',
+  'NTI'                         => 'NTI',
+  'Q'                           => 'Q',
+  'ap_transaction'              => 'ap_transaction',
+  'ar_transaction'              => 'ar_transaction',
+  'build_std_url'               => 'build_std_url',
+  'calculate_qty'               => 'calculate_qty',
+  'call_sub'                    => 'call_sub',
+  'continue'                    => 'continue',
+  'cov_selection_internal'      => 'cov_selection_internal',
+  'create_assembly'             => 'create_assembly',
+  'delivery_customer_selection' => 'delivery_customer_selection',
+  'format_dates'                => 'format_dates',
+  'generate_journal'            => 'generate_journal',
+  'generate_report'             => 'generate_report',
+  'get_bin_idx'                 => 'get_bin_idx',
+  'get_warehouse_idx'           => 'get_warehouse_idx',
+  'gl_transaction'              => 'gl_transaction',
+  'journal'                     => 'journal',
+  'mark_as_paid_common'         => 'mark_as_paid_common',
+  'new_item'                    => 'new_item',
+  'part_selection_internal'     => 'part_selection_internal',
+  'reformat_numbers'            => 'reformat_numbers',
+  'removal_parts_selection'     => 'removal_parts_selection',
+  'remove_parts'                => 'remove_parts',
+  'report'                      => 'report',
+  'report_generator_back'       => 'report_generator_back',
+  'report_generator_dispatcher' => 'report_generator_dispatcher',
+  'report_generator_do'         => 'report_generator_do',
+  'report_generator_export_as_csv' => 'report_generator_export_as_csv',
+  'report_generator_export_as_pdf' => 'report_generator_export_as_pdf',
+  'report_generator_set_default_sort' => 'report_generator_set_default_sort',
+  'retrieve_partunits'          => 'retrieve_partunits',
+  'sales_invoice'               => 'sales_invoice',
+  'select_part'                 => 'select_part',
+  'select_part_internal'        => 'select_part_internal',
+  'set_longdescription'         => 'set_longdescription',
+  'show_history'                => 'show_history',
+  'show_no_warehouses_error'    => 'show_no_warehouses_error',
+  'show_vc_details'             => 'show_vc_details',
+  'stock'                       => 'stock',
+  'transfer_assembly_update_part' => 'transfer_assembly_update_part',
+  'transfer_or_removal_prepare_contents' => 'transfer_or_removal_prepare_contents',
+  'transfer_parts'              => 'transfer_parts',
+  'transfer_parts_selection'    => 'transfer_parts_selection',
+  'transfer_stock'              => 'transfer_stock',
+  'transfer_stock_get_partunit' => 'transfer_stock_get_partunit',
+  'transfer_stock_part_selected' => 'transfer_stock_part_selected',
+  'transfer_stock_update_part'  => 'transfer_stock_update_part',
+  'transfer_warehouse_selection' => 'transfer_warehouse_selection',
+  'update'                      => 'update',
+  'vendor_invoice'              => 'vendor_invoice',
+  'vendor_selection'            => 'vendor_selection',
+  'back'                        => 'back',
+  'close'                       => 'close',
+  'continue'                    => 'continue',
+  'create_assembly'             => 'create_assembly',
+  'export_as_csv'               => 'export_as_csv',
+  'export_as_pdf'               => 'export_as_pdf',
+  'new_part'                    => 'new_part',
+  'stock'                       => 'stock',
+  'update'                      => 'update',
+};
+
+1;
diff --git a/locale/en_GB/COPYING b/locale/en_GB/COPYING
deleted file mode 100644 (file)
index ceaa769..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-######################################################################
-# SQL-Ledger Accounting
-# Copyright (c) 2003
-#
-# British English texts:
-#
-#  Author:
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-#######################################################################
-
diff --git a/locale/en_GB/LANGUAGE b/locale/en_GB/LANGUAGE
deleted file mode 100644 (file)
index bed69f7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-British English
diff --git a/locale/en_GB/admin b/locale/en_GB/admin
deleted file mode 100644 (file)
index 580d1c6..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-$self{texts} = {
-  'Access Control'              => 'Access Control',
-  'Accounting'                  => 'Accounting',
-  'Add User'                    => 'Add User',
-  'Address'                     => 'Address',
-  'Administration'              => 'Administration',
-  'Administrator'               => 'Administrator',
-  'All Datasets up to date!'    => 'All Datasets up to date!',
-  'Change Admin Password'       => 'Change Admin Password',
-  'Change Password'             => 'Change Password',
-  'Character Set'               => 'Character Set',
-  'Click on login name to edit!' => 'Click on login name to edit!',
-  'Company'                     => 'Company',
-  'Connect to'                  => 'Connect to',
-  'Continue'                    => 'Continue',
-  'Create Chart of Accounts'    => 'Create Chart of Accounts',
-  'Create Dataset'              => 'Create Dataset',
-  'DBI not installed!'          => 'DBI not installed!',
-  'Database'                    => 'Database',
-  'Database Administration'     => 'Database Administration',
-  'Database Driver not checked!' => 'Database Driver not checked!',
-  'Database User missing!'      => 'Database User missing!',
-  'Dataset'                     => 'Dataset',
-  'Dataset missing!'            => 'Dataset missing!',
-  'Dataset updated!'            => 'Dataset updated!',
-  'Date Format'                 => 'Date Format',
-  'Delete'                      => 'Delete',
-  'Delete Dataset'              => 'Delete Dataset',
-  'Directory'                   => 'Directory',
-  'Driver'                      => 'Driver',
-  'Dropdown Limit'              => 'Dropdown Limit',
-  'E-mail'                      => 'E-mail',
-  'Edit User'                   => 'Edit User',
-  'Existing Datasets'           => 'Existing Datasets',
-  'Fax'                         => 'Fax',
-  'Host'                        => 'Host',
-  'Hostname missing!'           => 'Hostname missing!',
-  'Incorrect Password!'         => 'Incorrect Password!',
-  'Language'                    => 'Language',
-  'Leave host and port field empty unless you want to make a remote connection.' => 'Leave host and port field empty unless you want to make a remote connection.',
-  'Login'                       => 'Login',
-  'Multibyte Encoding'          => 'Multibyte Encoding',
-  'Name'                        => 'Name',
-  'New Templates'               => 'New Templates',
-  'No Database Drivers available!' => 'No Database Drivers available!',
-  'No Dataset selected!'        => 'No Dataset selected!',
-  'Nothing to delete!'          => 'Nothing to delete!',
-  'Number Format'               => 'Number Format',
-  'Oracle Database Administration' => 'Oracle Database Administration',
-  'Password'                    => 'Password',
-  'Password changed!'           => 'Password changed!',
-  'Pg Database Administration'  => 'Pg Database Administration',
-  'Phone'                       => 'Phone',
-  'Port'                        => 'Port',
-  'Port missing!'               => 'Port missing!',
-  'Printer'                     => 'Printer',
-  'Save'                        => 'Save',
-  'Select a Dataset to delete and press "Continue"' => 'Select a Dataset to delete and press "Continue"',
-  'Setup Templates'             => 'Setup Templates',
-  'Ship via'                    => 'Ship via',
-  'Signature'                   => 'Signature',
-  'Stylesheet'                  => 'Stylesheet',
-  'Templates'                   => 'Templates',
-  'The following Datasets are not in use and can be deleted' => 'The following Datasets are not in use and can be deleted',
-  'The following Datasets need to be updated' => 'The following Datasets need to be updated',
-  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!',
-  'To add a user to a group edit a name, change the login name and save.  A new user with the same variables will then be saved under the new login name.' => 'To add a user to a group edit a name, change the login name and save.  A new user with the same variables will then be saved under the new login name.',
-  'Update Dataset'              => 'Update Dataset',
-  'Use Templates'               => 'Use Templates',
-  'User'                        => 'User',
-  'User deleted!'               => 'User deleted!',
-  'User saved!'                 => 'User saved!',
-  'Version'                     => 'Version',
-  'You must enter a host and port for local and remote connections!' => 'You must enter a host and port for local and remote connections!',
-  'does not exist'              => 'does not exist',
-  'is already a member!'        => 'is already a member!',
-  'localhost'                   => 'localhost',
-  'locked!'                     => 'locked!',
-  'successfully created!'       => 'successfully created!',
-  'successfully deleted!'       => 'successfully deleted!',
-  'website'                     => 'website',
-};
-
-$self{subs} = {
-  'add_user'                    => 'add_user',
-  'adminlogin'                  => 'adminlogin',
-  'change_admin_password'       => 'change_admin_password',
-  'change_password'             => 'change_password',
-  'check_password'              => 'check_password',
-  'continue'                    => 'continue',
-  'create_dataset'              => 'create_dataset',
-  'dbcreate'                    => 'dbcreate',
-  'dbdelete'                    => 'dbdelete',
-  'dbdriver_defaults'           => 'dbdriver_defaults',
-  'dbselect_source'             => 'dbselect_source',
-  'dbupdate'                    => 'dbupdate',
-  'delete'                      => 'delete',
-  'delete_dataset'              => 'delete_dataset',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'get_value'                   => 'get_value',
-  'list_users'                  => 'list_users',
-  'login'                       => 'login',
-  'login_name'                  => 'login_name',
-  'oracle_database_administration' => 'oracle_database_administration',
-  'pg_database_administration'  => 'pg_database_administration',
-  'save'                        => 'save',
-  'update_dataset'              => 'update_dataset',
-  'add_user'                    => 'add_user',
-  'change_admin_password'       => 'change_admin_password',
-  'change_password'             => 'change_password',
-  'continue'                    => 'continue',
-  'create_dataset'              => 'create_dataset',
-  'delete'                      => 'delete',
-  'delete_dataset'              => 'delete_dataset',
-  'login'                       => 'login',
-  'oracle_database_administration' => 'oracle_database_administration',
-  'pg_database_administration'  => 'pg_database_administration',
-  'save'                        => 'save',
-  'update_dataset'              => 'update_dataset',
-};
-
-1;
diff --git a/locale/en_GB/all b/locale/en_GB/all
deleted file mode 100644 (file)
index bed4415..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-# These are all the texts to build the translations files.
-# The file has the form of 'english text'  => 'foreign text',
-# you can add the translation in this file or in the 'missing' file
-# run locales.pl from this directory to rebuild the translation files
-
-$self{texts} = {
-  'AP'                          => 'Purchases',
-  'AP Aging'                    => 'Creditor Aging',
-  'AP Transaction'              => 'Purchase Transaction',
-  'AP Transactions'             => 'Purchase Transactions',
-  'AR'                          => 'Sales',
-  'AR Aging'                    => 'Debtor Aging',
-  'AR Transaction'              => 'Sales Transaction',
-  'AR Transactions'             => 'Sales Transactions',
-  'About'                       => '',
-  'Access Control'              => '',
-  'Account'                     => '',
-  'Account Number'              => '',
-  'Account Number missing!'     => '',
-  'Account Type'                => '',
-  'Account Type missing!'       => '',
-  'Account deleted!'            => '',
-  'Account saved!'              => '',
-  'Accounting'                  => '',
-  'Accounting Menu'             => '',
-  'Accounts'                    => '',
-  'Active'                      => '',
-  'Add'                         => '',
-  'Add Account'                 => '',
-  'Add Accounts Payables Transaction' => 'Add Purchase Transaction',
-  'Add Accounts Receivables Transaction' => 'Add Sales Transaction',
-  'Add Assembly'                => '',
-  'Add Customer'                => '',
-  'Add GIFI'                    => '',
-  'Add General Ledger Transaction' => '',
-  'Add Group'                   => '',
-  'Add Part'                    => '',
-  'Add Project'                 => '',
-  'Add Purchase Order'          => '',
-  'Add Sales Invoice'           => '',
-  'Add Sales Order'             => '',
-  'Add Service'                 => '',
-  'Add Transaction'             => '',
-  'Add User'                    => '',
-  'Add Vendor'                  => '',
-  'Add Vendor Invoice'          => '',
-  'Address'                     => '',
-  'Administration'              => '',
-  'Administrator'               => '',
-  'All'                         => '',
-  'All Datasets up to date!'    => '',
-  'Amount'                      => '',
-  'Amount Due'                  => '',
-  'Amount does not equal applied!' => '',
-  'Amount missing!'             => '',
-  'Applied'                     => '',
-  'Apr'                         => '',
-  'April'                       => '',
-  'Are you sure you want to delete Invoice Number' => '',
-  'Are you sure you want to delete Order Number' => '',
-  'Are you sure you want to delete Transaction' => '',
-  'Assemblies'                  => '',
-  'Assemblies restocked!'       => '',
-  'Assembly Number missing!'    => '',
-  'Asset'                       => '',
-  'Attachment'                  => '',
-  'Audit Control'               => '',
-  'Aug'                         => '',
-  'August'                      => '',
-  'BOM'                         => '',
-  'Backup'                      => '',
-  'Backup sent to'              => '',
-  'Balance'                     => '',
-  'Balance Sheet'               => '',
-  'Bcc'                         => '',
-  'Bin'                         => '',
-  'Books are open'              => '',
-  'Bought'                      => '',
-  'Business Number'             => '',
-  'C'                           => '',
-  'COGS'                        => '',
-  'Cannot delete account!'      => '',
-  'Cannot delete customer!'     => '',
-  'Cannot delete default account!' => '',
-  'Cannot delete invoice!'      => '',
-  'Cannot delete item!'         => '',
-  'Cannot delete order!'        => '',
-  'Cannot delete transaction!'  => '',
-  'Cannot delete vendor!'       => '',
-  'Cannot have a value in both Debit and Credit!' => '',
-  'Cannot post a transaction without a value!' => '',
-  'Cannot post invoice for a closed period!' => '',
-  'Cannot post invoice!'        => '',
-  'Cannot post payment for a closed period!' => '',
-  'Cannot post payment!'        => '',
-  'Cannot post transaction for a closed period!' => '',
-  'Cannot post transaction!'    => '',
-  'Cannot process payment for a closed period!' => '',
-  'Cannot save account!'        => '',
-  'Cannot save order!'          => '',
-  'Cannot save preferences!'    => '',
-  'Cannot stock assemblies!'    => '',
-  'Cash'                        => '',
-  'Cash based'                  => '',
-  'Cc'                          => '',
-  'Change Admin Password'       => '',
-  'Change Password'             => '',
-  'Character Set'               => '',
-  'Chart of Accounts'           => '',
-  'Check'                       => 'Cheque',
-  'Check printed!'              => '',
-  'Check printing failed!'      => '',
-  'Cleared Balance'             => '',
-  'Click on login name to edit!' => '',
-  'Close Books up to'           => '',
-  'Closed'                      => '',
-  'Collective Orders only work for orders from one customer!' => '',
-  'Company'                     => '',
-  'Compare to'                  => '',
-  'Confirm!'                    => '',
-  'Connect to'                  => '',
-  'Contact'                     => '',
-  'Continue'                    => '',
-  'Copies'                      => '',
-  'Copy to COA'                 => '',
-  'Create Chart of Accounts'    => '',
-  'Create Dataset'              => '',
-  'Credit'                      => '',
-  'Credit Limit'                => '',
-  'Curr'                        => '',
-  'Currency'                    => '',
-  'Current'                     => '',
-  'Customer'                    => '',
-  'Customer deleted!'           => '',
-  'Customer missing!'           => '',
-  'Customer not on file!'       => '',
-  'Customer saved!'             => '',
-  'Customers'                   => '',
-  'DBI not installed!'          => '',
-  'Database'                    => '',
-  'Database Administration'     => '',
-  'Database Driver not checked!' => '',
-  'Database Host'               => '',
-  'Database User missing!'      => '',
-  'Dataset'                     => '',
-  'Dataset missing!'            => '',
-  'Dataset updated!'            => '',
-  'Date'                        => '',
-  'Date Format'                 => '',
-  'Date Paid'                   => '',
-  'Date missing!'               => '',
-  'Debit'                       => '',
-  'Debit and credit out of balance!' => '',
-  'Dec'                         => '',
-  'December'                    => '',
-  'Decimalplaces'               => '',
-  'Delete'                      => '',
-  'Delete Account'              => '',
-  'Delete Dataset'              => '',
-  'Delivery Date'               => '',
-  'Deposit'                     => '',
-  'Description'                 => '',
-  'Difference'                  => '',
-  'Directory'                   => '',
-  'Discount'                    => '',
-  'Done'                        => '',
-  'Drawing'                     => '',
-  'Driver'                      => '',
-  'Dropdown Limit'              => '',
-  'Due'                         => '',
-  'Due Date'                    => '',
-  'Due Date missing!'           => '',
-  'E-mail'                      => '',
-  'E-mail Statement to'         => '',
-  'E-mail address missing!'     => '',
-  'Edit'                        => '',
-  'Edit Account'                => '',
-  'Edit Accounts Payables Transaction' => 'Edit Creditor Transaction',
-  'Edit Accounts Receivables Transaction' => 'Edit Debtor Transaction',
-  'Edit Assembly'               => '',
-  'Edit Customer'               => '',
-  'Edit GIFI'                   => '',
-  'Edit General Ledger Transaction' => '',
-  'Edit Group'                  => '',
-  'Edit Part'                   => '',
-  'Edit Preferences for'        => '',
-  'Edit Project'                => '',
-  'Edit Purchase Order'         => '',
-  'Edit Sales Invoice'          => '',
-  'Edit Sales Order'            => '',
-  'Edit Service'                => '',
-  'Edit Template'               => '',
-  'Edit User'                   => '',
-  'Edit Vendor'                 => '',
-  'Edit Vendor Invoice'         => '',
-  'Employee'                    => '',
-  'Enforce transaction reversal for all dates' => '',
-  'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => '',
-  'Equity'                      => '',
-  'Exch'                        => '',
-  'Exchangerate'                => '',
-  'Exchangerate Difference'     => '',
-  'Exchangerate for payment missing!' => '',
-  'Exchangerate missing!'       => '',
-  'Existing Datasets'           => '',
-  'Expense'                     => '',
-  'Expense Account'             => '',
-  'Expense/Asset'               => '',
-  'Extended'                    => '',
-  'Fax'                         => '',
-  'Feb'                         => '',
-  'February'                    => '',
-  'Foreign Exchange Gain'       => '',
-  'Foreign Exchange Loss'       => '',
-  'From'                        => '',
-  'GIFI'                        => '',
-  'GIFI deleted!'               => '',
-  'GIFI missing!'               => '',
-  'GIFI saved!'                 => '',
-  'GL Transaction'              => '',
-  'General Ledger'              => '',
-  'Goods & Services'            => '',
-  'Group'                       => '',
-  'Group Items'                 => '',
-  'Group deleted!'              => '',
-  'Group missing!'              => '',
-  'Group saved!'                => '',
-  'Groups'                      => '',
-  'HTML Templates'              => '',
-  'Heading'                     => '',
-  'Host'                        => '',
-  'Hostname missing!'           => '',
-  'ID'                          => '',
-  'Image'                       => '',
-  'In-line'                     => '',
-  'Include in Report'           => '',
-  'Include in drop-down menus'  => '',
-  'Include this account on the customer/vendor forms to flag customer/vendor as taxable?' => 'Include this account on debtor/creditor forms to set debtor/creditor taxable?',
-  'Income'                      => 'Revenue',
-  'Income Account'              => 'Revenue Account',
-  'Income Statement'            => '',
-  'Incorrect Dataset version!'  => '',
-  'Incorrect Password!'         => '',
-  'Individual Items'            => '',
-  'Inventory'                   => '',
-  'Inventory Account'           => '',
-  'Inventory quantity must be zero before you can set this assembly obsolete!' => '',
-  'Inventory quantity must be zero before you can set this part obsolete!' => '',
-  'Invoice'                     => '',
-  'Invoice Date'                => '',
-  'Invoice Date missing!'       => '',
-  'Invoice Number'              => '',
-  'Invoice Number missing!'     => '',
-  'Invoice deleted!'            => '',
-  'Invoice posted!'             => '',
-  'Invoices'                    => '',
-  'Is this a summary account to record' => '',
-  'Item deleted!'               => '',
-  'Item not on file!'           => '',
-  'Jan'                         => '',
-  'January'                     => '',
-  'Jul'                         => '',
-  'July'                        => '',
-  'Jun'                         => '',
-  'June'                        => '',
-  'LaTeX Templates'             => '',
-  'Language'                    => '',
-  'Last Cost'                   => '',
-  'Last Invoice Number'         => '',
-  'Last Numbers & Default Accounts' => '',
-  'Last Purchase Order Number'  => '',
-  'Last Sales Order Number'     => '',
-  'Leave host and port field empty unless you want to make a remote connection.' => '',
-  'Liability'                   => '',
-  'Licensed to'                 => '',
-  'Line Total'                  => '',
-  'Link'                        => '',
-  'Link Accounts'               => '',
-  'List Accounts'               => '',
-  'List GIFI'                   => '',
-  'List Price'                  => '',
-  'List Transactions'           => '',
-  'Login'                       => '',
-  'Logout'                      => '',
-  'Make'                        => '',
-  'Mar'                         => '',
-  'March'                       => '',
-  'May'                         => '',
-  'May '                        => '',
-  'Message'                     => '',
-  'Microfiche'                  => '',
-  'Model'                       => '',
-  'Multibyte Encoding'          => '',
-  'N/A'                         => '',
-  'Name'                        => '',
-  'Name missing!'               => '',
-  'New Templates'               => '',
-  'No'                          => '',
-  'No Database Drivers available!' => '',
-  'No Dataset selected!'        => '',
-  'No email address for'        => '',
-  'No.'                         => '',
-  'Notes'                       => '',
-  'Nothing applied!'            => '',
-  'Nothing selected!'           => '',
-  'Nothing to delete!'          => '',
-  'Nov'                         => '',
-  'November'                    => '',
-  'Number'                      => '',
-  'Number Format'               => '',
-  'Number missing in Row'       => '',
-  'O'                           => '',
-  'Obsolete'                    => '',
-  'Oct'                         => '',
-  'October'                     => '',
-  'On Hand'                     => '',
-  'On Order'                    => '',
-  'Open'                        => '',
-  'Oracle Database Administration' => '',
-  'Order'                       => '',
-  'Order Date'                  => '',
-  'Order Date missing!'         => '',
-  'Order Entry'                 => '',
-  'Order Number'                => '',
-  'Order Number missing!'       => '',
-  'Order deleted!'              => '',
-  'Order saved!'                => '',
-  'Ordered'                     => '',
-  'Orphaned'                    => '',
-  'Out of balance!'             => '',
-  'PDF'                         => '',
-  'Packing List'                => '',
-  'Packing List Date missing!'  => '',
-  'Packing List Number missing!' => '',
-  'Paid'                        => '',
-  'Paid in full'                => '',
-  'Part'                        => '',
-  'Part Number missing!'        => '',
-  'Parts'                       => '',
-  'Parts Inventory'             => '',
-  'Password'                    => '',
-  'Password changed!'           => '',
-  'Payables'                    => '',
-  'Payment'                     => '',
-  'Payment date missing!'       => '',
-  'Payment posted!'             => '',
-  'Payments'                    => '',
-  'Pg Database Administration'  => '',
-  'Phone'                       => '',
-  'Port'                        => '',
-  'Port missing!'               => '',
-  'Post'                        => '',
-  'Post as new'                 => '',
-  'Postscript'                  => '',
-  'Preferences'                 => '',
-  'Preferences saved!'          => '',
-  'Price'                       => '',
-  'Print'                       => '',
-  'Printer'                     => '',
-  'Project'                     => '',
-  'Project Number'              => '',
-  'Project Number missing!'     => '',
-  'Project deleted!'            => '',
-  'Project not on file!'        => '',
-  'Project saved!'              => '',
-  'Projects'                    => '',
-  'Purchase Order'              => '',
-  'Purchase Orders'             => '',
-  'Qty'                         => '',
-  'ROP'                         => '',
-  'Rate'                        => '',
-  'Recd'                        => '',
-  'Receipt'                     => '',
-  'Receipt printed!'            => '',
-  'Receipt printing failed!'    => '',
-  'Receipts'                    => '',
-  'Receivables'                 => '',
-  'Reconciliation'              => '',
-  'Record in'                   => '',
-  'Reference'                   => '',
-  'Reference missing!'          => '',
-  'Remaining'                   => '',
-  'Report for'                  => '',
-  'Reports'                     => '',
-  'Required by'                 => '',
-  'Retained Earnings'           => '',
-  'Sales'                       => '',
-  'Sales Invoice'               => '',
-  'Sales Order'                 => '',
-  'Sales Orders'                => '',
-  'Salesperson'                 => '',
-  'Save'                        => '',
-  'Save as new'                 => '',
-  'Save to File'                => '',
-  'Screen'                      => '',
-  'Select a Dataset to delete and press "Continue"' => '',
-  'Select all'                  => '',
-  'Select from one of the items below' => '',
-  'Select from one of the names below' => '',
-  'Select from one of the projects below' => '',
-  'Select postscript or PDF!'   => '',
-  'Sell Price'                  => '',
-  'Send by E-Mail'              => '',
-  'Sep'                         => '',
-  'September'                   => '',
-  'Service'                     => '',
-  'Service Items'               => '',
-  'Service Number missing!'     => '',
-  'Services'                    => '',
-  'Setup Templates'             => '',
-  'Ship'                        => '',
-  'Ship to'                     => '',
-  'Ship via'                    => '',
-  'Short'                       => '',
-  'Signature'                   => '',
-  'Sold'                        => '',
-  'Source'                      => '',
-  'Standard'                    => '',
-  'Statement'                   => '',
-  'Statement Balance'           => '',
-  'Statement sent to'           => '',
-  'Statements sent to printer!' => '',
-  'Stock'                       => '',
-  'Stock Assembly'              => '',
-  'Stylesheet'                  => '',
-  'Subject'                     => '',
-  'Subtotal'                    => '',
-  'System'                      => '',
-  'Tax'                         => '',
-  'Tax Accounts'                => '',
-  'Tax Included'                => '',
-  'Tax collected'               => '',
-  'Tax paid'                    => '',
-  'Taxable'                     => '',
-  'Template saved!'             => '',
-  'Templates'                   => '',
-  'Terms: Net'                  => '',
-  'The following Datasets are not in use and can be deleted' => '',
-  'The following Datasets need to be updated' => '',
-  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => '',
-  'To'                          => '',
-  'To add a user to a group edit a name, change the login name and save.  A new user with the same variables will then be saved under the new login name.' => '',
-  'Top Level'                   => '',
-  'Total'                       => '',
-  'Transaction Date missing!'   => '',
-  'Transaction deleted!'        => '',
-  'Transaction posted!'         => '',
-  'Transaction reversal enforced for all dates' => '',
-  'Transaction reversal enforced up to' => '',
-  'Transactions'                => '',
-  'Transactions exist, cannot delete customer!' => '',
-  'Transactions exist, cannot delete vendor!' => '',
-  'Transactions exist; cannot delete account!' => '',
-  'Trial Balance'               => '',
-  'Unit'                        => '',
-  'Unit of measure'             => '',
-  'Update'                      => '',
-  'Update Dataset'              => '',
-  'Updated'                     => '',
-  'Use Templates'               => '',
-  'User'                        => '',
-  'User deleted!'               => '',
-  'User saved!'                 => '',
-  'Vendor'                      => '',
-  'Vendor Invoice'              => '',
-  'Vendor deleted!'             => '',
-  'Vendor missing!'             => '',
-  'Vendor not on file!'         => '',
-  'Vendor saved!'               => '',
-  'Vendors'                     => '',
-  'Version'                     => '',
-  'Weight'                      => '',
-  'Weight Unit'                 => '',
-  'What type of item is this?'  => '',
-  'Year End'                    => '',
-  'Yes'                         => '',
-  'You are logged out!'         => '',
-  'You did not enter a name!'   => '',
-  'You must enter a host and port for local and remote connections!' => '',
-  'as at'                       => '',
-  'collected on sales'          => '',
-  'days'                        => '',
-  'does not exist'              => '',
-  'ea'                          => '',
-  'emailed to'                  => '',
-  'for Period'                  => '',
-  'hr'                          => '',
-  'is already a member!'        => '',
-  'is not a member!'            => '',
-  'localhost'                   => '',
-  'locked!'                     => '',
-  'paid on purchases'           => '',
-  'sent to printer'             => '',
-  'successfully created!'       => '',
-  'successfully deleted!'       => '',
-  'to'                          => '',
-  'website'                     => '',
-};
-
-1;
diff --git a/locale/en_GB/am b/locale/en_GB/am
deleted file mode 100644 (file)
index 6e322ca..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-$self{texts} = {
-  'AP'                          => 'Purchases',
-  'AR'                          => 'Sales',
-  'Account'                     => 'Account',
-  'Account Number'              => 'Account Number',
-  'Account Number missing!'     => 'Account Number missing!',
-  'Account Type'                => 'Account Type',
-  'Account Type missing!'       => 'Account Type missing!',
-  'Account deleted!'            => 'Account deleted!',
-  'Account saved!'              => 'Account saved!',
-  'Add Account'                 => 'Add Account',
-  'Add GIFI'                    => 'Add GIFI',
-  'Address'                     => 'Address',
-  'Asset'                       => 'Asset',
-  'Audit Control'               => 'Audit Control',
-  'Backup sent to'              => 'Backup sent to',
-  'Books are open'              => 'Books are open',
-  'Business Number'             => 'Business Number',
-  'COGS'                        => 'COGS',
-  'Cannot delete account!'      => 'Cannot delete account!',
-  'Cannot delete default account!' => 'Cannot delete default account!',
-  'Cannot save account!'        => 'Cannot save account!',
-  'Cannot save preferences!'    => 'Cannot save preferences!',
-  'Character Set'               => 'Character Set',
-  'Chart of Accounts'           => 'Chart of Accounts',
-  'Close Books up to'           => 'Close Books up to',
-  'Company'                     => 'Company',
-  'Continue'                    => 'Continue',
-  'Copy to COA'                 => 'Copy to COA',
-  'Credit'                      => 'Credit',
-  'Date Format'                 => 'Date Format',
-  'Debit'                       => 'Debit',
-  'Delete'                      => 'Delete',
-  'Delete Account'              => 'Delete Account',
-  'Description'                 => 'Description',
-  'Dropdown Limit'              => 'Dropdown Limit',
-  'E-mail'                      => 'E-mail',
-  'Edit'                        => 'Edit',
-  'Edit Account'                => 'Edit Account',
-  'Edit GIFI'                   => 'Edit GIFI',
-  'Edit Preferences for'        => 'Edit Preferences for',
-  'Edit Template'               => 'Edit Template',
-  'Enforce transaction reversal for all dates' => 'Enforce transaction reversal for all dates',
-  'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies',
-  'Equity'                      => 'Equity',
-  'Expense'                     => 'Expense',
-  'Expense Account'             => 'Expense Account',
-  'Expense/Asset'               => 'Expense/Asset',
-  'Fax'                         => 'Fax',
-  'Foreign Exchange Gain'       => 'Foreign Exchange Gain',
-  'Foreign Exchange Loss'       => 'Foreign Exchange Loss',
-  'GIFI'                        => 'GIFI',
-  'GIFI deleted!'               => 'GIFI deleted!',
-  'GIFI missing!'               => 'GIFI missing!',
-  'GIFI saved!'                 => 'GIFI saved!',
-  'Heading'                     => 'Heading',
-  'Include in drop-down menus'  => 'Include in drop-down menus',
-  'Include this account on the customer/vendor forms to flag customer/vendor as taxable?' => 'Include this account on debtor/creditor forms to set debtor/creditor taxable?',
-  'Income'                      => 'Revenue',
-  'Income Account'              => 'Revenue Account',
-  'Inventory'                   => 'Inventory',
-  'Inventory Account'           => 'Inventory Account',
-  'Is this a summary account to record' => 'Is this a summary account to record',
-  'Language'                    => 'Language',
-  'Last Invoice Number'         => 'Last Invoice Number',
-  'Last Numbers & Default Accounts' => 'Last Numbers & Default Accounts',
-  'Last Purchase Order Number'  => 'Last Purchase Order Number',
-  'Last Sales Order Number'     => 'Last Sales Order Number',
-  'Liability'                   => 'Liability',
-  'Link'                        => 'Link',
-  'Name'                        => 'Name',
-  'No'                          => 'No',
-  'No email address for'        => 'No email address for',
-  'Number'                      => 'Number',
-  'Number Format'               => 'Number Format',
-  'Parts Inventory'             => 'Parts Inventory',
-  'Password'                    => 'Password',
-  'Payables'                    => 'Payables',
-  'Payment'                     => 'Payment',
-  'Phone'                       => 'Phone',
-  'Preferences saved!'          => 'Preferences saved!',
-  'Rate'                        => 'Rate',
-  'Receivables'                 => 'Receivables',
-  'Sales'                       => 'Sales',
-  'Save'                        => 'Save',
-  'Service Items'               => 'Service Items',
-  'Ship via'                    => 'Ship via',
-  'Signature'                   => 'Signature',
-  'Stylesheet'                  => 'Stylesheet',
-  'Tax'                         => 'Tax',
-  'Tax Accounts'                => 'Tax Accounts',
-  'Template saved!'             => 'Template saved!',
-  'Transaction reversal enforced for all dates' => 'Transaction reversal enforced for all dates',
-  'Transaction reversal enforced up to' => 'Transaction reversal enforced up to',
-  'Transactions exist; cannot delete account!' => 'Transactions exist; cannot delete account!',
-  'Weight Unit'                 => 'Weight Unit',
-  'Year End'                    => 'Year End',
-  'Yes'                         => 'Yes',
-  'does not exist'              => 'does not exist',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_gifi'                    => 'add_gifi',
-  'audit_control'               => 'audit_control',
-  'backup'                      => 'backup',
-  'config'                      => 'config',
-  'continue'                    => 'continue',
-  'copy_to_coa'                 => 'copy_to_coa',
-  'delete'                      => 'delete',
-  'delete_account'              => 'delete_account',
-  'delete_gifi'                 => 'delete_gifi',
-  'display_form'                => 'display_form',
-  'display_stylesheet'          => 'display_stylesheet',
-  'doclose'                     => 'doclose',
-  'edit'                        => 'edit',
-  'edit_gifi'                   => 'edit_gifi',
-  'edit_template'               => 'edit_template',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gifi_footer'                 => 'gifi_footer',
-  'gifi_header'                 => 'gifi_header',
-  'list'                        => 'list',
-  'list_gifi'                   => 'list_gifi',
-  'save'                        => 'save',
-  'save_account'                => 'save_account',
-  'save_gifi'                   => 'save_gifi',
-  'save_preferences'            => 'save_preferences',
-  'save_template'               => 'save_template',
-  'add_account'                 => 'add_account',
-  'continue'                    => 'continue',
-  'copy_to_coa'                 => 'copy_to_coa',
-  'delete'                      => 'delete',
-  'edit'                        => 'edit',
-  'edit_account'                => 'edit_account',
-  'save'                        => 'save',
-};
-
-1;
diff --git a/locale/en_GB/ap b/locale/en_GB/ap
deleted file mode 100644 (file)
index 4cad878..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-$self{texts} = {
-  'AP Transaction'              => 'Purchase Transaction',
-  'AP Transactions'             => 'Purchase Transactions',
-  'Account'                     => 'Account',
-  'Add Accounts Payables Transaction' => 'Add Purchase Transaction',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Amount Due'                  => 'Amount Due',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Cannot delete transaction!'  => 'Cannot delete transaction!',
-  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
-  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
-  'Cannot post transaction!'    => 'Cannot post transaction!',
-  'Closed'                      => 'Closed',
-  'Confirm!'                    => 'Confirm!',
-  'Continue'                    => 'Continue',
-  'Currency'                    => 'Currency',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Date Paid'                   => 'Date Paid',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Description'                 => 'Description',
-  'Due Date'                    => 'Due Date',
-  'Due Date missing!'           => 'Due Date missing!',
-  'Edit Accounts Payables Transaction' => 'Edit Creditor Transaction',
-  'Employee'                    => 'Employee',
-  'Exch'                        => 'Exch',
-  'Exchangerate'                => 'Exchangerate',
-  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
-  'Exchangerate missing!'       => 'Exchangerate missing!',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'ID'                          => 'ID',
-  'Include in Report'           => 'Include in Report',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date'                => 'Invoice Date',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number'              => 'Invoice Number',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Open'                        => 'Open',
-  'Order'                       => 'Order',
-  'Order Number'                => 'Order Number',
-  'Paid'                        => 'Paid',
-  'Payment date missing!'       => 'Payment date missing!',
-  'Payments'                    => 'Payments',
-  'Post'                        => 'Post',
-  'Post as new'                 => 'Post as new',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Source'                      => 'Source',
-  'Subtotal'                    => 'Subtotal',
-  'Tax'                         => 'Tax',
-  'Tax Included'                => 'Tax Included',
-  'Total'                       => 'Total',
-  'Transaction deleted!'        => 'Transaction deleted!',
-  'Transaction posted!'         => 'Transaction posted!',
-  'Update'                      => 'Update',
-  'Vendor'                      => 'Vendor',
-  'Vendor Invoice'              => 'Vendor Invoice',
-  'Vendor missing!'             => 'Vendor missing!',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'Yes'                         => 'Yes',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_subtotal'                 => 'ap_subtotal',
-  'ap_transaction'              => 'ap_transaction',
-  'ap_transactions'             => 'ap_transactions',
-  'ar_transaction'              => 'ar_transaction',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'create_links'                => 'create_links',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'name_selected'               => 'name_selected',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'search'                      => 'search',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'update'                      => 'update',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'purchase_transaction'        => 'ap_transaction',
-  'add_purchase_transaction'    => 'add_accounts_payables_transaction',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'edit_creditor_transaction'   => 'edit_accounts_payables_transaction',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'update'                      => 'update',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/ar b/locale/en_GB/ar
deleted file mode 100644 (file)
index 926d80a..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-$self{texts} = {
-  'AR Transaction'              => 'Sales Transaction',
-  'AR Transactions'             => 'Sales Transactions',
-  'Account'                     => 'Account',
-  'Add Accounts Receivables Transaction' => 'Add Sales Transaction',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Amount Due'                  => 'Amount Due',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Cannot delete transaction!'  => 'Cannot delete transaction!',
-  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
-  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
-  'Cannot post transaction!'    => 'Cannot post transaction!',
-  'Closed'                      => 'Closed',
-  'Confirm!'                    => 'Confirm!',
-  'Continue'                    => 'Continue',
-  'Credit Limit'                => 'Credit Limit',
-  'Currency'                    => 'Currency',
-  'Customer'                    => 'Customer',
-  'Customer missing!'           => 'Customer missing!',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Date Paid'                   => 'Date Paid',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Description'                 => 'Description',
-  'Due Date'                    => 'Due Date',
-  'Due Date missing!'           => 'Due Date missing!',
-  'Edit Accounts Receivables Transaction' => 'Edit Debtor Transaction',
-  'Exch'                        => 'Exch',
-  'Exchangerate'                => 'Exchangerate',
-  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
-  'Exchangerate missing!'       => 'Exchangerate missing!',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'ID'                          => 'ID',
-  'Include in Report'           => 'Include in Report',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date'                => 'Invoice Date',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number'              => 'Invoice Number',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Open'                        => 'Open',
-  'Order'                       => 'Order',
-  'Order Number'                => 'Order Number',
-  'Paid'                        => 'Paid',
-  'Payment date missing!'       => 'Payment date missing!',
-  'Payments'                    => 'Payments',
-  'Post'                        => 'Post',
-  'Post as new'                 => 'Post as new',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Remaining'                   => 'Remaining',
-  'Sales Invoice'               => 'Sales Invoice',
-  'Salesperson'                 => 'Salesperson',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Ship via'                    => 'Ship via',
-  'Source'                      => 'Source',
-  'Subtotal'                    => 'Subtotal',
-  'Tax'                         => 'Tax',
-  'Tax Included'                => 'Tax Included',
-  'Total'                       => 'Total',
-  'Transaction deleted!'        => 'Transaction deleted!',
-  'Transaction posted!'         => 'Transaction posted!',
-  'Update'                      => 'Update',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'Yes'                         => 'Yes',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_subtotal'                 => 'ar_subtotal',
-  'ar_transaction'              => 'ar_transaction',
-  'ar_transactions'             => 'ar_transactions',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'create_links'                => 'create_links',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'name_selected'               => 'name_selected',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'search'                      => 'search',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'update'                      => 'update',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'sales_transaction'           => 'ar_transaction',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'sales_invoice'               => 'sales_invoice',
-  'update'                      => 'update',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/arap b/locale/en_GB/arap
deleted file mode 100644 (file)
index fe711dd..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-$self{texts} = {
-  'Address'                     => 'Address',
-  'Continue'                    => 'Continue',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Description'                 => 'Description',
-  'Number'                      => 'Number',
-  'Project not on file!'        => 'Project not on file!',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Vendor not on file!'         => 'Vendor not on file!',
-};
-
-$self{subs} = {
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'gl_transaction'              => 'gl_transaction',
-  'name_selected'               => 'name_selected',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'vendor_invoice'              => 'vendor_invoice',
-  'continue'                    => 'continue',
-};
-
-1;
diff --git a/locale/en_GB/bp b/locale/en_GB/bp
deleted file mode 100644 (file)
index fa9e347..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Are you sure you want to remove the marked entries from the queue?' => 'Are you sure you want to remove the marked entries from the queue?',
-  'Cannot remove files!'        => 'Cannot remove files!',
-  'Checks'                      => 'Cheques',
-  'Confirm!'                    => 'Confirm!',
-  'Continue'                    => 'Continue',
-  'Customer'                    => 'Debtor',
-  'Date'                        => 'Date',
-  'From'                        => 'From',
-  'Invoice'                     => 'Invoice',
-  'Invoice Number'              => 'Invoice Number',
-  'Marked entries printed!'     => 'Marked entries printed!',
-  'Order'                       => 'Order',
-  'Order Number'                => 'Order Number',
-  'Packing Lists'               => 'Packing Lists',
-  'Print'                       => 'Print',
-  'Printing ... '               => 'Printing ... ',
-  'Purchase Orders'             => 'Purchase Orders',
-  'Quotation'                   => 'Quotation',
-  'Quotation Number'            => 'Quotation Number',
-  'Quotations'                  => 'Quotations',
-  'RFQs'                        => 'RFQs',
-  'Receipts'                    => 'Receipts',
-  'Reference'                   => 'Reference',
-  'Remove'                      => 'Remove',
-  'Removed spoolfiles!'         => 'Removed spoolfiles!',
-  'Removing marked entries from queue ...' => 'Removing marked entries from queue ...',
-  'Sales Invoices'              => 'Sales Invoices',
-  'Sales Orders'                => 'Sales Orders',
-  'Select all'                  => 'Select all',
-  'Spoolfile'                   => 'Spoolfile',
-  'To'                          => 'To',
-  'Vendor'                      => 'Creditor',
-  'Yes'                         => 'Yes',
-  'done'                        => 'done',
-};
-
-$self{subs} = {
-  'continue'                    => 'continue',
-  'list_spool'                  => 'list_spool',
-  'print'                       => 'print',
-  'remove'                      => 'remove',
-  'search'                      => 'search',
-  'select_all'                  => 'select_all',
-  'yes'                         => 'yes',
-  'continue'                    => 'continue',
-  'print'                       => 'print',
-  'remove'                      => 'remove',
-  'select_all'                  => 'select_all',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/ca b/locale/en_GB/ca
deleted file mode 100644 (file)
index ed5ddc2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Balance'                     => 'Balance',
-  'Chart of Accounts'           => 'Chart of Accounts',
-  'Credit'                      => 'Credit',
-  'Date'                        => 'Date',
-  'Debit'                       => 'Debit',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Description'                 => 'Description',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'GIFI'                        => 'GIFI',
-  'Include in Report'           => 'Include in Report',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'List Transactions'           => 'List Transactions',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Reference'                   => 'Reference',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Subtotal'                    => 'Subtotal',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'ca_subtotal'                 => 'ca_subtotal',
-  'chart_of_accounts'           => 'chart_of_accounts',
-  'list'                        => 'list',
-  'list_transactions'           => 'list_transactions',
-  'list_transactions'           => 'list_transactions',
-};
-
-1;
diff --git a/locale/en_GB/cp b/locale/en_GB/cp
deleted file mode 100644 (file)
index fd0ade6..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Amount does not equal applied!' => 'Amount does not equal applied!',
-  'Amount missing!'             => 'Amount missing!',
-  'Applied'                     => 'Applied',
-  'Cannot post payment!'        => 'Cannot post payment!',
-  'Cannot process payment for a closed period!' => 'Cannot process payment for a closed period!',
-  'Check'                       => 'Cheque',
-  'Check printed!'              => 'Check printed!',
-  'Check printing failed!'      => 'Check printing failed!',
-  'Continue'                    => 'Continue',
-  'Currency'                    => 'Currency',
-  'Customer'                    => 'Customer',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Date missing!'               => 'Date missing!',
-  'Description'                 => 'Description',
-  'Due'                         => 'Due',
-  'Exchangerate'                => 'Exchangerate',
-  'From'                        => 'From',
-  'Invoice'                     => 'Invoice',
-  'Invoices'                    => 'Invoices',
-  'Nothing applied!'            => 'Nothing applied!',
-  'Number'                      => 'Number',
-  'Paid in full'                => 'Paid in full',
-  'Payment'                     => 'Payment',
-  'Payment posted!'             => 'Payment posted!',
-  'Post'                        => 'Post',
-  'Print'                       => 'Print',
-  'Printer'                     => 'Printer',
-  'Project not on file!'        => 'Project not on file!',
-  'Receipt'                     => 'Receipt',
-  'Receipt printed!'            => 'Receipt printed!',
-  'Receipt printing failed!'    => 'Receipt printing failed!',
-  'Reference'                   => 'Reference',
-  'Screen'                      => 'Screen',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Update'                      => 'Update',
-  'Vendor'                      => 'Vendor',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_form'                  => 'check_form',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'customer_details'            => 'customer_details',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'list_invoices'               => 'list_invoices',
-  'name_selected'               => 'name_selected',
-  'payment'                     => 'payment',
-  'post'                        => 'post',
-  'print'                       => 'print',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'update'                      => 'update',
-  'vendor_details'              => 'vendor_details',
-  'vendor_invoice'              => 'vendor_invoice',
-  'continue'                    => 'continue',
-  'post'                        => 'post',
-  'print'                       => 'print',
-  'update'                      => 'update',
-};
-
-1;
diff --git a/locale/en_GB/ct b/locale/en_GB/ct
deleted file mode 100644 (file)
index 3daa8f4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-$self{texts} = {
-  'Add'                         => 'Add',
-  'Address'                     => 'Address',
-  'All'                         => 'All',
-  'Bcc'                         => 'Bcc',
-  'Cannot delete customer!'     => 'Cannot delete customer!',
-  'Cannot delete vendor!'       => 'Cannot delete vendor!',
-  'Cc'                          => 'Cc',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Credit Limit'                => 'Credit Limit',
-  'Customer deleted!'           => 'Customer deleted!',
-  'Customer saved!'             => 'Customer saved!',
-  'Customers'                   => 'Customers',
-  'Delete'                      => 'Delete',
-  'Discount'                    => 'Discount',
-  'E-mail'                      => 'E-mail',
-  'Edit Customer'               => 'Edit Customer',
-  'Edit Vendor'                 => 'Edit Vendor',
-  'Fax'                         => 'Fax',
-  'Include in Report'           => 'Include in Report',
-  'Invoice'                     => 'Invoice',
-  'Name'                        => 'Name',
-  'Name missing!'               => 'Name missing!',
-  'Notes'                       => 'Notes',
-  'Number'                      => 'Number',
-  'Order'                       => 'Order',
-  'Orphaned'                    => 'Orphaned',
-  'Phone'                       => 'Phone',
-  'Save'                        => 'Save',
-  'Ship to'                     => 'Ship to',
-  'Tax Included'                => 'Tax Included',
-  'Taxable'                     => 'Taxable',
-  'Terms: Net'                  => 'Terms: Net',
-  'Transactions exist, cannot delete customer!' => 'Transactions exist, cannot delete customer!',
-  'Transactions exist, cannot delete vendor!' => 'Transactions exist, cannot delete vendor!',
-  'Vendor deleted!'             => 'Vendor deleted!',
-  'Vendor saved!'               => 'Vendor saved!',
-  'Vendors'                     => 'Vendors',
-  'days'                        => 'days',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'continue'                    => 'continue',
-  'customer_invoice'            => 'customer_invoice',
-  'customer_order'              => 'customer_order',
-  'delete'                      => 'delete',
-  'delete_customer'             => 'delete_customer',
-  'delete_vendor'               => 'delete_vendor',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'invoice'                     => 'invoice',
-  'list_names'                  => 'list_names',
-  'order'                       => 'order',
-  'save'                        => 'save',
-  'save_customer'               => 'save_customer',
-  'save_vendor'                 => 'save_vendor',
-  'search'                      => 'search',
-  'vendor_invoice'              => 'vendor_invoice',
-  'vendor_order'                => 'vendor_order',
-  'add'                         => 'add',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'invoice'                     => 'invoice',
-  'order'                       => 'order',
-  'save'                        => 'save',
-};
-
-1;
diff --git a/locale/en_GB/gl b/locale/en_GB/gl
deleted file mode 100644 (file)
index dae8e86..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-$self{texts} = {
-  'AP Transaction'              => 'Purchase Transaction',
-  'AR Transaction'              => 'Sales Transaction',
-  'Account'                     => 'Account',
-  'Add General Ledger Transaction' => 'Add General Ledger Transaction',
-  'Address'                     => 'Address',
-  'All'                         => 'All',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Transaction' => 'Are you sure you want to delete Transaction',
-  'Asset'                       => 'Asset',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Balance'                     => 'Balance',
-  'Cannot delete transaction!'  => 'Cannot delete transaction!',
-  'Cannot have a value in both Debit and Credit!' => 'Cannot have a value in both Debit and Credit!',
-  'Cannot post a transaction without a value!' => 'Cannot post a transaction without a value!',
-  'Cannot post transaction for a closed period!' => 'Cannot post transaction for a closed period!',
-  'Confirm!'                    => 'Confirm!',
-  'Continue'                    => 'Continue',
-  'Credit'                      => 'Credit',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Debit'                       => 'Debit',
-  'Debit and credit out of balance!' => 'Debit and credit out of balance!',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Description'                 => 'Description',
-  'Edit General Ledger Transaction' => 'Edit General Ledger Transaction',
-  'Equity'                      => 'Equity',
-  'Expense'                     => 'Expense',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'GIFI'                        => 'GIFI',
-  'GL Transaction'              => 'GL Transaction',
-  'General Ledger'              => 'General Ledger',
-  'ID'                          => 'ID',
-  'Include in Report'           => 'Include in Report',
-  'Income'                      => 'Revenue',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Liability'                   => 'Liability',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Post'                        => 'Post',
-  'Post as new'                 => 'Post as new',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Reference'                   => 'Reference',
-  'Reference missing!'          => 'Reference missing!',
-  'Reports'                     => 'Reports',
-  'Sales Invoice'               => 'Sales Invoice',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Source'                      => 'Source',
-  'Subtotal'                    => 'Subtotal',
-  'Transaction Date missing!'   => 'Transaction Date missing!',
-  'Transaction deleted!'        => 'Transaction deleted!',
-  'Transaction posted!'         => 'Transaction posted!',
-  'Update'                      => 'Update',
-  'Vendor Invoice'              => 'Vendor Invoice',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'Yes'                         => 'Yes',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'form_row'                    => 'form_row',
-  'generate_report'             => 'generate_report',
-  'gl_subtotal'                 => 'gl_subtotal',
-  'gl_transaction'              => 'gl_transaction',
-  'name_selected'               => 'name_selected',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'search'                      => 'search',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'update'                      => 'update',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'purchase_transaction'        => 'ap_transaction',
-  'sales_transaction'           => 'ar_transaction',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'gl_transaction'              => 'gl_transaction',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'sales_invoice'               => 'sales_invoice',
-  'update'                      => 'update',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/ic b/locale/en_GB/ic
deleted file mode 100644 (file)
index 7685842..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-$self{texts} = {
-  'Active'                      => 'Active',
-  'Add'                         => 'Add',
-  'Add Assembly'                => 'Add Assembly',
-  'Add Part'                    => 'Add Part',
-  'Add Purchase Order'          => 'Add Purchase Order',
-  'Add Sales Order'             => 'Add Sales Order',
-  'Add Service'                 => 'Add Service',
-  'Address'                     => 'Address',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Assemblies'                  => 'Assemblies',
-  'Assemblies restocked!'       => 'Assemblies restocked!',
-  'Assembly Number missing!'    => 'Assembly Number missing!',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'BOM'                         => 'BOM',
-  'Bcc'                         => 'Bcc',
-  'Bin'                         => 'Bin',
-  'Bought'                      => 'Bought',
-  'COGS'                        => 'COGS',
-  'Cannot delete item!'         => 'Cannot delete item!',
-  'Cannot stock assemblies!'    => 'Cannot stock assemblies!',
-  'Cc'                          => 'Cc',
-  'Closed'                      => 'Closed',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Delivery Date'               => 'Delivery Date',
-  'Description'                 => 'Description',
-  'Drawing'                     => 'Drawing',
-  'E-mail'                      => 'E-mail',
-  'E-mail address missing!'     => 'E-mail address missing!',
-  'Edit Assembly'               => 'Edit Assembly',
-  'Edit Part'                   => 'Edit Part',
-  'Edit Service'                => 'Edit Service',
-  'Expense'                     => 'Expense',
-  'Extended'                    => 'Extended',
-  'Fax'                         => 'Fax',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'Group'                       => 'Group',
-  'Group Items'                 => 'Group Items',
-  'Image'                       => 'Image',
-  'In-line'                     => 'In-line',
-  'Include in Report'           => 'Include in Report',
-  'Income'                      => 'Revenue',
-  'Individual Items'            => 'Individual Items',
-  'Inventory'                   => 'Inventory',
-  'Inventory quantity must be zero before you can set this assembly obsolete!' => 'Inventory quantity must be zero before you can set this assembly obsolete!',
-  'Inventory quantity must be zero before you can set this part obsolete!' => 'Inventory quantity must be zero before you can set this part obsolete!',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number'              => 'Invoice Number',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Item deleted!'               => 'Item deleted!',
-  'Item not on file!'           => 'Item not on file!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Last Cost'                   => 'Last Cost',
-  'Line Total'                  => 'Line Total',
-  'Link Accounts'               => 'Link Accounts',
-  'List Price'                  => 'List Price',
-  'Make'                        => 'Make',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'Microfiche'                  => 'Microfiche',
-  'Model'                       => 'Model',
-  'Name'                        => 'Name',
-  'No.'                         => 'No.',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Number missing in Row'       => 'Number missing in Row',
-  'Obsolete'                    => 'Obsolete',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'On Hand'                     => 'On Hand',
-  'On Order'                    => 'On Order',
-  'Order'                       => 'Order',
-  'Order Date missing!'         => 'Order Date missing!',
-  'Order Number'                => 'Order Number',
-  'Order Number missing!'       => 'Order Number missing!',
-  'Ordered'                     => 'Ordered',
-  'Orphaned'                    => 'Orphaned',
-  'PDF'                         => 'PDF',
-  'Packing List'                => 'Packing List',
-  'Packing List Date missing!'  => 'Packing List Date missing!',
-  'Packing List Number missing!' => 'Packing List Number missing!',
-  'Part'                        => 'Part',
-  'Part Number missing!'        => 'Part Number missing!',
-  'Parts'                       => 'Parts',
-  'Phone'                       => 'Phone',
-  'Postscript'                  => 'Postscript',
-  'Price'                       => 'Price',
-  'Printer'                     => 'Printer',
-  'Project'                     => 'Project',
-  'Purchase Order'              => 'Purchase Order',
-  'Qty'                         => 'Qty',
-  'ROP'                         => 'ROP',
-  'Recd'                        => 'Recd',
-  'Required by'                 => 'Required by',
-  'Sales'                       => 'Sales',
-  'Sales Order'                 => 'Sales Order',
-  'Save'                        => 'Save',
-  'Save as new'                 => 'Save as new',
-  'Screen'                      => 'Screen',
-  'Select from one of the items below' => 'Select from one of the items below',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sell Price'                  => 'Sell Price',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Service'                     => 'Service',
-  'Service Number missing!'     => 'Service Number missing!',
-  'Services'                    => 'Services',
-  'Ship'                        => 'Ship',
-  'Ship to'                     => 'Ship to',
-  'Short'                       => 'Short',
-  'Sold'                        => 'Sold',
-  'Stock'                       => 'Stock',
-  'Stock Assembly'              => 'Stock Assembly',
-  'Subject'                     => 'Subject',
-  'Subtotal'                    => 'Subtotal',
-  'Tax'                         => 'Tax',
-  'To'                          => 'To',
-  'Top Level'                   => 'Top Level',
-  'Total'                       => 'Total',
-  'Unit'                        => 'Unit',
-  'Unit of measure'             => 'Unit of measure',
-  'Update'                      => 'Update',
-  'Updated'                     => 'Updated',
-  'Weight'                      => 'Weight',
-  'What type of item is this?'  => 'What type of item is this?',
-  'ea'                          => 'ea',
-  'emailed to'                  => 'emailed to',
-  'hr'                          => 'hr',
-  'sent to printer'             => 'sent to printer',
-  'to'                          => 'to',
-  'soldtotal'                   => 'Soldtotal',
-  'number'                      => 'Nr',
-  'top100'                      => 'TOP 100',
-  'addtop100'                   => 'addtop100',
-  'choice'                      => 'choice',
-  'list'                        => 'list',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'assembly_row'                => 'assembly_row',
-  'check_form'                  => 'check_form',
-  'continue'                    => 'continue',
-  'customer_details'            => 'customer_details',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'display_row'                 => 'display_row',
-  'e_mail'                      => 'e_mail',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'generate_report'             => 'generate_report',
-  'invoicetotal'                => 'invoicetotal',
-  'item_selected'               => 'item_selected',
-  'link_part'                   => 'link_part',
-  'list_assemblies'             => 'list_assemblies',
-  'makemodel_row'               => 'makemodel_row',
-  'new_item'                    => 'new_item',
-  'order'                       => 'order',
-  'parts_subtotal'              => 'parts_subtotal',
-  'post_as_new'                 => 'post_as_new',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'restock_assemblies'          => 'restock_assemblies',
-  'save'                        => 'save',
-  'save_as_new'                 => 'save_as_new',
-  'search'                      => 'search',
-  'select_item'                 => 'select_item',
-  'send_email'                  => 'send_email',
-  'ship_to'                     => 'ship_to',
-  'stock_assembly'              => 'stock_assembly',
-  'update'                      => 'update',
-  'validate_items'              => 'validate_items',
-  'vendor_details'              => 'vendor_details',
-  'add'                         => 'add',
-  'add_assembly'                => 'add_assembly',
-  'add_part'                    => 'add_part',
-  'add_service'                 => 'add_service',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'edit_assembly'               => 'edit_assembly',
-  'edit_part'                   => 'edit_part',
-  'edit_service'                => 'edit_service',
-  'save'                        => 'save',
-  'save_as_new'                 => 'save_as_new',
-  'update'                      => 'update',
-  'soldtotal'                   => 'soldtotal',
-  'top100'                      => 'top100',
-  'addtop100'                   => 'addtop100',
-  'choice'                      => 'choice',
-  'list'                        => 'list',
-};
-
-1;
diff --git a/locale/en_GB/io b/locale/en_GB/io
deleted file mode 100644 (file)
index 1deb6dc..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-$self{texts} = {
-  'Add Purchase Order'          => 'Add Purchase Order',
-  'Add Sales Order'             => 'Add Sales Order',
-  'Address'                     => 'Address',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Bcc'                         => 'Bcc',
-  'Bin'                         => 'Bin',
-  'Cc'                          => 'Cc',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delivery Date'               => 'Delivery Date',
-  'Description'                 => 'Description',
-  'E-mail'                      => 'E-mail',
-  'E-mail address missing!'     => 'E-mail address missing!',
-  'Extended'                    => 'Extended',
-  'Fax'                         => 'Fax',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'Group'                       => 'Group',
-  'Group Items'                 => 'Group Items',
-  'In-line'                     => 'In-line',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Item not on file!'           => 'Item not on file!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'Name'                        => 'Name',
-  'No.'                         => 'No.',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Number missing in Row'       => 'Number missing in Row',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Order'                       => 'Order',
-  'Order Date missing!'         => 'Order Date missing!',
-  'Order Number missing!'       => 'Order Number missing!',
-  'PDF'                         => 'PDF',
-  'Packing List'                => 'Packing List',
-  'Packing List Date missing!'  => 'Packing List Date missing!',
-  'Packing List Number missing!' => 'Packing List Number missing!',
-  'Part'                        => 'Part',
-  'Phone'                       => 'Phone',
-  'Postscript'                  => 'Postscript',
-  'Price'                       => 'Price',
-  'Printer'                     => 'Printer',
-  'Project'                     => 'Project',
-  'Purchase Order'              => 'Purchase Order',
-  'Qty'                         => 'Qty',
-  'Recd'                        => 'Recd',
-  'Required by'                 => 'Required by',
-  'Sales Order'                 => 'Sales Order',
-  'Screen'                      => 'Screen',
-  'Select from one of the items below' => 'Select from one of the items below',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Service'                     => 'Service',
-  'Ship'                        => 'Ship',
-  'Ship to'                     => 'Ship to',
-  'Subject'                     => 'Subject',
-  'To'                          => 'To',
-  'Unit'                        => 'Unit',
-  'What type of item is this?'  => 'What type of item is this?',
-  'emailed to'                  => 'emailed to',
-  'sent to printer'             => 'sent to printer',
-};
-
-$self{subs} = {
-  'check_form'                  => 'check_form',
-  'customer_details'            => 'customer_details',
-  'display_form'                => 'display_form',
-  'display_row'                 => 'display_row',
-  'e_mail'                      => 'e_mail',
-  'invoicetotal'                => 'invoicetotal',
-  'item_selected'               => 'item_selected',
-  'new_item'                    => 'new_item',
-  'order'                       => 'order',
-  'post_as_new'                 => 'post_as_new',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'select_item'                 => 'select_item',
-  'send_email'                  => 'send_email',
-  'ship_to'                     => 'ship_to',
-  'validate_items'              => 'validate_items',
-  'vendor_details'              => 'vendor_details',
-  'continue'                    => 'continue',
-};
-
-1;
diff --git a/locale/en_GB/ir b/locale/en_GB/ir
deleted file mode 100644 (file)
index a87c72a..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Add Purchase Order'          => 'Add Purchase Order',
-  'Add Sales Order'             => 'Add Sales Order',
-  'Add Vendor Invoice'          => 'Add Vendor Invoice',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Invoice Number' => 'Are you sure you want to delete Invoice Number',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Bcc'                         => 'Bcc',
-  'Bin'                         => 'Bin',
-  'Cannot delete invoice!'      => 'Cannot delete invoice!',
-  'Cannot post invoice for a closed period!' => 'Cannot post invoice for a closed period!',
-  'Cannot post invoice!'        => 'Cannot post invoice!',
-  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
-  'Cc'                          => 'Cc',
-  'Confirm!'                    => 'Confirm!',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Currency'                    => 'Currency',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Delivery Date'               => 'Delivery Date',
-  'Description'                 => 'Description',
-  'Due Date'                    => 'Due Date',
-  'E-mail'                      => 'E-mail',
-  'E-mail address missing!'     => 'E-mail address missing!',
-  'Edit Vendor Invoice'         => 'Edit Vendor Invoice',
-  'Exch'                        => 'Exch',
-  'Exchangerate'                => 'Exchangerate',
-  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
-  'Exchangerate missing!'       => 'Exchangerate missing!',
-  'Extended'                    => 'Extended',
-  'Fax'                         => 'Fax',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'Group'                       => 'Group',
-  'Group Items'                 => 'Group Items',
-  'In-line'                     => 'In-line',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date'                => 'Invoice Date',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number'              => 'Invoice Number',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Invoice deleted!'            => 'Invoice deleted!',
-  'Invoice posted!'             => 'Invoice posted!',
-  'Item not on file!'           => 'Item not on file!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'Name'                        => 'Name',
-  'No.'                         => 'No.',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Number missing in Row'       => 'Number missing in Row',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Order'                       => 'Order',
-  'Order Date missing!'         => 'Order Date missing!',
-  'Order Number'                => 'Order Number',
-  'Order Number missing!'       => 'Order Number missing!',
-  'PDF'                         => 'PDF',
-  'Packing List'                => 'Packing List',
-  'Packing List Date missing!'  => 'Packing List Date missing!',
-  'Packing List Number missing!' => 'Packing List Number missing!',
-  'Part'                        => 'Part',
-  'Payment date missing!'       => 'Payment date missing!',
-  'Payments'                    => 'Payments',
-  'Phone'                       => 'Phone',
-  'Post'                        => 'Post',
-  'Post as new'                 => 'Post as new',
-  'Postscript'                  => 'Postscript',
-  'Price'                       => 'Price',
-  'Printer'                     => 'Printer',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Purchase Order'              => 'Purchase Order',
-  'Qty'                         => 'Qty',
-  'Recd'                        => 'Recd',
-  'Record in'                   => 'Record in',
-  'Required by'                 => 'Required by',
-  'Sales Order'                 => 'Sales Order',
-  'Screen'                      => 'Screen',
-  'Select from one of the items below' => 'Select from one of the items below',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Service'                     => 'Service',
-  'Ship'                        => 'Ship',
-  'Ship to'                     => 'Ship to',
-  'Source'                      => 'Source',
-  'Subject'                     => 'Subject',
-  'Subtotal'                    => 'Subtotal',
-  'Tax Included'                => 'Tax Included',
-  'To'                          => 'To',
-  'Total'                       => 'Total',
-  'Unit'                        => 'Unit',
-  'Update'                      => 'Update',
-  'Vendor'                      => 'Vendor',
-  'Vendor missing!'             => 'Vendor missing!',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'What type of item is this?'  => 'What type of item is this?',
-  'Yes'                         => 'Yes',
-  'ea'                          => 'ea',
-  'emailed to'                  => 'emailed to',
-  'sent to printer'             => 'sent to printer',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_form'                  => 'check_form',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'customer_details'            => 'customer_details',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'display_row'                 => 'display_row',
-  'e_mail'                      => 'e_mail',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'invoice_links'               => 'invoice_links',
-  'invoicetotal'                => 'invoicetotal',
-  'item_selected'               => 'item_selected',
-  'name_selected'               => 'name_selected',
-  'new_item'                    => 'new_item',
-  'order'                       => 'order',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'prepare_invoice'             => 'prepare_invoice',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'select_item'                 => 'select_item',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'send_email'                  => 'send_email',
-  'ship_to'                     => 'ship_to',
-  'update'                      => 'update',
-  'validate_items'              => 'validate_items',
-  'vendor_details'              => 'vendor_details',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'order'                       => 'order',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'update'                      => 'update',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/is b/locale/en_GB/is
deleted file mode 100644 (file)
index bbfa3f0..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Add Purchase Order'          => 'Add Purchase Order',
-  'Add Sales Invoice'           => 'Add Sales Invoice',
-  'Add Sales Order'             => 'Add Sales Order',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Invoice Number' => 'Are you sure you want to delete Invoice Number',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Bcc'                         => 'Bcc',
-  'Bin'                         => 'Bin',
-  'Cannot delete invoice!'      => 'Cannot delete invoice!',
-  'Cannot post invoice for a closed period!' => 'Cannot post invoice for a closed period!',
-  'Cannot post invoice!'        => 'Cannot post invoice!',
-  'Cannot post payment for a closed period!' => 'Cannot post payment for a closed period!',
-  'Cc'                          => 'Cc',
-  'Confirm!'                    => 'Confirm!',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Credit Limit'                => 'Credit Limit',
-  'Currency'                    => 'Currency',
-  'Customer'                    => 'Customer',
-  'Customer missing!'           => 'Customer missing!',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Delivery Date'               => 'Delivery Date',
-  'Description'                 => 'Description',
-  'Due Date'                    => 'Due Date',
-  'E-mail'                      => 'E-mail',
-  'E-mail address missing!'     => 'E-mail address missing!',
-  'Edit Sales Invoice'          => 'Edit Sales Invoice',
-  'Exch'                        => 'Exch',
-  'Exchangerate'                => 'Exchangerate',
-  'Exchangerate for payment missing!' => 'Exchangerate for payment missing!',
-  'Exchangerate missing!'       => 'Exchangerate missing!',
-  'Extended'                    => 'Extended',
-  'Fax'                         => 'Fax',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'Group'                       => 'Group',
-  'Group Items'                 => 'Group Items',
-  'In-line'                     => 'In-line',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date'                => 'Invoice Date',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number'              => 'Invoice Number',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Invoice deleted!'            => 'Invoice deleted!',
-  'Invoice posted!'             => 'Invoice posted!',
-  'Item not on file!'           => 'Item not on file!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'Name'                        => 'Name',
-  'No.'                         => 'No.',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Number missing in Row'       => 'Number missing in Row',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Order'                       => 'Order',
-  'Order Date missing!'         => 'Order Date missing!',
-  'Order Number'                => 'Order Number',
-  'Order Number missing!'       => 'Order Number missing!',
-  'PDF'                         => 'PDF',
-  'Packing List'                => 'Packing List',
-  'Packing List Date missing!'  => 'Packing List Date missing!',
-  'Packing List Number missing!' => 'Packing List Number missing!',
-  'Part'                        => 'Part',
-  'Payment date missing!'       => 'Payment date missing!',
-  'Payments'                    => 'Payments',
-  'Phone'                       => 'Phone',
-  'Post'                        => 'Post',
-  'Post as new'                 => 'Post as new',
-  'Postscript'                  => 'Postscript',
-  'Price'                       => 'Price',
-  'Print'                       => 'Print',
-  'Printer'                     => 'Printer',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Purchase Order'              => 'Purchase Order',
-  'Qty'                         => 'Qty',
-  'Recd'                        => 'Recd',
-  'Record in'                   => 'Record in',
-  'Remaining'                   => 'Remaining',
-  'Required by'                 => 'Required by',
-  'Sales Order'                 => 'Sales Order',
-  'Screen'                      => 'Screen',
-  'Select from one of the items below' => 'Select from one of the items below',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Service'                     => 'Service',
-  'Ship'                        => 'Ship',
-  'Ship to'                     => 'Ship to',
-  'Ship via'                    => 'Ship via',
-  'Source'                      => 'Source',
-  'Subject'                     => 'Subject',
-  'Subtotal'                    => 'Subtotal',
-  'Tax Included'                => 'Tax Included',
-  'To'                          => 'To',
-  'Total'                       => 'Total',
-  'Unit'                        => 'Unit',
-  'Update'                      => 'Update',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'What type of item is this?'  => 'What type of item is this?',
-  'Yes'                         => 'Yes',
-  'ea'                          => 'ea',
-  'emailed to'                  => 'emailed to',
-  'sent to printer'             => 'sent to printer',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_form'                  => 'check_form',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'customer_details'            => 'customer_details',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'display_row'                 => 'display_row',
-  'e_mail'                      => 'e_mail',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'invoice_links'               => 'invoice_links',
-  'invoicetotal'                => 'invoicetotal',
-  'item_selected'               => 'item_selected',
-  'name_selected'               => 'name_selected',
-  'new_item'                    => 'new_item',
-  'order'                       => 'order',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'prepare_invoice'             => 'prepare_invoice',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'select_item'                 => 'select_item',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'send_email'                  => 'send_email',
-  'ship_to'                     => 'ship_to',
-  'update'                      => 'update',
-  'validate_items'              => 'validate_items',
-  'vendor_details'              => 'vendor_details',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'e_mail'                      => 'e_mail',
-  'order'                       => 'order',
-  'post'                        => 'post',
-  'post_as_new'                 => 'post_as_new',
-  'print'                       => 'print',
-  'ship_to'                     => 'ship_to',
-  'update'                      => 'update',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/login b/locale/en_GB/login
deleted file mode 100644 (file)
index 262a18c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-$self{texts} = {
-  'About'                       => 'About',
-  'Database Host'               => 'Database Host',
-  'Dataset'                     => 'Dataset',
-  'Incorrect Dataset version!'  => 'Incorrect Dataset version!',
-  'Incorrect Password!'         => 'Incorrect Password!',
-  'Licensed to'                 => 'Licensed to',
-  'Login'                       => 'Login',
-  'Name'                        => 'Name',
-  'Password'                    => 'Password',
-  'User'                        => 'User',
-  'Version'                     => 'Version',
-  'You are logged out!'         => 'You are logged out!',
-  'You did not enter a name!'   => 'You did not enter a name!',
-  'is not a member!'            => 'is not a member!',
-  'localhost'                   => 'localhost',
-};
-
-$self{subs} = {
-  'company_logo'                => 'company_logo',
-  'login'                       => 'login',
-  'login_screen'                => 'login_screen',
-  'logout'                      => 'logout',
-  'login'                       => 'login',
-};
-
-1;
diff --git a/locale/en_GB/menu b/locale/en_GB/menu
deleted file mode 100644 (file)
index 4e47815..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-$self{texts} = {
-  'AP'                          => 'Purchases',
-  'AP Aging'                    => 'Creditor Aging',
-  'AR'                          => 'Sales',
-  'AR Aging'                    => 'Debtor Aging',
-  'Accounting Menu'             => 'Accounting Menu',
-  'Add Account'                 => 'Add Account',
-  'Add Assembly'                => 'Add Assembly',
-  'Add Customer'                => 'Add Customer',
-  'Add GIFI'                    => 'Add GIFI',
-  'Add Group'                   => 'Add Group',
-  'Add Part'                    => 'Add Part',
-  'Add Project'                 => 'Add Project',
-  'Add Service'                 => 'Add Service',
-  'Add Transaction'             => 'Add Transaction',
-  'Add Vendor'                  => 'Add Vendor',
-  'Assemblies'                  => 'Assemblies',
-  'Audit Control'               => 'Audit Control',
-  'Backup'                      => 'Backup',
-  'Balance Sheet'               => 'Balance Sheet',
-  'Cash'                        => 'Cash',
-  'Chart of Accounts'           => 'Chart of Accounts',
-  'Check'                       => 'Cheque',
-  'Customers'                   => 'Customers',
-  'General Ledger'              => 'General Ledger',
-  'Goods & Services'            => 'Goods & Services',
-  'Groups'                      => 'Groups',
-  'HTML Templates'              => 'HTML Templates',
-  'Income Statement'            => 'Income Statement',
-  'Invoice'                     => 'Invoice',
-  'LaTeX Templates'             => 'LaTeX Templates',
-  'List Accounts'               => 'List Accounts',
-  'List GIFI'                   => 'List GIFI',
-  'Logout'                      => 'Logout',
-  'Order Entry'                 => 'Order Entry',
-  'Packing List'                => 'Packing List',
-  'Parts'                       => 'Parts',
-  'Payment'                     => 'Payment',
-  'Payments'                    => 'Payments',
-  'Preferences'                 => 'Preferences',
-  'Projects'                    => 'Projects',
-  'Purchase Order'              => 'Purchase Order',
-  'Purchase Orders'             => 'Purchase Orders',
-  'Receipt'                     => 'Receipt',
-  'Receipts'                    => 'Receipts',
-  'Reconciliation'              => 'Reconciliation',
-  'Reports'                     => 'Reports',
-  'Sales Invoice'               => 'Sales Invoice',
-  'Sales Order'                 => 'Sales Order',
-  'Sales Orders'                => 'Sales Orders',
-  'Save to File'                => 'Save to File',
-  'Send by E-Mail'              => 'Send by E-Mail',
-  'Services'                    => 'Services',
-  'Statement'                   => 'Statement',
-  'Stock Assembly'              => 'Stock Assembly',
-  'Stylesheet'                  => 'Stylesheet',
-  'System'                      => 'System',
-  'Tax collected'               => 'Tax collected',
-  'Tax paid'                    => 'Tax paid',
-  'Transactions'                => 'Transactions',
-  'Trial Balance'               => 'Trial Balance',
-  'Vendor Invoice'              => 'Vendor Invoice',
-  'Vendors'                     => 'Vendors',
-  'Version'                     => 'Version',
-};
-
-$self{subs} = {
-  'acc_menu'                    => 'acc_menu',
-  'display'                     => 'display',
-  'section_menu'                => 'section_menu',
-};
-
-1;
diff --git a/locale/en_GB/oe b/locale/en_GB/oe
deleted file mode 100644 (file)
index 2dfbb47..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-$self{texts} = {
-  'Add'                         => 'Add',
-  'Add Purchase Order'          => 'Add Purchase Order',
-  'Add Sales Invoice'           => 'Add Sales Invoice',
-  'Add Sales Order'             => 'Add Sales Order',
-  'Add Vendor Invoice'          => 'Add Vendor Invoice',
-  'Address'                     => 'Address',
-  'Amount'                      => 'Amount',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Are you sure you want to delete Order Number' => 'Are you sure you want to delete Order Number',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Bcc'                         => 'Bcc',
-  'Bin'                         => 'Bin',
-  'C'                           => 'C',
-  'Cannot delete order!'        => 'Cannot delete order!',
-  'Cannot save order!'          => 'Cannot save order!',
-  'Cc'                          => 'Cc',
-  'Closed'                      => 'Closed',
-  'Confirm!'                    => 'Confirm!',
-  'Contact'                     => 'Contact',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Credit Limit'                => 'Credit Limit',
-  'Curr'                        => 'Curr',
-  'Currency'                    => 'Currency',
-  'Customer'                    => 'Customer',
-  'Customer missing!'           => 'Customer missing!',
-  'Customer not on file!'       => 'Customer not on file!',
-  'Date'                        => 'Date',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Delete'                      => 'Delete',
-  'Delivery Date'               => 'Delivery Date',
-  'Description'                 => 'Description',
-  'E-mail'                      => 'E-mail',
-  'E-mail address missing!'     => 'E-mail address missing!',
-  'Edit Purchase Order'         => 'Edit Purchase Order',
-  'Edit Sales Order'            => 'Edit Sales Order',
-  'Exchangerate'                => 'Exchangerate',
-  'Exchangerate missing!'       => 'Exchangerate missing!',
-  'Extended'                    => 'Extended',
-  'Fax'                         => 'Fax',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'Group'                       => 'Group',
-  'Group Items'                 => 'Group Items',
-  'ID'                          => 'ID',
-  'In-line'                     => 'In-line',
-  'Include in Report'           => 'Include in Report',
-  'Invoice'                     => 'Invoice',
-  'Invoice Date missing!'       => 'Invoice Date missing!',
-  'Invoice Number missing!'     => 'Invoice Number missing!',
-  'Item not on file!'           => 'Item not on file!',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'Name'                        => 'Name',
-  'No.'                         => 'No.',
-  'Notes'                       => 'Notes',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Number'                      => 'Number',
-  'Number missing in Row'       => 'Number missing in Row',
-  'O'                           => 'O',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'Open'                        => 'Open',
-  'Order'                       => 'Order',
-  'Order Date'                  => 'Order Date',
-  'Order Date missing!'         => 'Order Date missing!',
-  'Order Number'                => 'Order Number',
-  'Order Number missing!'       => 'Order Number missing!',
-  'Order deleted!'              => 'Order deleted!',
-  'Order saved!'                => 'Order saved!',
-  'PDF'                         => 'PDF',
-  'Packing List'                => 'Packing List',
-  'Packing List Date missing!'  => 'Packing List Date missing!',
-  'Packing List Number missing!' => 'Packing List Number missing!',
-  'Part'                        => 'Part',
-  'Phone'                       => 'Phone',
-  'Postscript'                  => 'Postscript',
-  'Price'                       => 'Price',
-  'Print'                       => 'Print',
-  'Printer'                     => 'Printer',
-  'Project'                     => 'Project',
-  'Project not on file!'        => 'Project not on file!',
-  'Purchase Order'              => 'Purchase Order',
-  'Purchase Orders'             => 'Purchase Orders',
-  'Qty'                         => 'Qty',
-  'Recd'                        => 'Recd',
-  'Remaining'                   => 'Remaining',
-  'Required by'                 => 'Required by',
-  'Sales Order'                 => 'Sales Order',
-  'Sales Orders'                => 'Sales Orders',
-  'Save'                        => 'Save',
-  'Save as new'                 => 'Save as new',
-  'Screen'                      => 'Screen',
-  'Select from one of the items below' => 'Select from one of the items below',
-  'Select from one of the names below' => 'Select from one of the names below',
-  'Select from one of the projects below' => 'Select from one of the projects below',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Service'                     => 'Service',
-  'Ship'                        => 'Ship',
-  'Ship to'                     => 'Ship to',
-  'Ship via'                    => 'Ship via',
-  'Subject'                     => 'Subject',
-  'Subtotal'                    => 'Subtotal',
-  'Tax'                         => 'Tax',
-  'Tax Included'                => 'Tax Included',
-  'Terms: Net'                  => 'Terms: Net',
-  'To'                          => 'To',
-  'Total'                       => 'Total',
-  'Unit'                        => 'Unit',
-  'Update'                      => 'Update',
-  'Vendor'                      => 'Vendor',
-  'Vendor missing!'             => 'Vendor missing!',
-  'Vendor not on file!'         => 'Vendor not on file!',
-  'What type of item is this?'  => 'What type of item is this?',
-  'Yes'                         => 'Yes',
-  'days'                        => 'days',
-  'ea'                          => 'ea',
-  'emailed to'                  => 'emailed to',
-  'sent to printer'             => 'sent to printer',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'add_transaction'             => 'add_transaction',
-  'ap_transaction'              => 'ap_transaction',
-  'ar_transaction'              => 'ar_transaction',
-  'check_form'                  => 'check_form',
-  'check_name'                  => 'check_name',
-  'check_project'               => 'check_project',
-  'continue'                    => 'continue',
-  'create_backorder'            => 'create_backorder',
-  'customer_details'            => 'customer_details',
-  'delete'                      => 'delete',
-  'display_form'                => 'display_form',
-  'display_row'                 => 'display_row',
-  'e_mail'                      => 'e_mail',
-  'edit'                        => 'edit',
-  'form_footer'                 => 'form_footer',
-  'form_header'                 => 'form_header',
-  'gl_transaction'              => 'gl_transaction',
-  'invoice'                     => 'invoice',
-  'invoicetotal'                => 'invoicetotal',
-  'item_selected'               => 'item_selected',
-  'name_selected'               => 'name_selected',
-  'new_item'                    => 'new_item',
-  'order'                       => 'order',
-  'order_links'                 => 'order_links',
-  'orders'                      => 'orders',
-  'post_as_new'                 => 'post_as_new',
-  'prepare_order'               => 'prepare_order',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'project_selected'            => 'project_selected',
-  'sales_invoice'               => 'sales_invoice',
-  'save'                        => 'save',
-  'save_as_new'                 => 'save_as_new',
-  'search'                      => 'search',
-  'select_item'                 => 'select_item',
-  'select_name'                 => 'select_name',
-  'select_project'              => 'select_project',
-  'send_email'                  => 'send_email',
-  'ship_to'                     => 'ship_to',
-  'subtotal'                    => 'subtotal',
-  'update'                      => 'update',
-  'validate_items'              => 'validate_items',
-  'vendor_details'              => 'vendor_details',
-  'vendor_invoice'              => 'vendor_invoice',
-  'yes'                         => 'yes',
-  'add'                         => 'add',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'e_mail'                      => 'e_mail',
-  'invoice'                     => 'invoice',
-  'print'                       => 'print',
-  'save'                        => 'save',
-  'save_as_new'                 => 'save_as_new',
-  'ship_to'                     => 'ship_to',
-  'update'                      => 'update',
-  'yes'                         => 'yes',
-};
-
-1;
diff --git a/locale/en_GB/pe b/locale/en_GB/pe
deleted file mode 100644 (file)
index 58cd57a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-$self{texts} = {
-  'Add'                         => 'Add',
-  'Add Group'                   => 'Add Group',
-  'Add Project'                 => 'Add Project',
-  'All'                         => 'All',
-  'Continue'                    => 'Continue',
-  'Delete'                      => 'Delete',
-  'Description'                 => 'Description',
-  'Edit Group'                  => 'Edit Group',
-  'Edit Project'                => 'Edit Project',
-  'Group'                       => 'Group',
-  'Group deleted!'              => 'Group deleted!',
-  'Group missing!'              => 'Group missing!',
-  'Group saved!'                => 'Group saved!',
-  'Groups'                      => 'Groups',
-  'Number'                      => 'Number',
-  'Orphaned'                    => 'Orphaned',
-  'Project'                     => 'Project',
-  'Project Number missing!'     => 'Project Number missing!',
-  'Project deleted!'            => 'Project deleted!',
-  'Project saved!'              => 'Project saved!',
-  'Projects'                    => 'Projects',
-  'Save'                        => 'Save',
-};
-
-$self{subs} = {
-  'add'                         => 'add',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'edit'                        => 'edit',
-  'form_partsgroup_footer'      => 'form_partsgroup_footer',
-  'form_partsgroup_header'      => 'form_partsgroup_header',
-  'form_project_footer'         => 'form_project_footer',
-  'form_project_header'         => 'form_project_header',
-  'partsgroup_report'           => 'partsgroup_report',
-  'project_report'              => 'project_report',
-  'save'                        => 'save',
-  'search'                      => 'search',
-  'add'                         => 'add',
-  'continue'                    => 'continue',
-  'delete'                      => 'delete',
-  'save'                        => 'save',
-};
-
-1;
diff --git a/locale/en_GB/rc b/locale/en_GB/rc
deleted file mode 100644 (file)
index 952c378..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-$self{texts} = {
-  'Account'                     => 'Account',
-  'Balance'                     => 'Balance',
-  'Cleared Balance'             => 'Cleared Balance',
-  'Continue'                    => 'Continue',
-  'Date'                        => 'Date',
-  'Deposit'                     => 'Deposit',
-  'Description'                 => 'Description',
-  'Difference'                  => 'Difference',
-  'Done'                        => 'Done',
-  'Exchangerate Difference'     => 'Exchangerate Difference',
-  'From'                        => 'From',
-  'Out of balance!'             => 'Out of balance!',
-  'Payment'                     => 'Payment',
-  'Reconciliation'              => 'Reconciliation',
-  'Select all'                  => 'Select all',
-  'Source'                      => 'Source',
-  'Statement Balance'           => 'Statement Balance',
-  'Update'                      => 'Update',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'continue'                    => 'continue',
-  'display_form'                => 'display_form',
-  'done'                        => 'done',
-  'get_payments'                => 'get_payments',
-  'reconciliation'              => 'reconciliation',
-  'select_all'                  => 'select_all',
-  'update'                      => 'update',
-  'continue'                    => 'continue',
-  'done'                        => 'done',
-  'select_all'                  => 'select_all',
-  'update'                      => 'update',
-};
-
-1;
diff --git a/locale/en_GB/rp b/locale/en_GB/rp
deleted file mode 100644 (file)
index a66828e..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-$self{texts} = {
-  'AP Aging'                    => 'Creditor Aging',
-  'AR Aging'                    => 'Debtor Aging',
-  'Account'                     => 'Account',
-  'Accounts'                    => 'Accounts',
-  'Amount'                      => 'Amount',
-  'Apr'                         => 'Apr',
-  'April'                       => 'April',
-  'Attachment'                  => 'Attachment',
-  'Aug'                         => 'Aug',
-  'August'                      => 'August',
-  'Balance'                     => 'Balance',
-  'Balance Sheet'               => 'Balance Sheet',
-  'Bcc'                         => 'Bcc',
-  'Cash based'                  => 'Cash based',
-  'Cc'                          => 'Cc',
-  'Compare to'                  => 'Compare to',
-  'Continue'                    => 'Continue',
-  'Copies'                      => 'Copies',
-  'Credit'                      => 'Credit',
-  'Current'                     => 'Current',
-  'Customer'                    => 'Customer',
-  'Date'                        => 'Date',
-  'Debit'                       => 'Debit',
-  'Dec'                         => 'Dec',
-  'December'                    => 'December',
-  'Decimalplaces'               => 'Decimalplaces',
-  'Description'                 => 'Description',
-  'Due'                         => 'Due',
-  'E-mail'                      => 'E-mail',
-  'E-mail Statement to'         => 'E-mail Statement to',
-  'Feb'                         => 'Feb',
-  'February'                    => 'February',
-  'From'                        => 'From',
-  'GIFI'                        => 'GIFI',
-  'Heading'                     => 'Heading',
-  'ID'                          => 'ID',
-  'In-line'                     => 'In-line',
-  'Include in Report'           => 'Include in Report',
-  'Income Statement'            => 'Income Statement',
-  'Invoice'                     => 'Invoice',
-  'Jan'                         => 'Jan',
-  'January'                     => 'January',
-  'Jul'                         => 'Jul',
-  'July'                        => 'July',
-  'Jun'                         => 'Jun',
-  'June'                        => 'June',
-  'Mar'                         => 'Mar',
-  'March'                       => 'March',
-  'May'                         => 'May',
-  'May '                        => 'May ',
-  'Message'                     => 'Message',
-  'N/A'                         => 'N/A',
-  'Nothing selected!'           => 'Nothing selected!',
-  'Nov'                         => 'Nov',
-  'November'                    => 'November',
-  'Oct'                         => 'Oct',
-  'October'                     => 'October',
-  'PDF'                         => 'PDF',
-  'Payments'                    => 'Payments',
-  'Postscript'                  => 'Postscript',
-  'Print'                       => 'Print',
-  'Printer'                     => 'Printer',
-  'Project Number'              => 'Project Number',
-  'Receipts'                    => 'Receipts',
-  'Report for'                  => 'Report for',
-  'Retained Earnings'           => 'Retained Earnings',
-  'Screen'                      => 'Screen',
-  'Select all'                  => 'Select all',
-  'Select postscript or PDF!'   => 'Select postscript or PDF!',
-  'Sep'                         => 'Sep',
-  'September'                   => 'September',
-  'Source'                      => 'Source',
-  'Standard'                    => 'Standard',
-  'Statement'                   => 'Statement',
-  'Statement sent to'           => 'Statement sent to',
-  'Statements sent to printer!' => 'Statements sent to printer!',
-  'Subject'                     => 'Subject',
-  'Subtotal'                    => 'Subtotal',
-  'Tax'                         => 'Tax',
-  'Tax collected'               => 'Tax collected',
-  'Tax paid'                    => 'Tax paid',
-  'Total'                       => 'Total',
-  'Trial Balance'               => 'Trial Balance',
-  'Vendor'                      => 'Vendor',
-  'as at'                       => 'as at',
-  'collected on sales'          => 'collected on sales',
-  'for Period'                  => 'for Period',
-  'paid on purchases'           => 'paid on purchases',
-  'to'                          => 'to',
-};
-
-$self{subs} = {
-  'aging'                       => 'aging',
-  'continue'                    => 'continue',
-  'e_mail'                      => 'e_mail',
-  'generate_ap_aging'           => 'generate_ap_aging',
-  'generate_ar_aging'           => 'generate_ar_aging',
-  'generate_balance_sheet'      => 'generate_balance_sheet',
-  'generate_income_statement'   => 'generate_income_statement',
-  'generate_tax_report'         => 'generate_tax_report',
-  'generate_trial_balance'      => 'generate_trial_balance',
-  'list_accounts'               => 'list_accounts',
-  'list_payments'               => 'list_payments',
-  'print'                       => 'print',
-  'print_form'                  => 'print_form',
-  'print_options'               => 'print_options',
-  'report'                      => 'report',
-  'select_all'                  => 'select_all',
-  'send_email'                  => 'send_email',
-  'statement_details'           => 'statement_details',
-  'tax_subtotal'                => 'tax_subtotal',
-  'continue'                    => 'continue',
-  'e_mail'                      => 'e_mail',
-  'print'                       => 'print',
-  'select_all'                  => 'select_all',
-};
-
-1;
diff --git a/locale/fr/LANGUAGE b/locale/fr/LANGUAGE
deleted file mode 100644 (file)
index 744b2c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-French
diff --git a/locale/fr/LANGUAGE.deactivated b/locale/fr/LANGUAGE.deactivated
new file mode 100644 (file)
index 0000000..744b2c3
--- /dev/null
@@ -0,0 +1 @@
+French
diff --git a/templates/webpages/acctranscorrections/analyze_filter_en.html b/templates/webpages/acctranscorrections/analyze_filter_en.html
new file mode 100644 (file)
index 0000000..cc00a72
--- /dev/null
@@ -0,0 +1,51 @@
+[% USE HTML %]
+<body>
+ <p><div class="listheading">[% title %]</div></p>
+
+ <p>
+  Earlier versions of Lx-Office contained bugs which might have led to wrong entries in the general ledger.
+  These wrong entries cannot be fixed automatically.
+  This module can help you identify and correct such entries by analyzing the general ledger and presenting you likely solutions but also allowing you to fix problems yourself.
+ </p>
+
+ <form name="filter" method="post" action="acctranscorrections.pl">
+
+  <p>Time period for the analysis:</p>
+
+  <p>
+   <table>
+    <tr>
+     <td><input type="radio" name="scope" id="scope_full" value="full" checked></td>
+     <td><label for="scope_full">All general ledger entries</label></td>
+    </tr>
+
+    <tr>
+     <td><input type="radio" name="scope" id="scope_period" value="period"></td>
+     <td>
+      Period:
+      from (time)
+      <input name="transdate_from" id="transdate_from" size="10">
+      <input type="button" name="transdate_from_trigger" id="transdate_from_trigger" value="?">
+      to (time)
+      <input name="transdate_to" id="transdate_to" size="10">
+      <input type="button" name="transdate_to_trigger" id="transdate_to_trigger" value="?">
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" value="Start analysis">
+  </p>
+
+  <input type="hidden" name="action" value="analyze">
+ </form>
+
+ <script type="text/javascript">
+  <!--
+    Calendar.setup({ inputField : "transdate_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "transdate_from_trigger" });
+    Calendar.setup({ inputField : "transdate_to",   ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "transdate_to_trigger" });
+  //-->
+ </script>
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/analyze_overview_en.html b/templates/webpages/acctranscorrections/analyze_overview_en.html
new file mode 100644 (file)
index 0000000..47cd963
--- /dev/null
@@ -0,0 +1,137 @@
+[% USE HTML %][% USE LxERP %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>Lx-Office has found one or more problems in the general ledger.</p>
+
+ <p>
+  Period:
+  [%- IF transdate_from || transdate_to %]
+   [%- IF transdate_from %]
+   from (time) [% transdate_from %]
+   [%- END %]
+   [%- IF transdate_to %]
+   to (time) [% transdate_to %]
+   [%- END %]
+  [%- ELSE %]
+  all entries
+  [%- END %]
+ </p>
+
+ <p>
+  <table width="100%">
+   <tr>
+    <th class="listheading">Transaction</th>
+    <th class="listheading">Problem</th>
+    <th class="listheading">Solution</th>
+   </tr>
+
+   [%- FOREACH problem = PROBLEMS %]
+   <tr class="listrow[% loop.count % 2 %]">
+    <td valign="top">
+     [%- IF problem.type == 'ap_ar_wrong_taxkeys' %]
+      [%- IF problem.ap_problems.size %]
+       Purchase Transactions
+       [%- FOREACH ap = problem.ap_problems %]
+        [%- UNLESS loop.first %], [%- END %]
+        <a href="[% ap.link %]">[% HTML.escape(ap.data.reference) %]</a>
+       [%- END %]
+      [%- END %]
+
+      [%- IF problem.ar_problems.size %]
+       [%- IF problem.ap_problems.size %]; [%- END %]
+       Sales Transactions
+       [%- FOREACH ar = problem.ar_problems %]
+        [%- UNLESS loop.first %], [%- END %]
+        <a href="[% ar.link %]">[% HTML.escape(ar.data.reference) %]</a>
+       [%- END %]
+      [%- END %]
+
+
+     [%- ELSIF problem.type == 'invoice_inventory_with_taxkeys' %]
+      [%- IF problem.ar_problems.size %]
+       Sales invoices
+       [%- FOREACH subproblem = problem.ar_problems %]
+        [%- UNLESS loop.first %], [%- END %]
+        <a href="[% subproblem.link %]">[% HTML.escape(subproblem.data.reference) %]</a>
+       [%- END %]
+      [%- END %]
+
+      [%- IF problem.ap_problems.size %]
+       [%- IF problem.ar_problems.size %]; [%- END %]
+       Purchase invoices
+       [%- FOREACH subproblem = problem.ap_problems %]
+        [%- UNLESS loop.first %], [%- END %]
+        <a href="[% subproblem.link %]">[% HTML.escape(subproblem.data.reference) %]</a>
+       [%- END %]
+      [%- END %]
+
+     [%- ELSE %]
+
+     <a href="[% problem.link %]">
+      [%- IF problem.data.module == 'ar' %]
+      Sales Transaction
+      [%- ELSIF problem.data.module == 'ap' %]
+      Purchase Transaction
+      [%- ELSE %]
+      General Ledger Transaction
+      [%- END %]
+      [% HTML.escape(problem.data.reference) %]
+     </a>
+
+      <!-- ( [% problem.data.module %].id = acc_trans.trans_id = [% HTML.escape(problem.data.trans_id) %] ) -->
+
+     [%- END %]
+    </td>
+
+    <td valign="top">
+     [%- IF problem.type == 'split_multiple_credit_and_debit' %]
+     Transaction has been split on both the credit and the debit side
+
+     [%- ELSIF problem.type == 'wrong_taxkeys' %]
+     Wrong tax keys recorded
+
+     [%- ELSIF problem.type == 'wrong_taxes' %]
+     Wrong taxes recorded
+
+     [%- ELSIF problem.type == 'ap_ar_wrong_taxkeys' %]
+     AP transactions with sales taxkeys and/or AR transactions with input taxkeys
+
+     [%- ELSIF problem.type == 'invoice_inventory_with_taxkeys' %]
+     Sales and purchase invoices with inventory transactions with taxkeys
+
+     [%- END %]
+    </td>
+
+    <td valign="top">
+     [%- IF problem.type == 'split_multiple_credit_and_debit' %]
+     This transaction has to be split into several transactions manually.
+
+     [%- ELSIF (problem.type == 'wrong_taxkeys') || (problem.type == 'wrong_taxes') %]
+     <a href="acctranscorrections.pl?action=assistant&trans_id=[% HTML.url(problem.data.trans_id) %]&trans_module=[% HTML.url(problem.data.module) %]&trans_reference=[% HTML.url(problem.data.reference) %]&callback=[% callback %]">
+      Start the correction assistant
+     </a>
+
+     [%- ELSIF problem.type == 'ap_ar_wrong_taxkeys' %]
+     <a href="acctranscorrections.pl?action=assistant_for_ap_ar_wrong_taxkeys&callback=[% callback %]">
+      Start the correction assistant
+     </a>
+
+     [%- ELSIF problem.type == 'invoice_inventory_with_taxkeys' %]
+     <a href="acctranscorrections.pl?action=assistant_for_invoice_inventory_with_taxkeys&callback=[% callback %]">
+      Start the correction assistant
+     </a>
+
+     [%- END %]
+    </td>
+   </tr>
+   [%- END %]
+
+  </table>
+ </p>
+
+ <hr>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/assistant_for_ap_ar_wrong_taxkeys_en.html b/templates/webpages/acctranscorrections/assistant_for_ap_ar_wrong_taxkeys_en.html
new file mode 100644 (file)
index 0000000..aa62120
--- /dev/null
@@ -0,0 +1,31 @@
+[% USE HTML %][% USE LxERP %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  There is at least one transaction for which the user has chosen a logically wrong taxkey.
+
+  This means that the user has created an AP transaction and chosen a taxkey for sales taxes, or that he has created an AR transaction and chosen a taxkey for input taxes.
+ </p>
+
+ <p>
+  Lx-Office can fix these problems automatically.
+
+  For AP transactions it will replace the sales taxkeys with input taxkeys with the same tax rate.
+
+  For AR transactions it will replace the input taxkeys with sales taxkeys with the same tax rate.
+ </p>
+
+ <form name="Form" action="acctranscorrections.pl" method="post">
+
+  <p>
+   <input type="hidden" name="action" value="fix_ap_ar_wrong_taxkeys">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" class="submit" value="Fix transactions">
+   <input type="button" class="submit" onclick="history.back()" value="Back">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/assistant_for_invoice_inventory_with_taxkeys_en.html b/templates/webpages/acctranscorrections/assistant_for_invoice_inventory_with_taxkeys_en.html
new file mode 100644 (file)
index 0000000..502c281
--- /dev/null
@@ -0,0 +1,27 @@
+[% USE HTML %][% USE LxERP %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  There is at least one sales or purchase invoice for which Lx-Office recorded an inventory transaction with taxkeys even though no tax was recorded.
+ </p>
+
+ <p>
+  Lx-Office can fix these problems automatically.
+
+  It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.
+ </p>
+
+ <form name="Form" action="acctranscorrections.pl" method="post">
+
+  <p>
+   <input type="hidden" name="action" value="fix_invoice_inventory_with_taxkeys">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" class="submit" value="Fix transactions">
+   <input type="button" class="submit" onclick="history.back()" value="Back">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/assistant_for_wrong_taxes_en.html b/templates/webpages/acctranscorrections/assistant_for_wrong_taxes_en.html
new file mode 100644 (file)
index 0000000..e9cb8ea
--- /dev/null
@@ -0,0 +1,80 @@
+[% USE HTML %][% USE LxERP %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  The following transaction contains wrong taxes:
+  <a href="[% problem.link %]">
+   [%- IF problem.data.module == 'ar' %]
+   Sales Transaction
+   [%- ELSIF problem.data.module == 'ap' %]
+   Purchase Transaction
+   [%- ELSE %]
+   General Ledger Transaction
+   [%- END %]
+   [% HTML.escape(problem.data.reference) %]
+  </a>
+ </p>
+
+ <p>At the moment the transaction looks like this:</p>
+
+ <p>
+  <table>
+   <tr>
+    <th class="listheading">Account</th>
+    <th class="listheading">Debit</th>
+    <th class="listheading">Credit</th>
+    <th class="listheading">Taxkey</th>
+    <th class="listheading">Recorded Tax</th>
+    <th class="listheading">Expected Tax</th>
+    <th class="listheading"></th>
+   </tr>
+
+   [%- SET curr_row = 0 %]
+   [%- IF problem.acc_trans.credit.entries.size > problem.acc_trans.debit.entries.size %]
+    [%- SET order = [ 'credit', 'debit' ] %]
+    [%- SET other_side = 'debit' %]
+   [%- ELSE %]
+    [%- SET order = [ 'debit', 'credit' ] %]
+    [%- SET other_side = 'credit' %]
+   [%- END %]
+
+   [%- FOREACH idx = order %]
+    [%- FOREACH row = problem.acc_trans.$idx.entries %]
+     [%- SET curr_row = curr_row + 1 %]
+     <tr class="listrow[% curr_row % 2 %]">
+      <td>[% HTML.escape(row.accno) %]--[% HTML.escape(row.chartdescription) %]</td>
+      <td align="right">
+       [%- IF idx == 'debit' %]
+        [% LxERP.format_amount(row.display_amount, 2) %]
+       [%- END %]
+      </td>
+      <td align="right">
+       [%- IF idx == 'credit' %]
+        [% LxERP.format_amount(row.display_amount, 2) %]
+       [%- END %]
+      </td>
+      <td>[% IF idx != other_side %][% HTML.escape(row.taxdescription) %][% END %]</td>
+      <td align="right">[% IF row.actual_tax %][% LxERP.format_amount(row.actual_tax, 2) %][% END %]</td>
+      <td align="right">[% IF row.expected_tax %][% LxERP.format_amount(row.expected_tax, 2) %][% END %]</td>
+      <td align="center" valign="center"><img src="image/[% IF row.tax_error %]error[% ELSE %]ok[% END %].png"></td>
+     </tr>
+    [%- END %]
+   [%- END %]
+
+  </table>
+ </p>
+ <hr>
+
+ <form method="post" action="acctranscorrections.pl">
+  <p>
+   <input type="hidden" name="action" value="delete_transaction">
+   <input type="hidden" name="trans_id" value="[% HTML.escape(problem.data.trans_id) %]">
+   <input type="submit" class="submit" value="Delete transaction">
+   <input type="button" class="submit" onclick="history.back()" value="Back">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/assistant_for_wrong_taxkeys_en.html b/templates/webpages/acctranscorrections/assistant_for_wrong_taxkeys_en.html
new file mode 100644 (file)
index 0000000..e89cd82
--- /dev/null
@@ -0,0 +1,145 @@
+[% USE HTML %][% USE LxERP %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  The following transaction contains wrong taxkeys:
+  <a href="[% problem.link %]">
+   [%- IF problem.data.module == 'ar' %]
+   Sales Transaction
+   [%- ELSIF problem.data.module == 'ap' %]
+   Purchase Transaction
+   [%- ELSE %]
+   General Ledger Transaction
+   [%- END %]
+   [% HTML.escape(problem.data.reference) %]
+  </a>
+ </p>
+
+ <p>
+  This could have happened for two reasons:
+
+  The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.
+
+  The second reason is that Lx-Office allowed the user to enter the tax amount manually regardless of the taxkey used.
+
+  Such entries cannot be exported into the DATEV format and have to be fixed as well.
+ </p>
+
+ <p>
+  The transaction is shown below in its current state.
+
+  You can correct this transaction by chosing the correct taxkeys from the drop down boxes and hitting the button "Fix transaction" afterwards.
+
+  It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don't match the selected taxkey). Therefore you should re-run the general ledger analysis.
+ </p>
+
+ <p>
+  You can also delete this transaction and re-enter it manually.
+
+  In order to do that hit the button "Delete transaction".
+ </p>
+
+ <p>At the moment the transaction looks like this:</p>
+
+ <form method="post" action="acctranscorrections.pl" name="Form">
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">Account</th>
+     <th class="listheading">Debit</th>
+     <th class="listheading">Credit</th>
+     <th class="listheading">Recorded Tax</th>
+     <th class="listheading">Recorded taxkey</th>
+     <th class="listheading">Expected Tax</th>
+     <th class="listheading"></th>
+     <th class="listheading">Correct taxkey</th>
+    </tr>
+
+    [%- SET curr_row = 0 %]
+    [%- IF (problem.data.module == 'ar') || ((problem.data.module == 'gl') && (problem.acc_trans.credit.entries.first.acc_trans_id < problem.acc_trans.debit.entries.first.acc_trans_id)) %]
+     [%- SET order = [ 'credit', 'debit' ] %]
+     [%- SET other_side = 'debit' %]
+    [%- ELSE %]
+     [%- SET order = [ 'debit', 'credit' ] %]
+     [%- SET other_side = 'credit' %]
+    [%- END %]
+
+
+    [%- IF problem.acc_trans.credit.entries.size > problem.acc_trans.debit.entries.size %]
+    [%- ELSE %]
+    [%- END %]
+
+
+    [%- FOREACH idx = order %]
+     [%- FOREACH row = problem.acc_trans.$idx.entries %]
+      [%- SET curr_row = curr_row + 1 %]
+      <tr class="listrow[% curr_row % 2 %]">
+       <td>[% HTML.escape(row.accno) %]--[% HTML.escape(row.chartdescription) %]</td>
+       <td align="right">
+        [%- IF idx == 'debit' %]
+         [% LxERP.format_amount(row.display_amount, 2) %]
+        [%- END %]
+       </td>
+       <td align="right">
+        [%- IF idx == 'credit' %]
+         [% LxERP.format_amount(row.display_amount, 2) %]
+        [%- END %]
+       </td>
+       <td align="right">[% IF row.actual_tax %][% LxERP.format_amount(row.display_actual_tax, 2) %][% END %]</td>
+       <td>[% IF (problem.data.module == 'gl') || (idx != other_side) %][% HTML.escape(row.taxdescription) %][% END %]</td>
+       <td align="right">[% IF row.expected_tax %][% LxERP.format_amount(row.display_expected_tax, 2) %][% END %]</td>
+       <td align="center" valign="center"><img src="image/[% IF row.taxkey_error %]error[% ELSE %]ok[% END %].png"></td>
+
+       <td>
+        [%- IF row.taxkey_error %]
+         <input type="hidden" name="fixes[+].acc_trans_id" value="[% HTML.escape(row.acc_trans_id) %]">
+         <input type="hidden" name="fixes[].tax_entry_acc_trans_id" value="[% HTML.escape(row.tax_entry_acc_trans_id) %]">
+         <select name="fixes[].taxkey" style="width: 250px" onchange="enable_fix_button_maybe()">
+          <option value="">---please select---</option>
+          [%- FOREACH taxkey = row.correct_taxkeys %]
+           <option value="[% HTML.escape(taxkey.taxkey) %]">[% HTML.escape(taxkey.description) %]</option>
+          [%- END %]
+        [%- ELSE %]
+        &nbsp;
+        [%- END %]
+      </tr>
+     [%- END %]
+    [%- END %]
+
+   </table>
+  </p>
+  <hr>
+
+  <p>
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+   <input type="hidden" name="action" value="dispatcher">
+   <input type="hidden" name="trans_id" value="[% HTML.escape(problem.data.trans_id) %]">
+   <input type="hidden" name="module" value="[% HTML.escape(problem.data.module) %]">
+   <input type="hidden" name="reference" value="[% HTML.escape(problem.data.reference) %]">
+   <input type="submit" class="submit" id="fix_transaction_button" name="action_fix_wrong_taxkeys" value="Fix transaction" disabled>
+   <input type="submit" class="submit" name="action_delete_transaction" value="Delete transaction">
+   <input type="button" class="submit" onclick="history.back()" value="Back">
+  </p>
+ </form>
+
+ <script type="text/javascript" src="js/jquery.js"></script>
+ <script type="text/javascript">
+  <!--
+    function enable_fix_button_maybe() {
+      var all_set = true;
+      $("[@name='fixes[].taxkey']").each(function () {
+        var val = $(this).attr('value');
+        if (val == '')
+          all_set = false;
+      });
+
+      $("#fix_transaction_button").attr('disabled', !all_set);
+    }
+    -->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/delete_transaction_confirmation_en.html b/templates/webpages/acctranscorrections/delete_transaction_confirmation_en.html
new file mode 100644 (file)
index 0000000..1042259
--- /dev/null
@@ -0,0 +1,32 @@
+[% USE HTML %]
+[% USE LxERP %]
+<body>
+ <p><div class="listheading">[% title %]</div></p>
+
+ <p>
+  [%- IF module == 'ar' %]
+  [%- HTML.escape(LxERP.format_string('Do you really want to delete AR transaction #1?', reference)) %]
+  [%- ELSIF module == 'ap' %]
+  [%- HTML.escape(LxERP.format_string('Do you really want to delete AP transaction #1?', reference)) %]
+  [%- ELSE %]
+  [%- HTML.escape(LxERP.format_string('Do you really want to delete GL transaction #1?', reference)) %]
+  [%- END %]
+ </p>
+
+ <p>
+  <form method="post" action="acctranscorrections.pl">
+
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="hidden" name="trans_id" value="[% HTML.escape(trans_id) %]">
+   <input type="hidden" name="module" value="[% HTML.escape(module) %]">
+   <input type="hidden" name="reference" value="[% HTML.escape(reference) %]">
+
+   <input type="hidden" name="confirmation" value="1">
+   <input type="hidden" name="action" value="delete_transaction">
+
+   <input type="submit" value="Yes">
+   <input type="button" onclick="history.back()" value="No">
+  </form>
+ </p>
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/delete_transaction_en.html b/templates/webpages/acctranscorrections/delete_transaction_en.html
new file mode 100644 (file)
index 0000000..0e20111
--- /dev/null
@@ -0,0 +1,25 @@
+[% USE HTML %]
+[% USE LxERP %]
+<body>
+ <p><div class="listheading">[% title %]</div></p>
+
+ <p>
+  [%- IF module == 'ar' %]
+  [%- HTML.escape(LxERP.format_string('The AR transaction #1 has been deleted.', reference)) %]
+  [%- ELSIF module == 'ap' %]
+  [%- HTML.escape(LxERP.format_string('The AP transaction #1 has been deleted.', reference)) %]
+  [%- ELSE %]
+  [%- HTML.escape(LxERP.format_string('The GL transaction #1 has been deleted.', reference)) %]
+  [%- END %]
+ </p>
+
+ <p>
+  <form method="post" action="acctranscorrections.pl">
+
+   <input type="hidden" name="action" value="redirect">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" value="Re-run analysis">
+  </form>
+ </p>
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/fix_ap_ar_wrong_taxkeys_en.html b/templates/webpages/acctranscorrections/fix_ap_ar_wrong_taxkeys_en.html
new file mode 100644 (file)
index 0000000..b0c72fe
--- /dev/null
@@ -0,0 +1,22 @@
+[% USE HTML %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  The wrong taxkeys for AP and AR transactions have been fixed.
+
+  Please re-run the analysis for broken general ledger entries by clicking this button:
+ </p>
+
+ <p>
+  <form action="acctranscorrections.pl" method="post">
+
+   <input type="hidden" name="action" value="redirect">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" value="Re-run analysis">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/fix_invoice_inventory_with_taxkeys_en.html b/templates/webpages/acctranscorrections/fix_invoice_inventory_with_taxkeys_en.html
new file mode 100644 (file)
index 0000000..3b3bb60
--- /dev/null
@@ -0,0 +1,22 @@
+[% USE HTML %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  The wrong taxkeys for inventory transactions for sales and purchase invoices have been fixed.
+
+  Please re-run the analysis for broken general ledger entries by clicking this button:
+ </p>
+
+ <p>
+  <form action="acctranscorrections.pl" method="post">
+
+   <input type="hidden" name="action" value="redirect">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" value="Re-run analysis">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/acctranscorrections/fix_wrong_taxkeys_en.html b/templates/webpages/acctranscorrections/fix_wrong_taxkeys_en.html
new file mode 100644 (file)
index 0000000..0de8764
--- /dev/null
@@ -0,0 +1,22 @@
+[% USE HTML %]
+<body>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <p>
+  The wrong taxkeys have been fixed.
+
+  Please re-run the analysis for broken general ledger entries by clicking this button:
+ </p>
+
+ <p>
+  <form action="acctranscorrections.pl" method="post">
+
+   <input type="hidden" name="action" value="redirect">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+   <input type="submit" value="Re-run analysis">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/adminlogin_en.html b/templates/webpages/admin/adminlogin_en.html
new file mode 100644 (file)
index 0000000..0ea7a6d
--- /dev/null
@@ -0,0 +1,33 @@
+[% USE HTML %]<body class="admin" onload="document.getElementById('rpw').focus()">
+
+ <div align="center">
+
+  <a href="http://www.lx-office.org"><img src="image/lx-office-erp.png" border="0"></a>
+
+  <h1 class="login">Version [% HTML.escape(version) %]</h1>
+
+  <h2>Administration</h2>
+
+  [% IF error_message %]
+  <p><span class="error_message">[% error_message %]</span></p>
+  [% END %]
+
+  <form method="post" action="admin.pl">
+
+   <table>
+    <tr>
+     <th>Password</th>
+     <td><input type="password" name="rpw" id="rpw"></td>
+     <td><input type="submit" class="submit" name="action" value="Login"></td>
+    </tr>
+    <input type="hidden" name="action" value="login">
+   </table>
+
+  </form>
+
+  <p><a href="http://www.lx-office.org/">Lx-Office website</a></p>
+
+ </div>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/backup_dataset_email_done_en.html b/templates/webpages/admin/backup_dataset_email_done_en.html
new file mode 100644 (file)
index 0000000..c0d9d84
--- /dev/null
@@ -0,0 +1,12 @@
+[% USE HTML %]<body class="admin">
+
+ <h2>[% title %]</h2>
+
+ <p>The dataset backup has been sent via email to [% HTML.escape(to) %].</p>
+
+ <form method="post" action="admin.pl">
+  <input type="hidden" name="nextsub" value="list_users">
+  <input type="submit" name="action" value="Continue">
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/admin/backup_dataset_en.html b/templates/webpages/admin/backup_dataset_en.html
new file mode 100644 (file)
index 0000000..23bfb0f
--- /dev/null
@@ -0,0 +1,96 @@
+[% USE HTML %]<body class="admin" onload="set_subject(); document.getElementsByName('to')[0].focus(); ">
+
+ <script type="text/javascript">
+  <!--
+      function set_subject() {
+        var subject_template = "Backup of dataset";
+        var subject = document.Form.subject.value;
+
+        if ((subject == "") || (subject.substr(0, subject_template.length) == subject_template)) {
+          document.Form.subject.value = subject_template + " " + document.Form.dbname.value;
+        }
+      }
+    -->
+ </script>
+
+ <h2>[% title %]</h2>
+
+ [% IF NO_DATABSES %]
+  No databases have been found on this server.
+
+  [% ELSE %]
+
+  <form name="Form" method="post" action="admin.pl">
+
+   <input type="hidden" name="dbdriver" value="Pg">
+   <input type="hidden" name="dbhost" value="[% HTML.escape(dbhost) %]">
+   <input type="hidden" name="dbport" value="[% HTML.escape(dbport) %]">
+   <input type="hidden" name="dbuser" value="[% HTML.escape(dbuser) %]">
+   <input type="hidden" name="dbpasswd" value="[% HTML.escape(dbpasswd) %]">
+
+   <p>
+    Please select the database you want to backup:
+    <select name="dbname" onchange="set_subject()">[% FOREACH row = DATABASES %]<option>[% HTML.escape(row.dbname) %]</option>[% END %]</select>
+   </p>
+
+   <table>
+    <tr>
+     <td valign="top"><input type="radio" name="destination" id="destination_download" value="download" checked></td>
+     <td valign="top"><label for="destination_download">Download the backup</label></td>
+    </tr>
+
+    <tr>
+     <td valign="top"><input type="radio" name="destination" id="destination_email" value="email"></td>
+     <td valign="top">
+      <label for="destination_email">Send the backup via Email</label><br>
+
+      <table>
+       <tr>
+        <td valign="top" align="right">From</td>
+        <td valign="top"><input name="from" size="40" value="[% HTML.escape(from) %]"></td>
+       </tr>
+
+       <tr>
+        <td valign="top" align="right">To</td>
+        <td valign="top"><input name="to" size="40"></td>
+       </tr>
+
+       <tr>
+        <td valign="top" align="right">Cc</td>
+        <td valign="top"><input name="cc" size="40"></td>
+       </tr>
+
+       <tr>
+        <td valign="top" align="right">Subject</td>
+        <td valign="top"><input name="subject" size="40"></td>
+       </tr>
+
+       <tr>
+        <td valign="top" align="right">Message</td>
+        <td valign="top"><textarea name="message" cols="40" rows="10"></textarea></td>
+       </tr>
+
+      </table>
+
+     </td>
+    </tr>
+
+   </table>
+
+   <input name="callback" type="hidden" value="admin.pl?action=list_users">
+   <input type="hidden" name="nextsub" value="backup_dataset_start">
+   <input type="hidden" name="back_nextsub" value="list_users">
+
+   <hr size="3" noshade>
+
+   <br>
+
+   <input type="submit" class="submit" name="action" value="Continue">
+   <input type="submit" class="submit" name="action" value="Back">
+
+  </form>
+
+ [% END %]
+
+</body>
+</html>
diff --git a/templates/webpages/admin/check_auth_database_en.html b/templates/webpages/admin/check_auth_database_en.html
new file mode 100644 (file)
index 0000000..ae658b0
--- /dev/null
@@ -0,0 +1,61 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="admin.pl">
+
+  <p>
+   The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:
+  </p>
+
+  <table border="0">
+   <tr>
+    <td>Host:</td>
+    <td>[% HTML.escape(db_host) %]</td>
+   </tr>
+   <tr>
+    <td>Port:</td>
+    <td>[% HTML.escape(db_port) %]</td>
+   </tr>
+   <tr>
+    <td>User name:</td>
+    <td>[% HTML.escape(db_user) %]</td>
+   </tr>
+   <tr>
+    <td>Database name:</td>
+    <td>[% HTML.escape(db_db) %]</td>
+   </tr>
+  </table>
+
+  <p>
+   Please enter the name of the database that will be used as the template for the new database:
+  </p>
+
+  <p>Template database: <input name="db_template" value="template1"></p>
+
+  <p>
+   If the database user listed above does not have the right to create a database then enter the name and password of the superuser below:
+  </p>
+
+  <table border="0"
+   <tr>
+    <td>Superuser name:</td>
+    <td><input name="db_superuser"></td>
+   </tr>
+
+   <tr>
+    <td>Password:</td>
+    <td><input type="password" name="db_superuser_password"></td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="rpw" value="[% HTML.escape(rpw) %]">
+  <input type="hidden" name="action" value="create_auth_db">
+
+  <input type="submit" class="submit" value="Create Dataset">
+  <input type="button" class="submit" onclick="history.back()" value="Back">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/check_auth_tables_en.html b/templates/webpages/admin/check_auth_tables_en.html
new file mode 100644 (file)
index 0000000..734f36a
--- /dev/null
@@ -0,0 +1,43 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <p>
+  The tables for user management and authentication do not exist. They will be created in the next step in the following database:
+ </p>
+
+ <table border="0">
+  <tr>
+   <td>Host:</td>
+   <td>[% HTML.escape(db_host) %]</td>
+  </tr>
+  <tr>
+   <td>Port:</td>
+   <td>[% HTML.escape(db_port) %]</td>
+  </tr>
+  <tr>
+   <td>User name:</td>
+   <td>[% HTML.escape(db_user) %]</td>
+  </tr>
+  <tr>
+   <td>Database name:</td>
+   <td>[% HTML.escape(db_db) %]</td>
+  </tr>
+ </table>
+
+ <p>
+  If you want to change any of these parameters then press the &quot;Back&quot; button, edit the file &quot;config/authentication.pl&quot; and login into the admin module again.
+ </p>
+
+ <form method="post" action="admin.pl">
+
+  <input type="hidden" name="rpw" value="[% HTML.escape(rpw) %]">
+  <input type="hidden" name="action" value="create_auth_tables">
+
+  <input type="submit" class="submit" value="Create tables">
+  <input type="button" class="submit" onclick="history.back()" value="Back">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/create_dataset_en.html b/templates/webpages/admin/create_dataset_en.html
new file mode 100644 (file)
index 0000000..e213dd6
--- /dev/null
@@ -0,0 +1,66 @@
+[% USE HTML %]<body class="admin">
+
+  <h2>[% title %]</h2>
+
+  <form method="post" action="admin.pl">
+
+   <p>
+    You can either create a new database or chose an existing database.
+    In the latter case the tables needed by Lx-Office will be created in that database.
+   </p>
+
+   <table>
+    <tr>
+     <th valign="top" align="right" nowrap>Existing Datasets</th>
+     <td valign="top">[% HTML.escape(dbsources) %]</td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Create Dataset</th>
+     <td><input name="db"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Multibyte Encoding</th>
+     <td>
+      [%- IF FORCE_DBENCODING %]
+      <input type="hidden" name="encoding" value="[% HTML.escape(FORCE_DBENCODING) %]">
+      [% HTML.escape(FORCE_DBENCODING) %]
+      [%- ELSE %]
+      <select name="encoding">
+       [% FOREACH row = DBENCODINGS %]<option value="[% HTML.escape(row.dbencoding) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.label) %]</option>[% END %]
+      </select>
+      [%- END %]
+     </td>
+    </tr>
+
+    <tr>
+     <th valign="top" align="right" nowrap>Create Chart of Accounts</th>
+     <td>
+      <select name="chart">
+       [% FOREACH row = CHARTS %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+   </table>
+
+   <input type="hidden" name="dbdriver"  value="[% HTML.escape(dbdriver) %]">
+   <input type="hidden" name="dbuser"    value="[% HTML.escape(dbuser) %]">
+   <input type="hidden" name="dbhost"    value="[% HTML.escape(dbhost) %]">
+   <input type="hidden" name="dbport"    value="[% HTML.escape(dbport) %]">
+   <input type="hidden" name="dbpasswd"  value="[% HTML.escape(dbpasswd) %]">
+   <input type="hidden" name="dbdefault" value="[% HTML.escape(dbdefault) %]">
+
+   <input type="hidden" name="callback" value="admin.pl?action=list_users">
+
+   <input type="hidden" name="nextsub" value="dbcreate">
+
+   <hr size="3" noshade>
+
+   <p><input type="submit" class="submit" name="action" value="Continue"></p>
+
+  </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/create_standard_group_ask_en.html b/templates/webpages/admin/create_standard_group_ask_en.html
new file mode 100644 (file)
index 0000000..1c6e825
--- /dev/null
@@ -0,0 +1,49 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="admin.pl">
+
+  <p>
+
+   Lx-Office has been switched to group-based access restrictions.
+
+   You have to create at least one group, grant it access to Lx-Office's functions and assign users to it.
+
+   Otherwise all users will only have access to their own settings.
+
+  </p>
+
+  <p>
+
+   During this user migration Lx-Office can create such a group for you and grant all users access to all of Lx-Office's functions.
+
+   This corresponds to Lx-Office's behavior prior to version 2.4.4.
+
+  </p>
+
+  <p>
+
+   Alternatively you can skip this step and create groups yourself.
+
+  </p>
+
+  <p>
+
+   Do you want Lx-Office to create a group for access to all functions?
+
+   This group will be called &quot;Full Access&quot;.
+
+  </p>
+
+  <input type="hidden" name="action" value="dispatcher">
+
+  <p>
+   <input type="submit" class="submit" name="action_create_standard_group" value="Yes">
+   <input type="submit" class="submit" name="action_dont_create_standard_group" value="No">
+  </p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/dbadmin_en.html b/templates/webpages/admin/dbadmin_en.html
new file mode 100644 (file)
index 0000000..b2b4ceb
--- /dev/null
@@ -0,0 +1,71 @@
+[% USE HTML %]<body class="admin">
+
+  <h2>[% title %]</h2>
+
+  <form method="post" action="admin.pl">
+
+   <table>
+    <tr>
+     <td>
+
+      <table>
+
+       <input type="hidden" name="dbdriver" value="[% HTML.escape(dbdriver) %]">
+
+       <tr>
+        <td>
+         <table>
+
+          <tr>
+
+           <th align="right">Host</th>
+           <td><input name="dbhost" size="25" value="[% HTML.escape(dbhost) %]"></td>
+           <th align="right">Port</th>
+           <td><input name="dbport" size="5" value="[% HTML.escape(dbport) %]"></td>
+
+          </tr>
+
+          <tr>
+
+           <th align="right">User</th>
+           <td><input name="dbuser" size="10" value="[% HTML.escape(dbuser) %]"></td>
+           <th align="right">Password</th>
+           <td><input type="password" name="dbpasswd" size="10"></td>
+
+          </tr>
+
+          <tr>
+
+           <th align="right">Database template</th>
+           <td colspan="3"><input name="dbdefault" size="10" value="[% HTML.escape(dbdefault) %]"></td>
+
+          </tr>
+
+         </table>
+
+        </td>
+       </tr>
+      </table>
+
+      <input name="callback" type="hidden" value="admin.pl?action=list_users">
+
+      <br>
+
+      <input type="submit" class="submit" name="action" value="Create Dataset">
+      <input type="submit" class="submit" name="action" value="Update Dataset">
+      <input type="submit" class="submit" name="action" value="Delete Dataset">
+      [% IF ALLOW_DBBACKUP %]
+       <input type="submit" class="submit" name="action" value="Backup Dataset">
+       <input type="submit" class="submit" name="action" value="Restore Dataset">
+      [% END %]
+     </td>
+    </tr>
+   </table>
+  </form>
+
+  <p>This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!</p>
+
+  <p>Leave host and port field empty unless you want to make a remote connection.</p>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/dbcreate_en.html b/templates/webpages/admin/dbcreate_en.html
new file mode 100644 (file)
index 0000000..66af4cd
--- /dev/null
@@ -0,0 +1,16 @@
+[% USE HTML %]<body class="admin">
+
+  <h2>[% title %]</h2>
+
+  <form method="post" action="admin.pl">
+
+   <p>The dataset [% HTML.escape(db) %] has been successfully created.</p>
+
+   <input type="hidden" name="nextsub" value="list_users">
+
+   <p><input type="submit" class="submit" name="action" value="Continue"></p>
+
+  </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/dbdelete_en.html b/templates/webpages/admin/dbdelete_en.html
new file mode 100644 (file)
index 0000000..1be247d
--- /dev/null
@@ -0,0 +1,15 @@
+[% USE HTML %]<body class="admin">
+
+  <h2>[% title %]</h2>
+
+  <form method="post" action="admin.pl">
+
+   <p>The database [% HTML.escape(db) %] has been successfully deleted.</p>
+
+   <input type="hidden" name="nextsub" value="list_users">
+
+   <p><input type="submit" class="submit" name="action" value="Continue"></p>
+  </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/dbupgrade_all_done_en.html b/templates/webpages/admin/dbupgrade_all_done_en.html
new file mode 100644 (file)
index 0000000..3493539
--- /dev/null
@@ -0,0 +1,19 @@
+[% USE HTML%]
+[% IF NOTHING_TO_DO %]
+ <p>No datasets have been selected.</p>
+
+ [% ELSE %]
+
+ <hr>
+
+ <p>All database upgrades have been applied.</p>
+[% END %]
+
+<form method="post" action="admin.pl">
+ <input type="hidden" name="nextsub" value="list_users">
+
+ <input type="submit" name="action" value="Continue">
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/dbupgrade_all_header_en.html b/templates/webpages/admin/dbupgrade_all_header_en.html
new file mode 100644 (file)
index 0000000..68c7eca
--- /dev/null
@@ -0,0 +1,2 @@
+<body>
+
diff --git a/templates/webpages/admin/dbupgrade_footer_en.html b/templates/webpages/admin/dbupgrade_footer_en.html
new file mode 100644 (file)
index 0000000..52fcef4
--- /dev/null
@@ -0,0 +1 @@
+<p>...done</p>
diff --git a/templates/webpages/admin/dbupgrade_header_en.html b/templates/webpages/admin/dbupgrade_header_en.html
new file mode 100644 (file)
index 0000000..5e47a71
--- /dev/null
@@ -0,0 +1 @@
+[% USE HTML %]<div class="listtop" width="100%">Dataset upgrade ([% HTML.escape(dbname) %])</div>
diff --git a/templates/webpages/admin/delete_dataset_en.html b/templates/webpages/admin/delete_dataset_en.html
new file mode 100644 (file)
index 0000000..2dbf9f6
--- /dev/null
@@ -0,0 +1,31 @@
+[% USE HTML %]<body class="admin">
+
+ <h2>[% title %]</h2>
+
+ <form method="post" action="admin.pl">
+
+  <p>You can only delete datasets that are not in use.
+   If you want to delete such a dataset you have to edit the user(s) that are using the dataset in question and have them use another dataset.</p>
+
+  <p>Please seletct the dataset you want to delete:
+   <select name="db">[% FOREACH row = DBSOURCES %]<option>[% HTML.escape(row.name) %]</option>[% END %]</select>
+  </p>
+
+  <input type="hidden" name="dbdriver"  value="[% HTML.escape(dbdriver) %]">
+  <input type="hidden" name="dbuser"    value="[% HTML.escape(dbuser) %]">
+  <input type="hidden" name="dbhost"    value="[% HTML.escape(dbhost) %]">
+  <input type="hidden" name="dbport"    value="[% HTML.escape(dbport) %]">
+  <input type="hidden" name="dbpasswd"  value="[% HTML.escape(dbpasswd) %]">
+  <input type="hidden" name="dbdefault" value="[% HTML.escape(dbdefault) %]">
+
+  <input name="callback" type="hidden" value="admin.pl?action=list_users">
+
+
+  <input type="hidden" name="nextsub" value="dbdelete">
+
+  <p><input type="submit" class="submit" name="action" value="Continue"></p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/delete_group_confirm_en.html b/templates/webpages/admin/delete_group_confirm_en.html
new file mode 100644 (file)
index 0000000..97d94fc
--- /dev/null
@@ -0,0 +1,19 @@
+[% USE HTML %]<body>
+ <form name="Form" method="post" action="admin.pl">
+
+
+  <input type="hidden" name="group_id" value="[% HTML.escape(id) %]">
+  <input type="hidden" name="confirmed" value="1">
+
+  <div class="listtop">Delete group</div>
+
+  <p>Do you really want to delete this group: [% name %] ?</p>
+
+  <input type="hidden" name="delete_nextsub" value="delete_group">
+  <input type="submit" class="submit" name="action" value="Delete">
+  <button type="button" onclick="history.back()">Back</button>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/edit_group_en.html b/templates/webpages/admin/edit_group_en.html
new file mode 100644 (file)
index 0000000..641349c
--- /dev/null
@@ -0,0 +1,114 @@
+[% USE HTML %]<body>
+ <form name="Form" method="post" action="admin.pl">
+
+  <input type="hidden" name="group_id" value="[% HTML.escape(group_id) %]">
+
+  <input type="hidden" name="back_nextsub" value="edit_groups">
+
+  [% IF message %]
+  <p>[% message %]</p>
+  [% END %]
+
+  <div class="listtop">Edit group  [% HTML.escape(name) %]</div>
+
+  <table width="100%">
+   <tr>
+    <td>
+     <table>
+      <tr class="listheading">
+       <td><b>Users in<br>this group</b></td>
+       <td>&nbsp;</td>
+       <td><b>Users not in this group</b></td>
+      </tr>
+
+      <tr>
+       <td valign="center">
+        <select name="user_id_in_group" size="10">
+         [% FOREACH user = USERS_IN_GROUP %]<option value="[% HTML.escape(user.id) %]">[% HTML.escape(user.login) %]</option>[% END %]
+        </select>
+       </td>
+
+       <td valign="center">
+        <input type="submit" class="submit" name="action" value="Add to group">
+        <br>
+        <br>
+        <input type="submit" class="submit" name="action" value="Remove from group">
+       </td>
+
+       <td valign="center">
+        <select name="user_id_not_in_group" size="10">
+         [% FOREACH user = USERS_NOT_IN_GROUP %]<option value="[% HTML.escape(user.id) %]">[% HTML.escape(user.login) %]</option>[% END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <td>
+        <input type="submit" class="submit" name="action" value="Back">
+       </td>
+      </tr>
+     </table>
+
+     <hr>
+
+     <table>
+      <tr class="listheading">
+       <td colspan="2">Edit rights</td>
+      </tr>
+
+      [% FOREACH right = RIGHTS %]
+      <tr>
+       <td>
+        [% IF right.is_section %]
+        <i>[% right.description %]</i>
+        [% ELSE %]
+        <input type="checkbox" name="[% HTML.escape(right.right) %]_granted" id="[% HTML.escape(right.right) %]_granted" [% IF right.granted %]checked[% END %]>
+        <label for="[% HTML.escape(right.right) %]_granted">[% IF right.description %][% right.description %][% ELSE %]<i>[% HTML.escape(right.right) %]</i>[% END %]</label>
+        [% END %]
+       </td>
+      </tr>
+      [% END %]
+
+      <tr>
+       <td>
+        <input type="hidden" name="save_nextsub" value="save_group">
+        <input type="submit" class="submit" name="action" value="Save">
+        &nbsp;
+        <input type="submit" class="submit" name="action" value="Back">
+       </td>
+      </tr>
+     </table>
+
+     <hr>
+
+     <table>
+      <tr class="listheading">
+       <td colspan="2">Rename the group</td>
+      </tr>
+
+      <tr>
+       <td>Name:</td>
+       <td><input name="name" maxlength="50" value="[% HTML.escape(name) %]"></td>
+      </tr>
+
+      <tr>
+       <td>Description:</td>
+       <td><input name="description" value="[% HTML.escape(description) %]"></td>
+      </tr>
+
+      <tr>
+       <td>
+        <input type="hidden" name="save_nextsub" value="save_group">
+        <input type="submit" class="submit" name="action" value="Save">
+        &nbsp;
+        <input type="submit" class="submit" name="action" value="Back">
+       </td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+  </table>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/edit_group_membership_en.html b/templates/webpages/admin/edit_group_membership_en.html
new file mode 100644 (file)
index 0000000..12819ff
--- /dev/null
@@ -0,0 +1,46 @@
+[% USE HTML %][% USE LxERP %]<body>
+
+ <div class="listtop">Edit group membership</div>
+
+ <p>Select the checkboxes that match users to the groups they should belong to.</p>
+
+ <form action="admin.pl">
+
+  <p>
+   <table border="0">
+    [% FOREACH user = USERS %]
+
+    [% IF user.repeat_headings %]
+    <tr>
+     <th class="listheading" valign="bottom">Login</th>
+     <th class="listheading" valign="bottom">Name</th>
+     [% FOREACH column = HEADINGS %]<th class="listheading" valign="bottom" align="center">[% LxERP.turn90(column.title) %]</th>
+     [% END %]
+    </tr>
+    [% END %]
+
+    <tr class="listrow[% loop.count % 2 %]">
+     <td valign="center">[% HTML.escape(user.login) %]</td>
+     <td valign="center">[% HTML.escape(user.name) %]</td>
+     [% FOREACH group = user.GROUPS %]
+     <td valign="center" align="center">
+      <input type="checkbox" name="u_[% HTML.escape(user.id) %]_g_[% HTML.escape(group.id) %]" [% IF group.is_member %]checked[% END %]>
+     </td>
+     [% END %]
+    </tr>
+    [% END %]
+   </table>
+  </p>
+
+  <input type="hidden" name="save_nextsub" value="save_group_membership">
+  <input type="hidden" name="back_nextsub" value="edit_groups">
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Save">
+   <input type="submit" class="submit" name="action" value="Back">
+  </p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/edit_groups_en.html b/templates/webpages/admin/edit_groups_en.html
new file mode 100644 (file)
index 0000000..1a00b24
--- /dev/null
@@ -0,0 +1,80 @@
+[% USE HTML %]<body>
+ <form name="Form" method="post" action="admin.pl">
+
+
+  [% IF message %]
+  <p>[% message %]</p>
+  [% END %]
+
+  <div class="listtop">Edit groups</div>
+
+  <br>
+
+  <div class="listheading">Edit and delete a group</div>
+
+  [% IF num_groups %]
+  <p>
+   <select name="group_id" size="10">
+    [% FOREACH row = GROUPS %]
+    <option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.name) %][% IF row.description %] ([% HTML.escape(row.description) %])[% END %]</option>
+    [% END %]
+   </select>
+  </p>
+  [% ELSE %]
+  <p>No groups have been added yet.</p>
+  [% END %]
+
+  <p>
+   [% IF num_groups %]
+   <input type="hidden" name="edit_nextsub" value="edit_group">
+   <input type="hidden" name="delete_nextsub" value="delete_group">
+   <input type="submit" class="submit" name="action" value="Edit">
+   <input type="submit" class="submit" name="action" value="Delete">
+   [% END %]
+   <input type="hidden" name="back_nextsub" value="list_users">
+   <input type="submit" class="submit" name="action" value="Back">
+  </p>
+ </form>
+
+ <hr size="2" noshade>
+
+ <div class="listheading">Group membership</div>
+
+ <p>Edit the membership of all users in all groups:</p>
+
+ <form method="post" action="admin.pl">
+  <p>
+   <input type="hidden" name="edit_nextsub" value="edit_group_membership">
+   <input type="submit" class="submit" name="action" value="Edit">
+  </p>
+
+ </form>
+
+ <hr size="2" noshade>
+
+ <div class="listheading">Add a new group</div>
+
+ <form method="post" action="admin.pl">
+  <p>
+   <table border="0">
+    <tr>
+     <td>Name:</td>
+     <td><input name="name" maxlength="50"></td>
+    </tr>
+
+    <tr>
+     <td>Description:</td>
+     <td><input name="description"></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="hidden" name="add_nextsub" value="add_group">
+   <input type="submit" class="submit" name="action" value="Add">
+  </p>
+
+ </form>
+
+</body>
+</html>
index 3dd35aa..12dcae8 100644 (file)
       <tr>
        <th align="right">Sprache</th>
        <td>
-        Deutsch
-        <input type="hidden" name="countrycode" value="de">
-<!--        <select name="countrycode">
+        <select name="countrycode">
          [% FOREACH row = ALL_COUNTRYCODES %]<option value="[% HTML.escape(row.value) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
          [% END %]
-        </select>-->
+        </select>
        </td>
       </tr>
 
diff --git a/templates/webpages/admin/edit_user_en.html b/templates/webpages/admin/edit_user_en.html
new file mode 100644 (file)
index 0000000..a2de741
--- /dev/null
@@ -0,0 +1,323 @@
+[% USE HTML %]<body class="admin">
+
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/jquery.js"></script>
+ <script type="text/javascript">
+  <!--
+      function open_connection_test_window() {
+        // host name port user passwd
+        var url = "admin.pl?INPUT_ENCODING=UTF-8&action=test_db_connection&" +
+          "dbhost="   + encodeURIComponent(get_input_value("dbhost"))   + "&" +
+          "dbport="   + encodeURIComponent(get_input_value("dbport"))   + "&" +
+          "dbname="   + encodeURIComponent(get_input_value("dbname"))   + "&" +
+          "dbuser="   + encodeURIComponent(get_input_value("dbuser"))   + "&" +
+          "dbpasswd=" + encodeURIComponent(get_input_value("dbpasswd")) + "&";
+
+        var parm = centerParms(400,300) + ",width=400,height=300,status=yes,scrollbars=yes";
+
+        window.open(url, "_new_generic", parm);
+      }
+    -->
+ </script>
+
+ <form name="Form" id="Form" method="post" action="admin.pl">
+
+  <div class="listtop" width="100%">[% title %]</div>
+
+  <table width="100%">
+   <tr valign="top">
+    <td>
+     <table>
+      <tr>
+       <th align="right">Login</th>
+       <td>
+        [%- IF edit %]
+         <input type="hidden" name="login" value="[% HTML.escape(myc_login) %]">[% HTML.escape(myc_login) %]
+        [%- ELSE %]
+         <input name="login" value="[% HTML.escape(myc_login) %]">
+        [%- END %]
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right">Password</th>
+       <td>[% IF CAN_CHANGE_PASSWORD %]<input type="password" name="new_password" size="8" value="********">[% ELSE %]********[% END %]</td>
+      </tr>
+
+      <tr>
+       <th align="right">Name</th>
+       <td><input name="name" size="15" value="[% HTML.escape(myc_name) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">E-mail</th>
+       <td><input name="email" size="30" value="[% HTML.escape(myc_email) %]"></td>
+      </tr>
+
+      <tr valign="top">
+       <th align="right">Signature</th>
+       <td><textarea name="signature" rows="3" cols="35">[% HTML.escape(myc_signature) %]</textarea></td>
+      </tr>
+
+      <tr>
+       <th align="right">Phone</th>
+       <td><input name="tel" size="14" value="[% HTML.escape(myc_tel) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">Fax</th>
+       <td><input name="fax" size="14" value="[% HTML.escape(myc_fax) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">Company</th>
+       <td><input name="company" size="35" value="[% HTML.escape(myc_company) %]"></td>
+      </tr>
+
+      <tr valign="top">
+       <th align="right">Address</th>
+       <td><textarea name="address" rows="4" cols="35">[% HTML.escape(myc_address) %]</textarea></td>
+      </tr>
+
+      <tr valign="top">
+       <th align="right">Tax number</th>
+       <td><input name="taxnumber" size="14" value="[% HTML.escape(myc_taxnumber) %]"></td>
+      </tr>
+
+      <tr valign="top">
+       <th align="right">Ust-IDNr</th>
+       <td><input name="co_ustid" size="14" value="[% HTML.escape(myc_co_ustid) %]"></td>
+      </tr>
+
+      <tr valign="top">
+       <th align="right">DUNS-Nr</th>
+       <td><input name="duns" size="14" value="[% HTML.escape(myc_duns) %]"></td>
+      </tr>
+     </table>
+    </td>
+
+    <td>
+     <table>
+      <tr>
+       <th align="right">Date Format</th>
+       <td>
+        <select name="dateformat">
+         [% FOREACH row = ALL_DATEFORMATS %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.format) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right">Number Format</th>
+       <td>
+        <select name="numberformat">
+         [% FOREACH row = ALL_NUMBERFORMATS %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.format) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right">Dropdown Limit</th>
+       <td><input name="vclimit" value="[% HTML.escape(myc_vclimit) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">Language</th>
+       <td>
+        <select name="countrycode">
+         [% FOREACH row = ALL_COUNTRYCODES %]<option value="[% HTML.escape(row.value) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right">Stylesheet</th>
+       <td>
+        <select name="userstylesheet">
+         [% FOREACH row = ALL_STYLESHEETS %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right">Printer</th>
+       <td><input name="printer" size="20" value="[% HTML.escape(myc_printer) %]"></td>
+      </tr>
+      <tr>
+       <th align="right">Use Templates</th>
+       <td>
+        <select name="usetemplates">
+         [% FOREACH row = ALL_TEMPLATES %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+      <tr>
+       <th align="right">New Templates</th>
+       <td><input name="newtemplates"></td>
+      </tr>
+      <tr>
+       <th align="right">Setup Templates</th>
+       <td>
+        <select name="mastertemplates">
+         [% FOREACH row = ALL_MASTER_TEMPLATES %]<option [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
+         [% END %]
+        </select>
+       </td>
+      </tr>
+      <tr>
+       <th align="right">Setup Menu</th>
+       <td>
+        <select name="menustyle">
+         <option value="v3"[% IF menustyle_v3 %] selected[% END %]>Top (CSS)</option>
+         <option value="v4"[% IF menustyle_v4 %] selected[% END %]>Top (CSS) new</option>
+         <option value="neu"[% IF menustyle_neu %] selected[% END %]>Top (Javascript)</option>
+         <option value="xml"[% IF menustyle_xml %] selected[% END %]>Top (XUL; only for Mozilla Firefox)</option>
+         <option value="old"[% IF menustyle_old %] selected[% END %]>Old (on the side)</option>
+        </select>
+       </td>
+      </tr>
+
+      <input type="hidden" name="templates" value="[% HTML.escape(myc_templates) %]">
+     </table>
+    </td>
+   </tr>
+
+   <tr class="listheading">
+    <th colspan="2">Database</th>
+   </tr>
+
+   <tr>
+    <td colspan="2">
+     <table>
+      <tr>
+       <th align="right">Driver</th>
+       <td>PostgreSQL</td>
+       <th align="right">Host</th>
+       <td><input name="dbhost" size="30" value="[% HTML.escape(myc_dbhost) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">Dataset</th>
+       <td><input name="dbname" size="15" value="[% HTML.escape(myc_dbname) %]"></td>
+       <th align="right">Port</th>
+       <td><input name="dbport" size="4" value="[% HTML.escape(myc_dbport) %]"></td>
+      </tr>
+
+      <tr>
+       <th align="right">User</th>
+       <td><input name="dbuser" size="15" value="[% HTML.escape(myc_dbuser) %]"></td>
+       <th align="right">Password</th>
+       <td><input name="dbpasswd" type="password" size="10" value="[% HTML.escape(myc_dbpasswd) %]"></td>
+      </tr>
+
+      <tr>
+       <td colspan="2"><input type="button" class="submit" onclick="open_connection_test_window();" value="Test connection"></td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+
+   <tr><td colspan="2"><hr size="3" noshade></td></tr>
+
+   <tr class="listheading">
+    <th colspan="2">WEBDAV access</th>
+   </tr>
+
+   <tr>
+    <td colspan="2">
+     <table>
+      <tr>
+       <td>
+        <input name="angebote" id="angebote"class="checkbox" type="checkbox" value="1" [% IF myc_angebote %]checked[% END %]>
+        <label for="angebote">&nbsp;Angebot</label>
+       </td>
+       <td>
+        <input name="bestellungen" id="bestellungen" class="checkbox" type="checkbox" value="1" [% IF myc_bestellungen %]checked[% END %]>
+        <label for="bestellungen">&nbsp;Bestellung</label>
+       </td>
+       <td>
+        <input name="rechnungen" id="rechnungen" class="checkbox" type="checkbox" value="1" [% IF myc_rechnungen %]checked[% END %]>
+        <label for="rechnungen">&nbsp;Rechnung</label>
+       </td>
+      </tr>
+
+      <tr>
+       <td>
+        <input name="anfragen" id="anfragen" class="checkbox" type="checkbox" value="1" [% IF myc_anfragen %]checked[% END %]>
+        <label for="anfragen">&nbsp;Anfragen</label>
+       </td>
+       <td>
+        <input name="lieferantenbestellungen" id="lieferantenbestellungen" class="checkbox" type="checkbox" value="1" [% IF myc_lieferantenbestellungen %]checked[% END %]>
+        <label for="lieferantenbestellungen">&nbsp;Lieferantenbestellung</label>
+       </td>
+       <td>
+        <input name="einkaufsrechnungen" id="einkaufsrechnungen" class="checkbox" type="checkbox" value="1" [% IF myc_einkaufsrechnungen %]checked[% END %]>
+        <label for="einkaufsrechnungen">&nbsp;Einkaufsrechnung</label>
+       </td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+
+   [% IF edit %]
+   <tr><td colspan="2"><hr size="3" noshade></td></tr>
+
+   <tr class="listheading">
+    <th colspan="2">Group membership</th>
+   </tr>
+
+   <tr>
+    <td colspan="2">The user is a member in the following group(s):</td>
+   </tr>
+
+   <tr>
+    <td colspan="2">[% FOREACH row = GROUPS %]<a href="admin.pl?action=edit_group&group_id=[% HTML.url(row.id) %]">[% HTML.escape(row.name) %]</a>
+     [% UNLESS loop.last %] | [% END %][% END %]</td>
+   </tr>
+   [% END %]
+
+   <tr><td colspan="2"><hr size="3" noshade></td></tr>
+
+  </table>
+
+  <input name="callback" type="hidden" value="admin.pl?action=list_users">
+
+  <input type="hidden" name="action" value="dispatcher">
+  <input type="submit" class="submit" name="action_save_user" value="Save">
+
+  [% IF edit %]
+   [% FOREACH row = GROUPS %]
+    <input type="hidden" name="new_user_group_ids[]" value="[% HTML.escape(row.id) %]">
+   [% END %]
+   <input type="hidden" name="new_user_login" id="new_user_login" value="">
+   <input type="hidden" name="action_save_user_as_new" id="action_save_user_as_new" value="">
+   <input type="button" class="submit" id="save_as_new_button" value="Save as new">
+   <input type="submit" class="submit" name="action_delete_user" value="Delete">
+   <input type="hidden" name="edit" value="1">
+  [% END %]
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+    $(document).ready(function() {
+      $("#save_as_new_button").click(function() {
+        var new_user_login = prompt('Please enter the login for the new user.', '');
+        if (!new_user_login || (new_user_login == ''))
+          return;
+
+        $("#action_save_user_as_new").attr('value', '1');
+        $("#new_user_login").attr('value', new_user_login);
+        $("#Form").submit();
+      });
+    });
+    -->
+ </script>
+
+</body>
+</html>
index 53187ed..6b67c39 100644 (file)
       <tr>
        <th align="right"><translate>Language</translate></th>
        <td>
-        <translate>German</translate>
-        <input type="hidden" name="countrycode" value="de">
-<!--        <select name="countrycode">
+        <select name="countrycode">
          [% FOREACH row = ALL_COUNTRYCODES %]<option value="[% HTML.escape(row.value) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.name) %]</option>
          [% END %]
-        </select>-->
+        </select>
        </td>
       </tr>
 
diff --git a/templates/webpages/admin/list_users_en.html b/templates/webpages/admin/list_users_en.html
new file mode 100644 (file)
index 0000000..b8c7bb3
--- /dev/null
@@ -0,0 +1,73 @@
+[% USE HTML %]<body class="admin" onload="">
+
+ <form method="post" action="admin.pl">
+
+  <div class="listtop" width="100%">[% title %]</div>
+
+  <p>
+   <table width="100%">
+    <tr>
+     <th class="listtop">Login</th>
+     <th class="listtop">Name</th>
+     <th class="listtop">Company</th>
+     <th class="listtop">Driver</th>
+     <th class="listtop">Host</th>
+     <th class="listtop">Dataset</th>
+     <th class="listtop">Templates</th>
+    </tr>
+
+    [% FOREACH row = MEMBERS %]
+     <tr class="listrow[% loop.count % 2 %]">
+      <td><a href="admin.pl?action=edit&login=[% HTML.url(row.login) %]">[% HTML.escape(row.login) %]</a></td>
+      <td>[% HTML.escape(row.name) %]</td>
+      <td>[% HTML.escape(row.company) %]</td>
+      <td>[% HTML.escape(row.dbdriver) %]</td>
+      <td>[% IF row.dbhost %][% HTML.escape(row.dbhost) %][% ELSE %]localhost[% END %]</td>
+      <td>[% HTML.escape(row.dbname) %]</td>
+      <td>[% HTML.escape(row.templates) %]</td>
+     </tr>
+    [% END %]
+
+    <td colspan="7"><hr size="3" noshade></td>
+   </table>
+  </p>
+
+
+  <input type="submit" class="submit" name="action" value="Add User">
+  <input type="submit" class="submit" name="action" value="Edit groups">
+  <input type="submit" class="submit" name="action" value="Pg Database Administration">
+  [% IF LOCKED %]
+   <input type="submit" class="submit" name="action" value="Unlock System">
+   [% ELSE %]
+   <input type="submit" class="submit" name="action" value="Lock System">
+  [% END %]
+  <input type="submit" class="submit" name="action" value="Logout">
+
+  <p>Click on login name to edit!</p>
+
+  <p>To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.</p>
+ </form>
+
+ <form method="post" action="login.pl">
+
+  <div class="listheading">Lx-Office ERP Login</div>
+
+  <table border="0">
+   <tr>
+    <th align="right">Name</th>
+    <td><input class="login" name="login"></td>
+    <td>&nbsp;</td>
+   </tr>
+   <tr>
+    <th align="right">Password</th>
+    <td><input class="login" type="password" name="password"></td>
+    <td><input type="submit" name="action" value="Login"></td>
+   </tr>
+  </table>
+
+ </form>
+
+ <hr size="3" noshade>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/restore_dataset_en.html b/templates/webpages/admin/restore_dataset_en.html
new file mode 100644 (file)
index 0000000..cd02e73
--- /dev/null
@@ -0,0 +1,57 @@
+[% USE HTML %]<body class="admin" onload="document.getElementsByName('dbname')[0].focus(); ">
+
+ <h2>[% title %]</h2>
+
+ <form name="Form" method="post" action="admin.pl" enctype="multipart/form-data">
+
+  <input type="hidden" name="dbdriver" value="Pg">
+  <input type="hidden" name="dbhost" value="[% HTML.escape(dbhost) %]">
+  <input type="hidden" name="dbport" value="[% HTML.escape(dbport) %]">
+  <input type="hidden" name="dbuser" value="[% HTML.escape(dbuser) %]">
+  <input type="hidden" name="dbpasswd" value="[% HTML.escape(dbpasswd) %]">
+
+  <p>
+   Please enter the name of the dataset you want to restore the backup in.
+   The dataset has to exist before a restoration can be started.
+   You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.
+  </p>
+
+  <p>
+   The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.
+   It may optionally be compressed with &quot;gzip&quot;.
+   Files created by Lx-Office's &quot;Backup Dataset&quot; function are such files.
+  </p>
+
+  <table>
+   <tr>
+    <td valign="top">Dataset name</td>
+    <td valign="top"><input name="new_dbname"></td>
+   </tr>
+
+   <tr>
+    <th valign="top">Multibyte Encoding</th>
+    <td>
+     <select name="dbencoding">
+      [% FOREACH row = DBENCODINGS %]<option value="[% HTML.escape(row.dbencoding) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.label) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td valign="top">Backup file</td>
+    <td valign="top"><input type="file" accept="*" name="content"></td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="nextsub" value="restore_dataset_start">
+
+  <hr size="3" noshade>
+
+  <br>
+
+  <input type="submit" class="submit" name="action" value="Continue">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/restore_dataset_start_footer_en.html b/templates/webpages/admin/restore_dataset_start_footer_en.html
new file mode 100644 (file)
index 0000000..9cbf151
--- /dev/null
@@ -0,0 +1,15 @@
+[% USE HTML %] </pre>
+
+ <hr>
+
+ <p>
+  The restoration process is complete. Please review &quot;pg_restore&quot;'s output to find out if the restoration was successful.
+  The program's exit code was [% HTML.escape(retval) %] (&quot;0&quot; usually means that everything went OK).
+ </p>
+
+ <form method="post" action="admin.pl">
+  <input type="hidden" name="nextsub" value="list_users">
+  <input type="submit" name="action" value="Continue">
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/admin/restore_dataset_start_header_en.html b/templates/webpages/admin/restore_dataset_start_header_en.html
new file mode 100644 (file)
index 0000000..b1589e2
--- /dev/null
@@ -0,0 +1,9 @@
+<body class="admin">
+
+ <h2>[% title %]</h2>
+
+ <p>The restoration process has started. Here's the output of the &quot;pg_restore&quot; command:</p>
+
+ <hr>
+
+ <pre>
diff --git a/templates/webpages/admin/test_db_connection_en.html b/templates/webpages/admin/test_db_connection_en.html
new file mode 100644 (file)
index 0000000..4047457
--- /dev/null
@@ -0,0 +1,27 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ [%- IF connection_ok %]
+
+ <p>The connection was established successfully.</p>
+
+ [%- ELSE %]
+
+ <p>
+  The connection to the database could not be established.
+  Error message from the database driver:
+ </p>
+
+ <p>[% HTML.escape(errstr) %]</p>
+
+ [%- END %]
+
+ <p>
+  <form>
+   <input type="button" class="submit" onclick="window.close()" value="Close Window">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/update_dataset_en.html b/templates/webpages/admin/update_dataset_en.html
new file mode 100644 (file)
index 0000000..764323c
--- /dev/null
@@ -0,0 +1,56 @@
+[% USE HTML %]<body class="admin">
+
+ <h2>[% title %]</h2>
+
+ [% IF ALL_UPDATED %]
+  All Datasets up to date!
+
+  [% ELSE %]
+
+  <form method="post" action="admin.pl">
+
+   <p>The following Datasets need to be updated:</p>
+
+   <table>
+    <tr>
+     <th class="listtop">Update?</th>
+     <th class="listtop">Dataset</th>
+     <th class="listtop">Driver</th>
+     <th class="listtop">Host</th>
+     <th class="listtop">Port</th>
+     <th class="listtop">User</th>
+    </tr>
+
+    [% FOREACH row = NEED_UPDATES %]
+     <tr class="listrow[% loop.count % 2 %]">
+      <td><input type="checkbox" name="update_[% loop.count %]" id="update_[% loop.count %]" value="1" checked></td>
+      <td>
+       <input type="hidden" name="dbname_[% loop.count %]" value="[% HTML.escape(row.dbname) %]">
+       <label for="update_[% loop.count %]">[% HTML.escape(row.dbname) %]</label>
+      </td>
+      <td><input type="hidden" name="dbdriver_[% loop.count %]" value="Pg">PostgreSQL</td>
+      <td><input type="hidden" name="dbhost_[% loop.count %]" value="[% HTML.escape(row.dbhost) %]">[% HTML.escape(row.dbhost) %]</td>
+      <td><input type="hidden" name="dbport_[% loop.count %]" value="[% HTML.escape(row.dbport) %]">[% HTML.escape(row.dbport) %]</td>
+      <td><input type="hidden" name="dbuser_[% loop.count %]" value="[% HTML.escape(row.dbuser) %]">[% HTML.escape(row.dbuser) %]</td>
+     </tr>
+
+    [% END %]
+   </table>
+
+   <input type="hidden" name="rowcount" value="[% NEED_UPDATES.size %]">
+
+   <input name="callback" type="hidden" value="admin.pl?action=list_users">
+   <input type="hidden" name="nextsub" value="dbupdate">
+
+   <hr size="3" noshade>
+
+   <br>
+
+   <input type="submit" class="submit" name="action" value="Continue">
+
+  </form>
+
+ [% END %]
+
+</body>
+</html>
diff --git a/templates/webpages/admin/user_migration_complete_en.html b/templates/webpages/admin/user_migration_complete_en.html
new file mode 100644 (file)
index 0000000..a4bf351
--- /dev/null
@@ -0,0 +1,24 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="admin.pl">
+
+  [%- IF standard_group_created %]
+  <p>A group named &quot;Full Access&quot; has been created.</p>
+  [%- END %]
+
+
+  <p>The user migration process is complete.
+   You will now be forwarded to the administration panel.</p>
+
+  <input type="hidden" name="nextsub" value="list_users">
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/user_migration_done_en.html b/templates/webpages/admin/user_migration_done_en.html
new file mode 100644 (file)
index 0000000..07e669d
--- /dev/null
@@ -0,0 +1,18 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="admin.pl">
+
+  <p>The following users have been migrated into the authentication database:</p>
+
+  <p>[% FOREACH row = MEMBERS %][% HTML.escape(row.login) %] [% END %]</p>
+
+  <input type="hidden" name="nextsub" value="create_standard_group_ask">
+
+  <input type="submit" class="submit" name="action" value="Continue">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin/user_migration_en.html b/templates/webpages/admin/user_migration_en.html
new file mode 100644 (file)
index 0000000..f970e1a
--- /dev/null
@@ -0,0 +1,24 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="admin.pl">
+
+  <p>
+   The old file containing the user information is still present (&quot;[% HTML.escape(memberfile) %]&quot;). Do you want to migrate these users into the database? If not then you will not be able to log in with any of the users present in the old file. 
+  </p>
+
+  <p>
+   If you chose to let Lx-Office do the migration then Lx-Office will also remove the old member file after creating a backup copy of it in the directory &quot;[% HTML.escape(backupdir) %]&quot;.
+  </p>
+
+  <input type="hidden" name="yes_nextsub" value="migrate_users">
+  <input type="hidden" name="no_nextsub" value="list_users">
+
+  <input type="submit" class="submit" name="action" value="Yes">
+  <input type="submit" class="submit" name="action" value="No">
+
+ </form>
+
+</body>
+</html>
index fe1627e..82b4fb4 100644 (file)
      <tr>
       <th align="right">Sprache</th>
       <td>
-       Deutsch
-       <input type="hidden" name="countrycode" value="de">
-<!--       <select name="countrycode">
+       <select name="countrycode">
         [%- FOREACH row = COUNTRYCODES %]
         <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
         [%- END %]
-       </select>-->
+       </select>
       </td>
      </tr>
 
diff --git a/templates/webpages/am/config_en.html b/templates/webpages/am/config_en.html
new file mode 100644 (file)
index 0000000..5311df8
--- /dev/null
@@ -0,0 +1,263 @@
+[% USE HTML %]<body onLoad="fokus()">
+
+ <p>
+  <div class="listtop">[% title %]</div>
+ </p>
+
+ <form method="post" action="am.pl" name="Form">
+
+  <ul id="maintab" class="shadetabs">
+   <li class="selected"><a href="#" rel="page_personal_settings">Personal settings</a></li>
+   <li><a href="#" rel="page_display_options">Display options</a></li>
+   <li><a href="#" rel="page_print_options">Print options</a></li>
+   <li><a href="#" rel="page_todo_list_options">TODO list options</a></li>
+  </ul>
+
+  <input type="hidden" name="type" value="preferences">
+  <input type="hidden" name="role" value="[% HTML.escape(myconfig_role) %]">
+
+  <div class="tabcontentstyle">
+
+   <div id="page_personal_settings" class="tabcontent">
+
+    <table>
+     <tr>
+      <th align="right">Name</th>
+      <td><input name="name" size="15" value="[% HTML.escape(myconfig_name) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">Password</th>
+      <td>
+       [%- IF CAN_CHANGE_PASSWORD %]
+       <input type="password" name="new_password" size="10" value="********">
+       [%- ELSE %]
+       <input type="hidden" name="new_password" value="********">
+       [%- END %]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">E-mail</th>
+      <td><input name="email" size="30" value="[% HTML.escape(myconfig_email) %]"></td>
+     </tr>
+
+     <tr valign="top">
+      <th align="right">Signature</th>
+      <td><textarea name="signature" rows="3" cols="50">[% HTML.escape(myconfig_signature) %]</textarea></td>
+     </tr>
+
+     <tr>
+      <th align="right">Phone</th>
+      <td><input name="tel" size="14" value="[% HTML.escape(myconfig_tel) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">Fax</th>
+      <td><input name="fax" size="14" value="[% HTML.escape(myconfig_fax) %]"></td>
+     </tr>
+     <tr>
+      <th align="right">Company</th>
+      <td><input name="company" size="30" value="[% HTML.escape(myconfig_company) %]"></td>
+     </tr>
+     <tr valign="top">
+      <th align="right">Address</th>
+      <td><textarea name="address" rows="4" cols="50">[% HTML.escape(myconfig_address) %]</textarea></td>
+     </tr>
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   <div id="page_display_options" class="tabcontent">
+
+    <table>
+     <tr>
+      <th align="right">Date Format</th>
+      <td>
+       <select name="dateformat">
+        [%- FOREACH row = DATEFORMATS %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+     <tr>
+      <th align="right">Output Number Format</th>
+      <td>
+       <select name="numberformat">
+        [%- FOREACH row = NUMBERFORMATS %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Dropdown Limit</th>
+      <td><input name="vclimit" size="10" value="[% HTML.escape(myconfig_vclimit) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">Language</th>
+      <td>
+       <select name="countrycode">
+        [%- FOREACH row = COUNTRYCODES %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Stylesheet</th>
+      <td>
+       <select name="usestylesheet">
+        [%- FOREACH row = STYLESHEETS %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Setup Menu</th>
+      <td>
+       <select name="menustyle">
+        <option value="v3"[% IF myconfig_menustyle == 'v3' %] selected[% END %]>Top (CSS)</option>
+        <option value="v4"[% IF myconfig_menustyle == 'v4' %] selected[% END %]>Top (CSS) new</option>
+        <option value="neu"[% IF myconfig_menustyle == 'neu' %] selected[% END %]>Top (Javascript)</option>
+        <option value="xml"[% IF myconfig_menustyle == 'xml' %] selected[% END %]>Top (XUL; only for Mozilla Firefox)</option>
+        <option value="old"[% IF myconfig_menustyle == 'old' %] selected[% END %]>Old (on the side)</option>
+       </select>
+      </td>
+     </tr>
+
+     <tr valign="top">
+      <th align="right">Favorites</th>
+      <td><textarea name="favorites" rows="4" cols="50">[% HTML.escape(myconfig_favorites) %]</textarea></td>
+     </tr>
+
+     <tr>
+      <th align="right">Form details (second row)</th>
+      <td>
+       <select name="show_form_details">
+        <option value="1"[% IF  myconfig_show_form_details %] selected[% END %]>Show by default</option>
+        <option value="0"[% IF !myconfig_show_form_details %] selected[% END %]>Hide by default</option>
+       </select>
+      </td>
+     </tr>
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   <div id="page_print_options" class="tabcontent">
+
+    <table>
+     <input name="printer" type="hidden" value="[% HTML.escape(myconfig_printer) %]">
+
+     <tr>
+      <th align="right">Default template format</th>
+      <td>
+       <select name="template_format">
+        [%- FOREACH row = TEMPLATE_FORMATS %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Default output medium</th>
+      <td>
+       <select name="default_media">
+        [%- FOREACH row = MEDIA %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Default printer</th>
+      <td>
+       <select name="default_printer_id">
+        [%- FOREACH row = PRINTERS %]
+        <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+        [%- END %]
+       </select>
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right">Number of copies</th>
+      <td><input name="copies" size="10" value="[% HTML.escape(myconfig_copies) %]"></td>
+     </tr>
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   <div id="page_todo_list_options" class="tabcontent">
+
+    <table>
+     <tr>
+      <th align="right">Show your TODO list after loggin in</th>
+      <td colspan="2">
+       <input type="radio" name="todo_cfg.show_after_login" id="todo_cfg_show_after_login_1" value="1"[% IF todo_cfg.show_after_login %] checked[% END %]>
+       <label for="todo_cfg_show_after_login_1">Yes</label>
+       <input type="radio" name="todo_cfg.show_after_login" id="todo_cfg_show_after_login_0" value="0"[% IF !todo_cfg.show_after_login %] checked[% END %]>
+       <label for="todo_cfg_show_after_login_0">No</label>
+      </td>
+     </tr>
+
+     <tr class="listheading">
+      <th colspan="3">Configuration of individual TODO items</th>
+     </tr>
+
+     <tr>
+      <th align="right">Show follow ups...</th>
+      <td>
+       <input type="checkbox" name="todo_cfg.show_follow_ups" id="todo_cfg_show_follow_ups" value="1"[% IF todo_cfg.show_follow_ups %] checked[% END %]>
+       <label for="todo_cfg_show_follow_ups">...on the TODO list</label>
+      </td>
+      <td>
+       <input type="checkbox" name="todo_cfg.show_follow_ups_login" id="todo_cfg_show_follow_ups_login" value="1"[% IF todo_cfg.show_follow_ups_login %] checked[% END %]>
+       <label for="todo_cfg_show_follow_ups_login">...after loggin in</label>
+      </td>
+     </tr>
+
+     [%- IF AUTH_RIGHTS_SALES_QUOTATION_EDIT %]
+     <tr>
+      <th align="right">Show overdue sales quotations and requests for quotations...</th>
+      <td>
+       <input type="checkbox" name="todo_cfg.show_overdue_sales_quotations" id="todo_cfg_show_overdue_sales_quotations" value="1"[% IF todo_cfg.show_overdue_sales_quotations %] checked[% END %]>
+       <label for="todo_cfg_show_overdue_sales_quotations">...on the TODO list</label>
+      </td>
+      <td>
+       <input type="checkbox" name="todo_cfg.show_overdue_sales_quotations_login" id="todo_cfg_show_overdue_sales_quotations_login" value="1"[% IF todo_cfg.show_overdue_sales_quotations_login %] checked[% END %]>
+       <label for="todo_cfg_show_overdue_sales_quotations_login">...after loggin in</label>
+      </td>
+     </tr>
+     [%- END %]
+    </table>
+
+    <br style="clear: left" />
+   </div>
+  </div>
+
+  <p><input type="submit" class="submit" name="action" value="Save"></p>
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      var maintab = new ddtabcontent("maintab");
+      maintab.setpersist(true);
+      maintab.setselectedClassTarget("link"); //"link" or "linkparent"
+      maintab.init();
+    -->
+ </script>
+
+</body>
+</html>
index 8b1a97f..2c7faaf 100644 (file)
      <tr>
       <th align="right"><translate>Language</translate></th>
       <td>
-       <translate>German</translate>
-       <input type="hidden" name="countrycode" value="de">
-<!--       <select name="countrycode">
+       <select name="countrycode">
         [%- FOREACH row = COUNTRYCODES %]
         <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
         [%- END %]
-       </select>-->
+       </select>
       </td>
      </tr>
 
diff --git a/templates/webpages/am/confirm_delete_warehouse_en.html b/templates/webpages/am/confirm_delete_warehouse_en.html
new file mode 100644 (file)
index 0000000..dba407d
--- /dev/null
@@ -0,0 +1,21 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <p>Do you really want to delete this warehouse?</p>
+
+ <p>Warehouse: [% HTML.escape(orig_description) %]</p>
+
+ <form action="am.pl" method="post">
+
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+  <input type="hidden" name="type" value="warehouse">
+  <input type="hidden" name="confirmed" value="1">
+
+  <button type="button" class="submit" onclick="history.back()">Back</button>
+  <input type="submit" class="submit" name="action" value="Delete">
+ </form>
+
+</body>
+</form>
diff --git a/templates/webpages/am/edit_accounts_en.html b/templates/webpages/am/edit_accounts_en.html
new file mode 100644 (file)
index 0000000..c8011a6
--- /dev/null
@@ -0,0 +1,212 @@
+[% USE HTML %]<script type="text/javascript" src="js/FormManager.js" >
+/****************************************************
+* Form Dependency Manager- By Twey- http://www.twey.co.uk
+* Visit Dynamic Drive for this script and more: http://www.dynamicdrive.com
+****************************************************/
+</script>
+
+<script type="text/javascript">
+window.onload = function() {
+    setupDependencies('EditAccount'); //name of form(s). Seperate each with a comma (ie: 'weboptions', 'myotherform' )
+  };
+</script>
+
+<body>
+<form method="post" name="EditAccount" action="am.pl">
+
+<input type="hidden" name="id"                 value="[% HTML.escape(id) %]">
+<input type="hidden" name="type"               value="account">
+<input type="hidden" name="orphaned"           value="[% HTML.escape(orphaned) %]">
+<input type="hidden" name="new_chart_valid"    value="[% HTML.escape(new_chart_valid) %]">
+<input type="hidden" name="original_accno"    value="[% HTML.escape(accno) %]">
+<input type="hidden" name="inventory_accno_id" value="[% HTML.escape(inventory_accno_id) %]">
+<input type="hidden" name="income_accno_id"    value="[% HTML.escape(income_accno_id) %]">
+<input type="hidden" name="expense_accno_id"   value="[% HTML.escape(expense_accno_id) %]">
+<input type="hidden" name="fxgain_accno_id"    value="[% HTML.escape(fxgain_accno_id) %]">
+<input type="hidden" name="fxloss_accno_id"    value="[% HTML.escape(fxloss_accno_id) %]">
+
+<table border="0" width="100%">
+  <tr>
+    <th class="listtop">[% title %]</th>
+  </tr>
+</table>
+
+<fieldset>
+  <legend>
+    Main Preferences
+  </legend>
+  <table>
+    <tr>
+      <td>
+        <label>
+          Account Number
+        </label></td>
+        <td><input name="accno" size="20" value="[% HTML.escape(accno) %]"></td>
+    </tr>
+    <tr>
+      <td>
+        <label>
+          Description
+        </label>
+      </td>
+      <td><input name="description" size="40" value="[% HTML.escape(description) %]"></td>
+    </tr>
+    <tr>
+      <td>
+        <label>
+          Chart Type
+
+        </label>
+      </td>
+      <td><select name="charttype">[% select_charttype %]</select></td>
+    </tr>
+  </table>
+</fieldset>
+<fieldset class="DEPENDS ON charttype BEING A">
+  <legend>Account Type</legend>
+  <select name="category" id="AccountType" class="DEPENDS ON charttype BEING A">
+          [% select_category %]</select>
+</fieldset>
+
+[% IF ChartTypeIsAccount %]
+<fieldset class="DEPENDS ON charttype BEING A">
+  <legend>Is this a summary account to record</legend>
+    <input name="AR" type="checkbox" class="checkbox" value="AR" [% HTML.escape(AR) %]>
+    &nbsp;Sales
+    <input name="AP" type="checkbox" class="checkbox" value="AP" [% HTML.escape(AP) %]>
+    &nbsp;Purchases
+    <input name="IC" type="checkbox" class="checkbox" value="IC" [% HTML.escape(IC) %]>
+    &nbsp;Inventory
+</fieldset>
+
+<fieldset class="DEPENDS ON charttype BEING A">
+  <legend>Include in drop-down menus</legend>
+  <p style='font-weight:normal'>These will only be effective if the account is NOT a summary account AND there exists at least one taxkey. Setting the account as a summary account will erase these settings.</p>
+  <table width="100%">
+    <tr>
+      <th align="left">Receivables</th>
+      <th align="left">Payables</th>
+      <th align="left">Parts Inventory</th>
+      <th align="left">Service Items</th>
+    </tr>
+    <tr>
+      <td>
+        <input name="AR_amount" type="checkbox" class="checkbox" value="AR_amount"
+          [% HTML.escape(AR_amount) %]>&nbsp;
+        Revenue <br>
+        <input name="AR_paid" type="checkbox" class="checkbox" value="AR_paid"
+          [% HTML.escape(AR_paid) %]>&nbsp;
+        Receipt <br>
+        <input name="AR_tax" type="checkbox" class="checkbox" value="AR_tax"
+          [% HTML.escape(AR_tax) %]>&nbsp;
+        Tax
+      </td>
+      <td>
+        <input name="AP_amount" type="checkbox" class="checkbox" value="AP_amount"
+          [% HTML.escape(AP_amount) %]>&nbsp;
+        Expense/Asset <br>
+        <input name="AP_paid" type="checkbox" class="checkbox" value="AP_paid"
+          [% HTML.escape(AP_paid) %]>&nbsp;
+        Payment <br>
+        <input name="AP_tax" type="checkbox" class="checkbox" value="AP_tax"
+            [% HTML.escape(AP_tax) %]>&nbsp;
+        Tax
+      </td>
+      <td>
+        <input name="IC_sale" type="checkbox" class="checkbox" value="IC_sale"
+          [% HTML.escape(IC_sale) %]>&nbsp;
+        Revenue <br>
+        <input name="IC_cogs" type="checkbox" class="checkbox" value="IC_cogs"
+          [% HTML.escape(IC_cogs) %]>&nbsp;
+        Expense <br>
+        <input name="IC_taxpart" type="checkbox" class="checkbox" value="IC_taxpart"
+          [% HTML.escape(IC_taxpart) %]>&nbsp;
+        Tax
+      </td>
+      <td>
+        <input name=IC_income type=checkbox class=checkbox value="IC_income"
+          [% HTML.escape(IC_income) %]>&nbsp;
+        Revenue <br>
+        <input name=IC_expense type=checkbox class=checkbox value="IC_expense"
+          [% HTML.escape(IC_expense) %]>&nbsp;
+        Expense <br>
+        <input name=IC_taxservice type=checkbox class=checkbox value="IC_taxservice"
+          [% HTML.escape(IC_taxservice) %]>&nbsp;
+        Tax
+      </td>
+    </tr>
+  </table>
+</fieldset>
+
+<fieldset class="DEPENDS ON charttype BEING A">
+  <legend>
+    Taxkeys and Taxreport Preferences
+  </legend>
+  <p style='font-weight:normal'>Note: Taxkeys must have a "valid from" date, and will not be in effect otherwise.</p>
+
+            <table>
+[% IF account_exists %]
+              <tr>
+                <th align="left">Taxkey</th>
+                <th align="left">valid from</th>
+                <th align="left">pos_ustva</th>
+                <th align="left">delete ? </th>
+              </tr>
+[% FOREACH tk = ACCOUNT_TAXKEYS %]
+              <tr>
+    [% IF tk.id %]
+                <input type="hidden" name="taxkey_id_[% tk.runningnumber %]" value="[% tk.id %]">
+                <td><select name="taxkey_tax_[% tk.runningnumber %]">[% tk.selecttaxkey %]</select></td>
+                <td><input name="taxkey_startdate_[% tk.runningnumber %]" value="[% HTML.escape(tk.startdate) %]"></td>
+                <td><select name="taxkey_pos_ustva_[% tk.runningnumber %]">[% tk.select_tax %]</select></td>
+                <td><input name="taxkey_del_[% tk.runningnumber %]" type="checkbox"
+                class="checkbox" value="delete"></td>
+    [% ELSE %]
+                <input type="hidden" name="taxkey_id_[% tk.runningnumber %]" value="NEW">
+                <td><select name="taxkey_tax_[% tk.runningnumber %]">[% tk.selecttaxkey %]</select></td>
+                <td><input name="taxkey_startdate_[% tk.runningnumber %]" value="[% HTML.escape(tk.startdate) %]"></td>
+                <td><select name="taxkey_pos_ustva_[% tk.runningnumber %]">[% tk.select_tax %]</select></td>
+                <td>&nbsp;</td>
+    [% END %]
+              </tr>
+
+[% END %]
+[% ELSE %]
+<tr>
+  <td align="center" colspan="4"><p>Save account first to insert taxkeys</p>
+  </td>
+</tr>
+[% END %]
+            </table>
+</fieldset>
+
+<fieldset class="DEPENDS ON charttype BEING A">
+  <legend>Report and misc. Preferences</legend>
+  <table>
+        <tr>
+          <th align="left">EUER</th>
+          <td colspan="3"><select name="pos_eur">[% select_eur %]</select></td>
+        </tr>
+        <tr>
+          <th align="left">BWA</th>
+          <td colspan="3"><select name="pos_bwa">[% select_bwa %]</select></td>
+        </tr>
+       <!-- Diese Steuerfunktion hat keine Auswirkung in der Bilanz und wird erstmal deaktiviert. -->
+        <!-- tr>
+          <th align="left">Bilanz</th>
+          <td colspan="3"><select name="pos_bilanz">[% select_bilanz %]</select></td>
+        </tr -->
+        <tr>
+          <th align="left">Datevautomatik</th>
+          <td colspan="3"><input name="datevautomatik" type="checkbox" class="checkbox" value="T" [% IF datevautomatik %]checked [% END %]></td>
+        </tr>
+        <tr>
+          <th align="left">Folgekonto</th>
+          <td><select name="new_chart_id">[% selectnewaccount %]</select></td>
+          <th align="left">Valid from</th>
+          <td><input name="valid_from" value="[% valid_from %]"></td>
+        </tr>
+  </table>
+[% END %]
+</fieldset>
+<hr size="3" noshade>
diff --git a/templates/webpages/am/edit_defaults_en.html b/templates/webpages/am/edit_defaults_en.html
new file mode 100644 (file)
index 0000000..8b13215
--- /dev/null
@@ -0,0 +1,168 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="am.pl"name="Form">
+
+  <input type="hidden" name="type" value="defaults">
+
+  <p>
+   <table>
+    <tr class="listheading">
+     <th colspan="4">Ranges of numbers</th>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Invoice Number</th>
+     <td><input name="invnumber" size="10" value="[% HTML.escape(defaults_invnumber) %]"></td>
+     <th align="right" nowrap>Last Customer Number</th>
+     <td><input name="customernumber" size="10" value="[% HTML.escape(defaults_customernumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Credit Note Number</th>
+     <td><input name="cnnumber" size="10" value="[% HTML.escape(defaults_cnnumber) %]"></td>
+     <th align="right" nowrap>Last Vendor Number</th>
+     <td><input name="vendornumber" size="10" value="[% HTML.escape(defaults_vendornumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Sales Order Number</th>
+     <td><input name="sonumber" size="10" value="[% HTML.escape(defaults_sonumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Purchase Order Number</th>
+     <td><input name="ponumber" size="10" value="[% HTML.escape(defaults_ponumber) %]"></td>
+     <th align="right" nowrap>Last Article Number</th>
+     <td><input name="articlenumber" size="10" value="[% HTML.escape(defaults_articlenumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Sales Quotation Number</th>
+     <td><input name="sqnumber" size="10" value="[% HTML.escape(defaults_sqnumber) %]"></td>
+     <th align="right" nowrap>Last Service Number</th>
+     <td><input name="servicenumber" size="10" value="[% HTML.escape(defaults_servicenumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last RFQ Number</th>
+     <td><input name="rfqnumber" size="10" value="[% HTML.escape(defaults_rfqnumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Last Sales Delivery Order Number</th>
+     <td><input name="sdonumber" size="10" value="[% HTML.escape(defaults_sdonumber) %]"></td>
+     <th align="right" nowrap>Last Purchase Delivery Order Number</th>
+     <td><input name="pdonumber" size="10" value="[% HTML.escape(defaults_pdonumber) %]"></td>
+    </tr>
+
+    <tr class="listheading">
+     <th colspan="4">Default Accounts</th>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Inventory Account</th>
+     <td colspan="3">
+      <select name="inventory_accno">
+       [%- FOREACH row = ACCNOS_IC %]
+       <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Revenue Account</th>
+     <td colspan="3">
+      <select name="income_accno">
+       [%- FOREACH row = ACCNOS_IC_INCOME %]
+       <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Expense Account</th>
+     <td colspan="3">
+      <select name="expense_accno">
+       [%- FOREACH row = ACCNOS_IC_EXPENSE %]
+       <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Foreign Exchange Gain</th>
+     <td colspan="3">
+      <select name="fxgain_accno">
+       [%- FOREACH row = ACCNOS_FX_GAIN %]
+       <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Foreign Exchange Loss</th>
+     <td colspan="3">
+      <select name="fxloss_accno">
+       [%- FOREACH row = ACCNOS_FX_LOSS %]
+       <option value="[% HTML.escape(row.value) %]"[% IF row.selected %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr class="listheading">
+     <th colspan="4">Miscellaneous</th>
+    </tr>
+
+    <tr>
+     <th align="right">Business Number</th>
+     <td colspan="3"><input name="businessnumber" size="25" value="[% HTML.escape(defaults_businessnumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Year End (mm/dd)</th>
+     <td colspan="3"><input name="yearend" size="5" value="[% HTML.escape(defaults_yearend) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Currencies <sup>(1)</sup></th>
+     <td colspan="3"><input name="curr" size="20" value="[% HTML.escape(defaults_curr) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Weight unit</th>
+ <!--    <td colspan="3"><input name="weightunit" size="20" maxlength="5" value="[% HTML.escape(defaults_weightunit) %]"></td> -->
+     <td>
+      [%- INCLUDE 'generic/multibox.html'
+           name          = 'weightunit',
+           default       = defaults_weightunit,
+           style         = 'size:20; maxength:5',
+           DATA          = ALL_UNITS,
+           id_key        = 'name',
+           label_key     = 'name',
+           -%]
+      </td>
+    </tr>
+
+   </table>
+  </p>
+
+  <hr height="3" noshade>
+
+  <p><input type="submit" class="submit" name="action" value="Save"></p>
+
+  <hr height="3" noshade>
+
+  <p>
+   (1) Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/am/edit_price_factor_en.html b/templates/webpages/am/edit_price_factor_en.html
new file mode 100644 (file)
index 0000000..9ee95b2
--- /dev/null
@@ -0,0 +1,35 @@
+[% USE HTML %]<body>
+
+ [% IF MESSAGE %]<p>[% MESSAGE %]</p>[% END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="am.pl">
+
+  <p>
+   <table border="0">
+    <tr>
+     <td align="right">Description</td>
+     <td><input name="description" value="[% HTML.escape(description) %]"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Factor</td>
+     <td><input name="factor" value="[% HTML.escape(factor) %]"></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+   <input type="hidden" name="type" value="price_factor">
+
+   <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+   <input type="submit" name="action" value="Save">
+   [% IF id %][% IF orphaned %]<input type="submit" name="action" value="Delete">[% END %][% END %]
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/am/edit_tax_en.html b/templates/webpages/am/edit_tax_en.html
new file mode 100644 (file)
index 0000000..e08f1b9
--- /dev/null
@@ -0,0 +1,51 @@
+[% USE HTML %]<body>
+ <form method="post" action="am.pl">
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+  <input type="hidden" name="type" value="tax">
+
+  <div class="listtop">Tax-O-Matic [% title %]</div>
+
+  <table width="100%">
+   <tr>
+    <td>tax_taxkey</td>
+    <td><input name="taxkey" size="2" value="[% HTML.escape(taxkey) %]"></td>
+   </tr>
+
+   <tr>
+    <td>tax_taxdescription</td>
+    <td><input name="taxdescription" size="60" value="[% HTML.escape(taxdescription) %]"></td>
+   </tr>
+
+   <tr>
+    <td>tax_percent</td>
+    <td><input name="rate" size="10" value="[% HTML.escape(rate) %]"> %</td>
+   </tr>
+
+   <tr>
+    <td>tax_chartaccno</td>
+    <td><select name="chart_id"><option value="0">None</option>[% FOREACH row = ACCOUNTS %]<option value="[% HTML.escape(row.id) %]" [% IF row.selected %]selected[% END %]>[% HTML.escape(row.taxaccount) %]</option>[% END %]</select></td>
+   </tr>
+
+  </table>
+
+  [% UNLESS orphaned %]
+  <br />
+  Chartaccounts connected to this Tax:
+  [% FOREACH row = TAXINUSE %]
+  <a href="am.pl?action=edit_account&id=[% HTML.url(row.id) %]&callback=[% HTML.url(callback) %]">[% HTML.escape(row.accno) %]</a>&nbsp;
+  [% END %]
+  <br />
+  [% END %]
+
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <input type="submit" class="submit" name="action" value="Save">
+
+  [% IF orphaned %]
+  <input type="submit" class="submit" name="action" value="Delete">
+  [% END %]
+
+</form>
+</body>
+</html>
+
diff --git a/templates/webpages/am/edit_templates_en.html b/templates/webpages/am/edit_templates_en.html
new file mode 100644 (file)
index 0000000..e80b85e
--- /dev/null
@@ -0,0 +1,78 @@
+[% USE HTML %]<body>
+
+ <div class="listheading">[% title %]</div>
+
+ <form method="post" name="Form" action="amtemplates.pl">
+
+  [% FOREACH var = HIDDEN %]<input type="hidden" name="[% HTML.escape(var.name) %]" value="[% HTML.escape(var.value) %]">[% END %]
+
+  [% IF SHOW_EDIT_OPTIONS %]
+   <p>
+    Template
+    <select name="formname">
+     [% FOREACH row = FORMNAME %]<option value="[% HTML.escape(row.value) %]" [% IF row.value == formname %]selected[% END %]>[% HTML.escape(row.label) %]</option>[% END %]
+    </select>
+
+    [% IF LANGUAGE.size %]
+     Language
+     <select name="language">
+      <option></option>
+      [% FOREACH row = LANGUAGE %]<option value="[% HTML.escape(row.value) %]" [% IF row.value == language %]selected[% END %]>[% HTML.escape(row.label) %]</option>[% END %]
+     </select>
+    [% END %]
+
+    [% IF PRINTER.size %]
+     Printer
+     <select name="printer">
+      <option></option>
+      [% FOREACH row = PRINTER %]<option value="[% HTML.escape(row.value) %]" [% IF row.value == printer %]selected[% END %]>[% HTML.escape(row.label) %]</option>[% END %]
+     </select>
+    [% END %]
+
+    <input type="hidden" name="display_nextsub" value="display_template">
+
+    <input name="action" type="submit" class="submit" value="Display">
+
+   </p>
+
+   <hr>
+  [% END %]
+
+
+
+  [% IF SHOW_CONTENT %]
+   <p>
+    <div class="listtop">
+     [% IF CAN_EDIT %]Edit file[% ELSE %]Display file[% END %] [% HTML.escape(display_filename) %]
+    </div>
+   </p>
+
+   [% IF CAN_EDIT %]
+    <p><textarea name="content" id="content" cols="100" rows="25">[% HTML.escape(content) %]</textarea></p>
+
+    <p>
+     <input type="hidden" name="save_nextsub" value="save_template">
+     <input type="submit" name="action" value="Save">
+     <input type="button" onclick="history.back()" value="Back">
+    </p>
+
+    [% ELSE %]
+
+    <input type="hidden" name="edit_nextsub" value="edit_template">
+
+    <p><input name="action" type="submit" class="submit" value="Edit"></p>
+
+    <p><pre class="filecontent">[% HTML.escape(content) %]</pre></p>
+
+    [% IF SHOW_SECOND_EDIT_BUTTON %]
+     <p><input name="action" type="submit" class="submit" value="Edit"></p>
+    [% END %]
+
+   [% END %] <!-- CAN_EDIT -->
+
+  [% END %] <!-- SHOW_CONTENT -->
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/am/edit_units_en.html b/templates/webpages/am/edit_units_en.html
new file mode 100644 (file)
index 0000000..21a18be
--- /dev/null
@@ -0,0 +1,144 @@
+[% USE HTML %]<body>
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+
+  <hr>
+ [% END %]
+
+ <form method="post" action="[% HTML.escape(script) %]">
+
+ <input type="hidden" name="type" value="unit">
+
+ <table width="100%">
+  <tr>
+   <th class="listtop" colspan="2">[% title %]</th>
+  </tr>
+  <tr height="5"></tr>
+ </table>
+
+ <p>
+  Einheiten haben entweder keine oder genau eine Basiseinheit, von der
+  sie ein Vielfaches sind. Wenn Sie eine Basiseinheit ausw&auml;hlen,
+  dann m&uuml;ssen Sie auch einen Faktor eingeben. Sie m&uuml;ssen
+  Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So
+  ist die Definition von &quot;kg&quot; mit der Basiseinheit
+  &quot;g&quot; und dem Faktor 1000 zul&auml;ssig, die Definition von
+  &quot;g&quot; mit der Basiseinheit &quot;kg&quot; und dem Faktor
+  &quot;0,001&quot; hingegen nicht.
+ </p>
+
+ <hr>
+
+ <table width="100%">
+  <tr><th class="listtop">Add unit</th></tr>
+ </table>
+
+ <table>
+  <tr>
+   <th align="right">Unit</th>
+   <td><input name="new_name" size="20" maxlength="20"></td>
+  </tr>
+  <tr>
+   <th align="right">Base unit</th>
+   <td>
+    <select name="new_base_unit">
+     [% FOREACH row = NEW_BASE_UNIT_DDBOX %]<option [% row.selected %]>[% row.name %]</option>[% END %]
+    </select>
+   </td>
+  </tr>
+  <tr>
+   <th align="right">Factor</th>
+   <td><input name="new_factor"></td>
+  </tr>
+
+  [% FOREACH language = LANGUAGES %]
+   <tr>
+    <th align="right">[% language.description %]</th>
+    <td><input name="new_localized_[% language.id %]" size="20" maxlength="20"></td>
+    <th align="right">Plural</th>
+    <td><input name="new_localized_plural_[% language.id %]" size="20" maxlength="20"></td>
+   </tr>
+  [% END %]
+ </table>
+
+ <input type="submit" class="submit" name="action" value="Add">
+
+ <hr>
+
+ <table width="100%">
+  <tr><th class="listtop">Edit units</th></tr>
+ </table>
+
+ <p>
+  Units that have already been used (e.g. for parts and services or in invoices or warehouse transactions) cannot be changed.
+ </p>
+
+ <p>
+  Units marked for deletion will be deleted upon saving.
+ </p>
+
+ <p>
+  You can declare different translations for singular and plural for each unit (e.g. &quot;day&quot; and &quot;days).
+ </p>
+
+ <table>
+  <tr>
+   <th class="listheading" width="32" align="center" valign="center"><img alt="up" src="image/up.png"><img alt="down" src="image/down.png"></th>
+   <th class="listheading">Delete</th>
+   <th class="listheading">Unit</th>
+   <th class="listheading">Base unit</th>
+   <th class="listheading">Factor</th>
+   [% FOREACH language = LANGUAGES %]
+    <th class="listheading">[% language.description %]</th>
+   [% END %]
+  </tr>
+
+  [% FOREACH row = UNITS %]
+   <tr>
+    <td width="32" align="center" valign="center">[% IF loop.first %]<img src="image/transparent16x16.gif">[% ELSE %]<a href="[% updownlink %]&dir=up&name=[% HTML.url(row.name) %]"><img alt="up" src="image/up.png" border="0"></a>[% END %][% IF loop.last %]<img src="image/transparent16x16.gif">[% ELSE %]<a href="[% updownlink %]&dir=down&name=[% HTML.url(row.name) %]"><img alt="down" src="image/down.png" border="0"></a>[% END %]</td>
+    [% IF row.in_use %]
+     <td>
+      <input type="hidden" name="unchangeable_[% loop.count %]" value="1">
+      <input type="hidden" name="old_name_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+     </td>
+
+     <td>[% HTML.escape(row.name) %]</td>
+     <td>[% IF row.base_unit %][% HTML.escape(row.base_unit) %][% ELSE %]---[% END %]</td>
+     <td>[% IF row.base_unit %][% HTML.escape(row.factor) %][% ELSE %]---[% END %]</td>
+
+     [% ELSE %]
+
+     <td align="center"><input type="checkbox" name="delete_[% loop.count %]"></td>
+     <td>
+      <input type="hidden" name="old_name_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+      <input name="name_[% loop.count %]" size="10" maxlength="20" value="[% HTML.escape(row.name) %]">
+     </td>
+     <td>
+      <select name="base_unit_[% loop.count %]">
+       [% FOREACH option = row.BASE_UNIT_DDBOX %]<option [% option.selected %]>[% HTML.escape(option.name) %]</option>[% END %]
+      </select>
+     </td>
+     <td><input name="factor_[% loop.count %]" size="8" value="[% row.factor %]"></td>
+    [% END %]
+
+    [% FOREACH language = row.UNITLANGUAGES %]
+     <td>
+      singular first char:
+      <input name="localized_[% language.idx %]_[% language.language_id %]" value="[% HTML.escape(language.localized) %]" size="6" maxlength="20">
+      plural first char:
+      <input name="localized_plural_[% language.idx %]_[% language.language_id %]" value="[% HTML.escape(language.localized_plural) %]" size="6" maxlength="20">
+     </td>
+    [% END %]
+   </tr>
+
+   [% IF loop.last %]<input type="hidden" name="rowcount" value="[% loop.count %]">[% END %]
+  [% END %]
+ </table>
+
+ <input type="submit" class="submit" name="action" value="Save">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/am/edit_warehouse_en.html b/templates/webpages/am/edit_warehouse_en.html
new file mode 100644 (file)
index 0000000..753f131
--- /dev/null
@@ -0,0 +1,111 @@
+[% USE HTML %]<body [% IF onload %]onload="[% onload %]"[% END %]>
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <form method="post" action="am.pl">
+
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+
+  <input type="hidden" name="type" value="warehouse">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <div class="listtop">[% IF id %]Edit Warehouse[% ELSE %]Add Warehouse[% END %]</div>
+
+  <table border="0">
+   <tr>
+    <td align="right">Description</td>
+    <td>
+     <input name="description" size="60" value="[% HTML.escape(description) %]">
+     <input type="hidden" name="orig_description" value="[% HTML.escape(description) %]">
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right">Invalid</td>
+    <td><input type="checkbox" name="invalid" value="1" [% IF invalid %]checked[% END %]></td>
+   </tr>
+
+   <tr>
+    <td align="right">Number of new bins</td>
+    <td><input name="number_of_new_bins"></td>
+   </tr>
+
+   <tr>
+    <td align="right">Prefix for the new bins' names</td>
+    <td><input name="prefix" value="Bin"></td>
+   </tr>
+  </table>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Save">
+   [%- IF id %][%- UNLESS in_use %]
+   <input type="submit" class="submit" name="action" value="Delete">
+   [%- END %][%- END %]
+  </p>
+
+ </form>
+
+ [% IF id %]
+
+ <hr height="3">
+
+ <div class="listtop">Edit Bins</div>
+
+ [% UNLESS BINS.size %]
+ <p>No bins have been added to this warehouse yet.</p>
+
+ [% ELSE %]
+
+ <p>
+  Bins that have been used in the past cannot be deleted anymore. For these bins there's no checkbox in the &quot;Delete&quot; column.
+ </p>
+
+ <form method="post" action="am.pl">
+
+  <input type="hidden" name="warehouse_id" value="[% HTML.escape(id) %]">
+
+  <input type="hidden" name="type" value="bin">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <table border="0">
+   <tr>
+    <th class="listheading">Delete</th><th class="listheading">Description</th>
+    <th class="listheading">Delete</th><th class="listheading">Description</th>
+   </tr>
+   [%- SET row_odd = '1' %]
+   [%- USE bin_it = Iterator(BINS) %]
+   [%- FOREACH bin = bin_it %]
+   [%- IF row_odd %]
+   <tr>
+    [%- END %]
+
+    <td>[% IF bin.in_use %]&nbsp;[% ELSE %]<input type="checkbox" name="delete_[% bin_it.count %]" value="1">[% END %]</td>
+    <td>
+     <input type="hidden" name="id_[% bin_it.count %]" value="[% HTML.escape(bin.id) %]">
+     <input name="description_[% bin_it.count %]" value="[% HTML.escape(bin.description) %]">
+    </td>
+
+    [%- SET end_tr = '0' %]
+    [%- UNLESS row_odd %][%- SET end_tr = '1' %][%- END %]
+    [%- IF bin_it.last %][%- SET end_tr = '1' %][%- END %]
+    [%- IF end_tr %]
+   </tr>
+   [%- END %]
+
+   [%- IF row_odd %][% SET row_odd = '0' %][% ELSE %][% SET row_odd = '1' %][% END %]
+   [%- END %]
+  </table>
+
+  <input type="hidden" name="rowcount" value="[% BINS.size %]">
+
+  <p><input type="submit" class="submit" name="action" value="Save"></p>
+ </form>
+
+ [% END %]
+
+ [% END %]
+
+</body>
+</html>
diff --git a/templates/webpages/am/list_account_details_en.html b/templates/webpages/am/list_account_details_en.html
new file mode 100644 (file)
index 0000000..8bf1c3f
--- /dev/null
@@ -0,0 +1,63 @@
+[% USE HTML %] [% FOREACH row = CA %]
+<table width="100%">
+
+ <colgroup>
+  <col width="10%">
+  <col width="10%">
+  <col width="10%">
+  <col width="50%">
+  <col width="10%">
+  <col width="10%">
+ </colgroup>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td rowspan="8" class="coa_detail_emph">[% IF row.id %][% HTML.escape(row.id) %][% ELSE %]-[% END %]</td>
+  <td colspan="5" class="coa_detail_emph">[% HTML.escape(row.category) %]&nbsp;</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td colspan="5" class="coa_detail_emph">
+   [% IF row.link %][% HTML.escape(row.link) %][% ELSE %]-[% END %]
+  </td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td colspan="5" class="coa_details_header">Taxlink_coa</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td class="coa_details_header2">Taxkey_coa</td>
+  <td class="coa_details_header2">Taxaccount_coa</td>
+  <td class="coa_details_header2">Taxdescription_coa</td>
+  <td class="coa_details_header2">Posustva_coa</td>
+  <td class="coa_details_header2">Startdate_coa</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td class="coa_detail_emph">[% IF row.taxkey         %][% HTML.escape(row.taxkey).replace(',', '<br>')         %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.taxaccount     %][% HTML.escape(row.taxaccount).replace(',', '<br>')     %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.taxdescription %][% HTML.escape(row.taxdescription).replace(',', '<br>') %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.tk_ustva       %][% HTML.escape(row.tk_ustva).replace(',', '<br>')       %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.startdate      %][% HTML.escape(row.startdate).replace(',', '<br>')      %][% ELSE %]-[% END %]</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td colspan="5" class="coa_details_header">Report Positions</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td class="coa_details_header2">pos_bwa</td>
+  <td class="coa_details_header2">pos_bilanz</td>
+  <td class="coa_details_header2">pos_eur</td>
+  <td colspan="2" class="coa_details_header2">Datevautomatik</td>
+ </tr>
+
+ <tr class="coa_listrow[% loop.count % 2 %]">
+  <td class="coa_detail_emph">[% IF row.pos_bwa    %][% HTML.escape(row.pos_bwa)    %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.pos_bilanz %][% HTML.escape(row.pos_bilanz) %][% ELSE %]-[% END %]</td>
+  <td class="coa_detail_emph">[% IF row.pos_eur    %][% HTML.escape(row.pos_eur)    %][% ELSE %]-[% END %]</td>
+  <td colspan="2" class="coa_detail_emph">[% IF row.datevautomatik %]On[% ELSE %]Off[% END %]</td>
+ </tr>
+</table>
+
+[% END %]
diff --git a/templates/webpages/am/list_accounts_en.html b/templates/webpages/am/list_accounts_en.html
new file mode 100644 (file)
index 0000000..0b339c3
--- /dev/null
@@ -0,0 +1,65 @@
+[% USE HTML %]<body>
+
+ <br/><div id='pjxdebugrequest'></div><br/>
+
+ <div class="coa_listtop">[% title %]</div>
+
+ <br />
+
+ <table width="100%">
+
+  <colgroup>
+   <col width="10%">
+   <col width="10%">
+   <col width="10%">
+   <col width="50%">
+   <col width="10%">
+   <col width="10%">
+  </colgroup>
+
+  <tr class="coa_listheading">
+   <td class="coa_listheading_element">Account</td>
+   <td colspan="3" class="coa_listheading_element">Description (Click on Description for details)</td>
+   <td class="coa_listheading_element">Debit</td>
+   <td class="coa_listheading_element">Credit</td>
+  </tr>
+
+  [% SET row_odd = '1' %][% FOREACH row = CA %]
+
+  [% IF row.heading %]
+  <tr>
+   <td class="accountlistheading"><a href="[% row.link_edit_account %]">[% HTML.escape(row.accno) %]</a></td>
+   <td colspan="5" class="accountlistheading">[% HTML.escape(row.description) %]</td>
+  </tr>
+
+  [% ELSE %]
+
+  <tr class="coa_listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
+
+   <td class="coa_account_header">
+    <b><a href="[% row.link_edit_account %]" >[% HTML.escape(row.accno) %]</a></b>
+   </td>
+
+   <input type="hidden" name="chart_id" value="[% HTML.escape(row.id) %]" id="chart_id_[% HTML.escape(row.id) %]" >
+   <td colspan="3" id="accountcontent[% HTML.escape(row.id) %]-title" class="coa_account_header_sc"
+       onclick="list_account_details( ['chart_id_[% HTML.escape(row.id) %]'], ['ajaxcontent[% HTML.escape(row.id) %]'] )">
+    [% HTML.escape(row.description) %]
+   </td>
+
+    <td class="coa_account_header"><div class="coa_amount">[% HTML.escape(row.debit) %]</div></td>
+    <td class="coa_account_header"><div class="coa_amount">[% HTML.escape(row.credit) %]</div>
+    </td>
+  </tr>
+
+  <tr class="coa_detail">
+   <td colspan="6" width="100%"><div id="ajaxcontent[% HTML.escape(row.id) %]"></div></td>
+  </tr>
+
+  [% END %]
+
+  [% END %]
+
+ </table>
+
+</body>
+</html>
diff --git a/templates/webpages/am/list_price_factors_en.html b/templates/webpages/am/list_price_factors_en.html
new file mode 100644 (file)
index 0000000..9001c9c
--- /dev/null
@@ -0,0 +1,39 @@
+[% USE HTML %]<body>
+
+ [% IF MESSAGE %]<p>[% MESSAGE %]</p>[% END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <p>
+  <table width="100%">
+   <tr>
+    <td class="listheading" width="0%"></td>
+    <td class="listheading" width="0%"></td>
+    <td class="listheading" width="80%">Description</td>
+    <td class="listheading" width="20%">Factor</td>
+   </tr>
+
+   [% SET row_odd = '1' %][% FOREACH factor = PRICE_FACTORS %]
+   <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
+    <td>[% IF factor.previous_id %]<a href="[% url_base %]&action=swap_price_factors&id1=[% HTML.url(factor.previous_id) %]&id2=[% HTML.url(factor.id) %]"><img border="0" src="image/up.png"></a>[% END %]</td>
+    <td>[% IF factor.next_id %]<a href="[% url_base %]&action=swap_price_factors&id1=[% HTML.url(factor.next_id) %]&id2=[% HTML.url(factor.id) %]"><img border="0" src="image/down.png"></a>[% END %]</td>
+    <td><a href="[% url_base %]&action=edit_price_factor&id=[% HTML.url(factor.id) %]">[% HTML.escape(factor.description) %]</a></td>
+    <td>[% HTML.escape(factor.factor) %]</td>
+   </tr>
+   [% END %]
+  </table>
+ </p>
+
+ <hr height="3">
+
+ <p>
+  <form method="post" action="am.pl">
+   <input type="hidden" name="type" value="price_factor">
+   <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+   <input type="submit" class="submit" name="action" value="Add">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/am/list_tax_en.html b/templates/webpages/am/list_tax_en.html
new file mode 100644 (file)
index 0000000..8184c5f
--- /dev/null
@@ -0,0 +1,36 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% title %]</div>
+
+ <table>
+  <tr>
+   <th class="listheading">tax_taxkey</th>
+   <th class="listheading">tax_taxdescription</th>
+   <th class="listheading">tax_rate</th>
+   <th class="listheading">taxnumber</th>
+   <th class="listheading">account_description</th>
+  </tr>
+
+  [% SET row_odd = '1' %][% FOREACH row = TAX %]
+  <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
+   <td align="right">[% HTML.escape(row.taxkey) %]</td>
+   <td><a href="am.pl?action=edit_tax&id=[% HTML.url(row.id) %]&callback=[% HTML.url(callback) %]">[% HTML.escape(row.taxdescription) %]</a></td>
+   <td align="right">[% HTML.escape(row.rate) %] %</td>
+   <td align="right">[% HTML.escape(row.taxnumber) %]</td>
+   <td>[% HTML.escape(row.account_description) %]</td>
+  </tr>
+  [% END %]
+ </table>
+
+ <p>
+  <form method="post" action="am.pl">
+
+   <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+   <input type="hidden" name="type" value="tax">
+   <input class="submit" type="submit" name="action" value="Add">
+  </form>
+ </p>
+
+</body>
+</html>
+
diff --git a/templates/webpages/am/list_warehouses_en.html b/templates/webpages/am/list_warehouses_en.html
new file mode 100644 (file)
index 0000000..a21f4b2
--- /dev/null
@@ -0,0 +1,40 @@
+[% USE HTML %]<body>
+
+ [% IF saved_message %]<p>[% saved_message %]</p>[% END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <p>
+  <table width="100%">
+   <tr>
+    <td class="listheading" width="0%"></td>
+    <td class="listheading" width="0%"></td>
+    <td class="listheading" width="70%">Description</td>
+    <td class="listheading" width="20%">Number of bins</td>
+    <td class="listheading" width="10%">Invalid</td>
+   </tr>
+
+   [% SET row_odd = '1' %][% FOREACH warehouse = WAREHOUSES %]
+   <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
+    <td>[% IF warehouse.previous_id %]<a href="[% url_base %]&action=swap_warehouses&id1=[% HTML.url(warehouse.previous_id) %]&id2=[% HTML.url(warehouse.id) %]"><img border="0" src="image/up.png"></a>[% END %]</td>
+    <td>[% IF warehouse.next_id %]<a href="[% url_base %]&action=swap_warehouses&id1=[% HTML.url(warehouse.next_id) %]&id2=[% HTML.url(warehouse.id) %]"><img border="0" src="image/down.png"></a>[% END %]</td>
+    <td><a href="[% url_base %]&action=edit_warehouse&id=[% HTML.url(warehouse.id) %]">[% HTML.escape(warehouse.description) %]</a></td>
+    <td>[% HTML.escape(warehouse.number_of_bins) %]</td>
+    <td>[% IF warehouse.invalid %]Yes[% ELSE %]No[% END %]</td>
+   </tr>
+   [% END %]
+  </table>
+ </p>
+
+ <hr height="3">
+
+ <p>
+  <form method="post" action="am.pl">
+   <input type="hidden" name="type" value="warehouse">
+
+   <input type="submit" class="submit" name="action" value="Add">
+  </form>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/amcvar/display_cvar_config_form_en.html b/templates/webpages/amcvar/display_cvar_config_form_en.html
new file mode 100644 (file)
index 0000000..3db46e7
--- /dev/null
@@ -0,0 +1,149 @@
+[% USE HTML %]<body onload="document.Form.name.focus();">
+
+ <style type="text/css">
+  .small {
+    font-size: 0.75em;
+  }
+ </style>
+
+ <div class="listtop">[% title %]</div>
+
+ <form action="amcvar.pl" name="Form" method="post">
+
+  <p>
+   <table>
+    <tr>
+     <td align="right">Module</td>
+     <td>
+      [%- INCLUDE generic/multibox.html
+            name      = 'module',
+            id_key    = 'module',
+            label_key = 'description',
+            DATA      = MODULES %]
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Name<sup><span class="small">(1)</span></sup></td>
+     <td><input name="name" value="[% HTML.escape(name) %]"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Description<sup><span class="small">(2)</span></sup></td>
+     <td><input name="description" value="[% HTML.escape(description) %]"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Type</td>
+     <td>
+      <select name="type">
+       [%- FOREACH row = TYPES %]
+       <option value="[% HTML.escape(row.type) %]"[% IF row.type == type %] selected[% END %]>[% HTML.escape(row.type_tr) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Default value<sup><span class="small">(3)</span></sup></td>
+     <td><input name="default_value" value="[% HTML.escape(default_value) %]"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Options<sup><span class="small">(4)</span></sup></td>
+     <td><input name="options" value="[% HTML.escape(options) %]"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Searchable<sup><span class="small"></span></sup></td>
+     <td>
+      <input type="radio" name="searchable" id="searchable_1" value="1"[% IF searchable %] checked[% END %]>
+      <label for="searchable_1">Yes</label>
+      <input type="radio" name="searchable" id="searchable_0" value="0"[% UNLESS searchable %] checked[% END %]>
+      <label for="searchable_0">No</label>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Includeable in reports<sup><span class="small"></span></sup></td>
+     <td>
+      <select name="inclusion">
+       <option value="no"[% UNLESS includeable %] selected[% END %]>No</option>
+       <option value="yes"[% IF includeable && !included_by_default %] selected[% END %]>Yes</option>
+       <option value="yes_default_on"[% IF included_by_default %] selected[% END %]>Yes, included by default</option>
+      </select>
+     </td>
+    </tr>
+
+    [%- IF module == 'IC' %]
+    <tr>
+     <td align="right">Editable<sup><span class="small">(5)</span></sup></td>
+     <td>
+      <input type="radio" name="flag_editable" id="flag_editable_1" value="1"[% IF flag_editable %] checked[% END %]>
+      <label for="flag_editable_1">Yes</label>
+      <input type="radio" name="flag_editable" id="flag_editable_0" value="0"[% UNLESS flag_editable %] checked[% END %]>
+      <label for="flag_editable_0">No</label>
+     </td>
+    </tr>
+    [%- END %]
+   </table>
+  </p>
+
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+
+  <p>
+   <input type="submit" name="action" value="Save">
+   [%- IF id %]
+   <input type="submit" name="action" value="Delete">
+   [%- END %]
+  </p>
+
+  <hr>
+
+  <h3>Annotations</h3>
+
+  <p>
+   (1) The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present
+  </p>
+
+  <p>
+   (2) The description is shown on the form. Chose something short and descriptive.
+  </p>
+
+  <p>
+   (3) The default value depends on the variable type:
+   <br>
+   <ul>
+    <li>Text, text field and number variables: The default value will be used as-is.</li>
+    <li>Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.</li>
+    <li>Date and timestamp variables: If the default value equals 'NOW' then the current date/current timestamp will be used. Otherwise the default value is copied as-is.</li>
+   </ul>
+  </p>
+
+  <p>
+   (4) The available options depend on the varibale type:
+   <br>
+   <ul>
+    <li>Text variables: 'MAXLENGTH=n' sets the maximum entry length to 'n'.</li>
+    <li>Text field variables: 'WIDTH=w HEIGHT=h' sets the width and height of the text field. They default to 30 and 5 respectively.</li>
+    <li>Number variables: 'PRECISION=n' forces numbers to be shown with exactly n decimal places.</li>
+    <li>Selection fields: The option field must contain the available options for the selection. Options are separated by '##', for example 'Early##Normal##Late'.</li>
+   </ul>
+   <br>
+   Other values are ignored.
+  </p>
+
+  [%- IF module == 'IC' %]
+  <p>
+   (5)
+
+   A variable marked as 'editable' can be changed in each quotation, order, invoice etc.
+
+   Otherwise the variable is only available for printing.
+  </p>
+  [%- END %]
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/amcvar/list_cvar_configs_en.html b/templates/webpages/amcvar/list_cvar_configs_en.html
new file mode 100644 (file)
index 0000000..024a81c
--- /dev/null
@@ -0,0 +1,101 @@
+[% USE HTML %]<body>
+
+ [% IF MESSAGE %]<p>[% MESSAGE %]</p>[% END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" action="amcvar.pl">
+  <input type="hidden" name="action" value="dispatcher">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <p>
+   Custom variables for module
+   [%- INCLUDE generic/multibox.html
+         name      = 'module',
+         id_key    = 'module',
+         label_key = 'description',
+         DATA      = MODULES %]
+   <input type="submit" class="submit" name="action_list_cvar_configs" value="Show">
+  </p>
+
+  <p>
+   <table width="100%">
+    <tr>
+     <td class="listheading" width="0%"></td>
+     <td class="listheading" width="0%"></td>
+     <td class="listheading" width="20%">Name</td>
+     <td class="listheading" width="20%">Description</td>
+     <td class="listheading" width="20%">Type</td>
+     <td class="listheading" width="20%">Searchable</td>
+     <td class="listheading" width="20%">Includeable in reports</td>
+     [%- IF module == 'IC' %]
+     <td class="listheading" width="20%">Editable</td>
+     [%- END %]
+    </tr>
+
+    [%- FOREACH cfg = CONFIGS %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <td>
+      [%- IF cfg.previous_id %]
+      <a href="amcvar.pl?action=swap_cvar_configs&module=[% HTML.url(module) %]&id1=[% HTML.url(cfg.previous_id) %]&id2=[% HTML.url(cfg.id) %]">
+       <img border="0" src="image/up.png"></a>
+      [%- END %]
+     </td>
+
+     <td>
+      [%- IF cfg.next_id %]
+      <a href="amcvar.pl?action=swap_cvar_configs&module=[% HTML.url(module) %]&id1=[% HTML.url(cfg.next_id) %]&id2=[% HTML.url(cfg.id) %]">
+       <img border="0" src="image/down.png"></a>
+      [%- END %]
+     </td>
+
+     <td>
+      <a href="amcvar.pl?action=edit_cvar_config&module=[% HTML.url(module) %]&id=[% HTML.url(cfg.id) %]&callback=[% HTML.url(callback) %]">
+       [% HTML.escape(cfg.name) %]
+      </a>
+     </td>
+
+     <td>[% HTML.escape(cfg.description) %]</td>
+     <td>[% HTML.escape(cfg.type_tr) %]</td>
+
+     <td>
+      [%- IF cfg.searchable %]
+      Yes
+      [%- ELSE %]
+      No
+      [%- END %]
+     </td>
+
+     <td>
+      [%- IF cfg.included_by_default %]
+      Yes, included by default
+      [%- ELSIF cfg.includeable %]
+      Yes
+      [%- ELSE %]
+      No
+      [%- END %]
+     </td>
+
+     [%- IF module == 'IC' %]
+     <td>
+      [%- IF cfg.flag_editable %]
+      Yes
+      [%- ELSE %]
+      No
+      [%- END %]
+     </td>
+     [%- END %]
+    </tr>
+    [%- END %]
+   </table>
+  </p>
+
+  <hr height="3">
+
+  <p>
+   <input type="submit" class="submit" name="action_add_cvar_config" value="Add">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/amcvar/render_checkboxes_en.html b/templates/webpages/amcvar/render_checkboxes_en.html
new file mode 100644 (file)
index 0000000..3a703d8
--- /dev/null
@@ -0,0 +1,3 @@
+[%- USE HTML %]
+[%- SET var_valid = HTML.escape(name_prefix) _ "cvar_" _ HTML.escape(var.name) _ HTML.escape(name_postfix) _ '_valid' -%]
+<input type=checkbox name='[% var_valid %]'[% IF var.valid %] checked[% END %]>
diff --git a/templates/webpages/amcvar/render_inputs_en.html b/templates/webpages/amcvar/render_inputs_en.html
new file mode 100644 (file)
index 0000000..60bab14
--- /dev/null
@@ -0,0 +1,45 @@
+[% USE HTML %]
+
+[%- SET var_name = HTML.escape(name_prefix) _ "cvar_" _ HTML.escape(var.name) _ HTML.escape(name_postfix) -%]
+
+[%- IF hide_non_editable && !var.flag_editable %]
+<input type="hidden" name="[% var_name %]" value="[% HTML.escape(var.value) %]">
+
+[%- ELSIF !var.valid %]
+  [%- IF show_disabled_message %]
+<i>Element disabled</i>
+  [%- END %]
+
+[%- ELSIF var.type == 'bool' %]
+<input type="checkbox" name="[% var_name %]" value="1"[% IF var.value %] checked[% END %]>
+
+[%- ELSIF var.type == 'textfield' %]
+<textarea name="[% var_name %]" cols="[% HTML.escape(var.width) %]" rows="[% HTML.escape(var.height) %]">[% HTML.escape(var.value) %]</textarea>
+
+[%- ELSIF var.type == 'date' %]
+<input name="[% var_name %]" id="[% var_name %]" size="12" value="[% HTML.escape(var.value) %]">
+<input name="[% var_name %]_button" id="[% var_name %]_trigger" type="button" value="?">
+
+<script type="text/javascript">
+ <!--
+     Calendar.setup({ inputField : "[% var_name %]",
+                      ifFormat   : "[% myconfig_jsc_dateformat %]",
+                      align      : "BR",
+                      button     : "[% var_name %]_trigger" });
+   -->
+</script>
+
+[%- ELSIF var.type == 'timestamp' %]
+<input name="[% var_name %]" value="[% HTML.escape(var.value) %]">
+
+[%- ELSIF var.type == 'select' %]
+
+<select name="[% var_name %]">
+ [%- FOREACH option = var.OPTIONS %]
+ <option[% IF option.value == var.value %] selected[% END %]>[% HTML.escape(option.value) %]</option>
+ [%- END %]
+</select>
+
+[%- ELSE %]
+<input name="[% var_name %]" value="[% HTML.escape(var.value) %]" [%- IF var.maxlength %] maxlength="[% HTML.escape(var.maxlength) %]"[% END -%]>
+[%- END %]
diff --git a/templates/webpages/amcvar/search_filter_en.html b/templates/webpages/amcvar/search_filter_en.html
new file mode 100644 (file)
index 0000000..b967e77
--- /dev/null
@@ -0,0 +1,63 @@
+[% USE HTML %]
+
+   [%- FOREACH var = variables %]
+   [%- IF var.searchable %]
+   <tr>
+    <td align="right" valign="top">[% HTML.escape(var.description) %]</td>
+    <td valign="top">
+
+     [%- IF var.type == 'bool' %]
+     <select name="cvar_[% HTML.escape(var.name) %]">
+      <option value="">---</option>
+      <option value="yes">Yes</option>
+      <option value="no">No</option>
+     </select>
+
+     [%- ELSIF var.type == 'date' %]
+     from (time)
+     <input name="cvar_[% HTML.escape(var.name) %]_from" id="cvar_[% HTML.escape(var.name) %]_from" size="12">
+     <input type="button" name="cvar_[% HTML.escape(var.name) %]_from_button" id="cvar_[% HTML.escape(var.name) %]_from_trigger" value="?">
+     to (time)
+     <input name="cvar_[% HTML.escape(var.name) %]_to" id="cvar_[% HTML.escape(var.name) %]_to" size="12">
+     <input type="button" name="cvar_[% HTML.escape(var.name) %]_to_button" id="cvar_[% HTML.escape(var.name) %]_to_trigger" value="?">
+
+     <script type="text/javascript">
+      <!--
+          Calendar.setup({ inputField : "cvar_[% HTML.escape(var.name) %]_from",
+                           ifFormat   :"[% myconfig_jsc_dateformat %]",
+                           align      : "BR",
+                           button     : "cvar_[% HTML.escape(var.name) %]_from_trigger" });
+          Calendar.setup({ inputField : "cvar_[% HTML.escape(var.name) %]_to",
+                           ifFormat   :"[% myconfig_jsc_dateformat %]",
+                           align      : "BR",
+                           button     : "cvar_[% HTML.escape(var.name) %]_to_trigger" });
+        -->
+     </script>
+
+     [%- ELSIF var.type == 'number' %]
+     <select name="cvar_[% HTML.escape(var.name) %]_qtyop">
+      <option selected>==</option>
+      <option>=/=</option>
+      <option>&gt;</option>
+      <option>&gt;=</option>
+      <option>&lt;</option>
+      <option>&lt;=</option>
+     </select>
+     <input name="cvar_[% HTML.escape(var.name) %]"[% IF var.maxlength %]maxlength="[% HTML.escape(var.maxlength) %]"[% END %]>
+
+     [% ELSIF var.type == 'select' %]
+     <select name="cvar_[% HTML.escape(var.name) %]">
+      <option value="" selected>---</option>
+      [%- FOREACH option = var.OPTIONS %]
+      <option>[% HTML.escape(option.value) %]</option>
+      [%- END %]
+     </select>
+
+     [%- ELSE %]
+     <input name="cvar_[% HTML.escape(var.name) %]"[% IF var.maxlength %]maxlength="[% HTML.escape(var.maxlength) %]"[% END %]>
+
+     [%- END %]
+    </td>
+   </tr>
+   [%- END %]
+   [%- END %]
diff --git a/templates/webpages/amcvar/search_include_en.html b/templates/webpages/amcvar/search_include_en.html
new file mode 100644 (file)
index 0000000..4c16c51
--- /dev/null
@@ -0,0 +1,25 @@
+[% USE HTML %]
+
+   [%- SET start_new_row = '1' %]
+
+   [%- FOREACH var = variables %]
+   [%- IF var.includeable %]
+   [%- IF start_new_row %]
+   <tr>
+    [%- SET start_new_row = '0' %]
+    [%- END %]
+    <td>
+     <input type="checkbox"
+            name="[% HTML.escape(include_prefix) %]cvar_[% HTML.escape(var.name) %]"
+            id="[% HTML.escape(include_prefix) %]cvar_[% HTML.escape(var.name) %]"
+            value="[% HTML.escape(include_value) %]"
+            [% IF var.included_by_default %] checked[% END %]>
+     <label for="[% HTML.escape(include_prefix) %]cvar_[% HTML.escape(var.name) %]">[% HTML.escape(var.description) %]</label>
+    </td>
+
+    [%- UNLESS loop.count % 4 %][%- SET start_new_row = '1' %][%- END %]
+    [%- IF start_new_row || loop.last %]
+   </tr>
+   [%- END %]
+   [%- END %]
+   [%- END %]
diff --git a/templates/webpages/ap/ap_transactions_bottom_en.html b/templates/webpages/ap/ap_transactions_bottom_en.html
new file mode 100644 (file)
index 0000000..cdd5693
--- /dev/null
@@ -0,0 +1,13 @@
+[% USE HTML %] <form method="post" action="ap.pl">
+
+  <input name="callback" type="hidden" value="[% callback %]">
+
+  Create new<br>
+
+  <input class="submit" type="submit" name="action" value="Purchase Transaction">
+  <input class="submit" type="submit" name="action" value="Vendor Invoice">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/ar/ar_transactions_bottom_en.html b/templates/webpages/ar/ar_transactions_bottom_en.html
new file mode 100644 (file)
index 0000000..a32189d
--- /dev/null
@@ -0,0 +1,13 @@
+[% USE HTML %] <form method="post" action="ar.pl">
+
+  <input name="callback" type="hidden" value="[% callback %]">
+
+  Create new<br>
+
+  <input class="submit" type="submit" name="action" value="Sales Transaction">
+  <input class="submit" type="submit" name="action" value="Sales Invoice">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/common/search_history_en.html b/templates/webpages/common/search_history_en.html
new file mode 100644 (file)
index 0000000..c9f989f
--- /dev/null
@@ -0,0 +1,184 @@
+[% USE HTML %]<style type="text/css">@import url(js/jscalendar/calendar-win2k-1.css);</style>
+<script type="text/javascript" src="js/jscalendar/calendar.js"></script>
+<script type="text/javascript" src="js/jscalendar/lang/calendar-de.js"></script>
+<script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>
+
+<form method="post" action="am.pl">
+
+<input type="hidden" name="action" value="show_am_history">
+
+       <table>
+               <tr>
+                       <th class ="listtop">history search engine</th>
+                       </th>
+               </tr>
+               <tr>
+                       <td>
+                               <script type="text/javascript">
+                                       <!--
+                    function uncheckOther(id) {
+                                               if(!(
+                                                   (document.getElementById('non-deleted').checked == false)
+                                               &&
+                                                   (document.getElementById('both').checked == false)
+                                                   &&
+                                                   (document.getElementById('deleted').checked == false)
+                                                 )) {
+                                                               if(id == "deleted") {
+                                                                       document.getElementById('non-deleted').checked = false;
+                                                                       document.getElementById('both').checked = false;
+                                                               }
+                                                               if(id == "non-deleted") {
+                                                                       document.getElementById('deleted').checked = false;
+                                                                       document.getElementById('both').checked = false;
+                                                               }
+                                                               if(id == "both") {
+                                                                       document.getElementById('non-deleted').checked = false;
+                                                                       document.getElementById('deleted').checked = false;
+                                                               }
+                                               }
+                                       }
+
+                                       var defaults = new Array('SAVED', 'DELETED', 'ADDED', 'PAYMENT POSTED', 'POSTED', 'POSTED AS NEW', 'SAVED FOR DUNNING', 'DUNNING STARTED', 'PRINTED');
+                                       var translated = new Object();
+                                       translated['SAVED'] = 'SAVED';
+                                       translated['DELETED'] = 'DELETED';
+                                       translated['ADDED'] = 'ADDED';
+                                       translated['PAYMENT POSTED'] = 'PAYMENT POSTED';
+                                       translated['POSTED'] = 'POSTED';
+                                       translated['POSTED AS NEW'] = 'POSTED AS NEW'
+                                       translated['SAVED FOR DUNNING'] = 'SAVED FOR DUNNING';
+                                       translated['DUNNING STARTED'] = 'DUNNING STARTED';
+                                       translated['PRINTED'] = 'PRINTED';
+
+                                       var jscalender = "<table valign=\"top\">"
+                                                                       + "<tr><td colspan=\"2\"><b>Period:&nbsp;</b></td></tr>"
+                                                                       + "<tr><td>from (time):&nbsp;"
+                                                                       + "<input name=\"fromdate\" id=\"fromdate\" size=\"11\" title=\"[% HTML.escape(myconfig_dateformat) %]\" value=\"[% HTML.escape(fromdate) %]\">"
+                                                                       + "<input type=\"button\" name=\"fromdate\" id=\"trigger1\" value=\"?\">"
+                                                                       + "&nbsp;</td><td>to (time):&nbsp;"
+                                                                       + "<input name=\"todate\" id=\"todate\" size=\"11\" title=\"[% HTML.escape(myconfig_dateformat) %]\" value=\"[% HTML.escape(todate) %]\">"
+                                                                       + "<input type=\"button\" name=\"todate\" id=\"trigger2\" value=\"?\"></td></tr></table>";
+                                       var mitarbeiter = "<table valign=\"top\">"
+                                                                       + "<tr><td><b>Mitarbeiter:</b>&nbsp;</td>"
+                                                                       + "<td><input type='text' name='mitarbeiter' id='mitarbeiter'></td>"
+                                                                       + "</tr></table>";
+
+                                       var tempString = "";
+                                       function addForm(last, remove) {
+                                               if(last == "INIT") {
+                                                       tempString = "<select id='selectForm'><option></option>";
+                                                       for(i=0;i<defaults.length;i++) {
+                                                               tempString += "\<option value\=\'" + defaults[i] + "\'\ onClick=\"javascript:addForm(\'" + defaults[i] + "\', " + i + ");\">" + translated[defaults[i]] + "\<\/option\>" + "\n";
+                                                       }
+                                                       tempString += "</select>";
+                                                       document.getElementById('selectEmployee').innerHTML = mitarbeiter;
+                                                       document.getElementById('selectDate').innerHTML = jscalender;
+                                                       document.getElementById('selectTable').innerHTML = tempString;
+
+                                                       Calendar.setup(
+                                       {
+                                     inputField : "fromdate",
+                                     ifFormat :"%d.%m.%Y",
+                                     align : "BL",
+                                     button : "trigger1"
+                                       });
+
+                                           Calendar.setup(
+                                               {
+                                     inputField : "todate",
+                                         ifFormat :"%d.%m.%Y",
+                                         align : "BL",
+                                         button : "trigger2"
+                                               });
+                                               }
+                                               else {
+                                                       defaults.splice(remove,1);
+                                                       document.getElementById('inputText').innerHTML += ((document.getElementById('inputText').innerHTML == "") ? ("<b>You've already chosen the following limitations:</b><br>") : ("<br>")) + translated[last];
+                                                       if(defaults.length > 0) {
+                                                               document.getElementById('einschraenkungen').value += ((document.getElementById('einschraenkungen').value == "") ? ("") : (",")) + last;
+                                                               tempString = "<select id='selectForm'><option></option>";
+                                                               for(i=0;i<defaults.length;i++) {
+                                                                       tempString += "\<option value\=\'" + defaults[i] + "\'\ onClick=\"javascript:addForm(\'" + defaults[i] + "\', " + i + ");\">" + translated[defaults[i]] + "\<\/option\>" + "\n";
+                                                               }
+                                                               tempString += "</select>";
+                                                               document.getElementById('selectTable').innerHTML = tempString;
+                                                       }
+                                                       else {
+                                                               document.getElementById('selectTable').innerHTML = "";
+                                                       }
+                                               }
+                                       }
+
+                                       function resetAll() {
+                                               document.getElementById('selectTable').innerHTML = "<a href=\"javascript:addForm('INIT')\">Yes";
+                                               document.getElementById('inputText').innerHTML = "";
+                                       }
+                                       //-->
+                               </script>
+                               <table>
+                                       <tr>
+                                               <td>
+                                                       <b>What</b> do you want to look for?:
+                                               </td>
+                                               <td>
+                                                       <select name="what2search" id="what2search">
+                                                               <option name="Artikelnummer" value="Artikelnummer" id="Artikelnummer">Part Number</option>
+                                                               <option name="Kundennummer" value="Kundennummer" id="Kundennummer">Customer Number</option>
+                                                               <option name="Lieferantennummer" value="Lieferantennummer" id="Lieferantennummer">Vendor Number</option>
+                                                               <option name="Projektnummer" value="Projektnummer" id="Projektnummer">Project Number</option>
+                                                               <option name="Buchungsnummer" value="Buchungsnummer" id="Buchungsnummer">ID</option>
+                                                               <option name="Eingangsrechnungnummer" value="Eingangsrechnungnummer" id="Eingangsrechnungnummer">Incoming invoice number</option>
+                                                               <option name="Ausgangsrechnungnummer" value="Ausgangsrechnungnummer" id="Ausgangsrechnungnummer">Sales invoice number</option>
+                <option name="Mahnungsnummer" value="Mahnungsnummer" id="Mahnungsnummer">Dunning number</option>
+                                                       </select>
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td>
+                                                What's the <b>term</b> you're looking for?
+                                               </td>
+                                               <td>
+                                                       <input type="text" name="searchid" id="searchid" value="[% HTML.escape(searchid) %]">
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td valign="top">
+                                                Do you want to <b>limit</b> your search?
+                                               </td>
+                                               <td>
+                                                       <table valign=\"top\" cellpadding=\"0\" marginheight=\"0\" marginwidth=\"0\" cellspacing=\"0\" topmargin=\"0\" leftmargin=\"0\">
+                                                               <tr>
+                                                                       <td>
+                                                                               <div id="selectTable"><a href="javascript:addForm('INIT')">Yes</div>
+                                                                               <div id="inputText"></div>
+                                                                       </td>
+                                                               </tr>
+                                                               <tr>
+                                                                       <td>
+                                                                               <div id="selectEmployee"></div>
+                                                                       </td>
+                                                               </tr>
+                                                               <tr>
+                                                                       <td>
+                                                                               <div id="selectDate"></div>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                                       <input type="hidden" name="einschraenkungen" id="einschraenkungen" value="">
+                                               </td>
+                                       </tr>
+                                       </tr>
+                                       <tr>
+                                               <td colspan="6">
+                                                       <input type="submit" class="submit" value="submit">
+                                                       <input type="reset" class="submit" value="reset" onClick="javascript:resetAll();">
+                                               </td>
+                                               <td>
+                                               </td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+       </table>
+</form>
diff --git a/templates/webpages/common/show_history_en.html b/templates/webpages/common/show_history_en.html
new file mode 100644 (file)
index 0000000..bde1bc7
--- /dev/null
@@ -0,0 +1,122 @@
+[% USE HTML %]
+[% IF SUCCESS %]
+
+[% BLOCK column_header %]
+            <table height="0" width="0" cellpadding="0" cellspacing="0" marginheight="0" marginwidth="0" valign="top" border="0">
+             [% IF THIS_COLUMN && !THIS_COLUMN_DOWN %]
+               <tr><td><a title="order" style="background: #ccccff; border: solid 1px #aaaade;">&and;</a></td></tr>
+             [% ELSE %]
+               <tr><td><a href="[% callback %]&order=[% column %]--0" title="order" style="border: solid 1px #aaaade;">&and;</a></td></tr>
+             [% END %]
+             [% IF THIS_COLUMN &&  THIS_COLUMN_DOWN %]
+               <tr><td><a title="order" style="background: #ccccff; border: solid 1px #aaaade;">&or;</a></td></tr>
+             [% ELSE %]
+               <tr><td><a href="[% callback %]&order=[% column %]--1" title="order" style="border: solid 1px #aaaade;">&or;</a></td></tr>
+             [% END %]
+            </table>
+[% END %]
+
+<table>
+       <tr>
+               <th class="listtop">
+      <table height="0" width="0" cellpadding="0" cellspacing="0" marginheight="0" marginwidth="0" border="0">
+        <tr>
+          <td align="center" valign="middle">
+                            &nbsp;Zeitpunkt&nbsp;
+          </td>
+          <td valign="top">
+           [% PROCESS column_header THIS_COLUMN=ITIME THIS_COLUMN_DOWN=ITIMEBY column='h.itime' %]
+          </td>
+        </tr>
+      </table>
+               </th>
+               <th class=listtop>
+      <table height="0" width="0" cellpadding="0" cellspacing="0" marginheight="0" marginwidth="0" border="0">
+        <tr>
+          <td align="center" valign="middle">
+            &nbsp;Mitarbeiter&nbsp;
+          </td>
+          <td valign="top">
+           [% PROCESS column_header THIS_COLUMN=NAME THIS_COLUMN_DOWN=NAMEBY column='emp.name' %]
+          </td>
+        </tr>
+      </table>
+               </th>
+               <th class=listtop>
+      <table>
+        <tr>
+          <td>
+                             &nbsp;Aktion&nbsp;
+          </td>
+        </tr>
+      </table>
+               </th>
+               <th class=listtop>
+      <table>
+        <tr>
+          <td>
+            &nbsp;Zusatz&nbsp;
+          </td>
+        </tr>
+      </table>
+    </th>
+    <th class=listtop>
+      <table height="0" width="0" cellpadding="0" cellspacing="0" marginheight="0" marginwidth="0" border="0">
+        <tr>
+          <td align="center" valign="middle">
+           &nbsp;ID-Nummer&nbsp;
+          </td>
+          <td valign="top">
+            [% PROCESS column_header THIS_COLUMN=TRANS_ID THIS_COLUMN_DOWN=TRANS_IDBY column='h.trans_id' %]
+          </td>
+        </tr>
+      </table>
+    </th>
+    <th class=listtop>
+      <table height="0" width="0" cellpadding="0" cellspacing="0" marginheight="0" marginwidth="0" border="0">
+        <tr>
+          <td align="center" valign="middle">
+           &nbsp;Belegnummer&nbsp;
+          </td>
+          <td valign="top">
+            [% PROCESS column_header THIS_COLUMN=SNUMBERS THIS_COLUMN_DOWN=SNUMBERSBY column='h.snumbers' %]
+          </td>
+        </tr>
+      </table>
+    </th>
+       </tr>
+  <tbody>
+[% FOREACH row = DATEN %]
+  <tr class="listrow[% loop.count % 2 %]">
+               <td nowrap>
+                       &nbsp;[% HTML.escape(row.itime) %]&nbsp;
+               </td>
+               <td nowrap>
+                       &nbsp;[% HTML.escape(row.name) %]&nbsp;
+               </td>
+               <td>
+                       &nbsp;[% HTML.escape(row.addition) %]&nbsp;
+               </td>
+               <td>
+      &nbsp;[% HTML.escape(row.what_done) %]&nbsp;
+    </td>
+    <td>
+      &nbsp;[% HTML.escape(row.id) %]&nbsp;
+    </td>
+    <td>
+      &nbsp;[% HTML.escape(row.snumbers) %]&nbsp;
+    </td>
+       </tr>
+[% END %]
+</tbody>
+</table>
+[% ELSE %]
+<b>Keine Suchergebnisse gefunden!</b><br>
+[% END %]
+<p>
+[% IF NONEWWINDOW %]
+<input type="button" onclick="javascript:history.back(-1);" value="back">
+[% ELSE %]
+<input type="button" onclick="javascript:window.close();" value="close">
+[% END %]
+</p>
diff --git a/templates/webpages/common/show_vc_details_en.html b/templates/webpages/common/show_vc_details_en.html
new file mode 100644 (file)
index 0000000..2ae56d8
--- /dev/null
@@ -0,0 +1,323 @@
+[% USE HTML %]
+
+[% BLOCK jump_block %]
+ <p>
+  Jump to <a href="#billing">Billing Address</a>
+  [%- FOREACH shipto = SHIPTO %]
+   ,
+   <a href="#shipping[% loop.count %]">
+    Shipping Address
+    &quot;[% HTML.escape(shipto.shiptoname) %]&quot;
+   </a>
+  [%- END %]
+  [%- FOREACH contact = CONTACTS %]
+   ,
+   <a href="#contact[% loop.count %]">
+    Contact Person
+    &quot;[% HTML.escape(contact.cp_name) %]&quot;
+   </a>
+  [%- END %]
+ </p>
+
+ <hr>
+[% END %]
+
+<body>
+
+ <div width="100%" class="listtop">
+  [% IF is_customer %]Customer details[% ELSE %]Vendor details[% END %] &quot;[% HTML.escape(name) %]&quot;
+ </div>
+
+ [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %]
+
+ <a name="billing"><div class="listheading">Billing Address</div></a>
+
+ <table>
+  <tr>
+   <td align="right">Customer Number</td>
+   <td>[% HTML.escape(customernumber) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Company Name</td>
+   <td>[% HTML.escape(name) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Department</td>
+   <td>[% HTML.escape(department_1) %][% IF department_2 %][% IF department_1 %]; [% END %][% HTML.escape(department_2) %][% END %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Street</td>
+   <td>[% HTML.escape(street) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Zip, City</td>
+   <td>[% HTML.escape(zipcode) %] [% HTML.escape(city) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Country</td>
+   <td>[% HTML.escape(country) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Contact Person</td>
+   <td>[% IF greeting %][% HTML.escape(greeting) %] [% END %][% HTML.escape(contact) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Phone</td>
+   <td>[% HTML.escape(phone) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Fax</td>
+   <td>[% HTML.escape(fax) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">E-mail</td>
+   <td>[% HTML.escape(email) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Homepage</td>
+   <td>[% HTML.escape(homepage) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Credit Limit</td>
+   <td>[% HTML.escape(creditlimit) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Discount</td>
+   <td>[% HTML.escape(discount) %]%</td>
+  </tr>
+
+  <tr>
+   <td align="right">Payment Terms</td>
+   <td>[% HTML.escape(payment_terms) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Tax Number</td>
+   <td>[% HTML.escape(taxnumber) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">USt-IdNr.</td>
+   <td>[% HTML.escape(ustid) %]</td>
+  </tr>
+
+  [% IF is_customer %]
+   <tr>
+    <td align="right">KNr. beim Kunden</td>
+    <td>[% HTML.escape(c_vendor_id) %]</td>
+   </tr>
+  [% END %]
+
+  <tr>
+   <td align="right">Account Number</td>
+   <td>[% HTML.escape(account_number) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Bank Code</td>
+   <td>[% HTML.escape(bank_code) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Bank</td>
+   <td>[% HTML.escape(bank) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">[% IF is_customer %]Customer type[% ELSE %]Vendor type[% END %]</td>
+   <td>[% HTML.escape(business) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right">Language</td>
+   <td>[% HTML.escape(language) %]</td>
+  </tr>
+
+  <tr>
+   <td align="right" valign="top">Notes</td>
+   <td valign="top">[% HTML.escape(notes) %]</td>
+  </tr>
+
+ </table>
+
+
+
+
+ [% FOREACH row = SHIPTO %]
+
+  <hr>
+
+  [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %]
+
+  <a name="shipping[% loop.count %]"><div class="listheading">Shipping Address &quot;[% HTML.escape(row.shiptoname) %]&quot;</div></a>
+
+  <table>
+   <tr>
+    <td align="right">Company Name</td>
+    <td>[% HTML.escape(row.shiptoname) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Department</td>
+    <td>[% HTML.escape(row.shiptodepartment_1) %][% IF row.shiptodepartment_2 %][% IF row.shiptodepartment_1 %]; [% END %][% HTML.escape(row.shiptodepartment_2) %][% END %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Street</td>
+    <td>[% HTML.escape(row.shiptostreet) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Zip, City</td>
+    <td>[% HTML.escape(row.shiptozipcode) %] [% HTML.escape(row.shiptocity) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Country</td>
+    <td>[% HTML.escape(row.shiptocountry) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Contact Person</td>
+    <td>[% HTML.escape(row.shiptocontact) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Phone</td>
+    <td>[% HTML.escape(row.shiptophone) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Fax</td>
+    <td>[% HTML.escape(row.shiptofax) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">E-mail</td>
+    <td>[% HTML.escape(row.shiptoemail) %]</td>
+   </tr>
+
+  </table>
+ [% END %]
+
+
+
+
+
+
+
+
+
+
+ [% FOREACH row = CONTACTS %]
+
+  <hr>
+
+  [%- INCLUDE jump_block CONTACTS = CONTACTS, SHIPTO = SHIPTO %]
+
+  <a name="contact[% loop.count %]"><div class="listheading">Contact Person &quot;[% HTML.escape(row.cp_name) %]&quot;</div></a>
+
+  <table>
+   <tr>
+    <td align="right">Greeting</td>
+    <td>[% HTML.escape(row.cp_greeting) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Title</td>
+    <td>[% HTML.escape(row.cp_title) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Given Name</td>
+    <td>[% HTML.escape(row.cp_givenname) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Name</td>
+    <td>[% HTML.escape(row.cp_name) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Department</td>
+    <td>[% HTML.escape(row.cp_abteilung) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Phone1</td>
+    <td>[% HTML.escape(row.cp_phone1) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Phone2</td>
+    <td>[% HTML.escape(row.cp_phone2) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Fax</td>
+    <td>[% HTML.escape(row.cp_fax) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Mobile1</td>
+    <td>[% HTML.escape(row.cp_mobile1) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Mobile2</td>
+    <td>[% HTML.escape(row.cp_mobile2) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Sat. Phone</td>
+    <td>[% HTML.escape(row.cp_satphone) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Sat. Fax</td>
+    <td>[% HTML.escape(row.cp_satfax) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Project</td>
+    <td>[% HTML.escape(row.cp_project) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">E-mail</td>
+    <td>[% HTML.escape(row.cp_email) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Private Phone</td>
+    <td>[% HTML.escape(row.cp_privatphone) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Private E-mail</td>
+    <td>[% HTML.escape(row.cp_privatemail) %]</td>
+   </tr>
+
+   <tr>
+    <td align="right">Birthday</td>
+    <td>[% HTML.escape(row.cp_birthday) %]</td>
+   </tr>
+
+  </table>
+
+ [% END %]
+
+</body>
+</html>
diff --git a/templates/webpages/ct/form_footer_en.html b/templates/webpages/ct/form_footer_en.html
new file mode 100644 (file)
index 0000000..0d715b6
--- /dev/null
@@ -0,0 +1,51 @@
+[% USE HTML %]
+
+<input name="id" type="hidden" id="cvid" value="[% HTML.escape(id) %]">
+<input name="business_save" type="hidden" value="[% HTML.escape(selectbusiness) %]">
+<input name="title_save" type="hidden" value="[% HTML.escape(title) %]">
+
+<input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+<input type="hidden" name="db" id="db" value="[% HTML.escape(db) %]">
+
+<br>
+  <input class="submit" type="submit" name="action" accesskey="s" value="Save">
+  <input class="submit" type="submit" name="action" accesskey="s" value="Save and Close">
+  [%- IF is_customer %]
+  <input class="submit" type="submit" name="action" value="Save and AR Transaction">
+  [%- ELSE %]
+  <input class="submit" type="submit" name="action" value="Save and AP Transaction">
+  [%- END %]
+  <input class="submit" type="submit" name="action" value="Save and Invoice">
+  <input class="submit" type="submit" name="action" value="Save and Order">
+  [%- IF is_customer %]
+  <input class="submit" type="submit" name="action" value="Save and Quotation">
+  [%- ELSE %]
+  <input class="submit" type="submit" name="action" value="Save and RFQ">
+  [%- END %]
+[%- IF id AND is_orphaned %]
+  <input class="submit" type="submit" name="action" value="Delete">
+[%- END %]
+[%- IF id %]
+  <input type="button" class="submit" onclick="set_history_window([% HTML.escape(id) %]);" name="history" id="history" value="history">
+[%- END %]
+
+  </form>
+
+ <script type="text/javascript">
+  <!--
+      Calendar.setup({ inputField : "from",    ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger_from" });
+      Calendar.setup({ inputField : "to",      ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger_to" });
+      Calendar.setup({ inputField : "FU_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "FU_date_trigger" });
+
+      function enable_delete_shipto(used) { var s=document.getElementById('delete_shipto');  if (s) s.disabled = (used > 0 ? true : false); }
+      function enable_delete_contact(used){ var s=document.getElementById('delete_contact'); if (s) s.disabled = (used > 0 ? true : false); }
+
+      var maintab = new ddtabcontent("maintab");
+      maintab.setpersist(true);
+      maintab.setselectedClassTarget("link"); //"link" or "linkparent"
+      maintab.init();
+
+    -->
+ </script>
+</body>
+</html>
diff --git a/templates/webpages/ct/form_header_en.html b/templates/webpages/ct/form_header_en.html
new file mode 100644 (file)
index 0000000..f532b07
--- /dev/null
@@ -0,0 +1,612 @@
+[% USE HTML %][% USE LxERP %]<body onLoad="fokus()">
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" name="ct" action="ct.pl" onKeyUp="highlight(event)" onClick="highlight(event)">
+
+  <ul id="maintab" class="shadetabs">
+   <li class="selected"><a href="#" rel="billing">Billing Address</a></li>
+   <li><a href="#" rel="shipto">Shipping Address</a></li>
+   <li><a href="#" rel="contacts">Ansprechpartner</a></li>
+   <li><a href="#" rel="deliveries">Lieferungen</a></li>
+   <li><a href="#" rel="vcnotes">Notes</a></li>
+   [%- IF CUSTOM_VARIABLES.size %]
+   <li><a href="#" rel="custom_variables">Custom Variables</a></li>
+   [%- END %]
+  </ul>
+
+  <div class="tabcontentstyle">
+
+   <div id="billing" class="tabcontent">
+
+    <table width="100%">
+     <tr height="5"></tr>
+     <tr>
+      [%- IF is_customer %]
+      <th align="right" nowrap>Customer Number</th>
+      <td><input name="customernumber" size="35" value="[% HTML.escape(customernumber) %]"></td>
+      [%- ELSE %]
+      <th align="right" nowrap>Vendor Number</th>
+      <td><input name="vendornumber" size="35" value="[% HTML.escape(vendornumber) %]"></td>
+      [%- END %]
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Greeting</th>
+      <td>
+       <input id="greeting" name="greeting" size="30" value="[% HTML.escape(greeting) %]">&nbsp;
+       [%- INCLUDE generic/multibox.html
+             name       = 'selected_company_greeting',
+             DATA       = MB_COMPANY_GREETINGS,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Company Name</th>
+      <td><input name="name" size="35" maxlength="75" value="[% HTML.escape(name) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Department</th>
+      <td>
+       <input name="department_1" size="16" maxlength="75" value="[% HTML.escape(department_1) %]">
+       <input name="department_2" size="16" maxlength="75" value="[% HTML.escape(department_2) %]">
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Street</th>
+      <td><input name="street" size="35" maxlength="75" value="[% HTML.escape(street) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Zipcode/City</th>
+      <td>
+       <input name="zipcode" size="5" maxlength="10" value="[% HTML.escape(zipcode) %]">
+       <input name="city" size="30" maxlength="75" value="[% HTML.escape(city) %]">
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Country</th>
+      <td><input name="country" size="35" maxlength="75" value="[% HTML.escape(country) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Contact</th>
+      <td><input name="contact" size="28" maxlength="75" value="[% HTML.escape(contact) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Phone</th>
+      <td><input name="phone" size="30" maxlength="30" value="[% HTML.escape(phone) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Fax</th>
+      <td><input name="fax" size="30" maxlength="30" value="[% HTML.escape(fax) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>E-mail</th>
+      <td><input name="email" size="45" value="[% HTML.escape(email) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Homepage</th>
+      <td><input name="homepage" size="45" value="[% HTML.escape(homepage) %]"></td>
+     </tr>
+    </table>
+
+    <table>
+     <tr>
+      <th align="right">Credit Limit</th>
+      <td><input name="creditlimit" size="9" value="[% LxERP.format_amount(creditlimit, 0) %]"></td>
+      <input type="hidden" name="terms" value="[% HTML.escape(terms) %]">
+      <th align="right">Payment Terms</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'payment_id',
+             DATA       = payment_terms,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+
+      <th align="right">Discount</th>
+      <td><input name="discount" size="4" value="[% LxERP.format_amount(discount) %]"> %</td>
+     </tr>
+
+     <tr>
+      <th align="right">Tax Number / SSN</th>
+      <td><input name="taxnumber" size="20" value="[% HTML.escape(taxnumber) %]"></td>
+      <!-- Anm.: R&B 15.11.2008        VAT Reg No ist Ust-ID in GB, aber generell sollte es laut Richardson die sales tax id sein -->
+       <th align="right">sales tax identification number</th>
+      <td><input name="ustid" maxlength="14" size="20" value="[% HTML.escape(ustid) %]"></td>
+      [%- IF is_customer %]
+      <th align="right">our vendor number at customer</th>
+      <td><input name="c_vendor_id" size="10" value="[% HTML.escape(c_vendor_id) %]"></td>
+      [%- ELSE %]
+      <th align="right">Customer Number</th>
+       <td><input name="v_customer_id" size="10" value="[% HTML.escape(v_customer_id) %]"></td>
+      [%- END %]
+     </tr>
+
+     <tr>
+      <th align="right">Account Number</th>
+      <td><input name="account_number" size="10" maxlength="100" value="[% HTML.escape(account_number) %]"></td>
+      <th align="right">Bank Code Number</th>
+      <td><input name="bank_code" size="10" maxlength="100" value="[% HTML.escape(bank_code) %]"></td>
+      <th align="right">Bank</th>
+      <td><input name="bank" size="20" value="[% HTML.escape(bank) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">IBAN</th>
+      <td><input name="iban" size="10" maxlength="100" value="[% HTML.escape(iban) %]"></td>
+      <th align="right">BIC</th>
+      <td><input name="bic" size="10" maxlength="100" value="[% HTML.escape(bic) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">Type of Business</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'business',
+             DATA       = all_business,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+      <th align="right">Language</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'language_id',
+             DATA       = languages,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+
+      [%- IF is_customer %]
+      <th align="right">Preisklasse</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'klass',
+             DATA       = all_pricegroup,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'pricegroup',
+       -%]
+      </td>
+      [%- END  %]
+     </tr>
+
+     <tr>
+      <td align="right">Obsolete</td>
+      <td><input name="obsolete" class="checkbox" type="checkbox" value="1" [% IF obsolete %]checked[% END %]></td>
+      <td align="right">direct debit</td>
+      <td><input name="direct_debit" class="checkbox" type="checkbox" value="1" [% IF direct_debit %]checked[% END %]></td>
+     </tr>
+
+     <tr>
+      <th align="right">Steuersatz</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'taxzone_id',
+             DATA       = ALL_TAXZONES,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+      [%- IF is_customer %]
+      <th align="right">Salesman</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'salesman_id',
+             DATA       = ALL_SALESMEN,
+             show_empty = 1,
+             id_key     = 'id',
+             label_sub  = 'salesman_label',
+       -%]
+      </td>
+      [%- END %]
+     </tr>
+    </table>
+
+    <table>
+     <tr>
+      <th align="left" nowrap>Notes</th>
+     </tr>
+
+     <tr>
+      <td><textarea name="notes" rows="3" cols="60" wrap="soft">[% HTML.escape(notes) %]</textarea></td>
+     </tr>
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   <div id="shipto" class="tabcontent">
+
+    <table width="100%">
+     <tr>
+      <th align="right">Shipping Address</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'shipto_id',
+             id         = 'shipto_id',
+             DATA       = SHIPTO,
+             onChange   = "get_shipto(['shipto_id__' + this.value], ['shiptoname','shiptodepartment_1', 'shiptodepartment_2','shiptostreet','shiptozipcode','shiptocity','shiptocountry','shiptocontact','shiptophone','shiptofax','shiptoemail',enable_delete_shipto,set_gender])",
+             id_key     = 'shipto_id',
+             label_sub  = 'shipto_label',
+             label_key  = 'shipto_label',
+       -%]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Company Name</th>
+      <td><input id="shiptoname" name="shiptoname" size="35" maxlength="75" value="[% HTML.escape(shiptoname) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Abteilung</th>
+      <td>
+       <input id="shiptodepartment_1" name="shiptodepartment_1" size="16" maxlength="75" value="[% HTML.escape(shiptodepartment_1) %]">
+       <input id="shiptodepartment_2" name="shiptodepartment_2" size="16" maxlength="75" value="[% HTML.escape(shiptodepartment_2) %]">
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Street</th>
+      <td><input id="shiptostreet" name="shiptostreet" size="35" maxlength="75" value="[% HTML.escape(shiptostreet) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Zipcode/City</th>
+      <td>
+       <input id="shiptozipcode" name="shiptozipcode" size="5" maxlength="75" value="[% HTML.escape(shiptozipcode) %]">
+       <input id="shiptocity" name="shiptocity" size="30" maxlength="75" value="[% HTML.escape(shiptocity) %]">
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Country</th>
+      <td><input id="shiptocountry" name="shiptocountry" size="35" maxlength="75" value="[% HTML.escape(shiptocountry) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Contact</th>
+      <td><input id="shiptocontact" name="shiptocontact" size="30" maxlength="75" value="[% HTML.escape(shiptocontact) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Phone</th>
+      <td><input id="shiptophone" name="shiptophone" size="30" maxlength="30" value="[% HTML.escape(shiptophone) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>Fax</th>
+      <td><input id="shiptofax" name="shiptofax" size="30" maxlength="30" value="[% HTML.escape(shiptofax) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>E-mail</th>
+      <td><input id="shiptoemail" name="shiptoemail" size="45" value="[% HTML.escape(shiptoemail) %]"></td>
+     </tr>
+
+     <tr>
+      <td>&nbsp;</td>
+     </tr>
+     <tr>
+      <td>&nbsp;</td>
+     </tr>
+    </table>
+
+    <input type="submit" id="delete_shipto" name="action" value="Delete Shipto" disabled>
+    <br style="clear: left" />
+   </div>
+
+   <div id="contacts" class="tabcontent">
+    <table>
+     <input type="hidden" name="cp_id" value="[% HTML.escape(cp_id) %]">
+     <tr>
+      <th align="right">Ansprechpartner</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'cp_id',
+             id         = 'cp_id',
+             DATA       = CONTACTS,
+             onChange   = "get_contact(['cp_id__'+this.value],['cp_name','cp_title','cp_givenname','cp_phone1','cp_phone2','cp_email','cp_abteilung','cp_fax','cp_mobile1','cp_mobile2','cp_satphone','cp_satfax','cp_project','cp_privatphone','cp_privatemail','cp_birthday',enable_delete_contact,set_gender])",
+             id_key     = 'cp_id',
+             label_sub  = 'contacts_label',
+       -%]
+      </td>
+     </tr>
+
+    <tr>
+     <th align="left" nowrap>Gender</th>
+     <td>
+      <select id="cp_gender" name="cp_gender">
+       <option value="m"[% IF cp_gender == 'm' %] selected[% END %]>male</option>
+       <option value="f"[% IF cp_gender == 'f' %] selected[% END %]>female</option>
+      </select>
+     </td>
+    </tr>
+    <tr>
+
+     <tr>
+      <th align="left" nowrap>Title</th>
+      <td>
+       <input id="cp_title" name="cp_title" size="40" maxlength="75" value="[% HTML.escape(cp_title) %]">&nbsp;
+       [%- INCLUDE generic/multibox.html
+             name       = 'selected_cp_title',
+             DATA       = MB_TITLES,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Department</th>
+      <td>
+       <input id="cp_abteilung" name="cp_abteilung" size="40" value="[% HTML.escape(cp_abteilung) %]">&nbsp;
+       [%- INCLUDE generic/multibox.html
+             name       = 'selected_cp_abteilung',
+             DATA       = MB_DEPARTMENT,
+             show_empty = 1,
+             id_key     = 'id',
+             label_key  = 'description',
+       -%]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Given Name</th>
+      <td><input id="cp_givenname" name="cp_givenname" size="40" maxlength="75" value="[% HTML.escape(cp_givenname) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Name</th>
+      <td><input id="cp_name" name="cp_name" size="40" maxlength="75" value="[% HTML.escape(cp_name) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Phone1</th>
+      <td><input id="cp_phone1" name="cp_phone1" size="40" maxlength="75" value="[% HTML.escape(cp_phone1) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Phone2</th>
+      <td><input id="cp_phone2" name="cp_phone2" size="40" maxlength="75" value="[% HTML.escape(cp_phone2) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Fax</th>
+      <td><input id="cp_fax" name="cp_fax" size="40" value="[% HTML.escape(cp_fax) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Mobile1</th>
+      <td><input id="cp_mobile1" name="cp_mobile1" size="40" value="[% HTML.escape(cp_mobile1) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Mobile2</th>
+      <td><input id="cp_mobile2" name="cp_mobile2" size="40" value="[% HTML.escape(cp_mobile2) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Sat. Phone</th>
+      <td><input id="cp_satphone" name="cp_satphone" size="40" value="[% HTML.escape(cp_satphone) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Sat. Fax</th>
+      <td><input id="cp_satfax" name="cp_satfax" size="40" value="[% HTML.escape(cp_satfax) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Project</th>
+      <td><input id="cp_project" name="cp_project" size="40" value="[% HTML.escape(cp_project) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>E-mail</th>
+      <td><input id="cp_email" name="cp_email" size="40" value="[% HTML.escape(cp_email) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Private Phone</th>
+      <td><input id="cp_privatphone" name="cp_privatphone" size="40" value="[% HTML.escape(cp_privatphone) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Private E-mail</th>
+      <td><input id="cp_privatemail" name="cp_privatemail" size="40" value="[% HTML.escape(cp_privatemail) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Birthday</th>
+      <td><input id="cp_birthday" name="cp_birthday" size="40" value="[% HTML.escape(cp_birthday) %]"></td>
+     </tr>
+
+     <tr>
+      <td colspan="2"><hr></td>
+     </tr>
+
+     <tr>
+      <th align="left" nowrap>Bcc</th>
+      <td><input name="bcc" size="40" value="[% HTML.escape(bcc) %]"></td>
+     </tr>
+    </table>
+
+    <input type="submit" id="delete_contact" name="action" value="Delete Contact" disabled>
+    <br style="clear: left" />
+   </div>
+
+   <div id="deliveries" class="tabcontent">
+    <table>
+     <tr>
+      <th align="right">Shipping Address</th>
+      <td>
+       [%- INCLUDE generic/multibox.html
+             name       = 'delivery_id',
+             id         = 'delivery_id',
+             DATA       = SHIPTO,
+             onChange   = "get_delivery(['shipto_id__' + this.value, 'from__' + from.value, 'to__' + to.value, 'id__' + cvid.value, 'db__' + db.value], ['delivery'])",
+             id_key     = 'shipto_id',
+             label_sub  = 'shipto_label',
+       -%]
+      </td>
+     </tr>
+
+     <tr>
+      <th align="right" nowrap>From</th>
+      <td>
+       <input id="from" name="from" size="10" maxlength="10" onChange="get_delivery(['shipto_id__' + delivery_id.value, 'from__' + this.value, 'to__' + to.value, 'id__' + cvid.value, 'db__' + db.value], ['delivery'])" value="[% HTML.escape(from) %]">
+       <input type="button" name="fromB" id="trigger_from" value="?">
+      </td>
+      <th align="right" nowrap>To (time)</th>
+      <td>
+       <input id="to" name="to" size="10" maxlength="10" onChange="get_delivery(['shipto_id__' + delivery_id.value, 'from__' + from.value, 'to__' + this.value, 'id__' + cvid.value, 'db__' + db.value], ['delivery'])" value="[% HTML.escape(to) %]">
+       <input type="button" name="toB" id="trigger_to" value="?">
+      </td>
+     </tr>
+
+     <tr>
+      <td colspan="4">
+       <div id="delivery">
+       </div>
+      </td>
+     </tr>
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   <div id="vcnotes" class="tabcontent">
+
+    [%- IF NOTES && NOTES.size %]
+    <p>
+     <table>
+      <tr>
+       <th class="listheading">Delete</th>
+       <th class="listheading">Subject</th>
+       <th class="listheading">Created on</th>
+       <th class="listheading">Created by</th>
+       <th class="listheading">Follow-Up Date</th>
+       <th class="listheading">Follow-Up for</th>
+       <th class="listheading">Follow-Up done</th>
+      </tr>
+
+      [%- FOREACH row = NOTES %]
+      <tr class="listrow[% loop.count % 2 %]">
+       <input type="hidden" name="NOTE_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+       <td>[% UNLESS NOTE_id && (NOTE_id == row.id) %]<input type="checkbox" name="NOTE_delete_[% loop.count %]" value="1">[% END %]</td>
+       <td><a href="ct.pl?action=edit&db=[% HTML.url(db) %]&id=[% HTML.url(id) %]&edit_note_id=[% HTML.url(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+       <td>[% HTML.escape(row.created_on) %]</td>
+       <td>[% IF row.created_by_name %][% HTML.escape(row.created_by_name) %][% ELSE %][% HTML.escape(row.created_by_login) %][% END %]</td>
+       <td>[% HTML.escape(row.follow_up_date) %]</td>
+       <td>[% IF row.created_for_name %][% HTML.escape(row.created_for_name) %][% ELSE %][% HTML.escape(row.created_for_login) %][% END %]</td>
+       <td>[% IF row.follow_up_date %][% IF row.follow_up_done %]Yes[% ELSE %]No[% END %][% END %]</td>
+      </tr>
+      [%- END %]
+
+      <input type="hidden" name="NOTES_rowcount" value="[% NOTES.size %]">
+
+     </table>
+    </p>
+    [%- END %]
+
+    <div class="listtop">[% IF NOTE_id %]Edit note[% ELSE %]Add note[% END %]</div>
+
+    <input type="hidden" name="NOTE_id" value="[% HTML.escape(NOTE_id) %]">
+    <input type="hidden" name="FU_id" value="[% HTML.escape(FU_id) %]">
+
+    <p>
+     <table>
+      <tr>
+       <td valign="right">Subject</td>
+       <td><input name="NOTE_subject" value="[% HTML.escape(NOTE_subject) %]" size="50"></td>
+      </tr>
+
+      <tr>
+       <td valign="right" align="top">Body</td>
+       <td align="top"><textarea cols="50" rows="10" name="NOTE_body">[% HTML.escape(NOTE_body) %]</textarea></td>
+      </tr>
+
+      <tr>
+       <td valign="right">Follow-Up On</td>
+       <td>
+        <input name="FU_date" id="FU_date" value="[% HTML.escape(FU_date) %]" size="12">
+        <input type="button" name="FU_date_button" id="FU_date_trigger" value="?">
+        for
+        <select name="FU_created_for_user">
+         [%- FOREACH row = ALL_EMPLOYEES %]
+         <option value="[% HTML.escape(row.id) %]"[% IF (NOTE_id && (row.id == FU_created_for_user)) || (row.login == login) %] selected[% END %]>
+          [%- IF row.name %][%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+         </option>
+         [%- END %]
+        </select>
+       </td>
+      </tr>
+
+      <tr>
+       <td>&nbsp;</td>
+       <td>
+        <input type="checkbox" name="FU_done" id="FU_done" value="1"[% IF FU_done %] checked[% END %]>
+        <label for="FU_done">Follow-Up done</label>
+       </td>
+      </tr>
+     </table>
+    </p>
+
+    <br style="clear: left" />
+   </div>
+
+   [%- IF CUSTOM_VARIABLES.size %]
+   <div id="custom_variables" class="tabcontent">
+
+    <p>
+     <table>
+      [%- FOREACH var = CUSTOM_VARIABLES %]
+      <tr>
+       <td align="right" valign="top">[% HTML.escape(var.description) %]</td>
+       <td valign="top">[% var.HTML_CODE %]</td>
+      </tr>
+      [%- END %]
+     </table>
+    </p>
+
+    <br style="clear: left" />
+   </div>
+   [%- END %]
+
+  </div>
+
+  <script type="text/javascript">
+   <!--
+   function set_gender(gender) {
+     var s = document.getElementById('cp_gender');
+     if (s) {
+       s.selectedIndex = (gender == 'f') ? 1 : 0;
+     }
+   }
+  -->
+  
+  </script>
+
+
+
diff --git a/templates/webpages/ct/get_delivery_en.html b/templates/webpages/ct/get_delivery_en.html
new file mode 100644 (file)
index 0000000..ce3f9fd
--- /dev/null
@@ -0,0 +1,32 @@
+[% USE HTML %][% USE LxERP %]
+<table width="100%">
+  <tr>
+    <td>
+      <table width="100%">
+        <tr class="listheading">
+          <th class="listheading">Shipping Address</th>
+          <th class="listheading">Invoice</th>
+          <th class="listheading">Order</th>
+          <th class="listheading">Invdate</th>
+          <th class="listheading">Description</th>
+          <th class="listheading">Qty</th>
+          <th class="listheading">Unit</th>
+          <th class="listheading">Sell Price</th>
+        </tr>
+[%- FOREACH row = DELIVERY %]
+        <tr class="listrow[% loop.count % 2 %]">
+          <td>[% HTML.escape(row.shiptoname) UNLESS loop.prev.shiptoname == row.shiptoname %]&nbsp;</td>
+          <td>[% IF row.id %]<a href='[% IF IS_CUSTOMER %]is[% ELSE %]ir[% END %].pl?action=edit&id=[% HTML.escape(row.id) %]'>[% END %][% HTML.escape(row.invnumber)   || '&nbsp;' %][% IF row.id %]</a>[% END %]</td>
+          <td>[% IF row.oe_id %]<a href='oe.pl?action=edit&type=sales_order&vc=customer&id=[% HTML.escape(row.oe_id) %]'>[% END %][% HTML.escape(row.ordnumber)   || '&nbsp;' %][% IF row.oe_id %]</a>[% END %]</td>
+          <td>[% HTML.escape(row.transdate)   || '&nbsp;' %]</td>
+          <td>[% HTML.escape(row.description) || '&nbsp;' %]</td>
+          <td>[% HTML.escape(row.qty)         || '&nbsp;' %]</td>
+          <td>[% HTML.escape(row.unit)        || '&nbsp;' %]</td>
+          <td>[% LxERP.format_amount(row.sellprice, 2) || '&nbsp;' %]</td>
+        </tr>
+[%- END %]
+
+     </table>
+[%- IF DELIVERY.size == 15 %]
+     <p>This list is capped at 15 items to keep it fast. If you need a full list, please use reports.</p>
+[%- END %]
diff --git a/templates/webpages/ct/list_names_bottom_en.html b/templates/webpages/ct/list_names_bottom_en.html
new file mode 100644 (file)
index 0000000..84ae3e8
--- /dev/null
@@ -0,0 +1,10 @@
+[% USE HTML %]<form method="post" action="ct.pl">
+
+ <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+ <input name="db" type="hidden" value="[% HTML.escape(db) %]">
+
+ [% IF IS_CUSTOMER %]New customer[% ELSE %]New vendor[% END %]<br>
+
+ <input class="submit" type="submit" name="action" value="Add">
+
+</form>
diff --git a/templates/webpages/ct/search_en.html b/templates/webpages/ct/search_en.html
new file mode 100644 (file)
index 0000000..8ab082b
--- /dev/null
@@ -0,0 +1,165 @@
+[% USE HTML %]<body onload="fokus()">
+
+ <form method="post" action="ct.pl" name="Form">
+
+  <input type="hidden" name="db" value="[% HTML.escape(db) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <table>
+   <tr>
+    <th align="right" nowrap>[% IF IS_CUSTOMER %]Customer Number[% ELSE %]Vendor Number[% END %]</th>
+    <td><input name="[% IF IS_CUSTOMER %]customer[% ELSE %]vendor[% END %]number" size="35"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Company Name</th>
+    <td><input name="name" size="35"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Contact</th>
+    <td><input name="contact" size="35"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>E-mail</th>
+    <td><input name="email" size="35"></td>
+   </tr>
+   <tr>
+    <th align="right" nowrap>Contact person (surname)</th>
+    <td><input name="cp_name" size="35"></td>
+   </tr>
+   </tr>
+    <th align="right" nowrap>Billing/shipping address (street)</th>
+    <td><input name="addr_street" size="35"></td>
+   </tr>
+ <tr>
+    <th align="right" nowrap>Billing/shipping address (zipcode)</th>
+    <td><input name="addr_zipcode" size="35"></td>
+ </tr>
+   <tr>
+    <th align="right" nowrap>Billing/shipping address (city)</th>
+    <td><input name="addr_city" size="35"></td>
+   </tr>
+   [% IF SHOW_BUSINESS_TYPES %]
+   <tr>
+    <th align="right" nowrap>[% IF IS_CUSTOMER %]Customer type[% ELSE %]Vendor type[% END %]</th>
+    <td>
+     <select name="business_id"><option value=""></option>
+      [% FOREACH bt = ALL_BUSINESS_TYPES %]<option value="[% HTML.escape(bt.id) %]">[% HTML.escape(bt.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+   [% END %]
+
+   [% CUSTOM_VARIABLES_FILTER_CODE %]
+
+   <tr>
+    <td></td>
+    <td>
+     <input name="status" class="radio" type="radio" value="all" checked> All
+     <input name="status" class="radio" type="radio" value="orphaned"> Orphaned
+    </td>
+   </tr>
+
+   <tr>
+    <td></td>
+    <td><input name="obsolete" class="radio" type="radio" value="all"> All
+     <input name="obsolete" class="radio" type="radio" value="Y"> Obsolete
+     <input name="obsolete" class="radio" type="radio" value="N" checked> Not obsolete
+    </td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Include in Report</th>
+    <td>
+     <table border="0">
+      <tr>
+       <td>
+        <input name="l_id" id="l_id" type="checkbox" class="checkbox" value="Y">
+        <label for="l_id">ID</label>
+       </td>
+       <td>
+        <input name="l_[% db %]number" id="l_[% db %]number" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_[% db %]number">[% IF IS_CUSTOMER %]Customer Number[% ELSE %]Vendor Number[% END %]</label>
+       </td>
+       <td>
+        <input name="l_name" id="l_name" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_name">Company Name</label>
+       </td>
+       <td>
+        <input name="l_street" id="l_street" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_street">Street</label>
+       </td>
+      </tr>
+
+      <tr>
+       <td>
+        <input name="l_contact" id="l_contact" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_contact">Contact</label>
+       </td>
+       <td>
+        <input name="l_phone" id="l_phone" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_phone">Phone</label>
+       </td>
+       <td>
+        <input name="l_fax" id="l_fax" type="checkbox" class="checkbox" value="Y">
+        <label for="l_fax">Fax</label>
+       </td>
+       <td>
+       <input name="l_zipcode" id="l_zipcode" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_zipcode">Zipcode</label>
+       </td>
+      </tr>
+
+      <tr>
+       <td>
+        <input name="l_taxnumber" id="l_taxnumber" type="checkbox" class="checkbox" value="Y">
+        <label for="l_taxnumber">Tax Number</label>
+       </td>
+       <td>
+        <input name="l_email" id="l_email" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_email">E-mail</label>
+       </td>
+       <td>
+        <input name="l_business" id="l_business" type="checkbox" class="checkbox" value="Y">
+        <label for="l_business">[% IF IS_CUSTOMER %]Customer type[% ELSE %]Vendor type[% END %]</label>
+       </td>
+       <td>
+        <input name="l_city" id="l_city" type="checkbox" class="checkbox" value="Y" checked>
+        <label for="l_city">City</label>
+       </td>
+      </tr>
+
+      <tr>
+       <td>
+        <input name="l_invnumber" id="l_invnumber" type="checkbox" class="checkbox" value="Y">
+        <label for="l_invnumber">Invoices</label>
+       </td>
+       <td>
+        <input name="l_ordnumber" id="l_ordnumber" type="checkbox" class="checkbox" value="Y">
+        <label for="l_ordnumber">[% IF IS_CUSTOMER %]Sales Orders[% ELSE %]Purchase Orders[% END %]</label>
+       </td>
+       <td>
+        <input name="l_quonumber" id="l_quonumber" type="checkbox" class="checkbox" value="Y">
+        <label for="l_quonumber">[% IF IS_CUSTOMER %]Quotations[% ELSE %]RFQs[% END %]</label>
+       </td>
+       <td>
+       </td>
+      </tr>
+
+      [% CUSTOM_VARIABLES_INCLUSION_CODE %]
+
+     </table>
+    </td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="nextsub" value="list_names">
+
+  <input type="submit" class="submit" name="action" value="Continue">
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_done_en.html b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_done_en.html
new file mode 100644 (file)
index 0000000..469c3ec
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="listtop">Step 3 of 3: Assemblies</div>
+
+<p>There is nothing to do in this step.</p>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_en.html b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_en.html
new file mode 100644 (file)
index 0000000..19a0867
--- /dev/null
@@ -0,0 +1,144 @@
+[% USE HTML %]<div class="listtop">Step 3 of 3: Assemblies</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="type" value="parts">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="create_buchungsgruppen_assemblies">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <div class="subsubheading">Existing Buchungsgruppen</div>
+
+ <p>
+  The following Buchungsgruppen have already been created:
+  <br>
+  <ul>
+   [% FOREACH row = BUCHUNGSGRUPPEN %]
+    <li>
+     [% HTML.escape(row.description) %]:
+     Inventory: [% row.inventory_accno %];
+
+     Income accno/Expense accno
+     National: [% row.income_accno_0 %]/[% row.expense_accno_0 %];
+
+     Income accno/Expense accno
+     EU with VAT ID: [% row.income_accno_1 %]/[% row.expense_accno_1 %];
+
+     Income accno/Expense accno
+     EU without VAT ID: [% row.income_accno_2 %]/[% row.expense_accno_2 %];
+
+     Income accno/Expense accno
+     International: [% row.income_accno_3 %]/[% row.expense_accno_3 %]
+    </li>
+   [% END %]
+  </ul>
+ </p>
+
+ [% FOREACH row = LIST %]
+  <div class="subsubheading">New Buchungsgruppe [% loop.count %]</div>
+
+  <table>
+   <tr>
+    <td>Description:</td>
+    <td><input name="description_[% loop.count %]"></td>
+   </tr>
+
+   [% IF row.eur %]
+    <input type="hidden" name="inventory_accno_id_[% loop.count %]" value="[% std_inventory_accno_id %]">
+    [% ELSE %]
+    <tr>
+     <td>Inventory:</td>
+     <td>
+      <select name="inventory_accno_id_[% loop.count %]">
+       [% FOREACH acc_row = ACC_INVENTORY %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+   [% END %]
+
+   <tr>
+    <td>Income accno National:</td>
+    <td>
+     <input type="hidden" name="income_accno_id_0_[% loop.count %]" value="[% HTML.escape(row.income_accno_id) %]">
+     [% HTML.escape(row.income_accno) %]--[% HTML.escape(row.income_description) %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU with VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_0_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU with VAT ID:</td>
+    <td>
+     <select name="income_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU with VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU without VAT ID:</td>
+    <td>
+     <select name="income_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU without VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno International:</td>
+    <td>
+     <select name="income_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno International:</td>
+    <td>
+     <select name="expense_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+  </table>
+
+  [% IF loop.last %]
+   <input type="hidden" name="rowcount" value="[% loop.count %]">
+  [% END %]
+
+  <hr>
+ [% END %]
+
+ <input type="submit" name="dummy" value="Create Buchungsgruppen">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_footer_en.html b/templates/webpages/dbupgrade/buchungsgruppen_footer_en.html
new file mode 100644 (file)
index 0000000..dcbddc8
--- /dev/null
@@ -0,0 +1,5 @@
+<div class="listtop">Update complete</div>
+
+<p>The database upgrade for the introduction of Buchungsgruppen is now complete.</p>
+
+<hr>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_header_en.html b/templates/webpages/dbupgrade/buchungsgruppen_header_en.html
new file mode 100644 (file)
index 0000000..0f1f9ec
--- /dev/null
@@ -0,0 +1,18 @@
+<hr>
+
+<div class="listtop">Introduction of Buchungsgruppen</div>
+
+<p>
+ Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.
+ Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.
+ There are four tax zones.
+ 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.
+ Now the user must select a single Buchungsgruppe for each part instead of three distinct accounts.
+ Therefore there's no need to create the same article more than once if it is sold or bought in/from another tax zone.
+</p>
+
+<p>
+ This upgrade script tries to map all existing parts in the database to the newly created Buchungsgruppen.
+ It is possible to do this automatically for some Buchungsgruppen, but not for all.
+ You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.
+</p>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_parts_done_en.html b/templates/webpages/dbupgrade/buchungsgruppen_parts_done_en.html
new file mode 100644 (file)
index 0000000..800c173
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="listtop">Step 1 of 3: Parts</div>
+
+<p>There is nothing to do in this step.</p>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_parts_en.html b/templates/webpages/dbupgrade/buchungsgruppen_parts_en.html
new file mode 100644 (file)
index 0000000..e83f283
--- /dev/null
@@ -0,0 +1,142 @@
+[% USE HTML %]<div class="listtop">Step 1 of 3: Parts</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="type" value="parts">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <div class="subsubheading">Existing Buchungsgruppen</div>
+
+ <p>
+  The following Buchungsgruppen have already been created:
+  <br>
+  <ul>
+   [% FOREACH row = BUCHUNGSGRUPPEN %]
+    <li>
+     [% HTML.escape(row.description) %]:
+     Inventory: [% row.inventory_accno %];
+
+     Income accno/Expense accno
+     National: [% row.income_accno_0 %]/[% row.expense_accno_0 %];
+
+     Income accno/Expense accno
+     EU with VAT ID: [% row.income_accno_1 %]/[% row.expense_accno_1 %];
+
+     Income accno/Expense accno
+     EU without VAT ID: [% row.income_accno_2 %]/[% row.expense_accno_2 %];
+
+     Income accno/Expense accno
+     International: [% row.income_accno_3 %]/[% row.expense_accno_3 %]
+    </li>
+   [% END %]
+  </ul>
+ </p>
+
+ [% FOREACH row = LIST %]
+  <div class="subsubheading">New Buchungsgruppe [% loop.count %]</div>
+
+  <table>
+   <tr>
+    <td>Description:</td>
+    <td><input name="description_[% loop.count %]"></td>
+   </tr>
+
+   [% IF row.eur %]
+    <input type="hidden" name="inventory_accno_id_[% loop.count %]" value="[% std_inventory_accno_id %]">
+    [% ELSE %]
+    <tr>
+     <td>Inventory:</td>
+     <td>
+      <input type="hidden" name="inventory_accno_id_[% loop.count %]" value="[% HTML.escape(row.inventory_accno_id) %]">
+      [% HTML.escape(row.inventory_accno) %]--[% HTML.escape(row.inventory_description) %]
+     </td>
+    </tr>
+   [% END %]
+
+   <tr>
+    <td>Income accno National:</td>
+    <td>
+     <input type="hidden" name="income_accno_id_0_[% loop.count %]" value="[% HTML.escape(row.income_accno_id) %]">
+     [% HTML.escape(row.income_accno) %]--[% HTML.escape(row.income_description) %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno National:</td>
+    <td>
+     <input type="hidden" name="expense_accno_id_0_[% loop.count %]" value="[% HTML.escape(row.expense_accno_id) %]">
+     [% HTML.escape(row.expense_accno) %]--[% HTML.escape(row.expense_description) %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU with VAT ID:</td>
+    <td>
+     <select name="income_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU with VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU without VAT ID:</td>
+    <td>
+     <select name="income_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU without VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno International:</td>
+    <td>
+     <select name="income_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno International:</td>
+    <td>
+     <select name="expense_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+  </table>
+
+  [% IF loop.last %]
+   <input type="hidden" name="rowcount" value="[% loop.count %]">
+  [% END %]
+
+  <hr>
+ [% END %]
+
+ <input type="submit" onclick="document.Form.action2.value = 'create_buchungsgruppen'; document.Form.submit();" name="dummy" value="Create Buchungsgruppen">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_services_done_en.html b/templates/webpages/dbupgrade/buchungsgruppen_services_done_en.html
new file mode 100644 (file)
index 0000000..b9b1d4b
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="listtop">Step 2 of 3: Services</div>
+
+<p>There is nothing to do in this step.</p>
diff --git a/templates/webpages/dbupgrade/buchungsgruppen_services_en.html b/templates/webpages/dbupgrade/buchungsgruppen_services_en.html
new file mode 100644 (file)
index 0000000..e3cbbdd
--- /dev/null
@@ -0,0 +1,143 @@
+[% USE HTML %]<div class="listtop">Step 2 of 3: Services</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="type" value="parts">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <div class="subsubheading">Existing Buchungsgruppen</div>
+
+ <p>
+  The following Buchungsgruppen have already been created:
+  <br>
+  <ul>
+   [% FOREACH row = BUCHUNGSGRUPPEN %]
+    <li>
+     [% HTML.escape(row.description) %]:
+     Inventory: [% row.inventory_accno %];
+
+     Income accno/Expense accno
+     National: [% row.income_accno_0 %]/[% row.expense_accno_0 %];
+
+     Income accno/Expense accno
+     EU with VAT ID: [% row.income_accno_1 %]/[% row.expense_accno_1 %];
+
+     Income accno/Expense accno
+     EU without VAT ID: [% row.income_accno_2 %]/[% row.expense_accno_2 %];
+
+     Income accno/Expense accno
+     International: [% row.income_accno_3 %]/[% row.expense_accno_3 %]
+    </li>
+   [% END %]
+  </ul>
+ </p>
+
+ [% FOREACH row = LIST %]
+  <div class="subsubheading">New Buchungsgruppe [% loop.count %]</div>
+
+  <table>
+   <tr>
+    <td>Description:</td>
+    <td><input name="description_[% loop.count %]"></td>
+   </tr>
+
+   [% IF row.eur %]
+    <input type="hidden" name="inventory_accno_id_[% loop.count %]" value="[% std_inventory_accno_id %]">
+    [% ELSE %]
+    <tr>
+     <td>Inventory:</td>
+     <td>
+      <select name="inventory_accno_id_[% loop.count %]">
+       [% FOREACH acc_row = ACC_INVENTORY %]<option value="[% acc_row.id %]" [% acc_row.selected %]>[% HTML.escape(acc_row.accno) %]--[% HTML.escape(acc_row.description) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+   [% END %]
+
+   <tr>
+    <td>Income accno National:</td>
+    <td>
+     <input type="hidden" name="income_accno_id_0_[% loop.count %]" value="[% HTML.escape(row.income_accno_id) %]">
+     [% HTML.escape(row.income_accno) %]--[% HTML.escape(row.income_description) %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno National:</td>
+    <td>
+     <input type="hidden" name="expense_accno_id_0_[% loop.count %]" value="[% HTML.escape(row.expense_accno_id) %]">
+     [% HTML.escape(row.expense_accno) %]--[% HTML.escape(row.expense_description) %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU with VAT ID:</td>
+    <td>
+     <select name="income_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU with VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_1_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno EU without VAT ID:</td>
+    <td>
+     <select name="income_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno EU without VAT ID:</td>
+    <td>
+     <select name="expense_accno_id_2_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Income accno International:</td>
+    <td>
+     <select name="income_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_INCOME %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td>Expense accno International:</td>
+    <td>
+     <select name="expense_accno_id_3_[% loop.count %]">
+      [% FOREACH acc_row = ACC_EXPENSE %]<option value="[% id %]" [% selected %]>[% HTML.escape(accno) %]--[% HTML.escape(description) %]</option>[% END %]
+     </select>
+    </td>
+   </tr>
+  </table>
+
+  [% IF loop.last %]
+   <input type="hidden" name="rowcount" value="[% loop.count %]">
+  [% END %]
+
+  <hr>
+ [% END %]
+
+ <input type="submit" onclick="document.Form.action2.value = 'create_buchungsgruppen'; document.Form.submit();" name="dummy" value="Create Buchungsgruppen">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/coa_guess_en.html b/templates/webpages/dbupgrade/coa_guess_en.html
new file mode 100644 (file)
index 0000000..cea9e87
--- /dev/null
@@ -0,0 +1,24 @@
+[% USE HTML %]<div class="listtop">Select the chart of accounts in use</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <p>
+  Please select the chart of accounts this installation is using from the list below.
+ </p>
+
+ <p>
+  Chart of accounts:
+  <select name="coa">[% FOREACH row = COAS %]<option>[% row.name %]</option>[% END %]</select>
+ </p>
+
+ <input type="submit" onclick="document.Form.action2.value = 'set_coa'; document.Form.submit();" name="dummy" value="Continue">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/error_en.html b/templates/webpages/dbupgrade/error_en.html
new file mode 100644 (file)
index 0000000..9060970
--- /dev/null
@@ -0,0 +1,6 @@
+[% USE HTML %]<p>The database update/creation did not succeed. The file [% HTML.escape(file) %] contained the following error:
+ <br>
+ [% error %]
+ <br>
+ All changes in that file have been reverted.
+</p>
diff --git a/templates/webpages/dbupgrade/footer_en.html b/templates/webpages/dbupgrade/footer_en.html
new file mode 100644 (file)
index 0000000..6adf42b
--- /dev/null
@@ -0,0 +1,11 @@
+[% USE HTML %]<p>...done</p>
+
+<form action="[% menufile %]">
+
+ <input type="hidden" name="action" value="display">
+
+ <p><input type="submit" value="Continue"></p>
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/dbupgrade/header_en.html b/templates/webpages/dbupgrade/header_en.html
new file mode 100644 (file)
index 0000000..df173ab
--- /dev/null
@@ -0,0 +1,7 @@
+[% USE HTML %]<body>
+
+ <table width="100%">
+  <tr>
+   <td class="listtop">Dataset upgrade ([% HTML.escape(dbname) %])</td>
+  </tr>
+ </table>
diff --git a/templates/webpages/dbupgrade/std_buchungsgruppen_unknown_coa_en.html b/templates/webpages/dbupgrade/std_buchungsgruppen_unknown_coa_en.html
new file mode 100644 (file)
index 0000000..bc7d2e4
--- /dev/null
@@ -0,0 +1,20 @@
+[% USE HTML %]<div class="listtop">Unknown chart of accounts</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <p>
+  Note:
+  This installation uses an unknown chart of accounts (&quot;[% HTML.escape(coa) %]&quot;). This database upgrade cannot create standard buchungsgruppen automatically.
+ </p>
+
+ <hr>
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/units_error_en.html b/templates/webpages/dbupgrade/units_error_en.html
new file mode 100644 (file)
index 0000000..f124b1c
--- /dev/null
@@ -0,0 +1,5 @@
+[% USE HTML %]<p><b>Error:</b> [% message %]</p>
+
+<form>
+<input type="button" onclick="history.back()" value="Back">
+</form>
diff --git a/templates/webpages/dbupgrade/units_header_en.html b/templates/webpages/dbupgrade/units_header_en.html
new file mode 100644 (file)
index 0000000..5f2a568
--- /dev/null
@@ -0,0 +1,16 @@
+<hr>
+
+<div class="listtop">Introduction of units</div>
+
+<p>
+ Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.
+ In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.
+ These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.
+</p>
+
+<p>
+ This upgrade script tries to map all existing units in the database to the newly created units.
+ It is possible to do this automatically for some units, but for others the user has to chose the new unit.
+ You cannot continue until all unknown units have been mapped to known ones.
+ You can also create new units now.
+</p>
diff --git a/templates/webpages/dbupgrade/units_parts_done_en.html b/templates/webpages/dbupgrade/units_parts_done_en.html
new file mode 100644 (file)
index 0000000..83b0ca0
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="listtop">Step 1 of 3: Parts</div>
+
+<p>No unknown units where found.</p>
diff --git a/templates/webpages/dbupgrade/units_parts_en.html b/templates/webpages/dbupgrade/units_parts_en.html
new file mode 100644 (file)
index 0000000..a48ac92
--- /dev/null
@@ -0,0 +1,80 @@
+[% USE HTML %]<div class="listtop">Step 1 of 3: Parts</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="unit_type" value="dimension">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <div class="subsubheading">Add unit</div>
+
+ <p>
+  For each unit there's either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the &quot;smaller&quot; one. A factor may not be less than 1. Therefore you may define &quot;kg&quot; with the base unit &quot;g&quot; and a factor of &quot;1&quot;, but not the other way round.
+ </p>
+
+ <p>
+  The following units exist already:
+  [% FOREACH row = NEW_BASE_UNIT_DDBOX %][% IF row.name %][% HTML.escape(row.name) %][% UNLESS loop.last %]; [% END %][% END %][% END %]
+ </p>
+
+ <hr>
+
+ <table>
+  <tr>
+   <th align="right">Unit</th>
+   <td><input name="new_name" size="20" maxlength="20"></td>
+  </tr>
+  <tr>
+   <th align="right">Base unit</th>
+   <td>
+    <select name="new_base_unit">
+     [% FOREACH row = NEW_BASE_UNIT_DDBOX %]<option [% row.selected %]>[% row.name %]</option>[% END %]
+    </select>
+   </td>
+  </tr>
+  <tr>
+   <th align="right">Factor</th>
+   <td><input name="new_factor"></td>
+  </tr>
+ </table>
+
+ <input type="submit" onclick="document.Form.action2.value = 'add_unit'; document.Form.submit();" name="dummy" value="Add unit">
+
+ <hr>
+
+ <div class="subsubheading">Assign new units</div>
+
+ <p>
+  The following units are unknown.
+  You have to chose which unit to save for each of them.
+ </p>
+
+ <table>
+  <tr>
+   <th class="listheading">Current unit</th>
+   <th class="listheading">New unit</th>
+  </tr>
+
+  [% FOREACH row = UNKNOWN_PART_UNITS %]
+   <tr class="listrow[% loop.count % 2 %]">
+    <td>
+     [% HTML.escape(row.name) %]
+     <input type="hidden" name="old_unit_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+    </td>
+    <td>
+     <select name="new_unit_[% loop.count %]">
+      [% FOREACH row_new = row.NEW_UNITS %]<option>[% HTML.escape(row_new.name) %]</option>[% END %]
+     </select>
+    </td>
+    [% IF loop.last %]<input type="hidden" name="rowcount" value="[% loop.count %]">[% END %]
+  [% END %]
+ </table>
+
+ <input type="submit" onclick="document.Form.action2.value = 'assign_units'; document.Form.submit();" name="dummy" value="Assign units">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/units_services_done_en.html b/templates/webpages/dbupgrade/units_services_done_en.html
new file mode 100644 (file)
index 0000000..500c21b
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="listtop">Step 2 of 3: Services</div>
+
+<p>No unknown units where found.</p>
diff --git a/templates/webpages/dbupgrade/units_services_en.html b/templates/webpages/dbupgrade/units_services_en.html
new file mode 100644 (file)
index 0000000..dc57227
--- /dev/null
@@ -0,0 +1,80 @@
+[% USE HTML %]<div class="listtop">Step 2 of 3: Services</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="unit_type" value="service">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ [% IF saved_message %]
+  <p>[% saved_message %]</p>
+ [% END %]
+
+ <div class="subsubheading">Add unit</div>
+
+ <p>
+  For each unit there's either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the &quot;smaller&quot; one. A factor may not be less than 1. Therefore you may define &quot;kg&quot; with the base unit &quot;g&quot; and a factor of &quot;1&quot;, but not the other way round.
+ </p>
+
+ <p>
+  The following units exist already:
+  [% FOREACH row = NEW_BASE_UNIT_DDBOX %][% IF row.name %][% HTML.escape(row.name) %][% UNLESS loop.last %]; [% END %][% END %][% END %]
+ </p>
+
+ <hr>
+
+ <table>
+  <tr>
+   <th align="right">Unit</th>
+   <td><input name="new_name" size="20" maxlength="20"></td>
+  </tr>
+  <tr>
+   <th align="right">Base unit</th>
+   <td>
+    <select name="new_base_unit">
+     [% FOREACH row = NEW_BASE_UNIT_DDBOX %]<option [% row.selected %]>[% row.name %]</option>[% END %]
+    </select>
+   </td>
+  </tr>
+  <tr>
+   <th align="right">Factor</th>
+   <td><input name="new_factor"></td>
+  </tr>
+ </table>
+
+ <input type="submit" onclick="document.Form.action2.value = 'add_unit'; document.Form.submit();" name="dummy" value="Add unit">
+
+ <hr>
+
+ <div class="subsubheading">Assign new units</div>
+
+ <p>
+  The following units are unknown.
+  You have to chose which unit to save for each of them.
+ </p>
+
+ <table>
+  <tr>
+   <th class="listheading">Current unit</th>
+   <th class="listheading">New unit</th>
+  </tr>
+
+  [% FOREACH row = UNKNOWN_PART_UNITS %]
+   <tr class="listrow[% loop.count % 2 %]">
+    <td>
+     [% HTML.escape(row.name) %]
+     <input type="hidden" name="old_unit_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+    </td>
+    <td>
+     <select name="new_unit_[% loop.count %]">
+      [% FOREACH row_new = row.NEW_UNITS %]<option>[% HTML.escape(row_new.name) %]</option>[% END %]
+     </select>
+    </td>
+    [% IF loop.last %]<input type="hidden" name="rowcount" value="[% loop.count %]">[% END %]
+  [% END %]
+ </table>
+
+ <input type="submit" onclick="document.Form.action2.value = 'assign_units'; document.Form.submit();" name="dummy" value="Assign units">
+
+</form>
+
diff --git a/templates/webpages/dbupgrade/units_set_default_done_en.html b/templates/webpages/dbupgrade/units_set_default_done_en.html
new file mode 100644 (file)
index 0000000..623fdf2
--- /dev/null
@@ -0,0 +1,7 @@
+<div class="listtop">Step 3 of 3: Default units</div>
+
+<p>No entries were found which had no unit assigned to them.</p>
+
+<p>The database upgrade for the introduction of units is now complete.</p>
+
+<hr>
diff --git a/templates/webpages/dbupgrade/units_set_default_en.html b/templates/webpages/dbupgrade/units_set_default_en.html
new file mode 100644 (file)
index 0000000..337c874
--- /dev/null
@@ -0,0 +1,36 @@
+[% USE HTML %]<div class="listtop">Step 3 of 3: Default units</div>
+
+<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="unit_type" value="dimension">
+ <input type="hidden" name="action" value="login">
+ <input type="hidden" name="action2" value="">
+
+ <p>
+  There are still entries in the database for which no unit has been assigned.
+  You have to chose a dimension unit and a service unit which will then be assigned to those entries.
+ </p>
+
+ <table>
+  <tr>
+   <td>Dimension unit:</td>
+   <td>
+    <select name="default_dimension_unit">
+     [% FOREACH row = DIMENSION_DDBOX %]<option>[% HTML.escape(row.name) %]</option>[% END %]
+    </select>
+   </td>
+  </tr>
+  <tr>
+
+   <td>Service unit:</td>
+   <td>
+    <select name="default_service_unit">
+     [% FOREACH row = SERVICE_DDBOX %]<option>[% HTML.escape(row.name) %]</option>[% END %]
+    </select>
+   </td>
+  </tr>
+ </table>
+
+ <p><input type="submit" onclick="document.Form.action2.value = 'set_default'; document.Form.submit();" name="dummy" value="Assign units"></p>
+
+</form>
diff --git a/templates/webpages/dbupgrade/update_templates_warnings_en.html b/templates/webpages/dbupgrade/update_templates_warnings_en.html
new file mode 100644 (file)
index 0000000..50717d5
--- /dev/null
@@ -0,0 +1,11 @@
+[% USE HTML %]<div class="listtop">Warnings during template upgrade</div>
+
+<p>The following warnings occured during an upgrade to the document templates:</p>
+
+<p>
+ <ul>
+  [% FOREACH row = WARNINGS %]
+   <li>[% row.message %]</li>
+  [% END %]
+ </ul>
+</p>
diff --git a/templates/webpages/dbupgrade/upgrade_message2_en.html b/templates/webpages/dbupgrade/upgrade_message2_en.html
new file mode 100644 (file)
index 0000000..fcb437d
--- /dev/null
@@ -0,0 +1,4 @@
+[% USE HTML %]<ul>
+ <li>Applying [% HTML.escape(file) %]: [% description %]</li>
+</ul>
+
diff --git a/templates/webpages/dbupgrade/warehouse_form_en.html b/templates/webpages/dbupgrade/warehouse_form_en.html
new file mode 100644 (file)
index 0000000..bd3a1e2
--- /dev/null
@@ -0,0 +1,19 @@
+[% USE HTML %]<div class="listtop">Warehouse MIgration</div>
+
+<form action="[% script %]" method="POST">
+
+<p>Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system. 
+This update will change the nature the onhand of goods is tracked. 
+As a result, the saved onhand values of the present goods can be stored into a warehouse designated by you, or will be reset for a proper warehouse tracking</p>
+
+<p>Do you want to store the existing onhand values into a new warehouse?</p>
+<input id=do_migrate_Y name=do_migrate type=radio value=Y>&nbsp;<label for=do_migrate_Y>Yes</label>
+<input id=do_migrate_N name=do_migrate type=radio value=N checked>&nbsp;<label for=do_migrate_N>No</label>
+
+<p>Please specify a description for the warehouse designated for these goods.</p>
+<input name=import_warehouse size=50>
+
+<p>Since bin is not enforced in the parts data, please specify a bin where goods without a specified bin will be put.<p>
+<input name=bin_default size=50>
+
+<p><input type=submit value="Continue"></p>
diff --git a/templates/webpages/dbupgrade/warning_en.html b/templates/webpages/dbupgrade/warning_en.html
new file mode 100644 (file)
index 0000000..e084d53
--- /dev/null
@@ -0,0 +1,10 @@
+[% USE HTML %]<form name="Form" method="post" action="login.pl">
+
+ <input type="hidden" name="action" value="login">
+
+ <p>
+  Lx-Office is about to update the database <b>[% HTML.escape(dbname) %]</b>. You should create a backup of the database before proceeding because the backup might not be reversible.
+ </p>
+
+ <input type="submit" name="dummy" value="Continue">
+</form>
diff --git a/templates/webpages/do/delete_en.html b/templates/webpages/do/delete_en.html
new file mode 100644 (file)
index 0000000..2e7e649
--- /dev/null
@@ -0,0 +1,22 @@
+[% USE HTML %][% USE LxERP %]<body>
+
+ <div class="listtop">Delete delivery order</div>
+
+ <form method="post" action="do.pl">
+
+  <h2 class="confirm">Confirm</h2>
+
+  <p>[% LxERP.format_string('Are you sure you want to delete Delivery Order Number #1?', donumber) %]</p>
+
+  [%- FOREACH row = VARIABLES %]
+  <input type="hidden" name="[% HTML.escape(row.key) %]" value="[% HTML.escape(row.value) %]">
+  [%- END %]
+
+  <input type="hidden" name="yes_nextsub" value="delete_delivery_order">
+  <input type="hidden" name="no_nextsub" value="update">
+  <input name="action" class="submit" type="submit" value="Yes">
+  <input name="action" class="submit" type="submit" value="No">
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/do/form_footer_en.html b/templates/webpages/do/form_footer_en.html
new file mode 100644 (file)
index 0000000..6626c0b
--- /dev/null
@@ -0,0 +1,100 @@
+[% USE HTML %][% USE LxERP %]<!-- <body> -->
+<!--  <form> -->
+<!--   <p> -->
+<!--    <table> -->
+
+ [%- IF delivered %]
+ [%- SET RO = ' readonly' %]
+ [%- END %]
+
+    <tr>
+     <td>
+      <table>
+       <tr valign="bottom">
+        <th align="left">Notes</th>
+        <th align="left">Internal Notes</th>
+       </tr>
+
+       <tr valign="top">
+        <td><textarea name="notes" rows="[% LxERP.numtextrows(notes, 25, 8, 2) %]" cols="25" wrap="soft"[% RO %]>[% HTML.escape(notes) %]</textarea></td>
+        <td><textarea name="intnotes" rows="[% LxERP.numtextrows(intnotes, 35, 8, 2) %]" cols="35" wrap="soft"[% RO %]>[% HTML.escape(intnotes) %]</textarea></td>
+       </tr>
+      </table>
+
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  [%- IF conf_webdav %]
+  <div class="listtop" align="left">Documents in the WebDAV repository</div>
+
+  <p>
+   <table width="100%">
+    <tr>
+     <td align="left" width="30%"><b>File name</b></td>
+     <td align="left" width="70%"><b>WebDAV link</b></td>
+    </tr>
+
+    [%- FOREACH file = WEBDAV %]
+    <tr>
+     <td align="left">[% HTML.escape(file.name) %]</td>
+     <td align="left"><a href="[% HTML.escape(file.link) %]">[% HTML.escape(file.type) %]</a></td>
+    </tr>
+    [%- END %]
+
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+  [%- END %]
+
+  <p>[% PRINT_OPTIONS %]</p>
+
+  <p>
+   Edit the Delivery Order<br>
+   <input type="hidden" name="action" value="dispatcher">
+   <input class="submit" type="submit" name="action_update" id="update_button" value="Update">
+   [%- UNLESS delivered %]
+   [%- IF vc == 'customer' %]
+   <input class="submit" type="submit" name="action_ship_to" value="Ship to">
+   [%- END %]
+   [%- END %]
+   <input class="submit" type="submit" name="action_print" value="Print">
+   <input class="submit" type="submit" name="action_e_mail" value="E-mail">
+   [%- UNLESS delivered %]
+   <input class="submit" type="submit" name="action_save" value="Save">
+   [%- IF vc == 'customer' %]
+   <input class="submit" type="submit" name="action_transfer_out" value="Transfer out">
+   [%- ELSE %]
+   <input class="submit" type="submit" name="action_transfer_in" value="Transfer in">
+   [%- END %]
+   [%- END %]
+   [%- IF id %]
+   [%- UNLESS closed %]
+   <input class="submit" type="submit" name="action_mark_closed" value="Mark closed">
+   [%- END %]
+   <input type="button" class="submit" onclick="set_history_window([% id %]);" name="history" id="history" value="history">
+   [%- END %]
+  </p>
+
+  [%- IF id %]
+  <p>
+   Workflow Delivery Order<br>
+   <input class="submit" type="submit" name="action_save_as_new" value="Save as new">
+   [% UNLESS delivered %]
+   <input class="submit" type="submit" name="action_delete" value="Delete">
+   [% END %]
+   <input class="submit" type="submit" name="action_invoice" value="Invoice">
+  </p>
+  [%- END %]
+
+  <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+  <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/do/form_header_en.html b/templates/webpages/do/form_header_en.html
new file mode 100644 (file)
index 0000000..284862a
--- /dev/null
@@ -0,0 +1,355 @@
+[% USE HTML %][% USE LxERP %]<body onload="on_load()">
+
+ <script type="text/javascript" src="js/show_form_details.js"></script>
+ <script type="text/javascript" src="js/show_history.js"></script>
+ <script type="text/javascript" src="js/show_vc_details.js"></script>
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/delivery_customer_selection.js"></script>
+ <script type="text/javascript" src="js/vendor_selection.js"></script>
+ <script type="text/javascript" src="js/calculate_qty.js"></script>
+ <script type="text/javascript" src="js/stock_in_out.js"></script>
+
+ <script type="text/javascript">
+  <!--
+      function on_load() {
+        [% IF onload %][% onload %];[% END %]
+        setupDateFormat('[% myconfig_dateformat %]', 'Falsches Datumsformat!');
+        setupPoints('[% myconfig_numberformat %]', 'wrongformat');
+
+        [%- UNLESS delivered %]
+        Calendar.setup({ inputField : "transdate", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "transdate_trigger" });
+        [%- END %]
+      }
+    -->
+ </script>
+
+ <style type="text/css">
+  .fixed_width {
+    width: 250px;
+  }
+ </style>
+
+ [%- IF vc == 'customer' %]
+ [%- SET vc = 'customer' %]
+ [%- SET the_vc_id = customer_id %]
+ [%- SET the_vc = customer %]
+ [%- SET the_oldvc = oldcustomer %]
+ [%- SET is_customer = '1' %]
+ [%- ELSE %]
+ [%- SET vc = 'vendor' %]
+ [%- SET the_vc_id = vendor_id %]
+ [%- SET the_vc = vendor %]
+ [%- SET the_oldvc = oldvendor %]
+ [%- SET is_customer = '0' %]
+ [%- END %]
+ [%- IF delivered %]
+ [%- SET RO = ' readonly' %]
+ [%- SET DISABLED = ' disabled' %]
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ [%- IF ERRORS && ERRORS.size %]
+ <p><font color="#ff0000">[% ERRORS.join('<br>') %]</font></p>
+ [%- END %]
+
+ <form method="post" name="do" action="do.pl">
+
+  <input type="hidden" name="action" value="[% HTML.escape(action) %]">
+  <input type="hidden" name="bcc" value="[% HTML.escape(bcc) %]">
+  <input type="hidden" name="business" value="[% HTML.escape(business) %]">
+  <input type="hidden" name="cc" value="[% HTML.escape(cc) %]">
+  <input type="hidden" name="closed" value="[% HTML.escape(closed) %]">
+  <input type="hidden" name="convert_from_oe_ids" value="[% HTML.escape(convert_from_oe_ids) %]">
+  <input type="hidden" name="curr" value="[% HTML.escape(curr) %]">
+  <input type="hidden" name="customer_klass" value="[% HTML.escape(customer_klass) %]">
+  <input type="hidden" name="discount" value="[% HTML.escape(discount) %]">
+  <input type="hidden" name="dunning_amount" value="[% HTML.escape(dunning_amount) %]">
+  <input type="hidden" name="email" value="[% HTML.escape(email) %]">
+  <input type="hidden" name="emailed" value="[% HTML.escape(emailed) %]">
+  <input type="hidden" name="format" value="[% HTML.escape(format) %]">
+  <input type="hidden" name="formname" value="[% HTML.escape(formname) %]">
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+  <input type="hidden" name="max_dunning_level" value="[% HTML.escape(max_dunning_level) %]">
+  <input type="hidden" name="media" value="[% HTML.escape(media) %]">
+  <input type="hidden" name="message" value="[% HTML.escape(message) %]">
+  <input type="hidden" name="printed" value="[% HTML.escape(printed) %]">
+  <input type="hidden" name="proforma" value="[% HTML.escape(proforma) %]">
+  <input type="hidden" name="queued" value="[% HTML.escape(queued) %]">
+  <input type="hidden" name="saved_donumber" value="[% HTML.escape(saved_donumber) %]">
+  <input type="hidden" name="shiptocity" value="[% HTML.escape(shiptocity) %]">
+  <input type="hidden" name="shiptocontact" value="[% HTML.escape(shiptocontact) %]">
+  <input type="hidden" name="shiptocountry" value="[% HTML.escape(shiptocountry) %]">
+  <input type="hidden" name="shiptodepartment_1" value="[% HTML.escape(shiptodepartment_1) %]">
+  <input type="hidden" name="shiptodepartment_2" value="[% HTML.escape(shiptodepartment_2) %]">
+  <input type="hidden" name="shiptoemail" value="[% HTML.escape(shiptoemail) %]">
+  <input type="hidden" name="shiptofax" value="[% HTML.escape(shiptofax) %]">
+  <input type="hidden" name="shiptoname" value="[% HTML.escape(shiptoname) %]">
+  <input type="hidden" name="shiptophone" value="[% HTML.escape(shiptophone) %]">
+  <input type="hidden" name="shiptostreet" value="[% HTML.escape(shiptostreet) %]">
+  <input type="hidden" name="shiptozipcode" value="[% HTML.escape(shiptozipcode) %]">
+  <input type="hidden" name="subject" value="[% HTML.escape(subject) %]">
+  <input type="hidden" name="taxincluded" value="[% HTML.escape(taxincluded) %]">
+  <input type="hidden" name="taxzone_id" value="[% HTML.escape(taxzone_id) %]">
+  <input type="hidden" name="terms" value="[% HTML.escape(terms) %]">
+  <input type="hidden" name="title" value="[% HTML.escape(title) %]">
+  <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+  <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+
+  <p>
+   <table width="100%">
+    <tr valign="top">
+     <td>
+      <table width="100%">
+       <tr>
+        <input type="hidden" name="[% vc %]_id" value="[% HTML.escape(the_vc_id) %]">
+        <input type="hidden" name="old[% vc %]" value="[% HTML.escape(the_oldvc) %]">
+        <th align="right">[% IF is_customer %]Customer[% ELSE %]Vendor[% END %]</th>
+        <td>
+         [%- UNLESS !delivered && SHOW_VC_DROP_DOWN %]
+         <input type="text" value="[% HTML.escape(oldvcname) %]" name="[% HTML.escape(vc) %]"[% RO %]>
+         [%- ELSE %]
+         <select name="[% vc %]" class="fixed_width" onchange="document.do.update_button.click();"[% RO %]>
+          [%- FOREACH row = ALL_VC %]
+          <option value="[% HTML.escape(row.value) %]" [% IF the_oldvc == row.value %] selected[% END %]>[% HTML.escape(row.name) %]</option>
+          [%- END %]
+         </select>
+         <input type="hidden" name="select[% vc %]" value="1">
+         [%- END %]
+         <input type="button" value="Details (one letter abbreviation)" onclick="show_vc_details('[% vc %]')">
+        </td>
+
+        [%- IF ALL_CONTACTS.size %]
+        <tr>
+         <th align="right">Contact Person</th>
+         <td>
+          [%- IF delivered %]
+          <input type="hidden" name="cp_id" value="[% HTML.escape(cp_id) %]">
+          [%- IF cp_id == row.cp_id %]
+          [%- HTML.escape(row.cp_name) %][%- IF row.cp_abteilung %] ([% HTML.escape(row.cp_abteilung) %])[% END -%]
+          [%- END %]
+          [%- ELSE %]
+          <select name="cp_id" class="fixed_width" >
+           <option></option>
+           [%- FOREACH row = ALL_CONTACTS %]
+           <option value="[% HTML.escape(row.cp_id) %]"[% IF cp_id == row.cp_id %] selected[% END %]>
+            [%- HTML.escape(row.cp_name) %][%- IF row.cp_abteilung %] ([% HTML.escape(row.cp_abteilung) %])[% END -%]
+           </option>
+           [%- END %]
+          </select>
+          [%- END %]
+         </td>
+        </tr>
+        [%- END %]
+
+        [%- IF ALL_SHIPTO.size %]
+        <tr>
+         <th align="right">Shipping Address</th>
+         <td>
+          [%- IF delivered %]
+          <input type="hidden" name="shipto_id" value="[% HTML.escape(shipto_id) %]">
+          [%- FOREACH row = ALL_SHIPTO %]
+          [%- IF shipto_id == row.shipto_id %]
+          [%- HTML.escape(row.shiptoname) -%]
+          [%- IF row.shiptodepartment_1 %]; [% HTML.escape(row.shiptodepartment_1) -%][% END -%]
+          [%- IF row.shiptostreet %]; [% HTML.escape(row.shiptostreet) -%][% END -%]
+          [%- IF row.shiptocity %]; [% HTML.escape(row.shiptocity) -%][% END -%]
+          [%- END %]
+          [%- END %]
+
+          [%- ELSE %]
+          <select name="shipto_id" class="fixed_width" >
+           <option></option>
+           [%- FOREACH row = ALL_SHIPTO %]
+           <option value="[% HTML.escape(row.shipto_id) %]"[% IF shipto_id == row.shipto_id %] selected[% END %]>
+            [%- HTML.escape(row.shiptoname) -%]
+            [%- IF row.shiptodepartment_1 %]; [% HTML.escape(row.shiptodepartment_1) -%][% END -%]
+            [%- IF row.shiptostreet %]; [% HTML.escape(row.shiptostreet) -%][% END -%]
+            [%- IF row.shiptocity %]; [% HTML.escape(row.shiptocity) -%][% END -%]
+           </option>
+           [%- END %]
+          </select>
+          [%- END %]
+         </td>
+        </tr>
+        [%- END %]
+
+        [%- IF business %]
+        <tr>
+         <th align="right">[% IF is_customer %]Customer type[% ELSE %]Vendor type[% END %]</th>
+         <td>[% HTML.escape(business) %]</td>
+        </tr>
+        [%- END %]
+
+        [%- IF max_dunning_level %]
+        <tr>
+         <th align="right">Max. Dunning Level</th>
+         <td>
+          <b>[% HTML.escape(max_dunning_level) %]</b>; Dunning Amount:
+          <b>[% HTML.escape(LxERP.format_amount(dunning_amount, 2)) %]</b>
+         </td>
+        </tr>
+        [%- END %]
+       </tr>
+
+       [%- IF ALL_DEPARTMENTS.size %]
+       <tr>
+        <th align="right" nowrap>Department</th>
+        <td colspan="3">
+         [%- IF delivered %]
+         <input type="hidden" name="department" value="[% HTML.escape(department) %]">
+         [%- FOREACH row = ALL_DEPARTMENTS %]
+         [% IF department == row.value %][% HTML.escape(row.description) %]--[% HTML.escape(row.id) %][% END %]
+         [%- END %]
+         [%- ELSE %]
+         <select name="department" class="fixed_width">
+          <option></option>
+          [%- FOREACH row = ALL_DEPARTMENTS %]
+          <option[% IF department == row.value %] selected[% END %]>[% HTML.escape(row.description) %]--[% HTML.escape(row.id) %]</option>
+          [%- END %]
+         </select>
+         [%- END %]
+        </td>
+       </tr>
+       [%- END %]
+
+       <tr>
+        <th align="right">Shipping Point</th>
+        <td colspan="3"><input name="shippingpoint" size="35" value="[% HTML.escape(shippingpoint) %]"[% RO %]></td>
+       </tr>
+
+       <tr>
+        <th align="right">Ship via</th>
+        <td colspan="3"><input name="shipvia" size="35" value="[% HTML.escape(shipvia) %]"[% RO %]></td>
+       </tr>
+
+       <tr>
+        <th align="right">Transaction description</th>
+        <td colspan="3"><input name="transaction_description" size="35" value="[% HTML.escape(transaction_description) %]"[% RO %]></td>
+       </tr>
+
+      </table>
+     </td>
+
+     <td align="right">
+      <table>
+
+       <tr>
+        <td colspan="2" align="center">
+         [%- IF delivered %]
+          [%- IF is_customer %]
+          transferred out
+          [%- ELSE %]
+          transferred in
+          [%- END %]
+         [%- ELSE %]
+          [%- IF is_customer %]
+          not transferred out yet
+          [%- ELSE %]
+          not transferred in yet
+          [%- END %]
+         [%- END %]
+         ;
+         [%- IF closed %]
+          Closed
+         [%- ELSE %]
+          Open
+         [%- END %]
+        </td>
+       </tr>
+
+       <input type="hidden" name="delivered" value="[% HTML.escape(delivered) %]">
+
+       <tr>
+        <th align="right">Employee</th>
+        <td>
+         [%- IF delivered %]
+         <input type="hidden" name="employee_id" value="[% HTML.escape(employee_id) %]">
+         [%- FOREACH row = ALL_EMPLOYEES %]
+         [% IF row.id == employee_id %][%- IF row.name %][%- HTML.escape(row.name) %][%- ELSE %][% HTML.escape(row.login) %][%- END %][% END %]
+         [%- END %]
+         [%- ELSE %]
+         <select name="employee_id">
+          [%- FOREACH row = ALL_EMPLOYEES %]
+          <option value="[% HTML.escape(row.id) %]"[% IF row.id == employee_id %] selected[% END %]>
+           [%- IF row.name %][%- HTML.escape(row.name) %][%- ELSE %][% HTML.escape(row.login) %][%- END %]
+          </option>
+          [%- END %]
+         </select>
+         [%- END %]
+        </td>
+       </tr>
+
+       [%- IF is_customer %]
+       [%- IF salesman_id %]
+       [%- SET the_salesman_id = salesman_id %]
+       [%- ELSE %]
+       [%- SET the_salesman_id = employee_id %]
+       [%- END %]
+       <tr>
+        <th align="right">Salesman</th>
+        <td>
+         [%- IF delivered %]
+         <input type="hidden" name="salesman_id" value="[% HTML.escape(salesman_id) %]">
+         [%- FOREACH row = ALL_SALESMEN %]
+         [% IF row.id == the_salesman_id %][%- IF row.name %][%- HTML.escape(row.name) %][%- ELSE %][% HTML.escape(row.login) %][%- END %][% END %]
+         [%- END %]
+         [%- ELSE %]
+         <select name="salesman_id">
+          [%- FOREACH row = ALL_SALESMEN %]
+          <option value="[% HTML.escape(row.id) %]"[% IF row.id == the_salesman_id %] selected[% END %]>
+           [%- IF row.name %][%- HTML.escape(row.name) %][%- ELSE %][% HTML.escape(row.login) %][%- END %]
+          </option>
+          [%- END %]
+         </select>
+         [%- END %]
+        </td>
+       </tr>
+       [%- END %]
+
+       <tr>
+        <th width="70%" align="right" nowrap>Delivery Order Number</th>
+        <td><input name="donumber" size="11" value="[% HTML.escape(donumber) %]"[% RO %]></td>
+       </tr>
+
+       <tr>
+        <th width="70%" align="right" nowrap>Order Number</th>
+        <td><input name="ordnumber" size="11" value="[% HTML.escape(ordnumber) %]"[% RO %]></td>
+       </tr>
+
+       <tr>
+        <th width="70%" align="right" nowrap>Customer Order Number</th>
+        <td><input name="cusordnumber" size="11" value="[% HTML.escape(cusordnumber) %]"[% RO %]></td>
+       </tr>
+
+       <tr>
+        <th align="right" nowrap>Delivery Order Date</th>
+        <td nowrap>
+         <input name="transdate" id="transdate" size="11" title="[% HTML.escape(myconfig_dateformat) %]" value="[% HTML.escape(transdate) %]"
+                onBlur="check_right_date_format(this)"[% RO %]>
+         [% UNLESS delivered %]<input type="button" name="b_transdate" id="transdate_trigger" value="?">[% END %]
+        </td>
+       </tr>
+
+       <tr>
+        <th width="70%" align="right" nowrap>Project Number</th>
+        <td>
+         [%- IF delivered %]
+         <input type="hidden" name="globalproject_id" value="[% HTML.escape(globalproject_id) %]">
+         [%- FOREACH row = ALL_PROJECTS %]
+         [% IF globalproject_id == row.id %][% HTML.escape(row.projectnumber) %][% END %]
+         [%- END %]
+         [%- ELSE %]
+         <select name="globalproject_id">
+          <option></option>
+          [%- FOREACH row = ALL_PROJECTS %]
+          <option value="[% HTML.escape(row.id) %]"[% IF globalproject_id == row.id %] selected[% END %]>[% HTML.escape(row.projectnumber) %]</option>
+          [%- END %]
+         </select>
+         [%- END %]
+        </td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+   </table>
diff --git a/templates/webpages/do/orders_bottom_en.html b/templates/webpages/do/orders_bottom_en.html
new file mode 100644 (file)
index 0000000..1ce3ad3
--- /dev/null
@@ -0,0 +1,9 @@
+[% USE HTML %]
+ New invoice<br>
+ <input class="submit" type="submit" name="action" value="Continue">
+ <input type="hidden" name="nextsub" value="invoice_multi">
+ <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+</form>
diff --git a/templates/webpages/do/orders_top_en.html b/templates/webpages/do/orders_top_en.html
new file mode 100644 (file)
index 0000000..bd402c4
--- /dev/null
@@ -0,0 +1 @@
+<form method="post" action="do.pl">
diff --git a/templates/webpages/do/search_en.html b/templates/webpages/do/search_en.html
new file mode 100644 (file)
index 0000000..c8477cc
--- /dev/null
@@ -0,0 +1,242 @@
+[% USE HTML %][% USE LxERP %]<body onload="on_load();">
+
+ [%- IF vc == 'customer' %]
+ [%- SET is_customer = '1' %]
+ [%- ELSE %]
+ [%- SET is_customer = '0' %]
+ [%- END %]
+
+ <script type="text/javascript">
+  <!--
+      function on_load() {
+        Calendar.setup({ inputField : "transdatefrom", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "transdatefrom_trigger" });
+        Calendar.setup({ inputField : "transdateto",   ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "transdateto_trigger" });
+        document.Form.donumber.focus();
+      }
+    -->
+ </script>
+
+ <style type="text/css">
+  .fixed_width {
+    width: 250px;
+  }
+ </style>
+
+ <form method="post" action="do.pl" name="Form">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right">[% IF is_customer %]Customer[% ELSE %]Vendor[% END %]</th>
+     <td colspan="3">
+      [%- UNLESS SHOW_VC_DROP_DOWN %]
+      <input type="text" name="[% HTML.escape(vc) %]" class="fixed_width">
+      [%- ELSE %]
+      <select name="[% vc %]" class="fixed_width">
+       <option></option>
+       [%- FOREACH row = ALL_VC %]
+       <option>[% HTML.escape(row.name) %]--[% HTML.escape(row.id) %]</option>
+       [%- END %]
+      </select>
+      <input type="hidden" name="select[% vc %]" value="1">
+      [%- END %]
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right">Delivery Order Number</th>
+     <td colspan="3"><input name="donumber" class="fixed_width"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Order Number</th>
+     <td colspan="3"><input name="ordnumber" class="fixed_width"></td>
+    </tr>
+
+    [%- IF ALL_DEPARTMENTS.size %]
+    <tr>
+     <th align="right" nowrap>Department</th>
+     <td colspan="3">
+      <select name="department" class="fixed_width">
+       <option></option>
+       [%- FOREACH row = ALL_DEPARTMENTS %]
+       <option[% IF department == row.value %] selected[% END %]>[% HTML.escape(row.description) %]--[% HTML.escape(row.id) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+    [%- END %]
+
+    <tr>
+     <th align="right">Employee</th>
+     <td>
+      <select name="employee_id" class="fixed_width">
+       <option></option>
+       [%- FOREACH row = ALL_EMPLOYEES %]
+       <option value="[% HTML.escape(row.id) %]">[% IF row.name %][% HTML.escape(row.name) %][% ELSE %][% HTML.escape(row.login) %][% END %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    [%- IF is_customer %]
+    <tr>
+     <th align="right">Salesman</th>
+     <td>
+      <select name="salesman_id" class="fixed_width">
+       <option></option>
+       [%- FOREACH row = ALL_SALESMEN %]
+       <option value="[% HTML.escape(row.id) %]">[% IF row.name %][% HTML.escape(row.name) %][% ELSE %][% HTML.escape(row.login) %][% END %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+    [%- END %]
+
+    <tr>
+     <th align="right">Transaction description</th>
+     <td colspan="3"><input name="transaction_description" class="fixed_width"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Customer Order Number</th>
+     <td colspan="3"><input name="cusordnumber" class="fixed_width"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Project Number</th>
+     <td colspan="3">
+      <select name="project_id" class="fixed_width">
+       <option></option>
+       [%- FOREACH row = ALL_PROJECTS %]
+       <option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.projectnumber) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right">From</th>
+     <td>
+      <input name="transdatefrom" id="transdatefrom" size="11" title="[% myconfig_dateformat %]" onBlur="check_right_date_format(this)">
+      <input type="button" name="transdatefrom_button" id="transdatefrom_trigger" value="?">
+     </td>
+     <th align="right">Bis</th>
+     <td>
+      <input name="transdateto" id="transdateto" size="11" title="[% myconfig_dateformat %]" onBlur="check_right_date_format(this)">
+      <input type="button" name="transdateto_button" id="transdateto_trigger" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right">Include in Report</th>
+     <td colspan="5">
+      <table>
+       <tr>
+        <td>
+         <input type="checkbox" name="open" value="1" id="open" checked>
+         <label for="open">Open</label>
+        </td>
+        <td>
+         <input type="checkbox" name="closed" value="1" id="closed">
+         <label for="closed">Closed</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="notdelivered" id="notdelivered" class="checkbox" type="checkbox" value="1" checked>
+         <label for="notdelivered">Not delivered</label>
+        </td>
+        <td>
+         <input name="delivered" id="delivered" class="checkbox" type="checkbox" value="1" checked>
+         <label for="delivered">Delivered</label></td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="l_id" id="l_id" class="checkbox" type="checkbox" value="Y">
+         <label for="l_id">ID</label>
+        </td>
+
+        <td>
+         <input name="l_donumber" id="l_donumber" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_donumber">Delivery Order Number</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="l_ordnumber" id="l_ordnumber" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_ordnumber">Order Number</label>
+        </td>
+
+        <td>
+         <input name="l_cusordnumber" id="l_cusordnumber" class="checkbox" type="checkbox" value="Y">
+         <label for="l_cusordnumber">Customer Order Number</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="l_transdate" id="l_transdate" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_transdate">Date</label>
+        </td>
+
+        <td>
+         <input name="l_name" id="l_name" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_name">[% IF is_customer %]Customer[% ELSE %]Vendor[% END %]</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="l_employee" id="l_employee" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_employee">Employee</label>
+        </td>
+
+        <td>
+         <input name="l_salesman" id="l_salesman" class="checkbox" type="checkbox" value="Y">
+         <label for="l_salesman">Salesman</label>
+        </td>
+
+        <td>
+         <input name="l_shipvia" id="l_shipvia" class="checkbox" type="checkbox" value="Y">
+         <label for="l_shipvia">Ship via</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input name="l_globalprojectnumber" id="l_globalprojectnumber" class="checkbox" type="checkbox" value="Y">
+         <label for="l_globalprojectnumber">Project Number</label>
+        </td>
+
+        <td>
+         <input name="l_transaction_description" id="l_transaction_description" class="checkbox" type="checkbox" value="Y">
+         <label for="l_transaction_description">Transaction description</label>
+        </td>
+       </tr>
+
+      </table>
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <p>
+   <input type="hidden" name="nextsub" value="orders">
+   <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+   <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+
+   <input class="submit" type="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
+
diff --git a/templates/webpages/do/set_stock_in_out_en.html b/templates/webpages/do/set_stock_in_out_en.html
new file mode 100644 (file)
index 0000000..36bbf7f
--- /dev/null
@@ -0,0 +1,24 @@
+[% USE HTML %]<body onload="on_load();">
+
+ <script type="text/javascript">
+  <!--
+      function on_load() {
+        var row    = document.getElementsByName("row")[0].value;
+        var stock  = document.getElementsByName("stock")[0].value;
+        var in_out = document.getElementsByName("in_out")[0].value;
+
+        window.opener.document.getElementsByName("stock_" + in_out + "_" + row)[0].value = stock;
+
+        window.close();
+      }
+    -->
+ </script>
+
+ <form name="data">
+  <input type="hidden" name="row" value="[% HTML.escape(row) %]">
+  <input type="hidden" name="stock" value="[% HTML.escape(stock) %]">
+  <input type="hidden" name="in_out" value="[% HTML.escape(in_out) %]">
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/do/stock_in_form_en.html b/templates/webpages/do/stock_in_form_en.html
new file mode 100644 (file)
index 0000000..d155921
--- /dev/null
@@ -0,0 +1,154 @@
+[% USE HTML %][% USE LxERP %][% USE JavaScript %]<body[% UNLESS delivered %] onload="on_load();"[% END %]>
+
+ [%- UNLESS delivered %]
+ <script type="text/javascript">
+  <!--
+      warehouses = new Array();
+      [% USE WAREHOUSES_it = Iterator(WAREHOUSES) %][% FOREACH wh = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array();
+      [% USE BINS_it = Iterator(wh.BINS) %][% FOREACH bin = BINS_it %]warehouses[[% WAREHOUSES_it.count - 1 %]][[% BINS_it.count - 1 %]] = ["[% JavaScript.escape(bin.description) %]", "[% JavaScript.escape(bin.id) %]"];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(row, index, initial_bin_index) {
+        var cname = "bin_id_" + row;
+        var control = document.getElementById(cname);
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        for (i = 0; i < warehouses[index].length; i++) {
+          control.options[i] = new Option(warehouses[index][i][0], warehouses[index][i][1]);
+        }
+
+        if (!initial_bin_index)
+          initial_bin_index = 0;
+        control.options[initial_bin_index].selected = true;
+      }
+
+      function on_load() {
+        [%- USE STOCK_INFO_it = Iterator(STOCK_INFO) %][%- FOREACH si = STOCK_INFO_it %]
+          // new si for wh [% si.warehouse_id %] bin [% si.bin_id %]
+          [%- SET warehouse_selected = '0' %]
+          [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH wh = WAREHOUSES_it %]
+            // wh [% wh.id %]
+            [%- USE BINS_it = Iterator(wh.BINS) %][%- FOREACH bin = BINS_it %]
+              // bin [% bin.id %]
+              [%- IF bin.id == si.bin_id %]
+                warehouse_selected([% STOCK_INFO_it.count %], [% WAREHOUSES_it.count - 1 %], [% BINS_it.count - 1%]);
+                [%- SET warehouse_selected = '1' %]
+              [%- END %]
+            [%- END %]
+          [%- END %]
+          [%- UNLESS warehouse_selected %]
+          warehouse_selected([% STOCK_INFO_it.count %], 0);
+          [%- END %]
+        [%- END %]
+      }
+    -->
+ </script>
+ [%- END %]
+
+ <form method="post" action="do.pl" name="Form">
+
+  <div class="listtop">[% title %]</div>
+
+  [%- IF ERRORS && ERRORS.size %]
+  <p><font color="#ff0000">[% ERRORS.join('<br>') %]</font></p>
+  [%- END %]
+
+  <p>
+   <table>
+    <tr>
+     <td>Part Number</td>
+     <td>[% HTML.escape(PART_INFO.partnumber) %]</td>
+    </tr>
+    <tr>
+     <td>Description</td>
+     <td>[% HTML.escape(PART_INFO.description) %]</td>
+    </tr>
+    <tr>
+     <td>Qty according to delivery order</td>
+     <td>[% HTML.escape(do_qty) %] [% HTML.escape(do_unit) %]</td>
+    </tr>
+   </table>
+  </p>
+
+  <input type="hidden" name="nextsub"        value="set_stock_in">
+  <input type="hidden" name="update_nextsub" value="update_stock_in">
+  <input type="hidden" name="rowcount"       value="[% HTML.escape(STOCK_INFO.size) %]">
+  <input type="hidden" name="in_out"         value="in">
+  <input type="hidden" name="parts_id"       value="[% HTML.escape(parts_id) %]">
+  <input type="hidden" name="partunit"       value="[% HTML.escape(PART_INFO.unit) %]">
+  <input type="hidden" name="do_qty"         value="[% HTML.escape(do_qty) %]">
+  <input type="hidden" name="do_unit"        value="[% HTML.escape(do_unit) %]">
+  <input type="hidden" name="row"            value="[% HTML.escape(row) %]">
+
+  <p>
+   <table>
+    <tr class="listheading">
+     <th class="listheading">&nbsp;</th>
+     <th class="listheading">Warehouse</th>
+     <th class="listheading">Bin</th>
+     <th class="listheading">Charge Number</th>
+     <th align="right" class="listheading">Qty</th>
+     <th align="right" class="listheading">Unit</th>
+    </tr>
+
+    [%- FOREACH row = STOCK_INFO %]
+    <tr [% IF row.stock_error %] class="tr_error"[% ELSE %]class="listrow[% loop.count % 2 %]"[% END %]>
+     <td>[% loop.count %]</td>
+
+     [%- IF delivered %]
+
+     <td>[% HTML.escape(row.warehouse_description) %]</td>
+     <td>[% HTML.escape(row.bin_description) %]</td>
+     <td>[% HTML.escape(row.chargenumber) %]</td>
+     <td>[% HTML.escape(LxERP.format_amount(row.qty)) %]</td>
+     <td>[% HTML.escape(row.unit) %]</td>
+
+     [%- ELSE %]
+
+     <td>
+      <select name="warehouse_id_[% loop.count %]" onchange="warehouse_selected([% loop.count %], this.selectedIndex)">
+       [%- FOREACH wh = WAREHOUSES %]
+       <option value="[% HTML.escape(wh.id) %]"[% IF wh.id == row.warehouse_id %] selected[% END %]>[% HTML.escape(wh.description) %]</option>
+       [%- END %]
+      </select>
+     </td>
+
+     <td><select name="bin_id_[% loop.count %]" id="bin_id_[% loop.count %]"></select></td>
+     <td><input name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]"></td>
+     <td><input name="qty_[% loop.count %]" size="12" value="[% HTML.escape(LxERP.format_amount(row.qty)) %]"></td>
+
+     <td>
+      <select name="unit_[% loop.count %]">
+       [%- FOREACH unit = UNITS %]
+       <option[% IF unit.name == row.unit %] selected[% END %]>[% HTML.escape(unit.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+
+     [%- END %]
+    </tr>
+
+    [%- END %]
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <p>
+   [%- IF delivered %]
+   <button type="button" class="submit" name="action" onclick="window.close()">Close Window</button>
+   [%- ELSE %]
+   <input class="submit" type="submit" name="action" value="Update">
+   <input class="submit" type="submit" name="action" value="Continue">
+   [%- END %]
+  </p>
+ </form>
+
+</body>
+</html>
+
diff --git a/templates/webpages/do/stock_out_form_en.html b/templates/webpages/do/stock_out_form_en.html
new file mode 100644 (file)
index 0000000..09ee4b7
--- /dev/null
@@ -0,0 +1,125 @@
+[% USE HTML %][% USE LxERP %]<body>
+
+ [%- IF delivered %]
+ [%- SET RO = ' readonly' %]
+ [%- END %]
+
+ <style type="text/css">
+  .tr_error {
+    background-color: #ffc9c9;
+  }
+ </style>
+
+ <form method="post" action="do.pl" name="Form">
+
+  <div class="listtop">[% title %]</div>
+
+  [%- IF ERRORS && ERRORS.size %]
+  <p><font color="#ff0000">[% ERRORS.join('<br>') %]</font></p>
+  [%- END %]
+
+  <p>
+   <table>
+    <tr>
+     <td>Part Number</td>
+     <td>[% HTML.escape(PART_INFO.partnumber) %]</td>
+    </tr>
+    <tr>
+     <td>Description</td>
+     <td>[% HTML.escape(PART_INFO.description) %]</td>
+    </tr>
+    <tr>
+     <td>Qty according to delivery order</td>
+     <td>[% HTML.escape(do_qty) %] [% HTML.escape(do_unit) %]</td>
+    </tr>
+   </table>
+  </p>
+
+  [%- UNLESS WHCONTENTS.size %]
+  <p>There are no items in stock.</p>
+
+  <p><button type="button" onclick="window.close()">Close Window</button></p>
+
+  [%- ELSE %]
+
+  <input type="hidden" name="nextsub"   value="set_stock_out">
+  <input type="hidden" name="rowcount"  value="[% HTML.escape(WHCONTENTS.size) %]">
+  <input type="hidden" name="in_out"    value="out">
+  <input type="hidden" name="parts_id"  value="[% HTML.escape(parts_id) %]">
+  <input type="hidden" name="partunit"  value="[% HTML.escape(PART_INFO.unit) %]">
+  <input type="hidden" name="do_qty"    value="[% HTML.escape(do_qty) %]">
+  <input type="hidden" name="do_unit"   value="[% HTML.escape(do_unit) %]">
+  <input type="hidden" name="row"       value="[% HTML.escape(row) %]">
+  <input type="hidden" name="closed"    value="[% HTML.escape(closed) %]">
+  <input type="hidden" name="delivered" value="[% HTML.escape(delivered) %]">
+
+  <p>
+   <table>
+    <tr class="listheading">
+     <th class="listheading">&nbsp;</th>
+     <th class="listheading">Warehouse</th>
+     <th class="listheading">Bin</th>
+     <th class="listheading">Charge Number</th>
+     [%- UNLESS delivered %]
+     <th align="right" class="listheading">Available qty</th>
+     [%- END %]
+     <th align="right" class="listheading">Qty</th>
+     <th align="right" class="listheading">Unit</th>
+    </tr>
+
+    [%- FOREACH row = WHCONTENTS %]
+    <tr [% IF row.stock_error %] class="tr_error"[% ELSE %]class="listrow[% loop.count % 2 %]"[% END %]>
+     <td>[% loop.count %]</td>
+     <td>[% HTML.escape(row.warehousedescription) %]</td>
+     <td>[% HTML.escape(row.bindescription) %]</td>
+     <td>[% HTML.escape(row.chargenumber) %]</td>
+
+     [%- IF delivered %]
+
+     <td>[% HTML.escape(LxERP.format_amount(row.stock_qty)) %]</td>
+     <td>[% HTML.escape(row.stock_unit) %]</td>
+
+     [%- ELSE %]
+
+     <td>[% HTML.escape(row.available_qty) %]</td>
+     <td><input name="qty_[% loop.count %]" style="text-align: right;" size="12"
+                [%- IF row.stock_qty %]
+                value="[% HTML.escape(LxERP.format_amount(row.stock_qty)) %]"
+                [%- ELSIF ((WHCONTENTS.size == 1) && (!row.stock_qty)) %]
+                value="[% HTML.escape(do_qty) %]"
+                [%- END %]
+                ></td>
+     <td>
+      <select name="unit_[% loop.count %]">
+       [%- FOREACH unit = UNITS %]
+       <option[% IF unit.name == row.stock_unit %] selected[% END %]>[% HTML.escape(unit.name) %]</option>
+       [%- END %]
+      </select>
+     </td>
+
+     [%- END %]
+    </tr>
+
+    <input type="hidden" name="warehouse_id_[% loop.count %]" value="[% HTML.escape(row.warehouse_id) %]">
+    <input type="hidden" name="bin_id_[% loop.count %]"       value="[% HTML.escape(row.bin_id) %]">
+    <input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]">
+    [%- END %]
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <p>
+   [%- IF delivered %]
+   <button type="button" class="submit" name="action" onclick="window.close()">Close Window</button>
+   [%- ELSE %]
+   <input class="submit" type="submit" name="action" value="Continue">
+   [%- END %]
+  </p>
+
+  [%- END %]
+ </form>
+
+</body>
+</html>
+
diff --git a/templates/webpages/drafts/load_en.html b/templates/webpages/drafts/load_en.html
new file mode 100644 (file)
index 0000000..0de4477
--- /dev/null
@@ -0,0 +1,52 @@
+[% USE HTML %]<body>
+
+ <form action="[% HTML.escape(script) %]" method="post">
+
+  <input type="hidden" name="SAVED_FORM" value="[% HTML.escape(SAVED_FORM) %]">
+
+  <table width="100%">
+   <tr>
+    <th class="listtop">Load draft</th>
+   </tr>
+   <tr height="5"></tr>
+
+   <tr>
+    <td>
+     The following drafts have been saved and can be loaded.
+    </td>
+   </tr>
+
+   <tr>
+    <td>
+     <table>
+      <tr>
+       <th class="listheading">&nbsp;</th>
+       <th class="listheading">Date</th>
+       <th class="listheading">Description</th>
+       <th class="listheading">Employee</th>
+      </tr>
+
+      [% FOREACH row = DRAFTS %]
+       <tr class="listrow[% loop.count % 2 %]">
+        <td><input type="checkbox" name="checked_[% row.id %]" value="1"></td>
+        <td>[% HTML.escape(row.itime) %]</td>
+        <td><a href="[% HTML.url(script) %]?action=load_draft&id=[% HTML.url(row.id) %]">[% HTML.escape(row.description) %]</a></td>
+        <td>[% HTML.escape(row.employee_name) %]</td>
+       </tr>
+      [% END %]
+     </table>
+    </td>
+   </tr>
+
+   <tr>
+    <td>
+     <input type="hidden" name="action" value="draft_action_dispatcher">
+     <input type="submit" class="submit" name="draft_action" value="Skip">
+     <input type="submit" class="submit" name="draft_action" value="Delete drafts">
+    </td>
+   </tr>
+  </table>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/drafts/save_new_en.html b/templates/webpages/drafts/save_new_en.html
new file mode 100644 (file)
index 0000000..51d5f38
--- /dev/null
@@ -0,0 +1,33 @@
+[% USE HTML %]<body>
+
+ <form action="[% HTML.escape(script) %]" method="post">
+
+  <input type="hidden" name="SAVED_FORM" value="[% HTML.escape(SAVED_FORM) %]">
+
+  <table width="100%">
+   <tr>
+    <th class="listtop">Save draft</th>
+   </tr>
+   <tr height="5"></tr>
+
+   <tr>
+    <td>Enter a description for this new draft.</td>
+   </tr>
+
+   <tr>
+    <td>
+    Description:
+    <input name="draft_description">
+    </td>
+   </tr>
+
+   <tr>
+    <td>
+     <input type="submit" class="submit" name="action" value="Save draft">
+    </td>
+   </tr>
+  </table>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/dunning/add_en.html b/templates/webpages/dunning/add_en.html
new file mode 100644 (file)
index 0000000..0f1b7b1
--- /dev/null
@@ -0,0 +1,94 @@
+[% USE HTML %]<script type="text/javascript" src="js/common.js"></script>
+<script type="text/javascript">
+ <!--
+     function setup_controls() {
+       fokus();
+       setupDateFormat('[% myconfig_dateformat %]', 'Wrong date format!');
+       setupPoints('[% myconfig_numberformat %]', 'wrongformat');
+     }
+   -->
+</script>
+
+<body onLoad="setup_controls();">
+
+ <div class="listtop">[% title %]</div>
+
+ <form method="post" name="search" action="dn.pl">
+
+  <table>
+   <tr>
+    <th align="right">Customer</th>
+    <td colspan="3">
+     [% IF SHOW_CUSTOMER_SELECTION %]
+      <select name="customer">
+       <option></option>
+       [% FOREACH row = all_customer %]<option>[% HTML.escape(row.name) %]--[% HTML.escape(row.id) %]</option>[% END %]
+      </select>
+      [% ELSE %]
+      <input name="customer" size="35">
+     [% END %]
+    </td>
+   </tr>
+
+   [% IF SHOW_DUNNING_LEVEL_SELECTION %]
+    <tr>
+     <th align="right">Next Dunning Level</th>
+     <td colspan="3">
+      <select name="dunning_level">
+       <option></option>
+       [% FOREACH row = DUNNING %]<option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.dunning_description) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+   [% END %]
+
+   [% IF SHOW_DEPARTMENT_SELECTION %]
+    <tr>
+     <th align="right">Department</th>
+     <td colspan="3">
+      <select name="department">
+       <option></option>
+       [% FOREACH row = all_departments %]<option>[% HTML.escape(row.description) %]--[% HTML.escape(row.id) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+   [% END %]
+
+   <tr>
+    <th align="right" nowrap>Invoice Number</th>
+    <td colspan="3"><input name="invnumber" size="20"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Order Number</th>
+    <td colspan="3"><input name="ordnumber" size="20"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Notes</th>
+    <td colspan="3"><input name="notes" size="40"></td>
+   </tr>
+
+   <tr><td colspan="2"><hr size="3" noshade></td></tr>
+
+   <tr>
+    <th align="right" nowrap>Minimum Amount</th>
+    <td><input name="minamount" size="6"></td>
+   </tr>
+
+   <tr>
+    <th align="right" nowrap>Group Invoices</th>
+    <td><input type="checkbox" value="1" name="groupinvoices" checked></td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="nextsub" value="show_invoices">
+
+  <br>
+  <input class="submit" type="submit" name="action" value="Continue">
+
+ </form>
+
+</body>
+
+</html>
diff --git a/templates/webpages/dunning/edit_config_en.html b/templates/webpages/dunning/edit_config_en.html
new file mode 100644 (file)
index 0000000..18d91ca
--- /dev/null
@@ -0,0 +1,133 @@
+[% USE HTML %]<body>
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/dunning.js"></script>
+
+ <div class="listtop" width="100%">[% title %]</div>
+
+ <form method="post" action="dn.pl" name="Form">
+  <table>
+   <tr height="5"></tr>
+
+   <tr>
+    <th class="listheading">Dunning Level</th>
+    <th class="listheading">Dunning Description</th>
+    <th class="listheading">Active?</th>
+    <th class="listheading">eMail Send?</th>
+<!--     <th class="listheading">Auto Send?</th>  -->
+    <th class="listheading">Create invoice?</th>
+    <th class="listheading">Fristsetzung</th>
+    <th class="listheading">Duedate +Days</th>
+    <th class="listheading">Fee</th>
+    <th class="listheading">Interest Rate</th>
+    <th class="listheading">Template</th>
+   </tr>
+
+   [% SET odd = '1' %][% USE DUNNING_it = Iterator(DUNNING) %][% FOREACH row = DUNNING_it %]
+    <tr valign="top" class="listrow[% IF odd %]1[% SET odd = '0' %][% ELSE %]0[% SET odd = '1' %][% END %]">
+     <td>
+      <input type="hidden" name="dunning_level_[% DUNNING_it.count %]" value="[% DUNNING_it.count %]">
+      <input type="hidden" name="id_[% DUNNING_it.count %]" value="[% HTML.escape(row.id) %]">
+      [% DUNNING_it.count %]
+     </td>
+
+     <td><input name="dunning_description_[% DUNNING_it.count %]" value="[% HTML.escape(row.dunning_description) %]"></td>
+     <td><input type="checkbox" name="active_[% DUNNING_it.count %]" value="1" [% IF row.active %]checked[% END %]></td>
+
+     <td>
+      <input type="checkbox" name="email_[% DUNNING_it.count %]" value="1" [% IF row.email %]checked[% END %]>
+      <button type="button" onclick="set_email_window('email_subject_[% DUNNING_it.count %]', 'email_body_[% DUNNING_it.count %]', 'email_attachment_[% DUNNING_it.count %]')">
+       L</button>
+      <input type="hidden" name="email_body_[% DUNNING_it.count %]" value="[% HTML.escape(row.email_body) %]">
+      <input type="hidden" name="email_subject_[% DUNNING_it.count %]" value="[% HTML.escape(row.email_subject) %]">
+      <input type="hidden" name="email_attachment_[% DUNNING_it.count %]" value="[% HTML.escape(row.email_attachment) %]">
+     </td>
+
+<!--      <td><input type="checkbox" name="auto_[% DUNNING_it.count %]" value="1" [% IF row.auto %]checked[% END %]></td> -->
+     <td><input type="checkbox" name="create_invoices_for_fees_[% DUNNING_it.count %]" value="1" [% IF row.create_invoices_for_fees %]checked[% END %]></td>
+     <td><input name="payment_terms_[% DUNNING_it.count %]" size="3" value="[% HTML.escape(row.payment_terms) %]"></td>
+     <td><input name="terms_[% DUNNING_it.count %]" size="3" value="[% HTML.escape(row.terms) %]"></td>
+     <td><input name="fee_[% DUNNING_it.count %]" size="5" value="[% HTML.escape(row.fee) %]"></td>
+     <td><input name="interest_rate_[% DUNNING_it.count %]" size="4" value="[% HTML.escape(row.interest_rate) %]">%</td>
+     <td><input name="template_[% DUNNING_it.count %]" value="[% HTML.escape(row.template) %]"></td>
+    </tr>
+    [% IF DUNNING_it.last %][% SET rowcount = DUNNING_it.size + 1 %][% END %]
+   [% END %]
+
+   [%- UNLESS rowcount %][% SET rowcount = '1' %][% END -%]
+   <tr valign="top" class="listrow[% IF odd %]1[% ELSE %]0[% END %]">
+    <td>
+     <input type="hidden" name="dunning_level_[% rowcount %]" value="[% rowcount %]">
+     <input type="hidden" name="id_[% rowcount %]">
+     [% rowcount %]
+    </td>
+
+    <td><input name="dunning_description_[% rowcount %]"></td>
+    <td><input type="checkbox" name="active_[% rowcount %]" value="1" checked></td>
+
+    <td>
+     <input type="checkbox" name="email_[% rowcount %]" value="1" checked>
+     <button type="button" onclick="set_email_window('email_subject_[% rowcount %]', 'email_body_[% rowcount %]', 'email_attachment_[% rowcount %]')">
+      L</button>
+     <input type="hidden" name="email_body_[% rowcount %]">
+     <input type="hidden" name="email_subject_[% rowcount %]">
+     <input type="hidden" name="email_attachment_[% rowcount %]">
+    </td>
+
+<!--     <td><input type="checkbox" name="auto_[% rowcount %]" value="1" checked></td> -->
+    <td><input type="checkbox" name="create_invoices_for_fees_[% rowcount %]" value="1" checked></td>
+    <td><input name="payment_terms_[% rowcount %]" size="3"></td>
+    <td><input name="terms_[% rowcount %]" size="3"></td>
+    <td><input name="fee_[% rowcount %]" size="5"></td>
+    <td><input name="interest_rate_[% rowcount %]" size="4">%</td>
+    <td><input name="template_[% rowcount %]"></td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+
+  <hr size="3" noshade>
+
+  <p>If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.</p>
+
+  <table>
+   <tr>
+    <th align="right">Account for fees</th>
+    <td>
+     <select name="AR_amount_fee">
+      [% FOREACH row = SELECT_AR_AMOUNT %]<option value="[% HTML.escape(row.id) %]" [% IF row.AR_amount_fee_selected %]selected[% END %]>[% HTML.escape(row.accno) %]--[% HTML.escape(row.description) %]</option>
+      [% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <th align="right">Account for interest</th>
+    <td>
+     <select name="AR_amount_interest">
+      [% FOREACH row = SELECT_AR_AMOUNT %]<option value="[% HTML.escape(row.id) %]" [% IF row.AR_amount_interest_selected %]selected[% END %]>[% HTML.escape(row.accno) %]--[% HTML.escape(row.description) %]</option>
+      [% END %]
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <th align="right">Record in</th>
+    <td>
+     <select name="AR">
+      [% FOREACH row = SELECT_AR %]<option value="[% HTML.escape(row.id) %]" [% IF row.AR_selected %]selected[% END %]>[% HTML.escape(row.accno) %]--[% HTML.escape(row.description) %]</option>
+      [% END %]
+     </select>
+    </td>
+   </tr>
+  </table>
+
+  <hr size="3" noshade>
+
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <input class="submit" type="submit" name="action" value="Save">
+
+ </form>
+</body>
+
+</html>
diff --git a/templates/webpages/dunning/search_en.html b/templates/webpages/dunning/search_en.html
new file mode 100644 (file)
index 0000000..dc50f16
--- /dev/null
@@ -0,0 +1,133 @@
+[% USE HTML %]<body onLoad="[% onload %]">
+
+ <script type="text/javascript" src="js/common.js"></script>
+
+ <form method="post" name="search" action="dn.pl">
+
+  <div class="listtop">[% title %]</div>
+
+  <table width="100%">
+   <tr height="5"></tr>
+   <tr>
+    <td>
+     <table>
+      <tr>
+       <th align="right">Customer</th>
+       <td colspan="3">
+        [% IF SHOW_CUSTOMER_DDBOX %]
+         <select name="customer_id">
+          <option value=""></option>
+          [% FOREACH row = ALL_CUSTOMERS %]<option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.name) %]</option>
+          [% END %]
+         </select>
+         [% ELSE %]
+         <input name="customer" size="35">
+        [% END %]
+       </td>
+      </tr>
+
+      [% IF SHOW_DUNNING_LEVELS %]
+       <tr>
+        <th align="right" nowrap>Next Dunning Level</th>
+        <td colspan="3">
+         <select name="dunning_level">
+          <option value=""></option>
+          [% FOREACH row = DUNNING %]<option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.dunning_description) %]</option>
+          [% END %]
+         </select>
+        </td>
+       </tr>
+      [% END %]
+
+      [% IF SHOW_DEPARTMENT_DDBOX %]
+       <tr>
+        <th align="right" nowrap>Department</th>
+        <td colspan="3">
+         <select name="department_id">
+          <option value=""></option>
+          [% FOREACH row = ALL_DEPARTMENTS %]<option value="[% HTML.escape(row.id) %]">[% HTML.escape(row.description) %]</option>
+          [% END %]
+         </select>
+        </td>
+       </tr>
+      [% END %]
+
+      <tr>
+       <th align="right" nowrap>Invoice Number</th>
+       <td colspan="3"><input name="invnumber" size="20"></td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Order Number</th>
+       <td colspan="3"><input name="ordnumber" size="20"></td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Notes</th>
+       <td colspan="3"><input name="notes" size="40"></td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Invdate from</th>
+       <td>
+        <input name="transdatefrom" id="transdatefrom" size="11" title="[% HTML.escape(myconfig_dateformat) %]" onBlur="check_right_date_format(this)">
+        <input type="button" name="transdatefrom" id="trigger1" value="?">
+       </td>
+       <th align="right" nowrap>To (time)</th>
+       <td>
+        <input name="transdateto" id="transdateto" size="11" title="[% HTML.escape(myconfig_dateformat) %]" onBlur="check_right_date_format(this)">
+        <input type="button" name="transdateto" id="trigger2" value="?">
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Dunning Date from</th>
+       <td>
+        <input name="dunningfrom" id="dunningfrom" size="11" title="[% HTML.escape(myconfig_dateformat) %]" onBlur="check_right_date_format(this)">
+        <input type="button" name="dunningfrom" id="trigger3" value="?">
+       </td>
+       <th align="right" nowrap>To (time)</th>
+       <td>
+        <input name="dunningto" id="dunningto" size="11" title="[% HTML.escape(myconfig_dateformat) %]" onBlur="check_right_date_format(this)">
+        <input type="button" name="dunningto" id="trigger4" value="?">
+       </td>
+      </tr>
+
+     </table>
+    </td>
+   </tr>
+
+   <tr><td><hr size="3" noshade></td></tr>
+
+   <tr>
+    <td>
+     <table>
+      <tr>
+       <th align="right" nowrap>Show old dunnings</th>
+       <td><input type="checkbox" value="1" name="showold"></td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+  </table>
+
+  <input type="hidden" name="nextsub" value="show_dunning">
+
+  <br>
+
+  <input class="submit" type="submit" name="action" value="Continue">
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      Calendar.setup({ inputField : "transdatefrom", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "trigger1" });
+      Calendar.setup({ inputField : "transdateto", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "trigger2" });
+      Calendar.setup({ inputField : "dunningfrom", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "trigger3" });
+      Calendar.setup({ inputField : "dunningto", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "trigger4" });
+    -->
+ </script>
+
+</body>
+
+</html>
diff --git a/templates/webpages/dunning/set_email_en.html b/templates/webpages/dunning/set_email_en.html
new file mode 100644 (file)
index 0000000..eb16d2d
--- /dev/null
@@ -0,0 +1,42 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <script type="text/javascript">
+  <!--
+      function email_updated() {
+        window.opener.document.getElementsByName(document.Form.input_subject.value)[0].value = document.getElementsByName("email_subject")[0].value;
+        window.opener.document.getElementsByName(document.Form.input_body.value)[0].value = document.getElementsByName("email_body")[0].value;
+        window.opener.document.getElementsByName(document.Form.input_attachment.value)[0].value = document.getElementsByName("email_attachment")[0].value;        self.close();
+      }
+    -->
+ </script>
+
+ <form name="Form">
+
+  <input type="hidden" name="input_subject" value="[% HTML.escape(input_subject) %]">
+  <input type="hidden" name="input_body" value="[% HTML.escape(input_body) %]">
+  <input type="hidden" name="input_attachment" value="[% HTML.escape(input_attachment) %]">
+
+  <div class="listtop" width="100%">[% title %]</div>
+
+  <table width="100%">
+   <tr>
+    <td valign="top">Subject:</td>
+    <td valign="top"><input id="email_subject" name="email_subject" size="40" value="[% HTML.escape(email_subject) %]"></td>
+   </tr>
+
+   <tr>
+    <td valign="top">Body:</td>
+    <td valign="top"><textarea id="email_body" name="email_body" rows="20" cols="70" wrap="soft">[% HTML.escape(email_body) %]</textarea></td>
+   </tr>
+
+   <tr>
+    <td valign="top">Attach PDF:</td>
+    <td valign="top"><input id="email_attachment" type="checkbox" name="email_attachment" value="1" [% IF email_attachment %]checked[% END %]></td>
+   </tr>
+  </table>
+
+  <button type="button" onclick="email_updated()">Save and close</button>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/dunning/show_dunning_bottom_en.html b/templates/webpages/dunning/show_dunning_bottom_en.html
new file mode 100644 (file)
index 0000000..82764b5
--- /dev/null
@@ -0,0 +1,11 @@
+[% USE HTML %]  <input type="hidden" name="rowcount" value="[% rowcount %]">
+
+  <p>[% PRINT_OPTIONS %]</p>
+
+  <p>
+   Dunnings<br>
+   <input type="hidden" name="print_nextsub" value="print_multiple">
+   <input type="submit" class="submit" name="action" value="Print">
+  </p>
+
+ </form>
diff --git a/templates/webpages/dunning/show_dunning_top_en.html b/templates/webpages/dunning/show_dunning_top_en.html
new file mode 100644 (file)
index 0000000..f835f95
--- /dev/null
@@ -0,0 +1,5 @@
+[% USE HTML %] <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/dunning.js"></script>
+
+ <form method="post" action="dn.pl">
+
diff --git a/templates/webpages/dunning/show_invoices_en.html b/templates/webpages/dunning/show_invoices_en.html
new file mode 100644 (file)
index 0000000..078ca31
--- /dev/null
@@ -0,0 +1,84 @@
+[% USE HTML %]<body>
+ <script type="text/javascript" src="js/checkbox_utils.js"></script>
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/dunning.js"></script>
+
+ <div class="listtop" width="100%">[% title %]</div>
+
+ <p>The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.</p>
+
+ <form name="Form" method="post" action="dn.pl">
+
+  <table width="100%">
+   <th class="listheading" colspan="2">Current / Next Level</th>
+
+   <th class="listheading">
+    <input type="checkbox" name="selectall_active" id="selectall_active" onclick="checkbox_check_all('selectall_active', 'active_', 1, [% rowcount %]);">
+    <label for="selectall_active">Active?</label>
+   </th>
+
+   <th class="listheading">
+    <input type="checkbox" name="selectall_email" id="selectall_email" onclick="checkbox_check_all('selectall_email', 'email_', 1, [% rowcount %]);">
+    <label for="selectall_email">eMail?</label>
+   </th>
+
+   <th class="listheading">Customername</th>
+   <th class="listheading">Invno.</th>
+   <th class="listheading">Invdate</th>
+   <th class="listheading">Inv. Duedate</th>
+   <th class="listheading">Amount</th>
+   <th class="listheading">Dunning Duedate</th>
+   <th class="listheading">Total Fees</th>
+   <th class="listheading">Interest</th>
+
+   <!-- Ausgabe der einzelnen Zeilen -->
+
+   [% FOREACH row = DUNNINGS %]
+    <tr class="listrow[% loop.count % 2 %]">
+
+     <td>
+      <input type="hidden" name="inv_id_[% loop.count %]" size="2" value="[% HTML.escape(row.id) %]">
+      <input type="hidden" name="customer_id_[% loop.count %]" size="2" value="[% HTML.escape(row.customer_id) %]">
+      [% IF row.dunning_level %][% HTML.escape(row.dunning_level) %][% ELSE %]&nbsp;[% END %]
+     </td>
+
+     <td>
+      <select name="next_dunning_config_id_[% loop.count %]">
+       [% FOREACH cfg_row = row.DUNNING_CONFIG %]<option value="[% HTML.escape(cfg_row.id) %]" [% IF cfg_row.SELECTED %]selected[% END %]>[% HTML.escape(cfg_row.dunning_description) %]</option>[% END %]
+      </select>
+     </td>
+
+     <td><input type="checkbox" name="active_[% loop.count %]" value="1" [% IF row.active %]checked[% END %]></td>
+     <td><input type="checkbox" name="email_[% loop.count %]" value="1" [% IF row.email %]checked[% END %]></td>
+     <td><input type="hidden" name="customername_[% loop.count %]" size="6" value="[% HTML.escape(row.customername) %]">[% HTML.escape(row.customername) %]</td>
+     <td><input type="hidden" name="invnumber_[% loop.count %]" size="6" value="[% HTML.escape(row.invnumber) %]">[% HTML.escape(row.invnumber) %]</td>
+     <td><input type="hidden" name="invdate_[% loop.count %]" size="6" value="[% HTML.escape(row.transdate) %]">[% HTML.escape(row.transdate) %]</td>
+     <td><input type="hidden" name="inv_duedate_[% loop.count %]" size="6" value="[% HTML.escape(row.duedate) %]">[% HTML.escape(row.duedate) %]</td>
+     <td align="right"><input type="hidden" name="amount_[% loop.count %]" size="6" value="[% HTML.escape(row.amount) %]">[% HTML.escape(row.amount) %]</td>
+     <td>[% HTML.escape(row.next_duedate) %]</td>
+     <td align="right"><input type="hidden" name="fee_[% loop.count %]" size="6" value="[% HTML.escape(row.fee) %]">[% HTML.escape(row.fee) %]</td>
+     <td align="right"><input type="hidden" name="interest_[% loop.count %]" size="6" value="[% HTML.escape(row.interest) %]">[% HTML.escape(row.interest) %]</td>
+    </tr>
+   [% END %]
+  </table>
+
+  <hr size=3 noshade>
+
+  [% PRINT_OPTIONS %]
+
+  <br>
+
+  <input name="rowcount" type="hidden" value="[% HTML.escape(rowcount) %]">
+  <input name="groupinvoices" type="hidden" value="[% HTML.escape(groupinvoices) %]">
+
+  <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+  <input name="nextsub" type="hidden" value="save_dunning">
+
+  <input type="hidden" name="action" value="Continue">
+
+  <input type="submit" name="dummy" value="Continue"
+         [% UNLESS DEBUG_DUNNING %]onclick="this.disabled=true; this.value='The dunning process started'; document.Form.submit()"[% END %]>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/fu/add_edit_en.html b/templates/webpages/fu/add_edit_en.html
new file mode 100644 (file)
index 0000000..edfcc28
--- /dev/null
@@ -0,0 +1,109 @@
+[% USE HTML %]<body onload="on_load();">
+
+ <script type="text/javascript">
+  <!--
+      function on_load() {
+        Calendar.setup({ inputField : "follow_up_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_trigger" });
+        document.Form.subject.focus();
+      }
+    -->
+ </script>
+
+ <form action="fu.pl" method="post" name="Form">
+
+  [%- IF SAVED_MESSAGE %]
+  <p>[% SAVED_MESSAGE %]</p>
+  [%- END %]
+
+  <div class="listtop">[% title %]</div>
+
+  <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+  <input type="hidden" name="note_id" value="[% HTML.escape(note_id) %]">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+  <input type="hidden" name="POPUP_MODE" value="[% HTML.escape(POPUP_MODE) %]">
+
+  <p>
+   <table>
+    <tr>
+     <td valign="top">Follow-Up for user</td>
+     <td valign="top">
+      <select name="created_for_user">
+       [%- FOREACH row = EMPLOYEES %]
+       <option value="[% HTML.escape(row.id) %]"[% IF created_for_user == row.id %] selected[% END %]>
+        [%- IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+       </option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td valign="right">Follow-Up Date</td>
+     <td>
+      <input name="follow_up_date" id="follow_up_date" value="[% HTML.escape(follow_up_date) %]" size="12">
+      <input type="button" name="follow_up_date_button" id="follow_up_date_trigger" value="?">
+    </tr>
+
+    <tr>
+     <td valign="right">Subject</td>
+     <td><input name="subject" value="[% HTML.escape(subject) %]" size="50"></td>
+    </tr>
+
+    <tr>
+     <td valign="right" align="top">Body</td>
+     <td align="top"><textarea cols="50" rows="10" name="body">[% HTML.escape(body) %]</textarea></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="hidden" name="action" value="dispatcher">
+   <input type="submit" class="submit" name="action_save" value="Save">
+   [%- IF id %]
+   <input type="submit" class="submit" name="action_finish" value="Finish">
+   <input type="submit" class="submit" name="action_delete" value="Delete">
+   [%- END %]
+   [%- IF POPUP_MODE %]
+   <input type="submit" class="submit" onclick="window.close()" value="Cancel">
+   [%- END %]
+  </p>
+
+  [%- IF POPUP_MODE %]
+  [%- IF FOLLOW_UPS.size %]
+  <hr height="3" noshade>
+
+  <div class="listtop">Existing pending follow-ups for this item</div>
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">Follow-Up Date</th>
+     <th class="listheading">Subject</th>
+     <th class="listheading">Created by</th>
+     <th class="listheading">Follow-up for</th>
+    </tr>
+
+    [%- FOREACH row = FOLLOW_UPS %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <td valign="top">[% HTML.escape(row.follow_up_date) %]</td>
+     <td valign="top"><a href="fu.pl?action=edit&id=[% HTML.escape(row.id) %][% IF POPUP_MODE %]&POPUP_MODE=1[% END %]">[% HTML.escape(row.subject) %]</a></td>
+     <td valign="top">[% HTML.escape(row.created_by_name) %]</td>
+     <td valign="top">[% HTML.escape(row.created_for_user_name) %]</td>
+    </tr>
+    [%- END %]
+   </table>
+  </p>
+  [%- END %]
+  [%- END %]
+
+  [%- FOREACH row = LINKS %]
+  <input type="hidden" name="trans_id_[% loop.count %]"   value="[% HTML.escape(row.trans_id) %]">
+  <input type="hidden" name="trans_type_[% loop.count %]" value="[% HTML.escape(row.trans_type) %]">
+  <input type="hidden" name="trans_info_[% loop.count %]" value="[% HTML.escape(row.trans_info) %]">
+  [%- END %]
+
+  <input type="hidden" name="trans_rowcount" value="[% LINKS.size %]">
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/fu/close_window_en.html b/templates/webpages/fu/close_window_en.html
new file mode 100644 (file)
index 0000000..d166865
--- /dev/null
@@ -0,0 +1 @@
+<body onload="window.close()"></body></html>
diff --git a/templates/webpages/fu/edit_access_rights_en.html b/templates/webpages/fu/edit_access_rights_en.html
new file mode 100644 (file)
index 0000000..34b03af
--- /dev/null
@@ -0,0 +1,47 @@
+[% USE HTML %]
+<body>
+
+ [%- IF SAVED_MESSAGE %]
+ <p>[% SAVED_MESSAGE %]</p>
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <p>Allow the following users access to my follow-ups:</p>
+
+ <form action="fu.pl" method="post" name="Form">
+  <p>
+   <table>
+    <tr>
+     <td class="listheading">User</td>
+     <td class="listheading">Allow access</td>
+    </tr>
+
+    [%- FOREACH row = EMPLOYEES %]
+    [%- UNLESS row.login == login %]
+    <input type="hidden" name="employee_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+
+    <tr class="listrow[% loop.count % 2 %]">
+     <td>[% IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]</td>
+     <td>
+      <input type="radio" id="access_[% HTML.escape(row.id) %]_yes" name="access_[% HTML.escape(row.id) %]" value="1"[% IF row.access %] checked[% END %]>
+      <label for="access_[% HTML.escape(row.id) %]_yes">Yes</label>
+      <input type="radio" id="access_[% HTML.escape(row.id) %]_no" name="access_[% HTML.escape(row.id) %]" value=""[% UNLESS row.access %] checked[% END %]>
+      <label for="access_[% HTML.escape(row.id) %]_no">No</label>
+     </td>
+    </tr>
+    [%- END %]
+    [%- END %]
+   </table>
+  </p>
+
+  <input type="hidden" name="rowcount" value="[% EMPLOYEES.size %]">
+  <input type="hidden" name="save_nextsub" value="save_access_rights">
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Save">
+  </p>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/fu/report_bottom_en.html b/templates/webpages/fu/report_bottom_en.html
new file mode 100644 (file)
index 0000000..085e6fa
--- /dev/null
@@ -0,0 +1,13 @@
+[% USE HTML%]
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+ [%- FOREACH item = HIDDEN %]
+ <input type="hidden" name="[% HTML.escape(item.key) %]" value="[% HTML.escape(item.value) %]">
+ [%- END %]
+
+ <p>
+  Follow-Ups<br>
+  <input type="hidden" name="action" value="dispatcher">
+  <input type="submit" name="action_finish" value="Finish">
+  <input type="submit" name="action_delete" value="Delete">
+ </p>
+</form>
diff --git a/templates/webpages/fu/report_for_todo_list_en.html b/templates/webpages/fu/report_for_todo_list_en.html
new file mode 100644 (file)
index 0000000..e59118a
--- /dev/null
@@ -0,0 +1,41 @@
+[% USE HTML %]
+
+<div class="listtop">Unfinished follow-ups</div>
+
+<form action="fu.pl" method="post" name="TODOFollowUpsForm">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% FOLLOW_UPS.size %]">
+
+ <p>
+  <table width="100%">
+   <tr>
+    <td class="listheading">&nbsp;</td>
+    <td class="listheading">Follow-Up Date</td>
+    <td class="listheading">Created on</td>
+    <td class="listheading">Subject</td>
+    <td class="listheading">Reference</td>
+    <td class="listheading">Created by</td>
+   </tr>
+
+   [%- FOREACH row = FOLLOW_UPS %]
+   <tr class="listrow[% loop.count % 2 %]">
+    <td>
+     <input type="hidden" name="follow_up_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+     <input type="checkbox" name="selected_[% loop.count %]" value="1">
+    </td>
+    <td>[% HTML.escape(row.follow_up_date) %]</td>
+    <td>[% HTML.escape(row.created_on) %]</td>
+    <td><a href="[% edit_url %][% HTML.escape(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+    <td>[% IF row.reference_link %]<a href="[% row.reference_link %]">[% END %][% HTML.escape(row.reference) %][% IF row.reference_link %]</a>[% END %]</td>
+    <td>[% HTML.escape(row.created_by_name) %]</td>
+   </tr>
+   [%- END %]
+  </table>
+ </p>
+
+ <p>
+  <input type="hidden" name="action" value="dispatcher">
+  <input type="submit" class="submit" name="action_finish" value="Finish">
+  <input type="submit" class="submit" name="action_delete" value="Delete">
+ </p>
+</form>
diff --git a/templates/webpages/fu/report_top_en.html b/templates/webpages/fu/report_top_en.html
new file mode 100644 (file)
index 0000000..f6847d9
--- /dev/null
@@ -0,0 +1,10 @@
+[%- IF OPTIONS.size %]
+<p>
+ [%- FOREACH option = OPTIONS %]
+ [%- option %][% UNLESS loop.last %]<br>[% END %]
+ [%- END %]
+</p>
+[%- END %]
+
+<form action="fu.pl" method="post" name="Form">
+
diff --git a/templates/webpages/fu/search_en.html b/templates/webpages/fu/search_en.html
new file mode 100644 (file)
index 0000000..ed9f22d
--- /dev/null
@@ -0,0 +1,122 @@
+[% USE HTML %]
+<body onload="on_load()">
+
+ <script type="text/javascript">
+  <!--
+      function on_load() {
+        Calendar.setup({ inputField : "follow_up_date_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_from_trigger" });
+        Calendar.setup({ inputField : "follow_up_date_to",   ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_to_trigger" });
+        Calendar.setup({ inputField : "itime_from",          ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_from_trigger" });
+        Calendar.setup({ inputField : "itime_to",            ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_to_trigger" });
+        document.Form.subject.focus();
+      }
+    -->
+ </script>
+
+ <div class="listtop">[% title %]</div>
+
+ <form action="fu.pl" method="post" name="Form">
+  <input type="hidden" name="nextsub" value="report">
+
+  <p>
+   <table>
+    <tr>
+     <td align="right">Created for</td>
+     <td>
+      <select name="created_for">
+       <option></option>
+       [%- FOREACH row = EMPLOYEES %]
+       <option value="[% HTML.escape(row.id) %]">
+        [%- IF row.name %]
+        [%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])
+        [%- ELSE %]
+        [%- HTML.escape(row.login) %]
+        [%- END %]
+       </option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Subject</td>
+     <td><input name="subject" size="20"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Body</td>
+     <td><input name="body" size="20"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Reference</td>
+     <td><input name="reference" size="20"></td>
+    </tr>
+
+    <tr>
+     <td align="right">Follow-Up Date</td>
+     <td>
+      From
+      <input name="follow_up_date_from" id="follow_up_date_from" size="12">
+      <input type="button" name="follow_up_date_from_button" id="follow_up_date_from_trigger" value="?">
+      To (time)
+      <input name="follow_up_date_to" id="follow_up_date_to" size="12">
+      <input type="button" name="follow_up_date_to_button" id="follow_up_date_to_trigger" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Created on</td>
+     <td>
+      From
+      <input name="itime_from" id="itime_from" size="12">
+      <input type="button" name="itime_from_button" id="itime_from_trigger" value="?">
+      To (time)
+      <input name="itime_to" id="itime_to" size="12">
+      <input type="button" name="itime_to_button" id="itime_to_trigger" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Include in Report</td>
+     <td>
+
+      <table>
+       <tr>
+        <td>
+         <input type="checkbox" name="due_only" id="due_only" value="1" checked>
+         <label for="due_only">Only due follow-ups</label>
+        </td>
+
+        <td>
+         <input type="checkbox" name="all_users" id="all_users" value="1" checked>
+         <label for="all_users">Other users' follow-ups</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input type="checkbox" name="not_done" id="not_done" value="1" checked>
+         <label for="not_done">Not done yet</label>
+        </td>
+
+        <td>
+         <input type="checkbox" name="done" id="done" value="1">
+         <label for="done">Done</label>
+        </td>
+       </tr>
+      </table>
+
+     </td>
+    </tr>
+
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/calculate_qty_en.html b/templates/webpages/generic/calculate_qty_en.html
new file mode 100644 (file)
index 0000000..59f49dc
--- /dev/null
@@ -0,0 +1,83 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <form name="Form">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+  <input type="hidden" name="input_id" value="[% HTML.escape(input_id) %]">
+
+  <table width="100%">
+   <tr>
+    <th class="listtop">[% title %]</th>
+   </tr>
+   <tr height="5"></tr>
+
+   <tr><td>Please insert object dimensions below.</td></tr>
+
+   <tr>
+    <td>
+
+     <table>
+      <tr class="listheading">
+       [% FOREACH col = HEADER %]
+        <th nowrap class="listheading">[% col.column_title %]</a></th>
+       [% END %]
+      </tr>
+
+      [% FOREACH row = VARIABLES %]
+       <tr class="listrow[% loop.count % 2 %]">
+        <td>[% HTML.escape(row.description) %]:</td><td><input id="[% row.name %]" name="[% row.name %]" value=""></td>
+        <td>[% HTML.escape(row.unit) %]</td>
+       </tr>
+      [% END %]
+     </table>
+
+    </td>
+   </tr>
+  </table>
+ <button type="button" onclick="calculate_qty()">Calculate</button>
+ </form>
+
+ <script type="text/javascript">
+  <!--//
+      function calculate_qty() {
+        [% FOREACH row = VARIABLES %]
+        var [% row.name %] = document.getElementsByName("[% row.name %]")[0].value.replace(/,/g, ".");
+       [% END %]
+        var result = [% formel %];
+        result = number_format(result, 2, ",", ".");
+        window.opener.document.getElementsByName(document.Form.input_name.value)[0].value = result;
+        self.close();
+      }
+      //-->
+
+function /*out: String*/ number_format( /* in: float   */ number, 
+                                        /* in: integer */ laenge, 
+                                        /* in: String  */ sep, 
+                                        /* in: String  */ th_sep ) {
+
+  number = Math.round( number * Math.pow(10, laenge) ) / Math.pow(10, laenge);
+  str_number = number+"";
+  arr_int = str_number.split(".");
+  if(!arr_int[0]) arr_int[0] = "0";
+  if(!arr_int[1]) arr_int[1] = "";
+  if(arr_int[1].length < laenge){
+    nachkomma = arr_int[1];
+    for(i=arr_int[1].length+1; i <= laenge; i++){  nachkomma += "0";  }
+    arr_int[1] = nachkomma;
+  }
+  if(th_sep != "" && arr_int[0].length > 3){
+    Begriff = arr_int[0];
+    arr_int[0] = "";
+    for(j = 3; j < Begriff.length ; j+=3){
+      Extrakt = Begriff.slice(Begriff.length - j, Begriff.length - j + 3);
+      arr_int[0] = th_sep + Extrakt +  arr_int[0] + "";
+    }
+    str_first = Begriff.substr(0, (Begriff.length % 3 == 0)?3:(Begriff.length % 3));
+    arr_int[0] = str_first + arr_int[0];
+  }
+  return arr_int[0]+sep+arr_int[1];
+}
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/cov_selection_en.html b/templates/webpages/generic/cov_selection_en.html
new file mode 100644 (file)
index 0000000..ee33b92
--- /dev/null
@@ -0,0 +1,103 @@
+[%- USE HTML %]
+<body[% IF onload %] onload="[% onload %]"[% END %]>
+
+ <form method="post">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+  <input type="hidden" name="input_id" value="[% HTML.escape(input_id) %]">
+  <input type="hidden" name="is_vendor" value="[% HTML.escape(is_vendor) %]">
+  <input type="hidden" name="allow_both" value="[% HTML.escape(allow_both) %]">
+  <input type="hidden" name="action_on_cov_selected" value="[% HTML.escape(action_on_cov_selected) %]">
+
+  <table width="100%">
+   <tr>
+    <th class="listtop">[% title %]</th>
+   </tr>
+   <tr height="5"></tr>
+
+   <tr>
+    <td>
+     [%- IF !is_vendor %]
+      Please select a customer from the list below.
+     [%- ELSE %]
+      Please select a vendor from the list below.
+     [%- END %]
+    </td>
+   </tr>
+
+   <tr>
+    <td>
+
+     <table>
+      <tr class="listheading">
+       <th class="listheading">&nbsp;</th>
+       [%- FOREACH row = HEADER %]
+        <th nowrap class="listheading"><a href="[% HTML.escape(row.callback) %]">[% row.column_title %]</a></th>
+       [%- END %]
+      </tr>
+
+      [%- FOREACH row = COVS %]
+       <tr class="listrow[% loop.count % 2 %]">
+        <td valign="top"><button type="button" onclick="cov_selected('[% loop.count %]')">Auswahl</button></td>
+        <td valign="top"><input type="hidden" id="id_[% loop.count %]" name="id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+         <input type="hidden" id="name_[% loop.count %]" name="name_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+         <input type="hidden" id="customer_is_vendor_[% loop.count %]" name="customer_is_vendor_[% loop.count %]" value="[% HTML.escape(row.customer_is_vendor) %]">
+         [% HTML.escape(row.name) %]</td>
+        <td valign="top">[% HTML.escape(row.address) %]</td>
+        <td valign="top">[% HTML.escape(row.contact) %]</td>
+       </tr>
+      [% END %]
+     </table>
+
+    </td>
+   </tr>
+  </table>
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function cov_selected(selected) {
+        var name = document.getElementsByName("name_" + selected)[0].value
+        var id = document.getElementsByName("id_" + selected)[0].value
+        var customer_is_vendor = document.getElementsByName("customer_is_vendor_" + selected)[0].value
+        var cov_name = document.forms[0].input_name.value;
+        window.opener.document.getElementsByName(cov_name)[0].value = name;
+        if (document.forms[0].input_id.value != "") {
+          window.opener.document.getElementsByName(document.forms[0].input_id.value)[0].value = id;
+        }
+
+        var cov_is_vendor = cov_name + "_is_vendor";
+        var input = window.opener.document.getElementsByName(cov_is_vendor)[0];
+        if (input) {
+          input.value = customer_is_vendor;
+        }
+
+        var prefix = "";
+        if (cov_name.substr(0, 2) == "f_") {
+          prefix = "f_";
+          cov_name = cov_name.substr(2);
+        }
+        cov_name = prefix + "old_" + cov_name;
+        var input = window.opener.document.getElementsByName(cov_name)[0];
+        if (input) {
+          input.value = name;
+        }
+        cov_name = prefix + "old" + cov_name;
+        input = window.opener.document.getElementsByName(cov_name)[0];
+        if (input) {
+          input.value = name;
+        }
+
+        if (document.forms[0].action_on_cov_selected.value != "") {
+          window.opener.document.getElementsByName("action")[0].value = document.forms[0].action_on_cov_selected.value;
+          window.opener.document.forms[0].submit();
+        }
+
+        self.close();
+      }
+      //-->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/edit_email_en.html b/templates/webpages/generic/edit_email_en.html
new file mode 100644 (file)
index 0000000..52291fd
--- /dev/null
@@ -0,0 +1,75 @@
+[% USE HTML %]<body onload="fokus()">
+
+<form name="Form" method="post" action="[% script %]">
+
+<table width="100%">
+  <tr class="listtop">
+
+    <th class="listtop">[% title %]</th>
+  </tr>
+  <tr height="5"></tr>
+  <tr>
+    <td>
+      <table>
+        <tr>
+          <th align="right" nowrap>To</th>
+
+          <td><input name="email" size="30" value="[% HTML.escape(email) %]"></td>
+        </tr>
+        <tr>
+          <th align="right" nowrap>Cc</th>
+          <td><input name="cc" size="30" value="[% HTML.escape(cc) %]"></td>
+        </tr>
+[% IF SHOW_BCC %]
+        <tr>
+          <th align="right" nowrap>Bcc</th>
+          <td><input name="bcc" size="30" value="[% HTML.escape(bcc) %]"></td>
+        </tr>[% END %]
+        <tr>
+          <th align="right" nowrap>Subject</th>
+
+          <td><input name="subject" size="30" value="[% HTML.escape(subject) %]"></td>
+        </tr>
+        <tr>
+          <th align="right" nowrap>Attachment name</th>
+          <td><input name="attachment_filename" size="30" value="[% HTML.escape(a_filename) %]"></td>
+      </table>
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      <table>
+        <tr>
+          <th align="left" nowrap>Message</th>
+        </tr>
+        <tr>
+          <td><textarea name="message" rows="15" cols="60" wrap="soft">[% HTML.escape(message) %]</textarea></td>
+
+        </tr>
+      </table>
+    </td>
+  </tr>
+  <tr>
+    <td>
+
+[% print_options %]
+[% FOREACH row = HIDDEN %]<input type="hidden" name="[% row.name %]" value="[% HTML.escape(row.value) %]">
+[% END %]
+
+    </td>
+  </tr>
+
+  <tr>
+    <td><hr size="3" noshade></td>
+  </tr>
+</table>
+
+<input type="hidden" name="nextsub" value="send_email">
+
+<br>
+<input name="action" class="submit" type="submit" value="Continue">
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/error_en.html b/templates/webpages/generic/error_en.html
new file mode 100644 (file)
index 0000000..8b78376
--- /dev/null
@@ -0,0 +1,32 @@
+[% USE HTML %]<body>
+
+ <div class="listtop">[% IF title_error %][% title_error %][% ELSE %]Error![% END %]</div>
+
+ <p>[% label_error %]</p>
+
+ [%- IF SHOW_BACK_BUTTON %]
+ <form>
+  <p>
+   <input type="button" onclick="history.back()" value="Back">
+  </p>
+ </form>
+
+ [%- ELSIF SHOW_BUTTON %]
+
+ <form action="[% HTML.escape(script) %]" method="post">
+
+  [%- FOREACH var = VARIABLES %]
+  <input type="hidden" name="[% HTML.escape(var.name) %]" value="[% HTML.escape(var.value) %]">
+  [%- END %]
+
+  <input type="hidden" name="action" value="[% HTML.escape(action) %]">
+
+  <p>
+   <input type="submit" value="[% BUTTON_LABEL %]">
+  </p>
+ </form>
+
+ [%- END %]
+
+</body>
+</html>
diff --git a/templates/webpages/generic/information_en.html b/templates/webpages/generic/information_en.html
new file mode 100644 (file)
index 0000000..ad01854
--- /dev/null
@@ -0,0 +1,12 @@
+[% USE HTML %]<body>
+ <table width="100%">
+  <tr>
+   <th class="listtop">[% IF title_information %][% title_information %][% ELSE %]Information[% END %]</th>
+  </tr>
+  <tr height="5"></tr>
+
+  <tr><td>[% label_information %]</td></tr>
+ </table>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/new_item_en.html b/templates/webpages/generic/new_item_en.html
new file mode 100644 (file)
index 0000000..421df6a
--- /dev/null
@@ -0,0 +1,26 @@
+[% USE HTML %]  <body>
+
+    <h4 class="error">Item not on file!
+
+
+    <p>What type of item is this?</h4>
+
+    <form method="post" action="ic.pl">
+
+      <p>
+
+      <input class="radio" type="radio" name="item" value="part" checked>&nbsp;Part<br>
+      <input class="radio" type="radio" name="item" value="service">&nbsp;Service
+      <p>
+
+      [%- FOREACH var = HIDDENS %]
+      <input type="hidden" name="[% HTML.escape(var.name) %]" value="[% HTML.escape(var.value) %]">
+      [%- END %]
+
+      <input type="hidden" name="nextsub" value="add">
+      <input class="submit" type="submit" name="action" value="Continue">
+    </form>
+
+  </body>
+</html>
+
diff --git a/templates/webpages/generic/part_selection_en.html b/templates/webpages/generic/part_selection_en.html
new file mode 100644 (file)
index 0000000..9dd7dd3
--- /dev/null
@@ -0,0 +1,121 @@
+[% USE HTML %]<body [% IF onload %]onload="[% onload %]"[% END %]>
+
+ <form action="[% HTML.escape(script) %]" method="post" name="Form">
+
+  <input type="hidden" name="input_partnumber" value="[% HTML.escape(input_partnumber) %]">
+  <input type="hidden" name="input_description" value="[% HTML.escape(input_description) %]">
+  <input type="hidden" name="input_partsid" value="[% HTML.escape(input_partsid) %]">
+  <input type="hidden" name="input_partnotes" value="[% HTML.escape(input_partnotes) %]">
+  <input type="hidden" name="allow_creation" value="[% HTML.escape(allow_creation) %]">
+  <input type="hidden" name="action_on_part_selected" value="[% HTML.escape(action_on_part_selected) %]">
+  <input type="hidden" name="filter" value="[% HTML.escape(filter) %]">
+  <input type="hidden" name="options" value="[% HTML.escape(options) %]">
+  <input type="hidden" name="new_description" value="[% HTML.escape(description) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <table width="100%">
+   <tr>
+    <td>
+     [% IF no_parts_found %]
+     No part was found matching the search parameters.
+     [% IF allow_creation %]
+     However, you can create a new part which will then be selected.
+     [% END %]
+     [% ELSE %]
+     Please select a part from the list below.
+     [% IF allow_creation %]
+     Alternatively you can create a new part which will then be selected.
+     [% END %]
+     [% END %]
+    </td>
+   </tr>
+
+   [% UNLESS no_parts_found %]
+   <tr>
+    <td>
+     <table>
+      <tr class="listheading">
+       <th class="listheading">&nbsp;</th>
+       [% FOREACH header = HEADER %]
+       <th nowrap class="listheading"><a href="[% HTML.escape(header.callback) %]">[% header.column_title %]</a></th>
+       [% END %]
+      </tr>
+
+      [% FOREACH part = PARTS %]
+      <tr class="listrow[% IF loop.count % 2 %]1[% ELSE %]0[% END %]">
+       <td><button type="button" onclick="part_selected('[% loop.count %]')">Select</button></td>
+       <td>
+        <input type="hidden" id="partsid_[% loop.count %]" name="partsid_[% loop.count %]" value="[% HTML.escape(part.id) %]">
+        <input type="hidden" id="partnumber_[% loop.count %]" name="partnumber_[% loop.count %]" value="[% HTML.escape(part.partnumber) %]">
+        [% HTML.escape(part.partnumber) %]
+       </td>
+       <td>
+        <input type="hidden" id="description_[% loop.count %]" name="description_[% loop.count %]" value="[% HTML.escape(part.description) %]">
+        <input type="hidden" id="partnotes_[% loop.count %]" name="partnotes_[% loop.count %]" value="[% HTML.escape(part.partnotes) %]">
+        [% HTML.escape(part.description) %]
+       </td>
+<!--        <td> -->
+<!--         <input type="hidden" id="onhand_[% loop.count %]" name="onhand_[% loop.count %]" value="[% HTML.escape(part.onhand) %]"> -->
+<!--         [% HTML.escape(part.onhand) %] -->
+<!--        </td> -->
+      </tr>
+      [% END %]
+     </table>
+    </td>
+   </tr>
+   [% END %]
+  </table>
+
+  [% IF allow_creation %]
+  <p><input type="submit" name="action" value="New part"></p>
+  [% END %]
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function part_selected(selected) {
+        var partnumber = document.getElementsByName("partnumber_" + selected)[0].value;
+        var description = document.getElementsByName("description_" + selected)[0].value;
+        var partsid = document.getElementsByName("partsid_" + selected)[0].value;
+        var partnotes = document.getElementsByName("partnotes_" + selected)[0].value;
+        var pnum_name = document.Form.input_partnumber.value;
+        window.opener.document.getElementsByName(pnum_name)[0].value = partnumber;
+        window.opener.document.getElementsByName(document.Form.input_description.value)[0].value = description;
+        if (document.Form.input_partsid.value != "") {
+          window.opener.document.getElementsByName(document.Form.input_partsid.value)[0].value = partsid;
+        }
+        if (document.Form.input_partnotes.value != "") {
+          var el = window.opener.document.getElementsByName(document.Form.input_partnotes.value)[0];
+          if (el)
+            el.value = partnotes;
+        }
+        if (document.Form.action_on_part_selected.value != "") {
+          window.opener.document.getElementsByName("action")[0].value = document.Form.action_on_part_selected.value;
+          window.opener.document.[% formname %].submit();
+        }
+
+
+        var prefix = "";
+        if (pnum_name.substr(0, 2) == "f_") {
+          prefix = "f_";
+          pnum_name = pnum_name.substr(2);
+        }
+        pnum_name = prefix + "old_" + pnum_name;
+        var input = window.opener.document.getElementsByName(pnum_name)[0];
+        if (input) {
+          input.value = name;
+        }
+
+        [%- IF click_button %]
+        window.opener.document.[% formname %].[% click_button %].click();
+        [%- END %]
+
+        self.close();
+      }
+      //-->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/print_options_en.html b/templates/webpages/generic/print_options_en.html
new file mode 100644 (file)
index 0000000..8e3c446
--- /dev/null
@@ -0,0 +1,38 @@
+[% USE HTML %]
+
+<table width="100%" cellspacing="0" cellpadding="0">
+ <tr>
+  <td>
+   <table>
+    <tr>
+     <td>
+      [%- FOREACH row = SELECTS %]
+      [%- IF row.show %]
+      <select name="[% row.sname %]">
+       [%- FOREACH data = row.DATA %]
+       <option value="[% data.value %]" [% data.selected %]>[% data.oname %]</option>
+       [%- END %]
+      </select>
+      [%- END %]
+      [%- END %]
+     </td>
+     [%- IF display_copies %]
+     <td>Copies <input name="copies" size="2" value="[% HTML.escape(copies) %]"></td>
+     [%- END %]
+     [%- IF display_groupitems %]
+     <td>Group Items</td>
+     <td><input name="groupitems" type="checkbox" class="checkbox" [% groupitems_checked %]></td>
+     [%- END %]
+     [%- IF display_remove_draft %]
+     <td>Remove Draft</td>
+     <td><input name="remove_draft" type="checkbox" class="checkbox" [% remove_draft_checked %]></td>
+     [%- END %]
+    </tr>
+   </table>
+  </td>
+  <td align=right>
+   <table><tr><th>[% status_msg %]</th></tr></table>
+  </td>
+ </tr>
+</table>
+
diff --git a/templates/webpages/generic/select_delivery_customer_en.html b/templates/webpages/generic/select_delivery_customer_en.html
new file mode 100644 (file)
index 0000000..e86c4d7
--- /dev/null
@@ -0,0 +1,65 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <form name="Form">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+  <input type="hidden" name="input_id" value="[% HTML.escape(input_id) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <table width="100%">
+   <tr height="5"></tr>
+
+   <tr><td>Please select a customer from the list below.</td></tr>
+
+   <tr>
+    <td>
+
+     <table>
+      <tr class="listheading">
+       <th class="listheading">&nbsp;</th>
+       [%- FOREACH col = HEADER %]
+       <th nowrap class="listheading"><a href="[% HTML.escape(col.callback) %]">[% col.column_title %]</a></th>
+       [%- END %]
+      </tr>
+
+      [%- FOREACH row = DELIVERY %]
+      <tr class="listrow[% loop.count % 2 %]">
+       <td><button type="button" onclick="customer_selected('[% loop.count %]')">Auswahl</button></td>
+       <td>
+        <input type="hidden" id="id_[% loop.count %]" name="id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+        <input type="hidden" id="name_[% loop.count %]" name="name_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+        [% HTML.escape(row.name) %]
+       </td>
+       <td>[% HTML.escape(row.customernumber) %]</td>
+       <td>[% HTML.escape(row.address) %]</td>
+<!--        <td> -->
+<!--         <input type="hidden" id="description_[% loop.count %]" name="description_[% loop.count %]" value="[% HTML.escape(row.description) %]"> -->
+<!--         [% HTML.escape(row.description) %] -->
+<!--        </td> -->
+      </tr>
+      [%- END %]
+     </table>
+
+    </td>
+   </tr>
+  </table>
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function customer_selected(selected) {
+        var name = document.getElementsByName("name_" + selected)[0].value
+        var id = document.getElementsByName("id_" + selected)[0].value
+        window.opener.document.getElementsByName(document.Form.input_name.value)[0].value = name;
+        if (document.Form.input_id.value != "") {
+          window.opener.document.getElementsByName(document.Form.input_id.value)[0].value = id;
+        }
+        self.close();
+      }
+      //-->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/select_part_en.html b/templates/webpages/generic/select_part_en.html
new file mode 100644 (file)
index 0000000..0b8cb7a
--- /dev/null
@@ -0,0 +1,70 @@
+[% USE HTML %]<body [% IF onload %]onload="[% onload %]"[% END %]>
+
+ <form method="post" action="[% HTML.escape(script) %]">
+
+  <input type="hidden" name="nextsub" value="[% HTML.escape(nextsub) %]">
+  <input type="hidden" name="callback_sub" value="[% HTML.escape(callback_sub) %]">
+
+  <input type="hidden" name="old_form" value="[% HTML.escape(old_form) %]">
+  <input type="hidden" name="remap_parts_id" value="[% HTML.escape(remap_parts_id) %]">
+  <input type="hidden" name="remap_partnumber" value="[% HTML.escape(remap_partnumber) %]">
+
+  <div class="listtop">Select a part or assembly</div>
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">&nbsp;</th>
+     <th class="listheading">Number</th>
+     <th class="listheading">Description</th>
+     [% IF has_charge %]
+     <th class="listheading">Charge number</th>
+     [% END %]
+     [% IF has_ean %]
+     <th class="listheading">EAN</th>
+     [% END %]
+    </tr>
+
+    [% FOREACH part = PARTS %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <td>
+      <input type="radio" name="selection" value="[% loop.count %]"[% IF loop.first %] checked[% END %]>
+     </td>
+
+     <td>
+      <input type="hidden" name="new_id_[% loop.count %]" value="[% HTML.escape(part.id) %]">
+      <input type="hidden" name="new_number_[% loop.count %]" value="[% HTML.escape(part.number) %]">
+      [% HTML.escape(part.number) %]
+     </td>
+
+     <td>
+      <input type="hidden" name="new_description_[% loop.count %]" value="[% HTML.escape(part.description) %]">
+      [% HTML.escape(part.description) %]
+     </td>
+
+     [% IF has_charge %]
+     <td>
+      <input type="hidden" name="new_charge_id_[% loop.count %]" value="[% HTML.escape(part.charge_id) %]">
+      <input type="hidden" name="new_chargenumber_[% loop.count %]" value="[% HTML.escape(part.chargenumber) %]">
+      [% HTML.escape(part.chargenumber) %]
+     </td>
+     [% END %]
+     [% IF has_ean %]
+     <td>
+      <input type="hidden" name="new_ean_[% loop.count %]" value="[% HTML.escape(part.ean) %]">
+      [% HTML.escape(part.ean) %]
+     [% END %]
+     </td>
+    </tr>
+    [% END %]
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/select_vendor_en.html b/templates/webpages/generic/select_vendor_en.html
new file mode 100644 (file)
index 0000000..040a6ea
--- /dev/null
@@ -0,0 +1,65 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <form name="Form">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+  <input type="hidden" name="input_id" value="[% HTML.escape(input_id) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <table width="100%">
+   <tr height="5"></tr>
+
+   <tr><td>Please select a vendor from the list below.</td></tr>
+
+   <tr>
+    <td>
+
+     <table>
+      <tr class="listheading">
+       <th class="listheading">&nbsp;</th>
+       [%- FOREACH col = HEADER %]
+       <th nowrap class="listheading"><a href="[% HTML.escape(col.callback) %]">[% col.column_title %]</a></th>
+       [%- END %]
+      </tr>
+
+      [%- FOREACH row = VENDOR %]
+      <tr class="listrow[% loop.count % 2 %]">
+       <td><button type="button" onclick="vendor_selected('[% loop.count %]')">Auswahl</button></td>
+       <td>
+        <input type="hidden" id="id_[% loop.count %]" name="id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+        <input type="hidden" id="name_[% loop.count %]" name="name_[% loop.count %]" value="[% HTML.escape(row.name) %]">
+        [% HTML.escape(name) %]
+       </td>
+       <td>[% HTML.escape(row.customernumber) %]</td>
+       <td>[% HTML.escape(row.address) %]</td>
+<!--        <td> -->
+<!--         <input type="hidden" id="description_[% loop.count %]" name="description_[% loop.count %]" value="[% HTML.escape(row.description) %]"> -->
+<!--         [% HTML.escape(row.description) %] -->
+<!--        </td> -->
+      </tr>
+      [%- END %]
+     </table>
+
+    </td>
+   </tr>
+  </table>
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function vendor_selected(selected) {
+        var name = document.getElementsByName("name_" + selected)[0].value
+        var id = document.getElementsByName("id_" + selected)[0].value
+        window.opener.document.getElementsByName(document.Form.input_name.value)[0].value = name;
+        if (document.Form.input_id.value != "") {
+          window.opener.document.getElementsByName(document.Form.input_id.value)[0].value = id;
+        }
+        self.close();
+      }
+      //-->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generic/set_longdescription_en.html b/templates/webpages/generic/set_longdescription_en.html
new file mode 100644 (file)
index 0000000..8a61fa6
--- /dev/null
@@ -0,0 +1,27 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <form name="Form">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>Please insert your longdescription below</p>
+
+  <p><textarea id="longdescription" name="longdescription" rows="15" cols="45" wrap="soft">[% HTML.escape(longdescription) %]</textarea></p>
+
+  <p><input type="submit" onclick="longdescription_updated()" value="Close"></p>
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function longdescription_updated() {
+        window.opener.document.getElementsByName(document.Form.input_name.value)[0].value = document.getElementsByName("longdescription")[0].value;
+
+        self.close();
+      }
+    -->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/generictranslations/edit_greetings_en.html b/templates/webpages/generictranslations/edit_greetings_en.html
new file mode 100644 (file)
index 0000000..ad41cd0
--- /dev/null
@@ -0,0 +1,47 @@
+[% USE HTML %]<body>
+
+ <p>
+  <div class="listtop">[% HTML.escape(title) %]</div>
+ </p>
+
+ [%- IF message %]
+ <p>
+  [% HTML.escape(message) %]
+ </p>
+ [%- END %]
+
+ <form method="post" action="generictranslations.pl">
+
+  <table>
+
+   <tr>
+    <th class="listheading">&nbsp;</th>
+    <th class="listheading">male</th>
+    <th class="listheading">female</th>
+   </tr>
+
+   [%- FOREACH language = LANGUAGES %]
+   <tr>
+    <td>
+     [%- IF language.id == 'default' %]
+     Default (no language selected)
+     [%- ELSE %]
+     [%- HTML.escape(language.description) %]
+     [%- END %]
+    </td>
+    <td><input name="translation__[% language.id %]__male" size="40" value="[% HTML.escape(language.male) %]"></td>
+    <td><input name="translation__[% language.id %]__female" size="40" value="[% HTML.escape(language.female) %]"></td>
+   </tr>
+   [%- END %]
+
+  </table>
+
+  <p>
+   <input type="hidden" name="action" value="save_greetings">
+   <input type="submit" class="submit" value="Save">
+  </p>
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/gl/form_header_chart_balances_js_en.html b/templates/webpages/gl/form_header_chart_balances_js_en.html
new file mode 100644 (file)
index 0000000..3263ee7
--- /dev/null
@@ -0,0 +1,28 @@
+[% USE HTML %]
+[% USE JavaScript %]
+[% USE LxERP %]
+
+<script type="text/javascript">
+ <!--
+var chart_balances = new Array();
+
+[% FOREACH chart = ALL_CHARTS %]
+chart_balances[[% loop.count - 1 %]] = '[% JavaScript.escape(LxERP.format_amount(chart.balance, 2, 0, 'DRCR')) %]';
+[%- END %]
+
+function show_chart_balance(obj) {
+  var row = $(obj).attr('name').replace(/.*_/, '');
+  var idx = $('#accno_' + row).attr('selectedIndex');
+  $('#chart_balance_' + row).html(chart_balances[idx]);
+}
+
+$(document).ready(function() {
+  [%- SET row=0 %]
+  [%- WHILE row < rowcount %]
+   [%- SET row=row + 1 %]
+   $('#accno_[% row %]').change(function() { show_chart_balance(this); });
+   show_chart_balance($('#accno_[% row %]'));
+  [%- END %]
+});
+-->
+</script>
diff --git a/templates/webpages/gl/generate_report_bottom_en.html b/templates/webpages/gl/generate_report_bottom_en.html
new file mode 100644 (file)
index 0000000..197f6f5
--- /dev/null
@@ -0,0 +1,11 @@
+[% USE HTML %]<form method="post" action="gl.pl">
+
+ <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+
+ <input class="submit" type="submit" name="action" value="GL Transaction">
+ <input class="submit" type="submit" name="action" value="Sales Transaction">
+ <input class="submit" type="submit" name="action" value="Purchase Transaction">
+ <input class="submit" type="submit" name="action" value="Sales Invoice">
+ <input class="submit" type="submit" name="action" value="Vendor Invoice">
+
+</form>
diff --git a/templates/webpages/ic/assembly_row_en.html b/templates/webpages/ic/assembly_row_en.html
new file mode 100644 (file)
index 0000000..b45deb0
--- /dev/null
@@ -0,0 +1,34 @@
+[%- USE LxERP %]
+  <tr class=listheading>
+   <th class=listheading>Individual Items</th>
+  </tr>
+  <tr>
+   <td>
+    <table width=100%>
+     <tr>
+[%- FOREACH col = COLUMNS %]
+[%- SET hcol = HEADER.$col %]
+      <th[% ' nowrap' IF hcol.nowrap %][% ' width=' _ hcol.width IF hcol.width %][% ' align=' _ hcol.align IF hcol.align %]>[% hcol.text %]</th>
+[%- END %]
+     </tr>
+[%- FOREACH row = ROWS %]
+     <tr>
+ [%- FOREACH col = COLUMNS %]
+  [%- SET rcol = row.$col %]
+      <td[% ' align=' _ rcol.align IF rcol.align %]>[%- rcol.data %]</td>
+ [%- END %]
+ [%- FOREACH hidden = row.hiddens %]
+      <input type=hidden name="[% hidden.name %]" value="[% hidden.value %]">
+ [%- END %]
+     </tr>
+[%- END %]
+     <tr>
+      <td colspan="6"></td>
+      <td>Totals</td>
+      <td align="right">[%- LxERP.format_amount(assembly_purchase_price_total, 2) %]</td>
+      <td align="right">[%- LxERP.format_amount(assemblytotal, 2) %]</td>
+     </tr>
+     <input type="hidden" name="assembly_rows" value="[% assembly_rows %]">
+    </table>
+   </td>
+  </tr>
diff --git a/templates/webpages/ic/choice_en.html b/templates/webpages/ic/choice_en.html
new file mode 100644 (file)
index 0000000..e667bf2
--- /dev/null
@@ -0,0 +1,38 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body>
+
+ <form method="post" action="ic.pl">
+
+  [%- FOREACH row = HIDDENS %]
+  <input type="hidden" name="[% HTML.escape(row.name) %]" value="[% HTML.escape(row.value) %]" > 
+  [%- END %]
+
+  <p>
+   <table>
+    <tr class="listheading">
+     <th class="listheading" nowrap>Part Number</th>
+     <th class="listheading" nowrap>Part Description</th>
+    </tr>
+    <tr valign="top">
+     <td><input type="text" name="partnumber" size="20"></td>
+     <td><input type="text" name="description" size="30"></td>
+    </tr>
+   </table>
+  </p>
+
+  [%- FOREACH row = PARTS %]
+  <input type="hidden" name="totop100_partnumber_[% loop.count %]" value="[% row.totop100_partnumber %]">
+  <input type="hidden" name="totop100_description_[% loop.count %]" value="[% row.totop100_description %]">
+  <input type="hidden" name="totop100_unit_[% loop.count %]" value="[% row.totop100_unit %]">
+  <input type="hidden" name="totop100_sellprice_[% loop.count %]" value="[% row.totop100_sellprice %]">
+  <input type="hidden" name="totop100_soldtotal_[% loop.count %]" value="[% row.totop100_soldtotal %]">
+  [%- END %]
+
+  <p>
+   <input class="submit" type="submit" name="action" value="list">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/ic/confirm_price_update_en.html b/templates/webpages/ic/confirm_price_update_en.html
new file mode 100644 (file)
index 0000000..9e9e405
--- /dev/null
@@ -0,0 +1,25 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body>
+
+ <form method="post" action="ic.pl">
+
+  [%- FOREACH row = HIDDENS %]
+  <input type="hidden" name="[% HTML.escape(row.name) %]" value="[% HTML.escape(row.value) %]" > 
+  [%- END %]
+
+  <h2 class="confirm">Confirm!</h2>
+
+  <p>
+   [% LxERP.format_string('Approximately #1 prices will be updated.', num_matches) %]
+  </p>
+
+  <p>Are you sure you want to update the prices?</p>
+
+  <p>
+   <input name="action" class="submit" type="submit" value="Continue">
+   <input type="button" class="submit" onclick="history.back()" value="Back">
+  </p>
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/ic/form_footer_en.html b/templates/webpages/ic/form_footer_en.html
new file mode 100644 (file)
index 0000000..62bda45
--- /dev/null
@@ -0,0 +1,92 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+  [%- IF item == 'assembly' %]
+  <!-- Wieder zurueck in die ic.pl, entweder alle Einzelteile auslagern oder gar keine -->
+  <!-- tr>
+    <td>
+      <table border="0" width="100%">
+        <tr>
+          <th colspan="2" align=right>Total&nbsp;</th>
+         <th align=right>Purchase Price:[% LxERP.format_amount(assembly_purchase_price_total, 2) %]  Sell Price: [% LxERP.format_amount(assemblytotal, 2) %]</th>
+        </tr>
+      </table>
+    </td>
+  </tr>
+  <input type="hidden" name="assembly_rows" value="[% HTML.escape(assembly_rows) %]" -->
+  [%- END %]
+
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+  <input type="hidden" name="previousform" value="[% HTML.escape(previousform) %]">
+  <input type="hidden" name="taxaccount2" value="[% HTML.escape(taxaccount2) %]">
+  <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+  <tr>
+    <td><hr size="3" noshade></td>
+  </tr>
+ </table>
+
+ <br style="clear: left" />
+</div>
+
+[%- IF CUSTOM_VARIABLES.size %]
+<div id="custom_variables" class="tabcontent">
+
+ <p>Unchecked custom variables will not appear in orders and invoices.</p>
+
+ <p>
+  <table>
+   [%- FOREACH var = CUSTOM_VARIABLES %]
+   <tr>
+    <td align="right" valign="top">[% var.VALID_BOX %]</td>
+    <td align="right" valign="top">[% HTML.escape(var.description) %]</td>
+    <td valign="top">[% var.HTML_CODE %]</td>
+   </tr>
+   [%- END %]
+  </table>
+ </p>
+
+ <br style="clear: left" />
+</div>
+[%- END %]
+
+</div>
+
+<input class="submit" type="submit" name="action" value="Update">
+<input type="hidden" name="price_rows" value="[% HTML.escape(price_rows) %]">
+<input class="submit" type="submit" name="action" value="Save">
+
+  [%- IF id %]
+    [%- UNLESS previousform %]
+<input class="submit" type="submit" name="action" value="Save as new">
+    [%- END %]
+
+    [%- IF orphaned %]
+      [%- UNLESS previousform %]
+        [%- IF item == 'assembly' %]
+          [%- UNLESS onhand %]
+<input class="submit" type="submit" name="action" value="Delete">
+          [%- END %]
+        [%- ELSE %]
+<input class="submit" type="submit" name="action" value="Delete">
+        [%- END %]
+      [%- END %]
+    [%- END %]
+  [%- END %]
+
+  [%- IF id != "" %]
+<input type="button" class="submit" onclick="set_history_window([% id %]);" name="history" id="history" value="history">
+  [%- END %]
+
+</form>
+
+<script type="text/javascript" src="js/wz_tooltip.js"></script>
+<script type="text/javascript">
+<!--
+    var maintab = new ddtabcontent("maintab");
+    maintab.setpersist(true);
+    maintab.setselectedClassTarget("link"); //"link" or "linkparent"
+    maintab.init();
+  -->
+</script>
+
+</body>
+</html>
diff --git a/templates/webpages/ic/form_header_en.html b/templates/webpages/ic/form_header_en.html
new file mode 100644 (file)
index 0000000..cab0f36
--- /dev/null
@@ -0,0 +1,292 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body onLoad="fokus()">
+
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/parts_language_selection.js"></script>
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <form method="post" name="ic" action="[% script %]">
+
+  <input name="id" type="hidden" value="[% HTML.escape(id) %]">
+  <input name="item" type="hidden" value="[% HTML.escape(item) %]">
+  <input name="title" type="hidden" value="[% HTML.escape(title) %]">
+  <input name="makemodel" type="hidden" value="[% HTML.escape(makemodel) %]">
+  <input name="alternate" type="hidden" value="[% HTML.escape(alternate) %]">
+  <input name="onhand" type="hidden" value="[% HTML.escape(onhand) %]">
+  <input name="orphaned" type="hidden" value="[% HTML.escape(orphaned) %]">
+  <input name="taxaccounts" type="hidden" value="[% HTML.escape(taxaccounts) %]">
+  <input name="rowcount" type="hidden" value="[% HTML.escape(rowcount) %]">
+  <input name="eur" type="hidden" value="[% HTML.escape(eur) %]">
+  <input name="language_values" type="hidden" value="[% HTML.escape(language_values) %]">
+  <input name="original_partnumber" type="hidden" value="[% HTML.escape(original_partnumber) %]">
+
+  <ul id="maintab" class="shadetabs">
+   <li class="selected"><a href="#" rel="master_data">Master Data</a></li>
+   [%- IF CUSTOM_VARIABLES.size %]
+   <li><a href="#" rel="custom_variables">Custom Variables</a></li>
+   [%- END %]
+  </ul>
+
+  <div class="tabcontentstyle">
+  <div id="master_data" class="tabcontent">
+
+   <table width="100%">
+    <tr>
+     <td>
+      <table width="100%">
+       <tr valign="top">
+        <td>
+         <table>
+          <tr>
+           <td colspan="2">
+            <table>
+             <tr>
+              <th align="right">Part Number</th>
+              <td><input name="partnumber" value="[% HTML.escape(partnumber) %]" size="40"></td>
+             </tr>
+             <tr>
+              <th align="right">Part Description</th>
+              <td>
+               [%- IF description_area %]
+               <textarea name="description" rows="[% HTML.escape(rows) %]" cols="40" wrap="soft">[% HTML.escape(description) %]</textarea>
+               [%- ELSE %]
+               <input name="description" size="40" value="[% HTML.escape(description) %]">
+               [%- END %]
+              </td>
+             </tr>
+             <tr>
+               <th align="right">EAN-Code</th>
+               <td><input name="ean" size="40" value="[% HTML.escape(ean) %]"></td>
+             </tr>
+             <tr>
+              [%- IF all_partsgroup.size %]
+              <th align="right">Group</th>
+              <td>
+               [%- INCLUDE generic/multibox.html
+                     name       = 'partsgroup',
+                     DATA       = all_partsgroup,
+                     show_empty = 1,
+                     id_sub     = 'pg_keys',
+                     label_key  = 'partsgroup',
+                     style      = 'width:250px'
+               -%]
+              </td>
+              <input type="hidden" name="oldpartsgroup" value="[% HTML.escape(oldpartsgroup) %]">
+              [% END %]
+             </tr>
+
+
+             [%- IF BUCHUNGSGRUPPEN.size %]
+             <tr>
+              <th align="right">Buchungsgruppe</th>
+              <td>
+               [%- INCLUDE generic/multibox.html
+                     name       = 'buchungsgruppen_id',
+                     DATA       = BUCHUNGSGRUPPEN,
+                     id_key     = 'id',
+                     label_key  = 'description',
+                     style      = 'width:250px'
+               -%]
+             </tr>
+             [%- END %]
+             <input type="hidden" name="IC_income" value="[% HTML.escape(IC_income_default) %]">
+             [%- UNLESS is_assembly %]
+             <input type="hidden" name="IC_expense" value="[% HTML.escape(IC_expense_default) %]">
+             [%- END %]
+             [%- IF is_part %]
+             <input type="hidden" name="IC" value="[% HTML.escape(IC_default) %]">
+             [%- END %]
+             <tr>
+              <th align="right">Payment Terms</th>
+              <td>
+               [%- INCLUDE generic/multibox.html
+                     name       = 'payment_id',
+                     DATA       = payment_terms,
+                     show_empty = 1,
+                     id_key     = 'id',
+                     label_key  = 'description',
+                     style      = 'width:250px'
+               -%]
+              </td>
+             </tr>
+            </table>
+           </td>
+          </tr>
+
+          <tr>
+           <td>
+            <button type="button" onclick="parts_language_selection_window('language_values')">Set Language Values</button>
+           </td>
+          </tr>
+
+          <tr height="5"></tr>
+
+          <tr>
+           <td>
+            <table>
+             <tr>
+              <th align="left">Notes</th>
+              [%- UNLESS is_service %]
+              <th align="left">Formula</th>
+              [%- END %]
+             </tr>
+             <tr>
+              <td>
+               <textarea name="notes" rows="[% HTML.escape(notes_rows) %]" cols="45" wrap="soft">[% HTML.escape(notes) %]</textarea>
+              </td>
+              [%- UNLESS is_service %]
+              <td>
+               <ilayer>
+                <layer onmouseover="this.T_STICKY=true;this.T_STATIC=true;return escape('The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>')">
+                 <textarea name="formel" rows="[% HTML.escape(notes_rows) %]" cols="30" wrap="soft">[% HTML.escape(formel) %]</textarea></layer></ilayer>
+               </td>
+              [%- END %]
+             </tr>
+            </table>
+           </td>
+          </tr>
+         </table>
+        </td>
+
+        <td>
+         <table>
+          <tr>
+           <th align="right" nowrap="true">Updated</th>
+           <td>
+            <input name="priceupdate" id="priceupdate" size="11"  title="[% HTML.escape(dateformat) %]" value="[% HTML.escape(priceupdate) %]" readonly>
+           </td>
+          </tr>
+
+          <tr>
+           <th align="right" nowrap="true">List Price</th>
+           <td><input name="listprice" size="11" value="[% LxERP.format_amount(listprice, -2) %]"></td>
+          </tr>
+
+          <tr>
+           <th align="right" nowrap="true">Sell Price</th>
+           <td><input name="sellprice" size="11" value="[% LxERP.format_amount(sellprice, -2) %]"></td>
+          </tr>
+
+          [%- UNLESS is_assembly %]
+          <tr>
+           <th align="right" nowrap="true">Last Cost</th>
+           <td><input name="lastcost" size="11" value="[% LxERP.format_amount(lastcost, -2) %]"></td>
+          </tr>
+          [%- END %]
+
+          [%- IF ALL_PRICE_FACTORS.size %]
+          <tr>
+           <th align="right">Price Factor</th>
+           <td>
+            [%- INCLUDE generic/multibox.html
+                  name       = 'price_factor_id',
+                  DATA       = ALL_PRICE_FACTORS,
+                  show_empty = 1,
+                  id_key     = 'id',
+                  label_key  = 'description',
+                  style      = 'width:100px'
+            -%]
+           </td>
+          </tr>
+          [%- END %]
+
+          <tr>
+           <th align="right" nowrap="true">Unit</th>
+           <td>
+            <input type="hidden" name="unit_changeable" value="[% HTML.escape(unit_changeable) %]">
+            [%- UNLESS unit_changeable %]
+            <input type="hidden" name="unit" value="[% HTML.escape(unit) %]">[% HTML.escape(unit) %]
+            [%- ELSE %]
+            [%- INCLUDE generic/multibox.html
+                  name       = 'unit',
+                  DATA       = ALL_UNITS,
+                  id_key     = 'name',
+                  label_key  = 'name',
+                  style      = 'width:100px'
+            -%]
+            [%- END %]
+           </td>
+          </tr>
+
+        [%- UNLESS is_service %]
+          <tr>
+           <th align="right" nowrap="true">Weight</th>
+           <td>
+            [%- IF is_assembly %]&nbsp;[% LxERP.format_amount(weight) %][%- END %]
+            <input[% IF is_assembly %] type="hidden"[% END %] size="10" name="weight" value="[% LxERP.format_amount(weight) %]">
+            [% HTML.escape(defaults.weightunit) %]
+           </td>
+          </tr>
+        [%- END %]
+        [%- UNLESS is_service %]
+          <tr>
+           <th align="right" nowrap>On Hand</th>
+           <th align="left" nowrap class="plus[% IF onhand > 0 %]1[% ELSE %]0[% END %]">&nbsp;[% LxERP.format_amount(onhand) %]</th>
+          </tr>
+          <tr>
+           <th align="right" nowrap="true">ROP</th>
+           <td><input name="rop" size="10" value="[% LxERP.format_amount(rop) %]"></td>
+          </tr>
+          <tr>
+           <th align="right" nowrap="true">Bin</th>
+           <td><input name="bin" size="10" value="[% HTML.escape(bin) %]"></td>
+          </tr>
+          <tr>
+           <th align="right" nowrap="true">Verrechnungseinheit</th>
+           <td><input name="ve" size="10" value="[% HTML.escape(ve) %]"></td>
+          </tr>
+          <tr>
+           <th align="right" nowrap="true">Business Volume</th>
+           <td><input name="gv" size="10" value="[% LxERP.format_amount(gv) %]"></td>
+          </tr>
+          <tr>
+           <th align="right" nowrap><label for="not_discountable">Not Discountable</label></th>
+           <td><input class="checkbox" type="checkbox" name="not_discountable" id="not_discountable" value="1" [% IF not_discountable %]checked[% END %]></td>
+          </tr>
+        [%- END %]
+        [%- IF id %]
+          <tr>
+           <th align="right" nowrap="true"><label for="obsolete">Obsolete</label></th>
+           <td><input name="obsolete" id="obsolete" type="checkbox" class="checkbox" value="1" [% IF obsolete %]checked[% END %]></td>
+          </tr>
+        [%- END %]
+          <tr>
+           <th align="right" nowrap><label for="shop">Has serial number</label></th>
+           <td><input class="checkbox" type="checkbox" name="has_sernumber" id="has_sernumber" value="1" [% IF has_sernumber %]checked[% END %]></td>
+          </tr>
+          <tr>
+           <th align="right" nowrap><label for="shop">Shopartikel</label></th>
+           <td><input class="checkbox" type="checkbox" name="shop" id="shop" value="1" [% IF shop %]checked[% END %]></td>
+          </tr>
+         </table>
+        </td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+
+
+    [% UNLESS is_service %]
+    <tr>
+     <td>
+      <table>
+       <tr>
+        <th align="right" nowrap>Image</th>
+        <td><input name="image" size="40" value="[% HTML.escape(image) %]"></td>
+        <th align="right" nowrap>Microfiche</th>
+        <td><input name="microfiche" size="20" value="[% HTML.escape(microfiche) %]"></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Drawing</th>
+        <td><input name="drawing" size="40" value="[% HTML.escape(drawing) %]"></td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+    [%- END %]
+
+    <script type="text/javascript">
+     <!-- Calendar.setup({ inputField : "priceupdate", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger1" }); //-->
+    </script>
diff --git a/templates/webpages/ic/generate_report_bottom_en.html b/templates/webpages/ic/generate_report_bottom_en.html
new file mode 100644 (file)
index 0000000..0654155
--- /dev/null
@@ -0,0 +1,15 @@
+[% USE HTML %]<form method="post" action="ic.pl">
+
+ <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+
+ <input type="hidden" name="item" value="[% HTML.escape(searchitems) %]">
+
+ [% SWITCH searchitems %]
+   [% CASE 'part' %]New part
+   [% CASE 'service' %]New service
+   [% CASE 'assembly' %]New assembly
+ [% END %]
+ <br>
+ <input class="submit" type="submit" name="action" value="Add">
+
+</form>
diff --git a/templates/webpages/ic/makemodel_en.html b/templates/webpages/ic/makemodel_en.html
new file mode 100644 (file)
index 0000000..9cb1ea0
--- /dev/null
@@ -0,0 +1,28 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+  <tr>
+    <td>
+      <table>
+        <tr>
+          <th class="listheading">Make</th>
+          <th class="listheading">Model</th>
+        </tr>
+      [%- FOREACH row = MM_DATA %]
+        <tr>
+          <td>
+            [%- INCLUDE generic/multibox.html
+                  name       = "make_$loop.count",
+                  default    = row.make,
+                  DATA       = ALL_VENDORS,
+                  show_empty = 1,
+                  label_key  = 'name',
+                  id_key     = 'id',
+            -%]
+          </td>
+          <td><input name="model_[% loop.count %]" size="30" value="[% HTML.escape(row.model) %]"></td>
+        </tr>
+      [%- END %]
+      </table>
+    </td>
+  </tr>
+  <input type="hidden" name="makemodel_rows" value="[% mm_rows %]">
diff --git a/templates/webpages/ic/parts_language_selection_en.html b/templates/webpages/ic/parts_language_selection_en.html
new file mode 100644 (file)
index 0000000..17e904b
--- /dev/null
@@ -0,0 +1,63 @@
+[% USE HTML %]<body onload="[% onload %]">
+
+ <form name="Form">
+
+  <input type="hidden" name="input_name" value="[% HTML.escape(input_name) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>Please insert your language values below</p>
+
+  <p>
+   <table>
+    <tr class="listheading">
+     <th class="listheading">&nbsp;</th>
+     [%- FOREACH col = HEADER %]
+     <th nowrap class="listheading">[% col.column_title %]</th>
+     [%- END %]
+    </tr>
+
+    [%- FOREACH row = LANGUAGES %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <td><input type="hidden" id="id_[% loop.count %]" name="id_[% loop.count %]" value="[% HTML.escape(row.id) %]">[% HTML.escape(row.description) %]</td>
+     <td><input  id="translation_[% loop.count %]" name="translation_[% loop.count %]" value="[% HTML.escape(row.translation) %]"></td>
+     <td><input  id="longdescription_[% loop.count %]" name="longdescription_[% loop.count %]" value="[% HTML.escape(row.longdescription) %]"></td>
+    </tr>
+
+    [%- IF loop.last %]
+    <input type="hidden" id="rowcount" name="rowcount" value="[% loop.count %]">
+    [%- END %]
+    [%- END %]
+   </table>
+  </p>
+
+  <p>
+   <button type="button" onclick="languages_updated()">Close</button>
+  </p>
+
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      function languages_updated() {
+        var languages = "";
+        for (var i = 1; i <= (document.getElementsByName("rowcount")[0].value); i++) {
+          var id              = "id_" + i ;
+          var translation     = "translation_" + i ;
+          var longdescription = "longdescription_" + i;
+
+          languages = languages +
+            "---+++---" + document.getElementsByName( id )[0].value +
+            "--++--" + document.getElementsByName( translation )[0].value +
+            "--++--"  + document.getElementsByName( longdescription )[0].value;
+        }
+
+        window.opener.document.getElementsByName(document.Form.input_name.value)[0].value = languages;
+
+        self.close();
+      }
+      //-->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/ic/price_row_en.html b/templates/webpages/ic/price_row_en.html
new file mode 100644 (file)
index 0000000..1d4fb36
--- /dev/null
@@ -0,0 +1,21 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+[%- IF PRICES.size %]
+  <tr>
+    <td>
+      <table width=100%>
+        <tr>
+          <th class="listheading">Preisklasse</th>
+          <th class="listheading">Preis</th>
+        </tr>
+[%- FOREACH row = PRICES %]
+        <tr>
+          <td width=50%><input type=hidden name="pricegroup_[% loop.count %]" size=30  value="[% HTML.escape(row.pricegroup) %]">[% HTML.escape(row.pricegroup) %]</td>
+          <td width=50%><input name="price_[% loop.count %]" size=11 value="[% LxERP.format_amount(row.price, -2) %]"></td>
+          <input type="hidden" name="pricegroup_id_[% loop.count %]" value="[% HTML.escape(row.pricegroup_id) %]">
+        </tr>
+[%- END %]
+      </table>
+    </td>
+  </tr>
+[%- END %]
diff --git a/templates/webpages/ic/search_en.html b/templates/webpages/ic/search_en.html
new file mode 100644 (file)
index 0000000..ff87d62
--- /dev/null
@@ -0,0 +1,280 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body>
+
+ <form method="post" action="ic.pl">
+
+  <input type="hidden" name="searchitems" value="[% HTML.escape(searchitems) %]">
+  <input type="hidden" name="title" value="[% HTML.escape(title) %]">
+
+  <input type="hidden" name="revers" value="[% HTML.escape(revers) %]">
+  <input type="hidden" name="lastsort" value="[% HTML.escape(lastsort) %]">
+
+  <input type="hidden" name="nextsub" value="generate_report">
+  <input type="hidden" name="sort" value="description">
+
+  <input type="hidden" name="ndxs_counter" value="[% HTML.escape(ndxs_counter) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <table width="100%">
+   <tr height="5"></tr>
+   <tr valign="top">
+    <td>
+     <table>
+      <tr>
+       <th align="right" nowrap>Part Number</th>
+       <td><input name="partnumber" size="20"></td>
+       <th align="right" nowrap>EAN</th>
+       <td><input name="ean" size="20"></td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Part Description</th>
+       <td colspan="3"><input name="description" size="40"></td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Group</th>
+       <td><input name="partsgroup" size="20"></td>
+       [%- UNLESS is_service %]
+       <th align="right" nowrap>Serial Number</th> <td><input name="serialnumber" size="20"></td>
+       [%- END %]
+      </tr>
+
+      [%- UNLESS is_service %]
+      <tr>
+       <th align="right" nowrap>Make</th> <td><input name="make" size="20"></td>
+       <th align="right" nowrap>Model</th> <td><input name="model" size="20"></td>
+      </tr>
+      [%- END %]
+
+      <tr>
+       <th align="right" nowrap>Drawing</th>
+       <td><input name="drawing" size="20"></td>
+       <th align="right" nowrap>Microfiche</th>
+       <td><input name="microfiche" size="20"></td>
+      </tr>
+
+      [% CUSTOM_VARIABLES_FILTER_CODE %]
+
+      [%- IF is_assembly %]
+      <tr>
+       <td></td>
+       <td colspan="3">
+        <input name="null" id="null_1" class="radio" type="radio" value="1" checked>&nbsp;<label for="null_1">Top Level</label>
+        <input name="bom" id="bom" class="checkbox" type="checkbox" value="1">&nbsp;<label for="bom">Individual Items</label>
+       </td>
+      </tr>
+      [%- END %]
+
+      <tr>
+       <td></td>
+       <td colspan="3">
+        <input name="itemstatus" id="itemstatus_active" class="radio" type="radio" value="active" checked>
+        <label for="itemstatus_active">Active</label>
+        [%- UNLESS is_service %]
+        <input name="itemstatus" id="itemstatus_onhand" class="radio" type="radio" value="onhand">
+        <label for="itemstatus_onhand">On Hand</label>
+        <input name="itemstatus" id="itemstatus_short" class="radio" type="radio" value="short">
+        <label for="itemstatus_short">Short</label>
+        [%- END %]
+        <input name="itemstatus" id="itemstatus_obsolete" class="radio" type="radio" value="obsolete">
+        <label for="itemstatus_obsolete">Obsolete</label>
+        <input name="itemstatus" id="itemstatus_orphaned" class="radio" type="radio" value="orphaned">
+        <label for="itemstatus_orphaned">Orphaned</label>
+       </td>
+      </tr>
+
+      <tr>
+       <td></td>
+       <td colspan="3">
+        <table>
+         <tr>
+          <td>
+           <table>
+            <tr>
+             [%- UNLESS is_assembly %]
+             <td><input name="bought" id="bought" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="bought">Bought</label></td>
+             [%- END %]
+             <td><input name="sold" id="sold" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="sold">Sold</label></td>
+            </tr>
+
+            <tr>
+             <td colspan="4"><hr size="1" noshade></td>
+            </tr>
+
+            <tr>
+             [%- UNLESS is_assembly %]
+             <td><input name="onorder" id="onorder" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="onorder">On Order</label></td>
+             [%- END %]
+             <td><input name="ordered" id="ordered" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="ordered">Ordered</label></td>
+            </tr>
+
+            <tr>
+             <td colspan="4"><hr size="1" noshade></td>
+            </tr>
+
+            <tr>
+             [%- UNLESS is_assembly %]
+             <td><input name="rfq" id="rfq" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="rfq">RFQ</label></td>
+             [%- END %]
+             <td><input name="quoted" id="quoted" class="checkbox" type="checkbox" value="1"></td>
+             <td nowrap><label for="quoted">Quoted</label></td>
+            </tr>
+           </table>
+          </td>
+
+          <td width="5%">&nbsp;</td>
+
+          <td>
+           <table>
+            <tr>
+             <th>From</th>
+             <td><input name="transdatefrom" id="transdatefrom" size="11" title="[% HTML.escape(dateformat) %]"></td>
+             <td><input type="button" name="transdatefrom" id="trigger1" value="button"></td>
+             <th>To (time)</th>
+             <td><input name="transdateto" id="transdateto" size="11" title="[% HTML.escape(dateformat) %]"></td>
+             <td><input type="button" name="transdateto" name="transdateto" id="trigger2" value="button"></td>
+            </tr>
+           </table>
+          </td>
+         </tr>
+        </table>
+       </td>
+      </tr>
+
+      <tr>
+       <td></td>
+       <td colspan="3">
+        <hr size="1" noshade>
+       </td>
+      </tr>
+
+      <tr>
+       <th align="right" nowrap>Include in Report</th> <td colspan="3">
+        <table>
+         <tr>
+          <td>
+           <input name="l_partnumber" id="l_partnumber" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_partnumber">Part Number</label>
+          </td>
+          <td>
+           <input name="l_description" id="l_description" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_description">Part Description</label>
+          </td>
+          [%- UNLESS is_service %]
+          <td>
+           <input name="l_serialnumber" id="l_serialnumber" class="checkbox" type="checkbox" value="Y">
+           <label for="l_serialnumber">Serial Number</label>
+          </td>
+          [%- END %]
+          <td>
+           <input name="l_unit" id="l_unit" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_unit">Unit of measure</label>
+          </td>
+         </tr>
+
+         <tr>
+          <td>
+           <input name="l_listprice" id="l_listprice" class="checkbox" type="checkbox" value="Y">
+           <label for="l_listprice">List Price</label>
+          </td>
+          <td>
+           <input name="l_sellprice" id="l_sellprice" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_sellprice">Sell Price</label>
+          </td>
+          <td>
+           <input name="l_lastcost" id="l_lastcost" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_lastcost">Last Cost</label>
+          </td>
+          <td>
+           <input name="l_linetotal" id="l_linetotal" class="checkbox" type="checkbox" value="Y" checked>
+           <label for="l_linetotal">Line Total</label>
+          </td>
+         </tr>
+
+         <tr>
+          <td>
+           <input name="l_priceupdate" id="l_priceupdate" class="checkbox" type="checkbox" value="Y">
+           <label for="l_priceupdate">Updated</label>
+          </td>
+          <td>
+           <!-- auskommentiert fuer bug nummer 852 - ggf. fuer einen standardlagerplatz verwertet jb 18.5.09-->
+           <!--input name="l_bin" id="l_bin" class="checkbox" type="checkbox" value="Y">
+           <label for="l_bin">Bin</label -->
+           <input name="l_deliverydate" id="l_deliverydate" class="checkbox" type="checkbox" value="Y">
+           <label for="l_deliverydate">deliverydate</label>
+          </td>
+          <td>
+           <input name="l_rop" id="l_rop" class="checkbox" type="checkbox" value="Y">
+           <label for="l_rop">ROP</label>
+          </td>
+          <td>
+           <input name="l_weight" id="l_weight" class="checkbox" type="checkbox" value="Y">
+           <label for="l_weight">Weight</label>
+          </td>
+         </tr>
+
+         <tr>
+          <td>
+           <input name="l_image" id="l_image" class="checkbox" type="checkbox" value="Y">
+           <label for="l_image">Image</label>
+          </td>
+          <td>
+           <input name="l_drawing" id="l_drawing" class="checkbox" type="checkbox" value="Y">
+           <label for="l_drawing">Drawing</label>
+          </td>
+          <td>
+           <input name="l_microfiche" id="l_microfiche" class="checkbox" type="checkbox" value="Y">
+           <label for="l_microfiche">Microfiche</label>
+          </td>
+          <td>
+           <input name="l_partsgroup" id="l_partsgroup" class="checkbox" type="checkbox" value="Y">
+           <label for="l_partsgroup">Group</label>
+          </td>
+         </tr>
+
+         <tr>
+          <td>
+           <input name="l_subtotal" id="l_subtotal" class="checkbox" type="checkbox" value="Y">
+           <label for="l_subtotal">Subtotal</label>
+          </td>
+          <td>
+           <input name="l_soldtotal" id="l_soldtotal" class="checkbox" type="checkbox" value="Y">
+           <label for="l_soldtotal">soldtotal</label>
+          </td>
+          <td>
+          </td>
+         </tr>
+
+         [% CUSTOM_VARIABLES_INCLUSION_CODE %]
+        </table>
+       </td>
+      </tr>
+     </table>
+    </td>
+   </tr>
+   <tr><td colspan="4"><hr size="3" noshade></td></tr>
+  </table>
+
+  <script type="text/javascript">
+   <!--
+       Calendar.setup({ inputField : "transdatefrom",  ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger1" });
+       Calendar.setup({ inputField : "transdateto",    ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger2" });
+       //-->
+  </script>
+
+  <p>
+   <input class="submit" type="submit" name="action" value="Continue">
+   <input class="submit" type="submit" name="action" value="TOP100">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/ic/search_update_prices_en.html b/templates/webpages/ic/search_update_prices_en.html
new file mode 100644 (file)
index 0000000..344202a
--- /dev/null
@@ -0,0 +1,117 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body>
+
+ <form method="post" action="ic.pl">
+
+  <input type="hidden" name="title" value="Update prices">
+
+  <div class="listtop">Update prices</div>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right" nowrap>Part Number</th>
+     <td><input name="partnumber" size="20"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Part Description</th>
+     <td colspan="3"><input name="description" size="20"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Group</th>
+     <td><input name="partsgroup" size="20"></td>
+     <th align="right" nowrap>Serial Number</th>
+     <td><input name="serialnumber" size="20"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Make</th>
+     <td><input name="make" size="20"></td>
+     <th align="right" nowrap>Model</th>
+     <td><input name="model" size="20"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Drawing</th>
+     <td><input name="drawing" size="20"></td>
+     <th align="right" nowrap>Microfiche</th>
+     <td><input name="microfiche" size="20"></td>
+    </tr>
+
+    <tr>
+     <td></td>
+     <td colspan="3">
+      <input name="itemstatus" id="itemstatus_active" class="radio" type="radio" value="active" checked>
+      <label for="itemstatus_active">Active</label>
+      <input name="itemstatus" id="itemstatus_onhand" class="radio" type="radio" value="onhand">
+      <label for="itemstatus_onhand">On Hand</label>
+      <input name="itemstatus" id="itemstatus_short" class="radio" type="radio" value="short">
+      <label for="itemstatus_short">Short</label>
+      <input name="itemstatus" id="itemstatus_obsolete" class="radio" type="radio" value="obsolete">
+      <label for="itemstatus_obsolete">Obsolete</label>
+      <input name="itemstatus" id="itemstatus_orphaned" class="radio" type="radio" value="orphaned">
+      <label for="itemstatus_orphaned">Orphaned</label>
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <hr size="1" noshade>
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">Preisklasse</th>
+     <th class="listheading">Preis</th>
+     <th class="listheading">Prozentual/Absolut</th>
+    </tr>
+
+    <tr>
+     <td>Sell Price</td>
+     <td><input name="sellprice" size="11" value="[% HTML.escape(sellprice) %]"></td>
+     <td align="center">
+      <input name="sellprice_type" class="radio" type="radio" value="percent" checked> /
+      <input name="sellprice_type" class="radio" type="radio" value="absolut">
+     </td>
+    </tr>
+
+    <tr>
+     <td>List Price</td>
+     <td><input name="listprice" size="11" value="[% HTML.escape(listprice) %]"></td>
+     <td align="center">
+      <input name="listprice_type" class="radio" type="radio" value="percent" checked> /
+      <input name="listprice_type" class="radio" type="radio" value="absolut">
+     </td>
+    </tr>
+
+    [%- FOREACH row = PRICE_ROWS %]
+    <input type="hidden" name="pricegroup_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+
+    <tr>
+     <td><input type="hidden" name="pricegroup_[% loop.count %]" size="30"  value="[% HTML.escape(row.pricegroup) %]">[% HTML.escape(row.pricegroup) %]</td>
+     <td><input name="price_[% loop.count %]" size="11"></td>
+     <td align="center">
+      <input name="pricegroup_type_[% loop.count %]" class="radio" type="radio" value="percent" checked> /
+      <input name="pricegroup_type_[% loop.count %]" class="radio" type="radio" value="absolut">
+     </td>
+    </tr>
+    [%- END %]
+
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <input type="hidden" name="nextsub" value="confirm_price_update">
+  <input type="hidden" name="price_rows" value="[% HTML.escape(price_rows) %]">
+
+  <p>
+   <input class="submit" type="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/login/auth_db_unreachable_en.html b/templates/webpages/login/auth_db_unreachable_en.html
new file mode 100644 (file)
index 0000000..7ab3289
--- /dev/null
@@ -0,0 +1,15 @@
+<body>
+
+ <p><b>Error!</b></p>
+
+ <p>The authentication database is not reachable at the moment. Either it hasn't been set up yet or the database server might be down. Please contact your administrator.</p>
+
+ <p>If you want to set up the authentication database yourself then log in to the administration panel. Lx-Office will then create the database and tables for you.</p>
+
+ <p>
+  <a href="login.pl" target="_top">Login</a> |
+  <a href="admin.pl" target="_top">Administration</a>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/login/authentication_pl_missing_en.html b/templates/webpages/login/authentication_pl_missing_en.html
new file mode 100644 (file)
index 0000000..e71a706
--- /dev/null
@@ -0,0 +1,15 @@
+<body>
+
+ <p><b>Error!</b></p>
+
+ <p>The authentication configuration file &quot;config/authentication.pl&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.</p>
+
+ <p>If you yourself want to upgrade the installation then please read the file &quot;doc/UPGRADE&quot; and follow the steps outlined in this file.</p>
+
+ <p>
+  <a href="login.pl" target="_top">Login</a> |
+  <a href="admin.pl" target="_top">Administration</a>
+ </p>
+
+</body>
+</html>
diff --git a/templates/webpages/login/company_logo_en.html b/templates/webpages/login/company_logo_en.html
new file mode 100644 (file)
index 0000000..09df3f2
--- /dev/null
@@ -0,0 +1,53 @@
+[% USE HTML %][% USE LxERP %]<body>
+ [%- DEFAULT myconfig_dbhost = 'localhost' %]
+
+ <center>
+  <a href="http://www.lx-office.org" target="_top"><img src="image/lx-office-erp.png" border="0"></a>
+
+  <h2 class="login">Version [% version %]</h2>
+
+  <p>Licensed to</p>
+
+  <p>
+   <b>
+    [% HTML.escape(myconfig_company) %]
+    <br>
+    [% HTML.escape(myconfig_address).replace('\\\\n', '<br>').replace('\n', '<br>') %]
+   </b>
+
+   <br>
+
+   <table border="0">
+    <tr>
+     <th align="left">User</th>
+     <td>[% HTML.escape(myconfig_name) %]</td>
+    </tr>
+    <tr>
+     <th align="left">Dataset</th>
+     <td>[% HTML.escape(myconfig_dbname) %]</td>
+    </tr>
+    <tr>
+     <th align="left">Database Host</th>
+     <td>[% HTML.escape(myconfig_dbhost) %]</td>
+    </tr>
+    <tr>
+    </tr>
+    <tr>
+    </tr>
+    <tr>
+     <th colspan="2" align="center"><a href="http://lx-office.org" target="blank">http://lx-office.org</a></th>
+    </tr>
+   </table>
+
+   <noscript>
+   [% INCLUDE  'generic/information_master.html'
+     title_information = 'Your browser does not currently support Javascript.',
+     label_information = '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.',
+   %]
+   </noscript>
+ </center>
+
+ [%- todo_list %]
+
+</body>
+</html>
diff --git a/templates/webpages/login/login_screen_en.html b/templates/webpages/login/login_screen_en.html
new file mode 100644 (file)
index 0000000..bc4f6d3
--- /dev/null
@@ -0,0 +1,48 @@
+[% USE HTML %]<body class="login" onLoad="document.loginscreen.login.focus()">
+
+ <center>
+  <table class="login" border="3" cellpadding="20">
+   <tr>
+    <td class="login" align="center">
+     <a href="http://www.lx-office.org" target="_top"><img src="image/lx-office-erp.png" border="0"></a>
+     <h1 class="login" align="center">Version [% version %]</h1>
+
+     [% IF error_message %]
+     <p><span class="error_message">[% error_message %]</span></p>
+     [% END %]
+
+     <p>
+
+      <form method="post" name="loginscreen" action="login.pl" target="_top">
+
+       <input type="hidden" name="show_dbupdate_warning" value="1">
+
+       <table width="100%">
+        <tr>
+         <td align="center">
+          <table>
+           <tr>
+            <th align="right">Login Name</th>
+            <td><input class="login" name="login" size="30" tabindex="1"></td>
+           </tr>
+           <tr>
+            <th align="right">Password</th>
+            <td><input class="login" type="password" name="password" size="30" tabindex="2"></td>
+           </tr>
+          </table>
+
+          <br>
+          <input type="submit" name="action" value="Login" tabindex="3">
+
+         </td>
+        </tr>
+       </table>
+
+      </form>
+
+    </td>
+   </tr>
+  </table>
+
+</body>
+</html>
diff --git a/templates/webpages/login/password_error_en.html b/templates/webpages/login/password_error_en.html
new file mode 100644 (file)
index 0000000..f703091
--- /dev/null
@@ -0,0 +1,10 @@
+<body>
+
+ <p><b>Error!</b></p>
+
+ <p>[% error %]</p>
+
+ <p><a href="login.pl" target="_top">Login</a></p>
+
+</body>
+</html>
diff --git a/templates/webpages/menu/menunew_en.html b/templates/webpages/menu/menunew_en.html
new file mode 100644 (file)
index 0000000..5d8bd45
--- /dev/null
@@ -0,0 +1,102 @@
+[% USE HTML %]<body style="padding:0px; margin:0px;">
+
+ <script type="text/javascript">
+<!--
+function clockon() {
+  var now = new Date();
+  var h = now.getHours();
+  var m = now.getMinutes();
+  document.getElementById('clock_id').innerHTML = (h<10?'0'+h:h)+":"+(m<10?'0'+m:m);
+  var timer=setTimeout("clockon()", 10000);
+}
+window.onload=clockon
+//-->
+ </script>
+
+ <script type="text/javascript" src="js/dhtmlsuite/menu-for-applications.js"></script>
+
+ <table border="0" width="100%" background="image/bg_titel.gif" cellpadding="0" cellspacing="0">
+  <tr>
+   <td style="color:white; font-family:verdana,arial,sans-serif; font-size: 12px;">
+    &nbsp;
+    [<a href="menuv3.pl?action=display" target="_blank">new Window</a>]
+    &nbsp;
+    [<a href="JavaScript:top.main_window.print()">print</a>]
+   </td>
+   <td align="right" style="vertical-align:middle; color:white; font-family:verdana,arial,sans-serif; font-size: 12px;" nowrap>
+    [User: [% HTML.escape(login) %] -
+    <a href="login.pl?action=logout" target="_top">logout</a>]
+    [% date %] <span id='clock_id' style='position:relative'></span>&nbsp;
+   </td>
+  </tr>
+ </table>
+
+ <div id="main_menu_div"></div>
+
+ [%- SET main_id = '100' %]
+ <ul id="main_menu_model">
+ [%- FOREACH mainitem = menu_items %]
+  [%- SET main_id = main_id + 1 %]
+  <li id="[% main_id %]">
+   <a href="[% IF mainitem.href %][% mainitem.href %][% ELSE %]#[% END %]"[% IF mainitem.target %] target="[% mainitem.target %]"[% END %]>
+    [%- HTML.escape(mainitem.title) %]
+   </a>
+   [%- IF mainitem.subitems %]
+    <ul[%- IF force_ul_width %] width="[% mainitem.max_width * 12 %]"[% END %]>
+     [%- SET sub1_id = main_id * 100 %]
+     [%- FOREACH sub1item = mainitem.subitems %]
+      [%- SET sub1_id = sub1_id + 1 %]
+      <li id="[% sub1_id %]">
+       <a href="[% IF sub1item.href %][% sub1item.href %][% ELSE %]#[% END %]"[% IF sub1item.target %] target="[% sub1item.target %]"[% END %]>
+        [%- HTML.escape(sub1item.title) %]
+       </a>
+       [%- IF sub1item.subitems %]
+        <ul[%- IF force_ul_width %] width="[% sub1item.max_width * 12 %]"[% END %]>
+         [%- SET sub2_id = sub1_id * 100 %]
+         [%- FOREACH sub2item = sub1item.subitems %]
+          [%- SET sub2_id = sub2_id + 1 %]
+          <li id="[% sub2_id %]">
+           <a href="[% IF sub2item.href %][% sub2item.href %][% ELSE %]#[% END %]"[% IF sub2item.target %] target="[% sub2item.target %]"[% END %]>
+            [%- HTML.escape(sub2item.title) %]
+           </a>
+          </li>
+         [%- END %]
+        </ul>
+       [%- END %]
+      </li>
+     [%- END %]
+    </ul>
+   [%- END %]
+  </li>
+ [%- END %]
+ </ul>
+
+ <script type="text/javascript">
+  <!--
+
+DHTMLSuite.createStandardObjects();
+
+DHTMLSuite.configObj.setCssPath('css/dhtmlsuite/');
+DHTMLSuite.configObj.setImagePath('image/dhtmlsuite/');
+
+var menu_model = new DHTMLSuite.menuModel();
+menu_model.addItemsFromMarkup('main_menu_model');
+menu_model.init();
+
+var menu_bar = new DHTMLSuite.menuBar();
+menu_bar.addMenuItems(menu_model);
+menu_bar.setTarget('main_menu_div');
+menu_bar.init();
+
+function open_url(url, target) {
+
+}
+
+    -->
+ </script>
+
+ <iframe id="win1" src="[% callback %]" width="100%" height="94%" name="main_window" style="position: absolute; border: 0px; z-index: 99; ">
+  <p>MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES</p>
+ </iframe>
+</body>
+</html>
diff --git a/templates/webpages/menu/menuv3_en.html b/templates/webpages/menu/menuv3_en.html
new file mode 100644 (file)
index 0000000..a09e3d2
--- /dev/null
@@ -0,0 +1,45 @@
+[% USE HTML %]<body style="padding:0px; margin:0px;">
+
+ <script type="text/javascript">
+<!--
+function clockon() {
+  var now = new Date();
+  var h = now.getHours();
+  var m = now.getMinutes();
+  document.getElementById('clock_id').innerHTML = (h<10?'0'+h:h)+":"+(m<10?'0'+m:m);
+  var timer=setTimeout("clockon()", 10000);
+}
+window.onload=clockon
+//-->
+ </script>
+
+ <table border="0" width="100%" background="image/bg_titel.gif" cellpadding="0" cellspacing="0">
+  <tr>
+   <td style="color:white; font-family:verdana,arial,sans-serif; font-size: 12px;">
+    &nbsp;
+    [<a href="menuv3.pl?action=display" target="_blank">new Window</a>]
+    &nbsp;
+    [<a href="JavaScript:top.main_window.print()">print</a>]
+   </td>
+   <td align="right" style="vertical-align:middle; color:white; font-family:verdana,arial,sans-serif; font-size: 12px;" nowrap>
+    [User: [% HTML.escape(login) %] -
+    <a href="login.pl?action=logout" target="_top">logout</a>]
+    [% date %] <span id='clock_id' style='position:relative'></span>&nbsp;
+   </td>
+  </tr>
+ </table>
+
+
+ <div id="menu">
+
+  [% menu %]
+
+ </div>
+
+ <div style="clear: both;"></div>
+
+ <iframe id="win1" src="[% callback %]" width="100%" height="94%" name="main_window" style="position: absolute; border: 0px; z-index: 99; ">
+  <p>MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES</p>
+ </iframe>
+</body>
+</html>
diff --git a/templates/webpages/menu/menuv4_en.html b/templates/webpages/menu/menuv4_en.html
new file mode 100644 (file)
index 0000000..e44af21
--- /dev/null
@@ -0,0 +1,45 @@
+[% USE HTML %]<body style="padding:0px; margin:0px;">
+
+ <script type="text/javascript">
+<!--
+function clockon() {
+  var now = new Date();
+  var h = now.getHours();
+  var m = now.getMinutes();
+  document.getElementById('clock_id').innerHTML = (h<10?'0'+h:h)+":"+(m<10?'0'+m:m);
+  var timer=setTimeout("clockon()", 10000);
+}
+window.onload=clockon
+//-->
+ </script>
+
+ <table border="0" width="100%" background="image/bg_titel.gif" cellpadding="0" cellspacing="0">
+  <tr>
+   <td style="color:white; font-family:verdana,arial,sans-serif; font-size: 12px;">
+    &nbsp;
+    [<a href="menuv4.pl?action=display" target="_blank">new Window</a>]
+    &nbsp;
+    [<a href="JavaScript:top.main_window.print()">print</a>]
+   </td>
+   <td align="right" style="vertical-align:middle; color:white; font-family:verdana,arial,sans-serif; font-size: 12px;" nowrap>
+    [User: [% HTML.escape(login) %] -
+    <a href="login.pl?action=logout" target="_top">logout</a>]
+    [% date %] <span id='clock_id' style='position:relative'></span>&nbsp;
+   </td>
+  </tr>
+ </table>
+
+
+ <div id="menu">
+
+  [% menu %]
+
+ </div>
+
+ <div style="clear: both;"></div>
+
+ <iframe id="win1" src="[% callback %]" width="100%" height="94%" name="main_window" style="position: absolute; border: 0px; z-index: 99; ">
+  <p>MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES</p>
+ </iframe>
+</body>
+</html>
diff --git a/templates/webpages/oe/check_for_direct_delivery_en.html b/templates/webpages/oe/check_for_direct_delivery_en.html
new file mode 100644 (file)
index 0000000..01daf5b
--- /dev/null
@@ -0,0 +1,86 @@
+[% USE HTML %]<body>
+
+ <div class="listtop" width="100%">Carry over shipping address</div>
+
+ <p>You have entered or selected the following shipping address for this customer:</p>
+
+ <p>
+  <table>
+   <tr>
+    <th align="right" valign="top">Name:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptoname) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Department:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptodepartment_1) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">&nbsp;</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptodepartment_2) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Street:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptostreet) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Zipcode:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptozipcode) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">City:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptocity) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Country:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptocountry) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Contact:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptocontact) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Phone:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptophone) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">Fax:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptofax) %]</td>
+   </tr>
+
+   <tr>
+    <th align="right" valign="top">E-mail:</th>
+    <td valign="top">[% HTML.escape(CFDD_shiptoemail) %]</td>
+   </tr>
+  </table>
+ </p>
+
+  Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?
+ </p>
+
+ <form method="post" action="oe.pl">
+
+  <p>
+   <input type="submit" name="action" value="Yes">&nbsp;
+   <input type="submit" name="action" value="No">
+  </p>
+
+  <input type="hidden" name="yes_nextsub" value="check_for_direct_delivery_yes">
+  <input type="hidden" name="no_nextsub" value="check_for_direct_delivery_no">
+
+  [%- FOREACH row = VARIABLES %]
+  <input type="hidden" name="[% HTML.escape(row.key) %]" value="[% HTML.escape(row.value) %]">
+  [%- END %]
+
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/oe/form_footer_en.html b/templates/webpages/oe/form_footer_en.html
new file mode 100644 (file)
index 0000000..fff653b
--- /dev/null
@@ -0,0 +1,170 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+  <tr>
+    <td>
+      <table width="100%">
+        <tr valign="bottom">
+          <td>
+            <table>
+              <tr>
+                <th align="left">Notes</th>
+                <th align="left">Internal Notes</th>
+              </tr>
+              <tr valign="top">
+                <td>[% notes %]</td>
+                <td>[% intnotes %]</td>
+              </tr>
+              <tr>
+                <th align="right">Payment Terms</th>
+                <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'payment_id',
+                           style      = 'width: 250px',
+                           DATA       = ALL_PAYMENTS,
+                           id_key     = 'id',
+                           label_key  = 'description',
+                           show_empty = 1 -%]
+                </td>
+            </tr>
+      [%- IF id && num_follow_ups %]
+      <tr>
+       <td colspan="2">[% LxERP.format_string('There are #1 unfinished follow-ups of which #2 are due.', num_follow_ups, num_due_follow_ups) %]</td>
+      </tr>
+      [%- END %]
+      </table>
+          </td>
+[%- IF is_sales %]
+          <td>
+            <table>
+
+            <tr>
+              <th  align="left">Ertrag</th>
+              <td align="right">[% LxERP.format_amount(marge_total, 2) %]</td>
+            </tr>
+            <tr>
+              <th  align="left">Ertrag prozentual</th>
+              <td align="right">[% LxERP.format_amount(marge_percent, 2) %]</td>
+              <td>%</td>
+            </tr>
+
+            <input type="hidden" name="marge_total" value="[% HTML.escape(marge_total) %]">
+            <input type="hidden" name="marge_percent" value="[% HTML.escape(marge_percent) %]">
+            </table>
+          </td>
+[%- END %]
+          <td align="right">
+[%- IF taxaccounts %]
+            <input name="taxincluded" class="checkbox" type="checkbox" value="1"[% IF taxincluded %] checked[% END %]><b>Tax Included</b><br><br>
+[%- END %]
+            <table>
+[%- IF NOT taxincluded %]
+              <tr>
+                <th align='right'>Subtotal</th>
+                <td align='right'>[% LxERP.format_amount(invsubtotal, 2) %]</td>
+              </tr>
+[%- END %]
+              [% tax %]
+              <tr>
+                <th align="right">Total</th>
+                <td align="right">[% LxERP.format_amount(invtotal, 2) %]</td>
+              </tr>
+            </table>
+          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+  <input type="hidden" name="oldinvtotal" value="[% HTML.escape(oldinvtotal) %]">
+  <input type="hidden" name="oldtotalpaid" value="[% HTML.escape(totalpaid) %]">
+  <tr>
+    <td><hr size="3" noshade></td>
+  </tr>
+
+[%- IF webdav %]
+  <tr>
+    <th class="listtop" align="left">Dokumente im Webdav-Repository</th>
+  </tr>
+  <tr>
+   <td>
+    <table width="100%">
+     <tr>
+      <td align="left" width="30%"><b>Dateiname</b></td>
+      <td align="left" width="70%"><b>Webdavlink</b></td>
+     </tr>
+ [%- FOREACH file=WEBDAV %]
+      <tr>
+        <td align="left">[% HTML.escape(file.name) %]</td>
+        <td align="left"><a href="[% file.link %]">[% HTML.escape(file.type) %]</a></td>
+      </tr>
+ [%- END %]
+    </table>
+   </td>
+  </tr>
+  <tr>
+    <td><hr size="3" noshade></td>
+  </tr>
+[%- END %]
+
+  <tr>
+    <td>
+      [% print_options %]
+    </td>
+  </tr>
+</table>
+
+[% label_edit %]<br>
+<input class="submit" type="submit" name="action" id="update_button" value="Update">
+<input class="submit" type="submit" name="action" value="Ship to">
+<input class="submit" type="submit" name="action" value="Print">
+<input class="submit" type="submit" name="action" value="E-mail">
+<input class="submit" type="submit" name="action" value="Save">
+<input class="submit" type="submit" name="action" value="Save and Close">
+
+[%- IF id %]
+  <input type="button" class="submit" onclick="follow_up_window()" value="Follow-Up">
+  <input type="button" class="submit" onclick="set_history_window([% HTML.escape(id) %])" name="history" id="history" value="history">
+
+  <br>[% label_workflow %]<br>
+  <input class="submit" type="submit" name="action" value="Save as new">
+  <input class="submit" type="submit" name="action" value="Delete">
+
+  [%- IF is_sales_quo %]
+    <input class="submit" type="submit" name="action" value="Sales Order">
+  [%- END %]
+
+  [%- IF is_req_quo %]
+    <input class="submit" type="submit" name="action" value="Purchase Order">
+  [%- END %]
+
+  [%- IF is_sales_ord || is_pur_ord %]
+    <input class="submit" type="submit" name="action" value="Delivery Order">
+  [%- END %]
+
+  <input class="submit" type="submit" name="action" value="Invoice">
+
+  [%- IF is_sales_ord || is_pur_ord %]
+    <br>[% heading %] als neue Vorlage verwenden f&uuml;r<br>
+    [%- IF is_sales_ord %]
+      <input class="submit" type="submit" name="action" value="Purchase Order">
+     <input class="submit" type="submit" name="action" value="Quotation">
+    [%- ELSE %]
+    [%- IF is_pur_ord %]
+      <input class="submit" type="submit" name="action" value="Sales Order">
+     <input class="submit" type="submit" name="action" value="Request for Quotation">
+    [%- END %]
+    [%- END %]
+  [%- END %]
+[%- END %]
+<input type="hidden" name="saved_xyznumber" value="[% HTML.escape(saved_xyznumber) %]">
+<input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+<input type="hidden" name="callback" value="[% callback %]">
+[% IF vc == 'customer' %]
+  <input type="hidden" name="customer_discount" value="[% HTML.escape(customer_discount) %]">
+[% ELSE %]
+  <input type="hidden" name="vendor_discount" value="[% HTML.escape(vendor_discount) %]">
+[% END %]
+
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/oe/form_header_en.html b/templates/webpages/oe/form_header_en.html
new file mode 100644 (file)
index 0000000..c175867
--- /dev/null
@@ -0,0 +1,273 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body onLoad="[% onload %]">
+
+  <form method="post" name="oe" action="[% script %]">
+
+    <script type="text/javascript" src="js/common.js"></script>
+    <script type="text/javascript" src="js/delivery_customer_selection.js"></script>
+    <script type="text/javascript" src="js/vendor_selection.js"></script>
+    <script type="text/javascript" src="js/calculate_qty.js"></script>
+    <script type="text/javascript" src="js/customer_or_vendor_selection.js"></script>
+    <script type="text/javascript" src="js/follow_up.js"></script>
+
+[%- FOREACH row = HIDDENS %]
+   <input type="hidden" name="[% HTML.escape(row.name) %]" value="[% HTML.escape(row.value) %]" >
+[%- END %]
+
+    <input type="hidden" name="convert_from_oe_ids" value="[% HTML.escape(convert_from_oe_ids) %]">
+
+    <input type="hidden" name="follow_up_trans_id_1" value="[% HTML.escape(id) %]">
+    <input type="hidden" name="follow_up_trans_type_1" value="[% HTML.escape(type) %]">
+    <input type="hidden" name="follow_up_trans_info_1" value="[% HTML.escape(follow_up_trans_info) %]">
+    <input type="hidden" name="follow_up_rowcount" value="1">
+
+    <div class="listtop">[% title %]</div>
+
+    <table width="100%">
+      <tr height="5"></tr>
+      <tr>
+        <td>
+          <table width="100%">
+            <tr valign="top">
+              <td width="50%">
+                <table width="100%">
+                  <tr>
+                    <th align="right">[% IF vc == 'customer' %]Customer[% ELSE %]Vendor[% END %]</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name          = vc,
+                           style         = 'width: 250px',
+                           DATA          = vc == 'customer' ? ALL_CUSTOMERS : ALL_VENDORS,
+                           id_sub        = 'vc_keys',
+                           label_key     = 'name',
+                           select        = vc_select,
+                           limit         = vclimit,
+                           allow_textbox = 1,
+                           onChange      = "document.getElementById('update_button').click();" -%]
+                      <input type="button" value="Details (one letter abbreviation)" onclick="show_vc_details('[% HTML.escape(vc) %]')">
+                    </td>
+                  </tr>
+[%- IF ALL_CONTACTS.size %]
+                  <tr>
+                    <th align="right">Contact Person</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'cp_id',
+                           style      = 'width: 250px',
+                           DATA       = ALL_CONTACTS,
+                           id_key     = 'cp_id',
+                           label_sub  = 'contact_labels',
+                           show_empty = 1 -%]
+                    </td>
+                  </tr>
+[%- END %]
+[%- IF ALL_SHIPTO.size %]
+                  <tr>
+                    <th align="right">Shipping Address</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'shipto_id',
+                           style      = 'width: 250px',
+                           DATA       = ALL_SHIPTO,
+                           id_key     = 'shipto_id',
+                           label_sub  = 'shipto_labels',
+                           show_empty = 1,
+                           onChange   = "document.getElementById('update_button').click();" -%]
+                    </td>
+                  </tr>
+[%- END %]
+[%- IF is_order %]
+                  <tr>
+                    <td align="right">Credit Limit</td>
+                    <td>[% LxERP.format_amount(creditlimit, 0) %]; Remaining <span class="plus[% is_credit_remaining_negativ %]">[% LxERP.format_amount(creditremaining, 0) %]</span></td>
+                  </tr>
+[%- END %]
+[%- IF business %]
+                  <tr>
+                    <th align="right">[% business_label %]</th>
+                    <td>[% HTML.escape(business) %]; Trade Discount [% LxERP.format_percent(tradediscount) %] %</td>
+                  </tr>
+[%- END %]
+[%- IF max_dunning_level %]
+                  <tr>
+                    <th align="right">Max. Dunning Level:</th>
+                    <td>
+                      <b>[% HTML.escape(max_dunning_level) %]</b>;
+                      Dunning Amount: <b>[% LxERP.format_amount(dunning_amount, 2) %]</b>
+                    </td>
+                  </tr>
+[%- END %]
+                  <tr>
+                    <th align="right">Steuersatz</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'taxzone_id',
+                           style      = 'width: 250px',
+                           DATA       = ALL_TAXZONES,
+                           id_key     = 'id',
+                           label_key  = 'description' -%]
+                    </td>
+                  </tr>
+[%- IF ALL_DEPARTMENTS %]
+                  <tr>
+                    <th align="right" nowrap>Department</th>
+                    <td colspan="3">
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'department_id',
+                           style      = 'width: 250px',
+                           DATA       = ALL_DEPARTMENTS,
+                           id_key     = 'id',
+                           label_sub  = 'department_labels',
+                           show_empty = 1 -%]
+                    </td>
+                  </tr>
+[%- END %]
+                  <tr>
+[%- IF currencies %]
+                  <tr>
+                    <th align="right">Currency</th>
+                    <td>[% currencies %]</td>
+                  </tr>
+[%- END %]
+[%- IF show_exchangerate %]
+                  <tr>
+                    <th align="right">Exchangerate</th>
+                    <td>
+                     [%- IF forex %]
+                      [% LxERP.format_amount(exchangerate, 2) %]
+                     [%- ELSE %]
+                      <input name="exchangerate" size="10" value="[% HTML.escape(LxERP.format_amount(exchangerate)) %]">
+                     [%- END %]
+                    </td>
+                  </tr>
+[%- END %]
+                  <tr>
+                    <th align="right">Shipping Point</th>
+                    <td colspan="3"><input name="shippingpoint" size="35" value="[% HTML.escape(shippingpoint) %]"></td>
+                  </tr>
+                  <tr>
+                    <th align="right">Ship via</th>
+                    <td colspan="3"><input name="shipvia" size="35" value="[% HTML.escape(shipvia) %]"></td>
+                  </tr>
+                  <tr>
+                    <th align="right">Transaction description</th>
+                    <td colspan="3"><input name="transaction_description" size="35" value="[% HTML.escape(transaction_description) %]"></td>
+                  </tr>
+[%- IF show_delivery_customer %]
+                  <tr>
+                    <td colspan="4">
+                      <table>
+                        <tr>
+                          <td colspan="2">
+                          <button type="button" onclick="delivery_customer_selection_window('delivery_customer_string','delivery_customer_id')">Choose Customer</button>
+                        </td>
+                          <td colspan="2"><input type="hidden" name="delivery_customer_id" value="[% HTML.escape(delivery_customer_id) %]">
+                          <input size="45" id="delivery_customer_string" name="delivery_customer_string" value="[% HTML.escape(delivery_customer_string) %]"></td>
+                        </tr>
+                        <tr>
+                          <td colspan="2">
+                            <button type="button" onclick="vendor_selection_window('delivery_vendor_string','delivery_vendor_id')">Choose Vendor</button>
+                          </td>
+                          <td colspan="2"><input type="hidden" name="delivery_vendor_id" value="[% HTML.escape(delivery_vendor_id) %]">
+                          <input size="45" id="vendor_string" name="delivery_vendor_string" value="[% HTML.escape(delivery_vendor_string) %]"></td>
+                        </tr>
+                      </table>
+                    </td>
+                  </tr>
+[%- END %]
+                </table>
+              </td>
+              <td align="right">
+                <table>
+              [% openclosed %]
+                  <tr>
+                    <th align="right">Employee</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'employee_id',
+                           DATA       = ALL_EMPLOYEES,
+                           id_key     = 'id',
+                           label_sub  = 'sales_employee_labels' -%]
+                    </td>
+                  </tr>
+[%- IF is_sales and ALL_SALESMEN.size %]
+                  <tr>
+                    <th align="right">Salesman</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'salesman_id',
+                           default    = salesman_id ? salesman_id : employee_id,
+                           DATA       = ALL_SALESMEN,
+                           id_key     = 'id',
+                           label_sub  = 'sales_employee_labels' -%]
+                    </td>
+                  </tr>
+[%- END %]
+[%- IF is_order %]
+                  <tr>
+                    <th width="70%" align="right" nowrap>Order Number</th>
+                    <td><input name="ordnumber" size="11" value="[% HTML.escape(ordnumber) %]"></td>
+                  </tr>
+[%- END %]
+                  <tr>
+                    <th width="70%" align="right" nowrap>[% IF is_req_quo %]RFQ Number[% ELSE %]Quotation Number[% END %]</th>
+                    <td><input name="quonumber" size="11" value="[% HTML.escape(quonumber) %]"></td>
+                  </tr>
+[%- IF is_order %]
+                  <tr>
+                    <th width="70%" align="right" nowrap>Customer Order Number</th>
+                    <td><input name="cusordnumber" size="11" value="[% HTML.escape(cusordnumber) %]"></td>
+                  </tr>
+[%- END %]
+                  <tr>
+                    <th align="right" nowrap>
+                     [%- IF is_order %]
+                      Order Date
+                     [%- ELSE %]
+                      Quotation Date
+                     [%- END %]
+                    </th>
+                    <td nowrap>
+                      <input name=transdate id=transdate size=11 title="[% HTML.escape(dateformat) %]" value="[% transdate %]" onBlur="check_right_date_format(this)">
+                      <input type=button name=transdate id="trigger1" value="button">
+                    </td>
+                  </tr>
+                  <tr>
+                    <th align="right" nowrap>
+                     [%- IF is_sales_quo %]
+                      Valid until
+                     [%- ELSE %]
+                      Required by
+                     [%- END %]
+                    </th>
+                    <td nowrap>
+                      <input name=reqdate id=reqdate size=11 title="[% HTML.escape(dateformat) %]" value="[% reqdate %]" onBlur="check_right_date_format(this)">
+                      <input type=button name=reqdate id="trigger2" value="button">
+                    </td>
+                  </tr>
+                  <tr>
+                    <th width="70%" align="right" nowrap>Project Number</th>
+                    <td>
+                      [%- INCLUDE 'generic/multibox.html'
+                           name       = 'globalproject_id',
+                           DATA       = ALL_PROJECTS,
+                           id_key     = 'id',
+                           label_key  = 'projectnumber',
+                           show_empty = 1,
+                           onChange   = "document.getElementById('update_button').click();" -%]
+                    </td>
+                  </tr>
+                </table>
+              </td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+
+    <script type="text/javascript">
+     <!--
+       Calendar.setup({ inputField : "transdate", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger1" });
+       Calendar.setup({ inputField : "reqdate", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger2" });
+     //-->
+    </script>
diff --git a/templates/webpages/oe/orders_bottom_en.html b/templates/webpages/oe/orders_bottom_en.html
new file mode 100644 (file)
index 0000000..fe17a83
--- /dev/null
@@ -0,0 +1,11 @@
+[% USE HTML %]
+ [%- IF SHOW_CONTINUE_BUTTON %]
+ New sales order<br>
+ <input class="submit" type="submit" name="action" value="Continue">
+ [%- END %]
+ <input type="hidden" name="nextsub" value="edit">
+ <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+</form>
diff --git a/templates/webpages/oe/orders_top_en.html b/templates/webpages/oe/orders_top_en.html
new file mode 100644 (file)
index 0000000..f6bc1de
--- /dev/null
@@ -0,0 +1 @@
+<form method="post" action="oe.pl">
diff --git a/templates/webpages/oe/report_for_todo_list_en.html b/templates/webpages/oe/report_for_todo_list_en.html
new file mode 100644 (file)
index 0000000..933b762
--- /dev/null
@@ -0,0 +1,44 @@
+[% USE HTML %][% USE LxERP %]
+
+<div class="listtop">Overdue sales quotations and requests for quotations</div>
+
+<p>
+ <table width="100%">
+  <tr>
+   <td class="listheading">Date</td>
+   <td class="listheading">Valid until</td>
+   <td class="listheading">Sales quotation / Request quotation</td>
+   <td class="listheading">Customer / Vendor</td>
+   <td class="listheading">Transaction description</td>
+   <td class="listheading">Amount</td>
+   <td class="listheading">Employee</td>
+  </tr>
+
+  [%- FOREACH row = QUOTATIONS %]
+  <tr class="listrow[% loop.count % 2 %]">
+   <td>[% HTML.escape(row.transdate) %]</td>
+   <td>[% HTML.escape(row.reqdate) %]</td>
+   <td>
+    <a href="[% edit_url %]&vc=[% HTML.url(row.vc) %]&type=[% IF row.vc == 'customer' %]sales_quotation[% ELSE %]request_quotation[% END %]&id=[% HTML.url(row.id) %]">
+     [% IF row.vc == 'customer' %]
+     Sales quotation
+     [% ELSE %]
+     Request quotation
+     [% END %]
+     [% HTML.escape(row.quonumber) %]
+    </a>
+   </td>
+   <td>
+    [% IF row.vc == 'customer' %]
+    [% HTML.escape(row.customer) %]
+    [% ELSE %]
+    [% HTML.escape(row.vendor) %]
+    [% END %]
+   </td>
+   <td>[% HTML.escape(row.transaction_description) %]</td>
+   <td>[% HTML.escape(LxERP.format_amount(row.amount, 2)) %]</td>
+   <td>[% HTML.escape(row.employee) %]</td>
+  </tr>
+  [%- END %]
+ </table>
+</p>
diff --git a/templates/webpages/oe/sales_order_en.html b/templates/webpages/oe/sales_order_en.html
new file mode 100644 (file)
index 0000000..e9be280
--- /dev/null
@@ -0,0 +1,28 @@
+[% USE HTML %]
+<tr>
+ <td>
+  <input type="hidden" name="show_details" value="[% HTML.escape(show_details) %]">
+  <input type="checkbox" id="cb_show_details" onclick="show_form_details([% IF show_details %]0[% ELSE %]1[% END %]);"[%- IF show_details %] checked[% END %]>
+  <label for="cb_show_details">Show details</label><br>
+  <table width="100%">
+   <tr class="listheading">[% FOREACH header = HEADER %][% IF header.display %]
+    <th align="left" nowrap width="[% header.width %]" class="listheading">[% header.value %]</th>[% END %][% END %]
+   </tr>
+
+   [% FOREACH row = ROWS %]
+     <tr valign="top" class="[% IF row.error %]error_message[% ELSE %]listrow[% loop.count % 2 %][% END %]">[% FOREACH row1 = row.ROW1 %]
+      <td align="[% row1.align %]"[% IF row1.nowrap %] nowrap[% END %]>[% row1.value %]</td>[% END %]
+     </tr>
+
+     [% FOREACH hidden = row.HIDDENS %][% hidden.value %]
+     [% END %]
+
+     <tr class="listrow[% loop.count % 2 %]" [% UNLESS show_details %]style="display:none;"[% END %]><td colspan="[% row.colspan %]">[% FOREACH row2 = row.ROW2 %]
+      [% IF row2.line_break %]<br/>[% END %]
+      [% row2.value %][% END %]
+     </td></tr>
+   [% END %]
+
+  </table>
+ </td>
+</tr>
diff --git a/templates/webpages/oe/search_en.html b/templates/webpages/oe/search_en.html
new file mode 100644 (file)
index 0000000..5d3d103
--- /dev/null
@@ -0,0 +1,270 @@
+[%- USE HTML %]
+[%- SET vclabel = vc == 'customer' ? 'Customer' : 'Vendor' %]
+<body>
+
+<form method="post" action="oe.pl">
+
+ <p><div class="listtop">[% HTML.escape(title) %]</div></p>
+
+<table width="100%">
+ <tr>
+  <td>
+   <table>
+    <tr>
+     <th align="right">[% HTML.escape(vclabel) %]</th>
+     <td colspan="3">
+            [%- INCLUDE 'generic/multibox.html'
+                 name          = vc,
+                 default       = vc == 'customer' ? oldcustomer : oldvendor,
+                 style         = 'width: 250px',
+                 DATA          = ALL_VC,
+                 id_sub        = 'vc_keys',
+                 label_key     = 'name',
+                 select        = vc_select,
+                 limit         = vclimit,
+                 show_empty    = 1,
+                 allow_textbox = 1,
+                 -%]
+     </td>
+    </tr>
+[%- IF ALL_DEPARTMENTS.size %]
+    <tr>
+     <th align="right" nowrap>Department</th>
+     <td colspan="3">
+            [%- INCLUDE 'generic/multibox.html'
+                 name          = 'department_id',
+                 style         = 'width: 250px',
+                 DATA          = ALL_DEPARTMENTS,
+                 id_key        = 'id',
+                 label_key     = 'description',
+                 limit         = vclimit,
+                 show_empty    = 1,
+                 allow_textbox = 1,
+            -%]
+     </td>
+    </tr>
+[%- END %]
+    <tr>
+     <th align="right">[% HTML.escape(ordlabel) %]</th>
+     <td colspan="3"><input name="[% HTML.escape(ordnrname) %]" style="width: 250px"></td>
+    </tr>
+    <tr>
+     <th align="right">Employee</th>
+     <td>
+            [%- INCLUDE 'generic/multibox.html'
+                 name          = 'employee_id',
+                 style         = 'width: 250px',
+                 DATA          =  ALL_EMPLOYEES,
+                 id_key        = 'id',
+                 label_sub     = 'employee_labels',
+                 limit         = vclimit,
+                 show_empty    = 1,
+                 allow_textbox = 0,
+                 default       = ' ',
+            -%]
+     </td>
+    </tr>
+    <tr>
+     <th align="right">Salesman</th>
+     <td>
+            [%- INCLUDE 'generic/multibox.html'
+                 name          = 'salesman_id',
+                 style         = 'width: 250px',
+                 DATA          =  ALL_SALESMEN,
+                 id_key        = 'id',
+                 label_sub     = 'salesman_labels',
+                 limit         = vclimit,
+                 show_empty    = 1,
+                 allow_textbox = 0,
+            -%]
+     </td>
+    </tr>
+    <tr>
+     <th align="right">Transaction description</th>
+     <td colspan="3"><input name="transaction_description" style="width: 250px"></td>
+    </tr>
+    <tr>
+     <th align="right">Project Number</th>
+     <td colspan="3">
+            [%- INCLUDE 'generic/multibox.html'
+                 name          =  vclimit < ALL_PROJECTS.size ? 'projectnumber' : 'project_id',
+                 style         = "width: 250px",
+                 DATA          =  ALL_PROJECTS,
+                 id_key        = 'id',
+                 label_key     = 'projectnumber',
+                 limit         = vclimit,
+                 show_empty    = 1,
+                 allow_textbox = 1,
+            -%]
+     </td>
+    </tr>
+    <tr>
+     <th align="right">Order Date From</th>
+     <td>
+      <input name="transdatefrom" id="transdatefrom" size="11" title="[% HTML.escape(dateformat) %]" onBlur="check_right_date_format(this)">
+      <input type="button" name="transdatefrom" id="trigger3" value="?">
+     </td>
+     <th align="right">Bis</th>
+     <td>
+      <input name="transdateto" id="transdateto" size="11" title="[% HTML.escape(dateformat) %]" onBlur="check_right_date_format(this)">
+      <input type="button" name="transdateto" name="transdateto" id="trigger4" value="?">
+     </td>
+    </tr>
+    <tr>
+     <th align="right">Delivery Date From</th>
+     <td>
+      <input name=reqdatefrom id=reqdatefrom size=11 title="[% HTML.escape(dateformat) %]" onBlur="check_right_date_format(this)">
+      <input type=button name=reqdatefrom id="trigger5" value=?>
+     </td>
+     <th align="right">Bis</th>
+     <td>
+      <input name=reqdateto id=reqdateto size=11 title="[% HTML.escape(dateformat) %]" onBlur="check_right_date_format(this)">
+      <input type=button name=reqdateto name=reqdateto id="trigger6" value=?>
+     </td>
+    </tr>
+    <tr>
+     <th align="right">Include in Report</th>
+     <td colspan="5">
+      <table>
+       <tr>
+        <td>
+         <input type="checkbox" name="open" value="1" id="open" checked>
+         <label for="open">Open</label>
+        </td>
+        <td>
+         <input type="checkbox" name="closed" value="1" id="closed">
+         <label for="closed">Closed</label>
+        </td>
+       </tr>
+[%- IF type == 'sales_order' OR type == 'purchase_order' %]
+       <tr>
+        <td>
+         <input name="notdelivered" id="notdelivered" class="checkbox" type="checkbox" value="1" checked>
+         <label for="notdelivered">Not delivered</label>
+        </td>
+        <td>
+         <input name="delivered" id="delivered" class="checkbox" type="checkbox" value="1" checked>
+         <label for="delivered">Delivered</label>
+        </td>
+       </tr>
+[%- END %]
+       <tr>
+        <td>
+         <input name="l_id" id="l_id" class="checkbox" type="checkbox" value="Y">
+         <label for="l_id">ID</label>
+        </td>
+        <td>
+         <input name="l_[% HTML.escape(ordnrname) %]" id="l_[% HTML.escape(ordnrname) %]" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_[% HTML.escape(ordnrname) %]">[% HTML.escape(ordlabel) %]</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_transdate" id="l_transdate" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_transdate">Date</label>
+        </td>
+        <td>
+         <input name="l_reqdate" id="l_reqdate" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_reqdate">Required by</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_name" id="l_name" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_name">[% HTML.escape(vclabel) %]
+        </td>
+        <td>
+         <input name="l_employee" id="l_employee" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_employee">Employee</label>
+        </td>
+        <td>
+         <input name="l_shipvia" id="l_shipvia" class="checkbox" type="checkbox" value="Y">
+         <label for="l_shipvia">Ship via</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_netamount" id="l_netamount" class="checkbox" type="checkbox" value="Y">
+         <label for="l_netamount">Amount</label>
+        </td>
+        <td>
+         <input name="l_tax" id="l_tax" class="checkbox" type="checkbox" value="Y">
+         <label for="l_tax">Tax</label>
+        </td>
+        <td>
+         <input name="l_amount" id="l_amount" class="checkbox" type="checkbox" value="Y" checked>
+         <label for="l_amount">Total</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_marge_total" id="l_marge_total" class="checkbox" type="checkbox" value="Y">
+         <label for="l_marge_total">Ertrag</label>
+        </td>
+        <td>
+         <input name="l_marge_percent" id="l_marge_percent" class="checkbox" type="checkbox" value="Y">
+         <label for="l_marge_percent">Ertrag prozentual</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_globalprojectnumber" id="l_globalprojectnumber" class="checkbox" type="checkbox" value="Y">
+         <label for="l_globalprojectnumber">Project Number</label>
+        </td>
+        <td>
+         <input name="l_transaction_description" id="l_transaction_description" class="checkbox" type="checkbox" value="Y">
+         <label for="l_transaction_description">Transaction description</label>
+        </td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_subtotal" id="l_subtotal" class="checkbox" type="checkbox" value="Y">
+         <label for="l_subtotal">Subtotal</label>
+        </td>
+        <td>
+         <input name="l_salesman" id="l_salesman" class="checkbox" type="checkbox" value="Y">
+         <label for="l_salesman">Salesman</label>
+        </td>
+       </tr>
+       <tr>
+        <td colspan=4 align=left><b>Customer</td>
+       </tr>
+       <tr>
+        <td>
+         <input name="l_country" id="l_country" class="checkbox" type="checkbox" value="Y">
+         <label for="l_country">Country</label>
+        </td>
+        <td>
+         <input name="l_ustid"  id="l_ustid" class="checkbox" type="checkbox" value="Y">
+         <label for="l_ustid">USt-IdNr.</label>
+        </td>
+       </tr>
+[%- IF type == 'sales_order' %]
+       <tr><td colspan="3"><hr></td></tr>
+[%- END %]
+      </table>
+     </td>
+    </tr>
+   </table>
+  </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+   Calendar.setup({ inputField : "transdatefrom", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger3" });
+   Calendar.setup({ inputField : "transdateto",   ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger4" });
+   Calendar.setup({ inputField : "reqdatefrom",   ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger5" });
+   Calendar.setup({ inputField : "reqdateto",     ifFormat :"[% myconfig_jsc_dateformat %]", align : "BL", button : "trigger6" });
+ //-->
+</script>
+
+<br>
+<input type="hidden" name="nextsub" value="orders">
+<input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+<input type="hidden" name="type" value="[% HTML.escape(type) %]">
+<input class="submit" type="submit" name="action" value="Continue">
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/projects/project_form_en.html b/templates/webpages/projects/project_form_en.html
new file mode 100644 (file)
index 0000000..74c4694
--- /dev/null
@@ -0,0 +1,101 @@
+[% USE HTML %][% USE LxERP %]<body>
+
+ [%- IF message %]
+ <p>[% message %]</p>
+
+ <hr>
+ [%- END %]
+
+ <p><div class="listtop">[% title %]</div></p>
+
+ <form method="post" action="projects.pl">
+
+  <input type="hidden" name="project.id" value="[% HTML.escape(project.id) %]">
+  <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+
+  <ul id="maintab" class="shadetabs">
+   <li class="selected"><a href="#" rel="basic_data">Basic data</a></li>
+   [%- IF CUSTOM_VARIABLES.size %]
+   <li><a href="#" rel="custom_variables">Custom Variables</a></li>
+   [%- END %]
+  </ul>
+
+  <div class="tabcontentstyle">
+
+   <div id="basic_data" class="tabcontent">
+
+    <table>
+     <tr>
+      <th align="right">Number</th>
+      <td><input name="project.projectnumber" size="20" value="[% HTML.escape(project.projectnumber) %]"></td>
+     </tr>
+
+     <tr>
+      <th align="right">Description</th>
+      <td>
+       [%- SET rows = LxERP.numtextrows(project.description, 60) %]
+       [%- IF rows > 1 %]
+       <textarea name="project.description" rows="rows" cols="60" style="width: 100%" wrap="soft">[% HTML.escape(project.description) %]</textarea>
+       [%- ELSE %]
+       <input name="project.description" size="60" value="[% HTML.escape(project.description) %]">
+       [%- END %]
+      </td>
+     </tr>
+
+     [%- IF project.id %]
+     <tr>
+      <th align="right">&nbsp;</th>
+      <td>
+       <input type="radio" name="project.active" id="active_1" value="1"[% IF project.active %] checked[% END %]><label for="active_1">Active</label>
+       <input type="radio" name="project.active" id="active_0" value="0"[% IF !project.active %] checked[% END %]><label for="active_0">Inactive</label>
+      </td>
+     </tr>
+     [%- END %]
+    </table>
+
+    <br style="clear: left" />
+   </div>
+
+   [%- IF CUSTOM_VARIABLES.size %]
+   <div id="custom_variables" class="tabcontent">
+
+    <p>
+     <table>
+      [%- FOREACH var = CUSTOM_VARIABLES %]
+      <tr>
+       <td align="right" valign="top">[% HTML.escape(var.description) %]</td>
+       <td valign="top">[% var.HTML_CODE %]</td>
+      </tr>
+      [%- END %]
+     </table>
+    </p>
+
+    <br style="clear: left" />
+   </div>
+   [%- END %]
+
+  </div>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Save">
+   [%- IF project.id %]
+   <input type="submit" class="submit" name="action" value="Save as new">
+   [%- IF project.orphaned %]
+   <input type="submit" class="submit" name="action" value="Delete">
+   [%- END %]
+   <input type="button" onclick="set_history_window([% HTML.escape(project.id) %]);" name="history" id="history" value="history">
+   [%- END %]
+  </p>
+ </form>
+
+ <script type="text/javascript">
+  <!--
+      var maintab = new ddtabcontent("maintab");
+      maintab.setpersist(true);
+      maintab.setselectedClassTarget("link"); //"link" or "linkparent"
+      maintab.init();
+    -->
+ </script>
+
+</body>
+</html>
diff --git a/templates/webpages/projects/search_en.html b/templates/webpages/projects/search_en.html
new file mode 100644 (file)
index 0000000..6e71300
--- /dev/null
@@ -0,0 +1,69 @@
+[% USE HTML %]<body>
+
+ <form method="post" action="projects.pl">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right">Number</th>
+     <td><input name="filter.projectnumber" size="20"></td>
+    </tr>
+
+    <tr>
+     <th align="right">Description</th>
+     <td><input name="filter.description" size="60"></td>
+    </tr>
+
+    [% CUSTOM_VARIABLES_FILTER_CODE %]
+
+    <tr>
+     <th>Include in Report</th>
+     <td>
+      <table>
+       <tr>
+        <td>
+         <input type="radio" name="filter.active" id="active_active" value="active" checked>
+         <label for="active_active">Active</label>
+        </td>
+        <td>
+         <input type="radio" name="filter.active" id="active_inactive" value="inactive">
+         <label for="active_inactive">Inactive</label>
+        </td>
+        <td>
+         <input type="radio" name="filter.active" id="active_both" value="both">
+         <label for="active_both">Both</label>
+        </td>
+       </tr>
+
+       <tr>
+        <td>
+         <input type="radio" name="filter.status" id="status_all" value="all" checked>
+         <label for="status_all">All</label>
+        </td>
+        <td>
+         <input type="radio" name="filter.status" id="status_orphaned" value="orphaned">
+         <label for="status_orphaned">Orphaned</label>
+        </td>
+       </tr>
+
+       [% CUSTOM_VARIABLES_INCLUSION_CODE %]
+
+      </table>
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <input type="hidden" name="nextsub" value="project_report">
+
+  <p>
+   <input class="submit" type="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/report_generator/csv_export_options_en.html b/templates/webpages/report_generator/csv_export_options_en.html
new file mode 100644 (file)
index 0000000..0cbf072
--- /dev/null
@@ -0,0 +1,86 @@
+[% USE HTML %]<body>
+
+ <script type="text/javascript">
+  <!--
+      function submit_report_generator_form(nextsub) {
+        document.report_generator_form.report_generator_dispatch_to.value = nextsub;
+        document.report_generator_form.submit();
+      }
+
+    -->
+ </script>
+
+ <div class="listheading" width="100%">[% HTML.escape(title) %]</div>
+
+ <form action="[% HTML.escape(script) %]" method="post" name="report_generator_form">
+
+  [%- FOREACH var = HIDDEN %]
+  <input type="hidden" name="[% HTML.escape(var.key) %]" value="[% HTML.escape(var.value) %]">
+  [%- END %]
+
+  <input type="hidden" name="report_generator_csv_options_set" value="1">
+  <input type="hidden" name="report_generator_dispatch_to" value="">
+  <input type="hidden" name="action" value="report_generator_dispatcher">
+
+  <table>
+   <tr>
+    <td align="right">Quote chararacter</td>
+    <td>
+     <select name="report_generator_csv_options_quote_char" style="width: 300px">
+      <option value="&quot;" selected>&quot;</option>
+      <option value="'">'</option>
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right">Escape character</td>
+    <td>
+     <select name="report_generator_csv_options_escape_char" style="width: 300px">
+      <option value="QUOTE_CHAR" selected>Same as the quote character</option>
+      <option value="&quot;">&quot;</option>
+      <option value="'">'</option>
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right">Separator chararacter</td>
+    <td>
+     <select name="report_generator_csv_options_sep_char" style="width: 300px">
+      <option value=";" selected>;</option>
+      <option value=",">,</option>
+      <option value=":">:</option>
+      <option value="TAB">TAB (The tabulator character)</option>
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right">Line endings</td>
+    <td>
+     <select name="report_generator_csv_options_eol_style" style="width: 300px">
+      <option value="DOS">DOS/Windows (CR/LF)</option>
+      <option value="Unix" selected>Unix (LF)</option>
+     </select>
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right" valign="top">Options:</td>
+    <td valign="top">
+     <input type="checkbox" name="report_generator_csv_options_headers" id="report_generator_csv_options_headers" value="1" checked>
+     <label for="report_generator_csv_options_headers">Include column headings</label>
+    </td>
+   </tr>
+
+  </table>
+
+  <p>
+   <input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_export_as_csv')" value="Export as CSV">
+   <input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_back')" value="Back">
+  </p>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/report_generator/html_report_en.html b/templates/webpages/report_generator/html_report_en.html
new file mode 100644 (file)
index 0000000..b019a46
--- /dev/null
@@ -0,0 +1,118 @@
+[% USE HTML %]<body>
+
+ <script type="text/javascript">
+  <!--
+      function submit_report_generator_form(nextsub) {
+        document.report_generator_form.report_generator_dispatch_to.value = nextsub;
+        document.report_generator_form.submit();
+      }
+
+    -->
+ </script>
+
+ <style type="text/css">
+  <!--
+.top_border {
+  border-top: solid black;
+  border-width: 4px;
+}
+.bottom_border {
+  border-bottom: solid black;
+  border-width: 4px;
+}
+    -->
+ </style>
+
+ [% IF MESSAGE %]
+  <p>[% MESSAGE %]</p>
+ [% END %]
+
+ <div class="listtop" width="100%">[% TITLE %]</div>
+
+ [% IF TOP_INFO_TEXT %]
+  <p>[% TOP_INFO_TEXT %]</p>
+ [% END %]
+
+ [% RAW_TOP_INFO_TEXT %]
+
+ [% IF DATA_PRESENT %]
+ <p>
+  <table width="100%">
+   [%- FOREACH row = HEADER_ROWS %]
+   <tr>
+    [% FOREACH col = row %]
+     <th class="listheading"
+     [%- IF col.align %] align="[% HTML.escape(col.align) %]" style="text-align: [% HTML.escape(col.align) %]"[% END -%]
+     [%- IF col.colspan && col.colspan > 1 %] colspan="[% HTML.escape(col.colspan) %]"[% END -%]
+     >
+      [%- IF col.link -%]<a href="[% col.link %]">[%- END -%]
+      [%- col.text -%]
+      [%- IF col.show_sort_indicator -%]<img border="0" src="image/[% IF col.sort_indicator_direction %]down[% ELSE %]up[% END %].png">[%- END -%]
+      [%- IF col.link -%]</a>[%- END -%]
+     </th>
+    [% END %]
+   </tr>
+   [%- END %]
+
+   [% FOREACH row = ROWS %]
+    [% IF row.IS_CONTROL %]
+     [% IF row.IS_COLSPAN_DATA %]<tr><td colspan="[% row.NUM_COLUMNS %]">[% row.data %]</td></tr>[% END %]
+     [% ELSE %]
+     <tr class="listrow[% row.outer_idx_odd %]">
+      [%- FOREACH col = row.COLUMNS %]
+      <td[% IF col.align %] align="[% col.align %]"[% END %]
+         [%- IF col.valign %] valign="[% col.valign %]"[%- END %]
+         [%- IF col.colspan && col.colspan > 1 %] colspan="[% HTML.escape(col.colspan) %]"[% END -%]
+         [%- SET tdclass = '' %]
+         [%- IF row.BORDER_TOP %][%- SET tdclass = "$tdclass top_border" %][%- END %]
+         [%- IF row.BORDER_BOTTOM %][%- SET tdclass = "$tdclass bottom_border" %][%- END %]
+         [%- IF col.class %][%- SET tdclass = "$tdclass $col.class" %][%- END %]
+         [%- IF tdclass %] class="[% tdclass %]"[%- END %]>
+       [%- IF col.raw_data %][%- col.raw_data %][%- END %]
+       [%- USE iterator(col.CELL_ROWS) %][%- FOREACH cell_row = iterator %]
+        [%- IF cell_row.data != '' %]
+         [%- IF cell_row.link %]<a href="[% cell_row.link %]">[%- END %]
+         [%- cell_row.data %]
+         [%- IF cell_row.link %]</a>[%- END %]
+        [%- END %]
+       [%- UNLESS iterator.last %]<br>[%- END %]
+       [%- END %]
+      </td>
+      [%- END %]
+     </tr>
+    [% END %]
+   [% END %]
+
+   <tr><td colspan="[% NUM_COLUMNS %]"><hr size="3" noshade></td></tr>
+
+  </table>
+ </p>
+ [% ELSE %]
+  <p>No data was found.</p>
+ [% END %]
+
+ [% RAW_BOTTOM_INFO_TEXT %]
+
+ [% IF BOTTOM_INFO_TEXT %]
+  <p>[% BOTTOM_INFO_TEXT %]</p>
+ [% END %]
+
+ [% IF SHOW_EXPORT_BUTTONS %]
+  <form action="[% HTML.escape(script) %]" name="report_generator_form" method="post">
+   [% FOREACH var = EXPORT_VARIABLES %]<input type="hidden" name="report_generator_hidden_[% var.key %]" value="[% HTML.escape(var.value) %]">
+   [% END %]
+
+   <input type="hidden" name="report_generator_nextsub" value="[% HTML.escape(EXPORT_NEXTSUB) %]">
+   <input type="hidden" name="report_generator_variable_list" value="[% HTML.escape(EXPORT_VARIABLE_LIST) %]">
+   <input type="hidden" name="report_generator_dispatch_to" value="">
+   <input type="hidden" name="action" value="report_generator_dispatcher">
+
+   <p>
+    List export<br>
+    [% IF ALLOW_PDF_EXPORT %]<input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_export_as_pdf')" value="Export as PDF">[% END %]
+    [% IF ALLOW_CSV_EXPORT %]<input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_export_as_csv')" value="Export as CSV">[% END %]
+   </p>
+  </form>
+ [% END %]
+
+</body>
diff --git a/templates/webpages/report_generator/pdf_export_options_en.html b/templates/webpages/report_generator/pdf_export_options_en.html
new file mode 100644 (file)
index 0000000..26f092b
--- /dev/null
@@ -0,0 +1,143 @@
+[% USE HTML %][% USE LxERP %]<body>
+
+ [%- SET default_margin = LxERP.format_amount(1.5) %]
+
+ <script type="text/javascript">
+  <!--
+      function submit_report_generator_form(nextsub) {
+        document.report_generator_form.report_generator_dispatch_to.value = nextsub;
+        document.report_generator_form.submit();
+      }
+
+    -->
+ </script>
+
+ <div class="listheading" width="100%">[% HTML.escape(title) %]</div>
+
+ <form action="[% HTML.escape(script) %]" method="post" name="report_generator_form">
+
+  [%- FOREACH var = HIDDEN %]
+  <input type="hidden" name="[% HTML.escape(var.key) %]" value="[% HTML.escape(var.value) %]">
+  [%- END %]
+
+  <input type="hidden" name="report_generator_pdf_options_set" value="1">
+  <input type="hidden" name="report_generator_dispatch_to" value="">
+  <input type="hidden" name="action" value="report_generator_dispatcher">
+
+  <table>
+   <tr>
+    <td align="right">Orientation</td>
+    <td>
+     <select name="report_generator_pdf_options_paper_size">
+      <option value="A3">A3</option>
+      <option value="A4" selected>A4</option>
+      <option value="A5">A5</option>
+      <option value="letter">Letter</option>
+      <option value="legal">Legal</option>
+     </select>
+     <select name="report_generator_pdf_options_orientation">
+      <option value="portrait">Portrait</option>
+      <option value="landscape" selected>Landscape</option>
+     </select>
+    </td>
+   </tr>
+
+   [%- IF ALLOW_FONT_SELECTION %]
+   <tr>
+    <td align="right">Font</td>
+    <td>
+     <select name="report_generator_pdf_options_font_name">
+      <option>Courier</option>
+      <option>Georgia</option>
+      <option>Helvetica</option>
+      <option>Times</option>
+      <option selected>Verdana</option>
+     </select>
+    </td>
+   </tr>
+   [%- END %]
+
+   <tr>
+    <td align="right">Font size</td>
+    <td>
+     <select name="report_generator_pdf_options_font_size">
+      <option>6</option>
+      <option selected>7</option>
+      <option>8</option>
+      <option>9</option>
+      <option>10</option>
+      <option>11</option>
+      <option>12</option>
+      <option>13</option>
+      <option>14</option>
+      <option>15</option>
+     </select>
+     &nbsp;
+     pt
+    </td>
+   </tr>
+
+   <tr>
+    <td align="right">Margins:</td>
+   </tr>
+
+   <tr>
+    <td align="right">Top</td>
+    <td><input name="report_generator_pdf_options_margin_top" size="4" value="[% HTML.escape(default_margin) %]"> cm</td>
+   </tr>
+
+   <tr>
+    <td align="right">Left</td>
+    <td><input name="report_generator_pdf_options_margin_left" size="4" value="[% HTML.escape(default_margin) %]"> cm</td>
+   </tr>
+
+   <tr>
+    <td align="right">Bottom</td>
+    <td><input name="report_generator_pdf_options_margin_bottom" size="4" value="[% HTML.escape(default_margin) %]"> cm</td>
+   </tr>
+
+   <tr>
+    <td align="right">Right</td>
+    <td><input name="report_generator_pdf_options_margin_right" size="4" value="[% HTML.escape(default_margin) %]"> cm</td>
+   </tr>
+
+   <tr>
+    <td align="right" valign="top">Options:</td>
+    <td valign="top">
+     <input type="checkbox" name="report_generator_pdf_options_number" id="report_generator_pdf_options_number" value="1" checked>
+     <label for="report_generator_pdf_options_number">Number pages</label>
+     [% IF ALL_PRINTERS.size %]
+      <br>
+      <input type="checkbox" name="report_generator_pdf_options_print" id="report_generator_pdf_options_print" value="1">
+      <label for="report_generator_pdf_options_print">Print list</label>
+     [% END %]
+    </td>
+   </tr>
+
+   [% IF ALL_PRINTERS.size %]
+    <tr>
+     <td align="right">Printer</td>
+     <td>
+      <select name="report_generator_pdf_options_printer_id">
+       [%- FOREACH printer = ALL_PRINTERS %]
+       <option value="[% HTML.escape(printer.id) %]"[% IF printer.selected %] selected[% END %]>[% HTML.escape(printer.printer_description) %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td align="right">Copies</td>
+     <td><input name="report_generator_pdf_options_copies" size="4" value="[% HTML.escape(copies) %]"></td>
+    </tr>
+   [% END %]
+  </table>
+
+  <p>
+   <input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_export_as_pdf')" value="Export as PDF">
+   <input type="submit" class="submit" onclick="submit_report_generator_form('report_generator_back')" value="Back">
+  </p>
+
+ </form>
+</body>
+</html>
diff --git a/templates/webpages/rp/aging_ar_bottom_en.html b/templates/webpages/rp/aging_ar_bottom_en.html
new file mode 100644 (file)
index 0000000..3ddd62a
--- /dev/null
@@ -0,0 +1,19 @@
+[% USE HTML %] <input type="hidden" name="rowcount" value="[% HTML.escape(row_idx) %]">
+
+ [% PRINT_OPTIONS %]
+
+ <input type="hidden" name="todate" value="[% HTML.escape(todate) %]">
+ <input type="hidden" name="title" value="[% HTML.escape(title) %]">
+ <input type="hidden" name="arap" value="[% HTML.escape(arap) %]">
+ <input type="hidden" name="ct" value="[% HTML.escape(ct) %]">
+ <input type="hidden" name="customer" value="[% HTML.escape(customer) %]">
+ <input type="hidden" name="vendor" value="[% HTML.escape(vendor) %]">
+ <input type="hidden" name="department" value="[% HTML.escape(department) %]">
+
+ Statement
+ <br>
+ <input class="submit" type="submit" name="action" value="Select all">
+ <input class="submit" type="submit" name="action" value="Print">
+ <input class="submit" type="submit" name="action" value="E-mail">
+
+</form>
diff --git a/templates/webpages/rp/aging_ar_top_en.html b/templates/webpages/rp/aging_ar_top_en.html
new file mode 100644 (file)
index 0000000..066ac98
--- /dev/null
@@ -0,0 +1 @@
+<form method="post" action="rp.pl">
diff --git a/templates/webpages/rp/balance_sheet_en.html b/templates/webpages/rp/balance_sheet_en.html
new file mode 100644 (file)
index 0000000..ec47e65
--- /dev/null
@@ -0,0 +1,117 @@
+[%- USE HTML %]
+[%- USE LxERP %]
+<body bgcolor="#ffffff">
+
+<h2 align="center">
+[% company %]
+<br>[% address %]
+<p>BALANCE SHEET
+<br>[% period %]
+</h2>
+
+<table border="0">
+  <tr>
+    <th align="left" width="400" colspan="2">ASSETS<br><hr align="left" width="250" size="5" noshade></th>
+    <th>[% this_period %]</th>
+    <th>[% last_period %]</th>
+  </tr>
+
+  [% FOREACH row = A %]
+  <tr>
+    <td> </td>
+    <td>[% row.accno _ ' - ' IF l_accno %][% row.description %]</td>
+    <td align="right">[% LxERP.format_amount(row.this, decimalplaces) %]</td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(row.last, decimalplaces) %]</td>
+    [%- END %]
+  </tr>
+  [% END %]
+
+[% IF l_subtotal %]
+  <tr>
+    <td colspan="2"> </td>
+    <td><hr noshade size="1"></td>
+    <td><hr noshade size="1"></td>
+  </tr>
+
+  <tr valign="top">
+    <th align="left" colspan="2">TOTAL</th>
+    <td align="right">[% LxERP.format_amount(total.A.this, decimalplaces) %]<hr noshade size="2"></td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(total.A.last, decimalplaces) %]<hr noshade size="2"></td>
+    [%- END %]
+  </tr>
+[% END %]
+
+  <tr>
+    <th align="left" colspan="4">LIABILITIES<b><hr align="left" width="250" size="5" noshade></th>
+  </tr>
+
+  [% FOREACH row = L %]
+  <tr>
+    <td></td>
+    <td>[% row.accno _ ' - ' IF l_accno %][% row.description %]</td>
+    <td align="right">[% LxERP.format_amount(row.this, decimalplaces) %]</td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(row.last, decimalplaces) %]</td>
+    [%- END %]
+  </tr>
+  [% END %]
+
+[% IF l_subtotal %]
+  <tr>
+    <td colspan="2"> </td>
+    <td><hr noshade size="1"></td>
+    <td><hr noshade size="1"></td>
+  </tr>
+
+  <tr valign="top">
+    <td></td>
+    <th align="left">TOTAL</th>
+    <td align="right">[% LxERP.format_amount(total.L.this, decimalplaces) %]<br><hr noshade size="2"</td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(total.L.last, decimalplaces) %]<br><hr noshade size="2"</td>
+    [%- END %]
+  </tr>
+[% END %]
+
+  <tr>
+    <th align="left" colspan="4">EQUITY<br><hr align="left" width="250" size="5" noshade></th>
+  </tr>
+
+  [% FOREACH row = Q %]
+  <tr>
+    <td></td>
+    <td>[% row.description %]</td>
+    <td align="right">[% LxERP.format_amount(row.this, decimalplaces) %]</td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(row.last, decimalplaces) %]</td>
+    [%- END %]
+  </tr>
+  [% END  %]
+
+[% IF l_subtotal %]
+  <tr>
+    <td colspan="2"> </td>
+    <td><hr noshade size="1"></td>
+    <td><hr noshade size="1"></td>
+  </tr>
+
+  <tr valign="top">
+    <td></td>
+    <th align="left">TOTAL</th>
+    <td align="right">[% LxERP.format_amount(total.Q.this, decimalplaces) %]<br><hr noshade size="2"</td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(total.Q.last, decimalplaces) %]<br><hr noshade size="2"</td>
+    [%- END %]
+  </tr>
+[% END %]
+
+  <tr valign="top">
+    <th align="left" colspan="2">TOTAL LIABILITIES &amp; EQUITY</th>
+    <td align="right">[% LxERP.format_amount(total.this, decimalplaces) %]<br><hr noshade size="2"></td>
+    [%- IF last_period %]
+    <td align="right">[% LxERP.format_amount(total.last, decimalplaces) %]<br><hr noshade size="2"></td>
+    [%- END %]
+  </tr>
+</table>
diff --git a/templates/webpages/rp/html_report_susa_en.html b/templates/webpages/rp/html_report_susa_en.html
new file mode 100644 (file)
index 0000000..0828899
--- /dev/null
@@ -0,0 +1,120 @@
+[% USE HTML %]<body>
+
+ <script type="text/javascript">
+  <!--
+      function submit_report_generator_form(nextsub) {
+        document.report_generator_form.report_generator_dispatch_to.value = nextsub;
+        document.report_generator_form.submit();
+      }
+
+    -->
+ </script>
+
+ <style type="text/css">
+  <!--
+.top_border {
+  border-top: solid black;
+  border-width: 4px;
+}
+.bottom_border {
+  border-bottom: solid black;
+  border-width: 4px;
+}
+    -->
+ </style>
+
+ [% IF MESSAGE %]
+  <p>[% MESSAGE %]</p>
+ [% END %]
+
+ <div class="listtop" width="100%">Summen- und Saldenliste [% template_fromto %]</div>
+
+ [% IF TOP_INFO_TEXT %]
+  <p>[% TOP_INFO_TEXT %]</p>
+ [% END %]
+
+ [% RAW_TOP_INFO_TEXT %]
+
+ [% IF DATA_PRESENT %]
+ <p>
+  <table width="100%">
+   <tr>
+     <th class="listheading" rowspan=2>Account</th>
+     <th class="listheading" rowspan=2>Description</th>
+     <th class="listheading" rowspan=2>Last Transaction</th>
+     <th class="listheading" colspan=2>Starting Balance</th>
+     <th class="listheading" colspan=2>Sum for [% template_fromto %]</th>
+     <th class="listheading" colspan=2>Sum per [% template_to %]</th>
+     <th class="listheading" colspan=2>Saldo per [% template_to %]</th>
+   </tr>
+   <tr>
+    <th class="listheading">Assets</th>
+    <th class="listheading">Equity</th>
+    <th class="listheading">Debit</th>
+    <th class="listheading">Credit</th>
+    <th class="listheading">Debit</th>
+    <th class="listheading">Credit</th>
+    <th class="listheading">Debit</th>
+    <th class="listheading">Credit</th>
+   </tr>
+   [% FOREACH row = ROWS %]
+    [% IF row.IS_CONTROL %]
+     [% IF row.IS_COLSPAN_DATA %]<tr><td colspan="[% row.NUM_COLUMNS %]">[% row.data %]</td></tr>[% END %]
+     [% ELSE %]
+     <tr class="listrow[% row.outer_idx_odd %]">
+      [%- FOREACH col = row.COLUMNS %]
+      <td[% IF col.align %] align="[% col.align %]"[% END %]
+         [%- IF col.valign %] valign="[% col.valign %]"[%- END %]
+         [%- SET tdclass = '' %]
+         [%- IF row.BORDER_TOP %][%- SET tdclass = "$tdclass top_border" %][%- END %]
+         [%- IF row.BORDER_BOTTOM %][%- SET tdclass = "$tdclass bottom_border" %][%- END %]
+         [%- IF col.class %][%- SET tdclass = "$tdclass $col.class" %][%- END %]
+         [%- IF tdclass %] class="[% tdclass %]"[%- END %]>
+       [%- IF col.raw_data %][%- col.raw_data %][%- END %]
+       [%- USE iterator(col.CELL_ROWS) %][%- FOREACH cell_row = iterator %]
+        [%- IF cell_row.data != '' %]
+         [%- IF cell_row.link %]<a href="[% cell_row.link %]">[%- END %]
+         [%- cell_row.data %]
+         [%- IF cell_row.link %]</a>[%- END %]
+        [%- END %]
+       [%- UNLESS iterator.last %]<br>[%- END %]
+       [%- END %]
+      </td>
+      [%- END %]
+     </tr>
+    [% END %]
+   [% END %]
+
+   <tr><td colspan="[% NUM_COLUMNS %]"><hr size="3" noshade></td></tr>
+
+  </table>
+ </p>
+ [% ELSE %]
+  <p>No data was found.</p>
+ [% END %]
+
+ [% RAW_BOTTOM_INFO_TEXT %]
+
+ [% IF BOTTOM_INFO_TEXT %]
+  <p>[% BOTTOM_INFO_TEXT %]</p>
+ [% END %]
+
+ [% IF SHOW_EXPORT_BUTTONS %]
+  <form action="[% HTML.escape(script) %]" name="report_generator_form" method="post">
+   [% FOREACH var = EXPORT_VARIABLES %]<input type="hidden" name="report_generator_hidden_[% var.key %]" value="[% HTML.escape(var.value) %]">
+   [% END %]
+
+   <input type="hidden" name="report_generator_nextsub" value="[% HTML.escape(EXPORT_NEXTSUB) %]">
+   <input type="hidden" name="report_generator_variable_list" value="[% HTML.escape(EXPORT_VARIABLE_LIST) %]">
+   <input type="hidden" name="report_generator_dispatch_to" value="">
+   <input type="hidden" name="action" value="report_generator_dispatcher">
+
+   <p>
+    Listenexport<br>
+    [% IF ALLOW_PDF_EXPORT %]<button type="button" class="submit" onclick="submit_report_generator_form('report_generator_export_as_pdf')">Als PDF exportieren</button>[% END %]
+    [% IF ALLOW_CSV_EXPORT %]<button type="button" class="submit" onclick="submit_report_generator_form('report_generator_export_as_csv')">Als CSV exportieren</button>[% END %]
+   </p>
+  </form>
+ [% END %]
+
+</body>
diff --git a/templates/webpages/todo/show_todo_list_en.html b/templates/webpages/todo/show_todo_list_en.html
new file mode 100644 (file)
index 0000000..cc138e6
--- /dev/null
@@ -0,0 +1,17 @@
+[% USE HTML %]<body>
+
+ <div class="listtop" style="margin-bottom: 10px">Your TODO list</div>
+
+ [%- IF !todo_list %]
+ <p>
+  There are no items on your TODO list at the moment.
+ </p>
+
+ [%- ELSE %]
+
+ [%- todo_list %]
+
+ [%- END %]
+
+</body>
+</html>
diff --git a/templates/webpages/ustva/config_step1_en.html b/templates/webpages/ustva/config_step1_en.html
new file mode 100644 (file)
index 0000000..6f7962b
--- /dev/null
@@ -0,0 +1,113 @@
+[% USE HTML %]<!--This file is autogenerated,
+ Edit templates/webpages/ustva/config_step1_master.html
+ and run locale/<cc>/locales.pl -->
+
+<body>
+<form name="verzeichnis" method="post" action="[% HTML.escape(script) %]">
+<table width="100%">
+   <tr>
+      <th class="listtop">Tax Office Preferences</th>
+    </tr>
+    <tr>
+     <td>
+       <br />
+[%- IF COA_Germany %]
+       <fieldset>
+       <legend><b>Local Tax Office Preferences</b></legend>
+       <br />
+       [% select_tax_office %]
+       </fieldset>
+       <br />
+[%- END %]
+       <fieldset>
+       <legend><b>Taxation</b>
+       </legend>
+       <input name="method" id="accrual" class="radio" type="radio" value="accrual"
+         [% checked_accrual %]>
+       <label for="accrual">accrual</label>
+       <br>
+       <input name="method" id="cash" class="radio" type="radio" value="cash"
+         [% checked_cash %]>
+       <label for="cash">cash</label>
+       </fieldset>
+       <br>
+       <fieldset>
+       <legend><b>Tax Period</b>
+       </legend>
+
+
+           <input name=FA_voranmeld id=month class=radio type=radio value="month"
+             [% checked_monthly %]>
+           <label for="month">month</label>
+           <br>
+           <input name="FA_voranmeld" id=quarter class=radio type=radio value="quarter"
+             [% checked_quarterly %]>
+           <label for="quarter">quarter</label>
+           <br>
+           <input name="FA_dauerfrist" id=FA_dauerfrist class=checkbox type=checkbox value="1"
+             [% checked_dauerfristverlaengerung %]>
+           <label for="">Extension Of Time</label>
+
+           </fieldset>
+           <br>
+           <fieldset>
+           <legend><b>Tax Consultant</b>
+           </legend>
+          <!-- <input name="FA_71" id=FA_71 class=checkbox type=checkbox value="X"
+             [% checked_kz_71 %]>
+           <label for="FA_71">Clearing Tax Received (No 71)
+    .      </label>
+           <br>
+           <br>-->
+           <table>
+           <tr>
+           <td>
+           Name
+           </td>
+           <td>
+           Street
+           </td>
+           <td>
+           Zip, City
+           </td>
+           <td>
+           Telephone
+           </td>
+           </tr>
+           <tr>
+           <td>
+           <input name="FA_steuerberater_name" id=steuerberater size=25
+             value="[% HTML.escape(FA_steuerberater_name) %]">
+           </td>
+           <td>
+           <input name="FA_steuerberater_street" id=steuerberater size=25
+             value="[% HTML.escape(FA_steuerberater_street) %]">
+           </td>
+           <td>
+           <input name="FA_steuerberater_city" id=steuerberater size=25
+             value="[% HTML.escape(FA_steuerberater_city) %]">
+           </td>
+           <td>
+           <input name="FA_steuerberater_tel" id=steuerberater size=25
+             value="[% HTML.escape(FA_steuerberater_tel) %]">
+           </tr>
+           </table>
+
+           </fieldset>
+
+           <br>
+           <br>
+           <hr>
+           <!--<input type=submit class=submit name=action value="
+           debug">-->
+           <input type=submit class=submit name=action
+             value="continue">
+         </td>
+       </tr>
+     </table>
+
+     [%- FOREACH var = hidden_variables %]
+       <input type="hidden" name="[% HTML.escape(var.variable) %]" value="[% HTML.escape(var.value) %]">
+     [%- END %]
+  </form>
+</body>
diff --git a/templates/webpages/ustva/config_step2_en.html b/templates/webpages/ustva/config_step2_en.html
new file mode 100644 (file)
index 0000000..40e66a1
--- /dev/null
@@ -0,0 +1,213 @@
+[% USE HTML %]<!--This file is autogenerated,
+ Edit templates/webpages/ustva/config_step2_master.html
+ and run locale/<cc>/locales.pl -->
+
+
+<body>
+  <form name="elsterform" method="post" action="[% script %]">
+    <table width="100%">
+       <tr>
+         <th colspan="2" class="listtop">
+           Tax Office Preferences</th>
+       </tr>
+       <tr>
+         <td colspan=2>
+           <br>
+           <!-- Start Finanzamtdaten -->
+           <br>
+           <fieldset>
+             <legend>
+               <font size="+1">Tax Office
+               [% HTML.escape(FA_Name) %]</font>
+             </legend>
+             <table width="100%" valign="top">
+                <tr>
+                  <td valign="top">
+                    <br>
+                    <fieldset>
+                      <legend>
+                      <b>Address</b>
+                      </legend>
+                      <table width="100%">
+                        <tr>
+                          <td>
+                            Tax Office
+                          </td>
+                        </tr>
+                        <tr>
+                          <td colspan="2">
+                            <input name="FA_Name" size="40" title="FA_Name"
+                              value="[% HTML.escape(FA_Name) %]" [% readonly %]>
+                          <td>
+                        </tr>
+                        <tr>
+                          <td colspan="2">
+                            <input name="FA_Strasse" size="40" title="FA_Strasse"
+                              value="[% HTML.escape(FA_Strasse) %]" [% readonly %]>
+                          </td width="100%">
+                        </tr>
+                        <tr>
+                          <td width="116px">
+                            <input name="FA_PLZ" size="10" title="FA_PLZ"
+                              value="[% HTML.escape(FA_PLZ) %]" [% readonly %]>
+                          </td>
+                          <td>
+                            <input name="FA_Ort" size="20" title="FA_Ort"
+                              value="[% HTML.escape(FA_Ort) %]" [% readonly %]>
+                          </td>
+                        </tr>
+                      </table>
+                    </fieldset>
+                    <br>
+                    <fieldset>
+                      <legend>
+                        <b>Contact</b>
+                      </legend>
+                        Telephone<br>
+                        <input name="FA_Telefon" size="40" title="FA_Telefon"
+                          value="[% HTML.escape(FA_Telefon) %]" [% readonly %]>
+                        <br>
+                        <br>
+                        Fax<br>
+                        <input name="FA_Fax" size="40" title="FA_Fax"
+                          value="[% HTML.escape(FA_Fax) %]" [% readonly %]>
+                        <br>
+                        <br>
+                        Internet<br>
+                        <input name="FA_Email" size="40" title="FA_Email"
+                          value="[% HTML.escape(FA_Email) %]" [% readonly %]>
+                        <br>
+                        <br>
+                        <input name="FA_Internet" size="40" title="" title="FA_Internet"
+                          value="[% HTML.escape(FA_Internet) %]" [% readonly %]>
+                        <br>
+                    </fieldset>
+                  </td>
+                  <td valign="top">
+                    <br>
+                    <fieldset>
+                    <legend>
+                    <b>Openings</b>
+                    </legend>
+                    <textarea name="FA_Oeffnungszeiten" rows="4" cols="40"
+                      [% readonly %]>[% HTML.escape(FA_Oeffnungszeiten) %]</textarea>
+                    </fieldset>
+                    <br>
+                      <fieldset>
+                      <legend>
+                        <b>Bank Connection Tax Office</b>
+                      <legend>
+                      <table>
+                      <tr>
+                        <td width="40%">
+                          Bank
+                          <br>
+                          <input name="FA_Bankbezeichnung_1" size="30"
+                            value="[% HTML.escape(FA_Bankbezeichnung_1) %]" [% readonly %]>
+                          <br>
+                          <br>
+                          Account Nummer
+                          <br>
+                          <input name="FA_Kontonummer_1" size="15"
+                            value="[% HTML.escape(FA_Kontonummer_1) %]" [% readonly %]>
+                          <br>
+                          <br>
+                          Bank Code (long)
+                          <br>
+                          <input name="FA_BLZ_1" size="15"
+                            value="[% HTML.escape(FA_BLZ_1) %]" [% readonly %]>
+                        </td>
+                        <td width="40%">
+                          Bank
+                          <br>
+                          <input name="FA_Bankbezeichnung_oertlich" size="30"
+                            value="[% HTML.escape(FA_Bankbezeichnung_oertlich) %]" [% readonly %]>
+                          <br>
+                          <br>
+                          Account Nummer
+                          <br>
+                          <input name="FA_Kontonummer_2" size="15"
+                            value="[% HTML.escape(FA_Kontonummer_2) %]" [% readonly %]>
+                          <br>
+                          <br>
+                          Bank Code (long)
+                          <br>
+                          <input name="FA_BLZ_2" size="15"
+                            value="[% HTML.escape(FA_BLZ_2) %]" [% readonly %]>
+                        </td>
+                   </tr>
+             </table>
+           </fieldset>
+         </td>
+       </tr>
+    </table>
+  </fieldset>
+
+<!-- Stop Finanzamtdaten  -->
+
+        </td>
+       </tr>
+       <tr>
+         <td colspan="2">
+           <br>
+           <fieldset>
+           <legend>
+           <font size="+1">Tax Number</font>
+           </legend>
+           <br>
+[%- IF COA_Germany %]
+           [% input_steuernummer %]
+[%- ELSE %]
+Please enter the taxnumber in the administration menu userpreferences
+Current value: [% HTML.escape(myconfig_taxnumber) %]
+[%- END %]
+
+
+           </H2><br>
+           </fieldset>
+           <br>
+           <br>
+           <hr>
+         </td>
+       </tr>
+       <tr>
+         <td align="left">
+
+          [%- IF callback %]
+           <input type="button" name="Verweis" value="User Config"
+            onClick="self.location.href='[% callback %]">
+          [%- ELSE %]
+            <input type="submit" class="submit" name="action" value="back">
+          [%- END %]
+
+          [%- IF warnung %]
+
+            <input type="hidden" name="nextsub" value="config_step2">
+            <input type="submit" class="submit" name="action"
+              value="continue">
+
+            <input type="hidden" name="saved" value="Check Details">
+
+          [%- ELSE %]
+
+            <input type="hidden" name="nextsub" value="save">
+            <input type="hidden" name="filename" value="finanzamt.ini">
+            <input type="submit" class="submit" name="action" value="Save">
+
+          [%- END %]
+
+         </td>
+         <td align="right">
+           <H2 class="confirm">[%- saved %]</H2>
+         </td>
+      </tr>
+  </table>
+
+[%- FOREACH var = hidden_variables %]
+  <input type="hidden" name="[% HTML.escape(var.variable) %]" value="[% HTML.escape(var.value) %]">
+[%- END %]
+
+
+  </form>
+</body>
+</html>
diff --git a/templates/webpages/ustva/generic_taxreport_en.html b/templates/webpages/ustva/generic_taxreport_en.html
new file mode 100644 (file)
index 0000000..4f097c6
--- /dev/null
@@ -0,0 +1,24 @@
+[% USE HTML %]<body>
+
+<h1>Generic Tax Report</h1>
+<p>Taxnumber: [% taxnumber %]</p>
+<p>Year: [% year %]</p>
+<p>Period: [% period %]</p>
+<br />
+<table width="33%">
+  <tr>
+    <th>Tax Position</th>
+    <th>Amount</th>
+  </tr>
+[% FOREACH row = USTVA %]
+  <tr class="listrow[% loop.count % 2 %]">
+
+    <td align="left">[% HTML.escape(row.id) %]</td>
+    <td align="right">[% HTML.escape(row.amount) %]</td>
+  </tr>
+[% END %]
+
+</table>
+
+</html>
+</body>
diff --git a/templates/webpages/ustva/report_en.html b/templates/webpages/ustva/report_en.html
new file mode 100644 (file)
index 0000000..95991cf
--- /dev/null
@@ -0,0 +1,206 @@
+[% USE HTML %]<!--This file is autogenerated,
+ Edit templates/webpages/ustva/report_master.html
+ and run locale/<cc>/locales.pl -->
+
+ <body>
+ <form method="post" action="[% HTML.escape(script) %]">
+
+ <input type="hidden" name="title" value="[% HTML.escape(title) %]">
+
+ <table width="100%">
+  <tr>
+    <th class="listtop">[% HTML.escape(title) %]</th>
+  </tr>
+  <tr height="5"></tr>
+  <tr>
+    <td>
+      <table>
+       <tr>
+         <td width="50%" align="left" valign="top">
+            <fieldset>
+            <legend>
+            <b>Company</b>
+            </legend>
+
+            [% company_given %]
+            [% address_given %]
+
+            <br />
+            <br />
+            Tel.:&nbsp;
+            [% HTML.escape(co_tel) %]
+            <br />
+            Fax.:&nbsp;
+            [% HTML.escape(co_fax) %]
+            <br />
+            <br />
+            [% HTML.escape(co_email) %]
+            <br />
+            <br />
+
+            Tax Number:&nbsp;
+[%- IF COA_Germany %]
+            [% taxnumber_given %]
+            <br />
+            ELSTER Tax Number:&nbsp;
+            [% HTML.escape(elstersteuernummer) %]
+            <br />
+            <br />
+[%- ELSE %]
+            [% taxnumber %]
+[%- END %]
+            </fieldset>
+            <br />
+
+            [%- IF FA_steuerberater_name %]
+              <fieldset>
+              <legend>
+                <input checked="checked"
+                 title="Assume Tax Consultant Data in Tax Computation?"
+                 name="FA_steuerberater"
+                 id="steuerberater"
+                 class="checkbox"
+                 type="checkbox"
+                 value="1" >
+                 &nbsp;<b>Tax Consultant</b>
+                </legend>
+
+                [% HTML.escape(FA_steuerberater_name) %]<br />
+                [% HTML.escape(FA_steuerberater_street) %]<br />
+                [% HTML.escape(FA_steuerberater_city) %]<br />
+                Tel. [% HTML.escape(FA_steuerberater_tel) %]<br />
+              </fieldset>
+              <br />
+            [%- END %]
+
+            <fieldset>
+            <legend>
+            <b>Tax Period</b>
+            </legend>
+            [% select_year %] [% ustva_vorauswahl %]
+            [% checkbox_kz_10 %]
+            <br />
+            [%- IF FA_voranmeld %]
+              <br />
+              [% period_local %]
+              [%- IF FA_dauerfrist %]
+                With Extension Of Time
+              [%- END %]
+              <br />
+            [%- END %]
+
+            [%- IF method_local %]
+              Method: [% method_local %]
+            [%- END %]
+            </fieldset>
+          </td>
+          <td width="50%" valign="top">
+              <fieldset>
+              <legend>
+                 <b>Tax Office</b>
+              </legend>
+              <h3>[% HTML.escape(FA_Name) %]</h3>
+
+              [% HTML.escape(FA_Strasse) %]
+              <br>
+              [% HTML.escape(FA_PLZ) %]&nbsp; &nbsp;[% HTML.escape(FA_Ort) %]
+              <br>
+              <br>
+              Tel.:&nbsp;
+              [% HTML.escape(FA_Telefon) %]
+              <br>
+              Fax.:&nbsp;
+              [% HTML.escape(FA_Fax) %]
+              <br>
+              <br>
+              <!-- Mailto alles Maskieren! -->
+              <a href="mailto:[% HTML.escape(FA_Email) %]
+                ?subject=&quot;[% HTML.escape(steuernummer) %]:&quot;
+                &amp;bcc=&quot;[% HTML.escape(email) %]&quot;
+                &amp;body=&quot;Sehr%20geehrte%20Damen%20und%20Herren,
+                %0D%0A%0D%0A%0D%0AMit%20freundlichen%20Gr&uuml;&szlig;en
+                %0D%0A%0D%0A[% HTML.escape(signature) %]&quot;">
+              [% HTML.escape(FA_Email) %]
+              </a>
+              <br>
+              <a href="[% FA_Internet %]">
+              [% HTML.escape(FA_Internet) %]
+              </a>
+              <br>
+              <br>
+              Openings
+              <br>
+              [% openings %]
+              <br>
+              <br>
+              Bank Connections
+              <table>
+              <tr>
+
+              [%- FOREACH row = "tax_office_banks" %]
+                  <td width="40%">
+                  [% HTML.escape(row.Bankbezeichnung) %]
+                  <br>
+                  Account:&nbsp;
+                  [% HTML.escape(row.Kontonummer) %]
+                  <br>
+                  Bank Code:&nbsp;
+                  [% HTML.escape(row.BLZ) %]
+                  </td>
+              [%- END %]
+
+              </tr>
+              </table>
+              <br>
+              </fieldset>
+
+              <br>
+
+              <fieldset>
+              <legend>
+              <b>Outputformat</b>
+              </legend>
+[%- IF COA_Germany %]
+              [% select_options %]
+[%- ELSE %]
+              <SELECT name="format">
+                <option value="generic">Preview</option>
+              </SELECT>
+[%- END %]
+
+              </fieldset>
+          </td>
+        </tr>
+      </table>
+     </td>
+    </tr>
+    <tr>
+     <td><hr size="3" noshade></td>
+    </tr>
+  </table>
+
+  <br>
+  <input type="hidden" name="address" value="[% HTML.escape(address) %]">
+  <input type="hidden" name="reporttype" value="custom">
+  <input type="hidden" name="co_street" value="[% HTML.escape(co_street) %]">
+  <input type="hidden" name="co_city" value="[% HTML.escape(co_city) %]">
+  <table width="100%">
+  <tr>
+   <td align="left">
+     <input type=hidden name=nextsub value=generate_ustva>
+     <input type=submit class=submit name=action value="Show">
+   </td>
+   <td align="right">
+
+    </form>
+    <!--
+      <form action="doc/ustva.html" method="get">
+       <input type=submit class=submit name=action
+       value="Help">
+   </form>
+    -->
+   </td>
+  </tr>
+  </table>
+</body>
+</html>
diff --git a/templates/webpages/wh/journal_filter_en.html b/templates/webpages/wh/journal_filter_en.html
new file mode 100644 (file)
index 0000000..6db3731
--- /dev/null
@@ -0,0 +1,219 @@
+[% USE HTML %][% USE JavaScript %]<body onload="on_load();">
+
+ <script type="text/javascript">
+   <!--
+      warehouses = new Array();
+      warehouses[0] = new Array();
+      warehouses[0]['id'] = "0";
+      warehouses[0]['bins'] = new Array();
+      warehouses[0]['bins'][0] = new Array();
+      warehouses[0]['bins'][0]['description'] = "---";
+      warehouses[0]['bins'][0]['id'] = "";
+      [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['id'] = [% warehouse.id %];
+      warehouses[[% WAREHOUSES_it.count %]]['bins'] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0]['description'] = "---";
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0]['id'] = "";
+      [% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %]
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]]['description'] = "[% JavaScript.escape(bin.description) %]";
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]]['id'] = [% bin.id %];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(warehouse_id, bin_id) {
+        var control = document.getElementById("bin_id");
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        var warehouse_index = 0;
+
+        for (i = 0; i < warehouses.length; i++)
+          if (warehouses[i]['id'] == warehouse_id) {
+            warehouse_index = i;
+            break;
+          }
+
+        var warehouse = warehouses[warehouse_index];
+        var bin_index = 0;
+
+        for (i = 0; i < warehouse['bins'].length; i++)
+          if (warehouse['bins'][i]['id'] == bin_id) {
+            bin_index = i;
+            break;
+          }
+
+        for (i = 0; i < warehouse['bins'].length; i++) {
+          control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']);
+        }
+
+
+        control.options[bin_index].selected = true;
+      }
+
+      function on_load() {
+        warehouse_selected(0, 0);
+        document.Form.partnumber.focus();
+      }
+     -->
+ </script>
+
+ <div class="listtop">Report about wareouse transactions</div>
+
+ <form method="post" name="Form" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="generate_journal">
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading" align="left" valign="top" colspan="6" nowrap>Filter</th>
+    </tr>
+
+    <tr>
+     <td>
+      <table>
+       <tr>
+        <th align="right" nowrap>Warehouse:</th>
+        <td>
+         <select name="warehouse_id" id="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)">
+          <option value="">---</option>
+          [%- FOREACH warehouse = WAREHOUSES %]
+          <option value="[% HTML.escape(warehouse.id) %]">[% warehouse.description %]</option>
+          [%- END %]
+         </select>
+        </td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Bin:</th>
+        <td><select name="bin_id" id="bin_id"></select></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Part Number:</th>
+        <td><input name="partnumber" id="partnumber" size=20></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Part Description:</th>
+        <td><input name="description" size=40></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Charge Number:</th>
+        <td><input name="chargenumber" size=40></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Transfer Quantity:</th>
+        <td>
+         <select name="qty_op">
+          <option value="dontcare">---</option>
+          <option value="atleast">At least</option>
+          <option value="atmost">At most</option>
+          <option value="exact">Exact</option>
+         </select>
+         <input name="qty">
+         <select name="qty_unit">
+          [%- FOREACH unit = UNITS %]<option>[% unit.name %]</option>[% END %]
+         </select>
+        </td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>From Date</th>
+        <td>
+         <input name="fromdate" id="fromdate" size="11" title="[% myconfig_dateformat %]">
+         <input type="button" name="b_fromdate" id="fromdate_trigger" value="?">
+        </td>
+       </tr>
+       <tr>
+        <th align="right">To Date</th>
+        <td>
+         <input name="todate" id="todate" size="11" title="[% myconfig_dateformat %]">
+         <input type="button" name="b_todate" id="todate_trigger" value="?">
+        </td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+
+    <tr height="5"><td>&nbsp;</td></tr>
+
+    <tr>
+     <th class="listheading" align="left" valign="top" colspan="6" nowrap>Include in Report</th>
+    </tr>
+
+    <tr>
+     <td>
+      <table>
+       <tr>
+        <td><input name="l_partdescription" id="l_partdescription" class="checkbox" type="hidden" value="Y" checked></td>
+        <td nowrap><label for="l_partdescription">Part Description</label></td>
+        <td><input name="l_qty" id="l_qty" class="checkbox" type="hidden" value="Y" checked></td>
+        <td nowrap><label for="l_qty">Quantity</label></td>
+       </tr>
+       <tr>
+        <td align="right"><input name="l_date" id="l_date" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_date">Date</label></td>
+        <td align="right"><input name="l_partnumber" id="l_partnumber" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_partnumber">Part Number</label></td>
+        <td align="right"><input name="l_chargenumber" id="l_chargenumber" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_chargenumber">Charge Number</label></td>
+       </tr>
+       <tr>
+        <td align="right"><input name="l_trans_id" id="l_trans_id" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_trans_id">Trans Id</label></td>
+        <td align="right"><input name="l_trans_type" id="l_trans_type" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_trans_type">Trans Type</label></td>
+        <td align="right"><input name="l_comment" id="l_comment" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_comment">Comment</label></td>
+       </tr>
+       <tr>
+        <td align="right"><input name="l_warehouse_from" id="l_warehouse_from" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_warehouse_from">Warehouse From</label></td>
+        <td align="right"><input name="l_bin_from" id="l_bin_from" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_bin_from">Bin From</label></td>
+        <td align="right"><input name="l_warehouse_to" id="l_warehouse_to" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_warehouse_to">Warehouse To</label></td>
+        <td align="right"><input name="l_bin_to" id="l_bin_to" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_bin_to">Bin To</label></td>
+       </tr>
+       <tr>
+        <td align="right"><input name="l_employee" id="l_employee" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_employee">Employee</label></td>
+        <td align="right"><input name="l_oe_id" id="l_oe_id" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_oe_id">Document</label></td>
+        <td align="right"><input name="l_projectnumber" id="l_projectnumber" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_projectnumber">Project Number</label></td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+  <script type="text/javascript">
+    <!--
+    Calendar.setup( {
+      inputField : "fromdate",
+      ifFormat :"[% myconfig_jsc_dateformat %]",
+      align : "BR",
+      button : "fromdate_trigger"
+    });
+
+     Calendar.setup( {
+      inputField : "todate",
+      ifFormat :"[% myconfig_jsc_dateformat %]",
+      align : "BL",
+      button : "todate_trigger"
+    });
+     //-->
+  </script>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/removal_parts_selection_en.html b/templates/webpages/wh/removal_parts_selection_en.html
new file mode 100644 (file)
index 0000000..a3838fd
--- /dev/null
@@ -0,0 +1,79 @@
+[% USE HTML %][% USE JavaScript %]<body>
+
+ <form method="post" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="remove_parts">
+  <input type="hidden" name="warehouse_id" value="[% HTML.escape(warehouse_id) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>Removal from warehouse: [% warehouse_description %]</p>
+
+  <p>
+   <table>
+    <tr>
+     <td>Select type of removal:</td>
+     <td>
+      <select name="transfer_type_id">
+       [%- FOREACH type = TRANSFER_TYPES %]<option value="[% HTML.escape(type.id) %]">[% HTML.escape(type.description) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td>Optional comment:</td>
+     <td><input name="comment" size="20"></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">Bin</th>
+     <th class="listheading">Part Number</th>
+     <th class="listheading">Part Description</th>
+     <th class="listheading">Charge Number</th>
+     <th class="listheading">EAN</th>
+     <th class="listheading">Available qty</th>
+     <th class="listheading">Removal qty</th>
+    </tr>
+
+    [% FOREACH row = CONTENTS %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <input type="hidden" name="src_bin_id_[% loop.count %]" value="[% HTML.escape(row.binid) %]">
+     <input type="hidden" name="parts_id_[% loop.count %]" value="[% HTML.escape(row.parts_id) %]">
+     <input type="hidden" name="partnumber_[% loop.count %]" value="[% HTML.escape(row.partnumber) %]">
+     <input type="hidden" name="partdescription_[% loop.count %]" value="[% HTML.escape(row.partdescription) %]">
+     <input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]">
+     <input type="hidden" name="ean_[% loop.count %]" value="[% HTML.escape(row.ean) %]">
+     <td>[% HTML.escape(row.bindescription) %]</td>
+     <td>[% HTML.escape(row.partnumber) %]</td>
+     <td>[% HTML.escape(row.partdescription) %]</td>
+     <td>[% HTML.escape(row.chargenumber) %]</td>
+     <td>[% HTML.escape(row.ean) %]</td>
+     <td>[% HTML.escape(row.qty) %]</td>
+     <td>
+      <input name="qty_[% loop.count %]">
+      <select name="unit_[% loop.count %]">
+       [% FOREACH unit = row.UNITS %]<option[% IF unit.selected %] selected[% END %]>[% HTML.escape(unit.name) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+    [% END %]
+
+    <input type="hidden" name="rowcount" value="[% CONTENTS.size %]">
+
+    <tr><td colspan="7"><hr size="3" noshade></td></tr>
+
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/report_filter_en.html b/templates/webpages/wh/report_filter_en.html
new file mode 100644 (file)
index 0000000..af9faf5
--- /dev/null
@@ -0,0 +1,178 @@
+[% USE HTML %][% USE JavaScript %]<body onload="on_load();">
+
+ <script type="text/javascript">
+   <!--
+      warehouses = new Array();
+      warehouses[0] = new Array();
+      warehouses[0]['id'] = "0";
+      warehouses[0]['bins'] = new Array();
+      warehouses[0]['bins'][0] = new Array();
+      warehouses[0]['bins'][0]['description'] = "---";
+      warehouses[0]['bins'][0]['id'] = "";
+      [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['id'] = [% warehouse.id %];
+      warehouses[[% WAREHOUSES_it.count %]]['bins'] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0]['description'] = "---";
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][0]['id'] = "";
+      [% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %]
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]]['description'] = "[% JavaScript.escape(bin.description) %]";
+      warehouses[[% WAREHOUSES_it.count %]]['bins'][[% BINS_it.count %]]['id'] = [% bin.id %];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(warehouse_id, bin_id) {
+        var control = document.getElementById("bin_id");
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        var warehouse_index = 0;
+
+        for (i = 0; i < warehouses.length; i++)
+          if (warehouses[i]['id'] == warehouse_id) {
+            warehouse_index = i;
+            break;
+          }
+
+        var warehouse = warehouses[warehouse_index];
+        var bin_index = 0;
+
+        for (i = 0; i < warehouse['bins'].length; i++)
+          if (warehouse['bins'][i]['id'] == bin_id) {
+            bin_index = i;
+            break;
+          }
+
+        for (i = 0; i < warehouse['bins'].length; i++) {
+          control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']);
+        }
+
+
+        control.options[bin_index].selected = true;
+      }
+
+      function on_load() {
+        warehouse_selected(0, 0);
+        document.Form.partnumber.focus();
+      }
+     -->
+ </script>
+
+ <div class="listtop">Report about wareouse contents</div>
+
+ <form method="post" name="Form" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="generate_report">
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading" align="left" valign="top" colspan="6" nowrap>Filter</th>
+    </tr>
+
+    <tr>
+     <td>
+      <table>
+       <tr>
+        <th align="right" nowrap>Warehouse:</th>
+        <td>
+         <select name="warehouse_id" id="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)">
+          <option value="">---</option>
+          [%- FOREACH warehouse = WAREHOUSES %]
+          <option value="[% HTML.escape(warehouse.id) %]">[% warehouse.description %]</option>
+          [%- END %]
+         </select>
+        </td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Bin:</th>
+        <td><select name="bin_id" id="bin_id"></select></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Part Number:</th>
+        <td><input name="partnumber" size=20></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Part Description:</th>
+        <td><input name="description" size=40></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Charge Number:</th>
+        <td><input name="chargenumber" size=40></td>
+       </tr>
+       <tr>
+        <th align="right" nowrap>Qty in stock:</th>
+        <td>
+         <select name="qty_op">
+          <option value="dontcare">---</option>
+          <option value="atleast">At least</option>
+          <option value="atmost">At most</option>
+          <option value="exact">Exact</option>
+         </select>
+         <input name="qty">
+         <select name="qty_unit">
+          [%- FOREACH unit = UNITS %]<option>[% unit.name %]</option>[% END %]
+         </select>
+        </td>
+       </tr>
+      </table>
+     </td>
+    </tr>
+
+    <tr height="5"><td>&nbsp;</td></tr>
+
+    <tr>
+     <th class="listheading" align="left" valign="top" colspan="6" nowrap>Include in Report</th>
+    </tr>
+
+    <tr>
+     <td>
+      <input name="l_partdescription" type="hidden" value="Y">
+      <input name="l_qty" type="hidden" value="Y">
+
+      <table>
+       <tr>
+        <td align="right"><input name="l_warehousedescription" id="l_warehousedescription" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_warehousedescription">Warehouse</label></td>
+        <td align="right"><input name="l_bindescription" id="l_bindescription" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_bindescription">Bin</label></td>
+       </tr>
+
+       <tr>
+        <td align="right"><input name="l_partnumber" id="l_partnumber" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_partnumber">Part Number</label></td>
+        <td align="right"><input name="l_chargenumber" id="l_chargenumber" class="checkbox" type="checkbox" value="Y" checked></td>
+        <td nowrap><label for="l_chargenumber">Charge Number</label></td>
+       </tr>
+
+       <tr><td colspan="4"><hr noshade height="1"></td></tr>
+
+       <tr>
+        <td align="right"><input name="subtotal" id="subtotal" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="subtotal">Subtotal</label></td>
+        <td align="right"><input name="include_empty_bins" id="include_empty_bins" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="include_empty_bins">Include empty bins</label></td>
+       </tr>
+
+       <tr>
+        <td align="right"><input name="l_stock_value" id="l_stock_value" class="checkbox" type="checkbox" value="Y"></td>
+        <td nowrap><label for="l_stock_value">Stock value</label></td>
+       </tr>
+
+      </table>
+     </td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/transfer_parts_selection_en.html b/templates/webpages/wh/transfer_parts_selection_en.html
new file mode 100644 (file)
index 0000000..633c853
--- /dev/null
@@ -0,0 +1,119 @@
+[% USE HTML %][% USE JavaScript %]<body onload="on_load();">
+
+ <script type="text/javascript">
+  <!--
+      warehouses = new Array();
+      [% USE WAREHOUSES_it = Iterator(WAREHOUSES) %][% FOREACH wh = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array();
+      [% USE BINS_it = Iterator(wh.BINS) %][% FOREACH bin = BINS_it %]warehouses[[% WAREHOUSES_it.count - 1 %]][[% BINS_it.count - 1 %]] = ["[% JavaScript.escape(bin.description) %]", "[% JavaScript.escape(bin.id) %]"];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(row, index) {
+        var cname = "dst_bin_id_" + row;
+        var control = document.getElementById(cname);
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        for (i = 0; i < warehouses[index].length; i++) {
+          control.options[i] = new Option(warehouses[index][i][0], warehouses[index][i][1]);
+        }
+
+        control.options[0].selected = true;
+      }
+
+      function on_load() {
+        [% FOREACH row = CONTENTS %]
+        warehouse_selected([% loop.count %], [% initial_warehouse_idx %]);
+        [% END %]
+      }
+    -->
+ </script>
+
+ <form method="post" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="transfer_parts">
+  <input type="hidden" name="warehouse_id" value="[% HTML.escape(warehouse_id) %]">
+
+  <div class="listtop">[% title %]</div>
+
+  <p>Transfer from warehouse: [% warehouse_description %]</p>
+
+  <p>
+   <table>
+    <tr>
+     <td>Select type of transfer:</td>
+     <td>
+      <select name="transfer_type_id">
+       [%- FOREACH type = TRANSFER_TYPES %]<option value="[% HTML.escape(type.id) %]">[% type.description %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <td>Optional comment:</td>
+     <td><input name="comment" size="20"></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <table>
+    <tr>
+     <th class="listheading">Source bin</th>
+     <th class="listheading">Part Number</th>
+     <th class="listheading">Part Description</th>
+     <th class="listheading">Charge Number</th>
+     <th class="listheading">EAN</th>
+     <th class="listheading">Available qty</th>
+     <th class="listheading" colspan="2">Transfer qty</th>
+     <th class="listheading" colspan="2">Destination warehouse and bin</th>
+    </tr>
+
+    [% FOREACH row = CONTENTS %]
+    <tr class="listrow[% loop.count % 2 %]">
+     <input type="hidden" name="src_bin_id_[% loop.count %]" value="[% HTML.escape(row.binid) %]">
+     <input type="hidden" name="parts_id_[% loop.count %]" value="[% HTML.escape(row.parts_id) %]">
+     <input type="hidden" name="partnumber_[% loop.count %]" value="[% HTML.escape(row.partnumber) %]">
+     <input type="hidden" name="partdescription_[% loop.count %]" value="[% HTML.escape(row.partdescription) %]">
+     <input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]">
+     <input type="hidden" name="ean_[% loop.count %]" value="[% HTML.escape(row.ean) %]">
+     <td>[% HTML.escape(row.bindescription) %]</td>
+     <td>[% HTML.escape(row.partnumber) %]</td>
+     <td>[% HTML.escape(row.partdescription) %]</td>
+     <td>[% HTML.escape(row.chargenumber) %]</td>
+     <td>[% HTML.escape(row.ean) %]</td>
+     <td>[% HTML.escape(row.qty) %]</td>
+     <td><input name="qty_[% loop.count %]" size="8" style="text-align: right"></td>
+     <td>
+      <select name="unit_[% loop.count %]">
+       [% FOREACH unit = row.UNITS %]<option[% IF unit.selected %] selected[% END %]>[% HTML.escape(unit.name) %]</option>[% END %]
+      </select>
+     </td>
+
+     <td>
+      <select name="dst_warehouse_id_[% loop.count %]" onchange="warehouse_selected([% loop.count %], this.selectedIndex)">
+       [% FOREACH wh = WAREHOUSES %]<option value="[% HTML.escape(wh.id) %]"[% IF wh.selected %] selected[% END %]>[% HTML.escape(wh.description) %]</option>[% END %]
+      </select>
+     </td>
+     <td><select id="dst_bin_id_[% loop.count %]" name="dst_bin_id_[% loop.count %]"></select></td>
+    </tr>
+
+    [% END %]
+
+    <input type="hidden" name="rowcount" value="[% CONTENTS.size %]">
+
+   </table>
+  </p>
+
+  <hr size="3" noshade>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/warehouse_selection_assembly_en.html b/templates/webpages/wh/warehouse_selection_assembly_en.html
new file mode 100644 (file)
index 0000000..9b6729f
--- /dev/null
@@ -0,0 +1,135 @@
+[% USE HTML %][% USE JavaScript %][% USE LxERP %]<body onload="on_load(); [% onload %]">
+
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/part_selection.js"></script>
+ <script type="text/javascript">
+  <!--
+      warehouses = new Array();
+      [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['id'] = [% warehouse.id %];
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'] = new Array();
+      [% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %]
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]]['description'] = "[% JavaScript.escape(bin.description) %]";
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]]['id'] = [% bin.id %];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(warehouse_id, bin_id) {
+        var control = document.getElementById("bin_id");
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        var warehouse_index = 0;
+
+        for (i = 0; i < warehouses.length; i++)
+          if (warehouses[i]['id'] == warehouse_id) {
+            warehouse_index = i;
+            break;
+          }
+
+        var warehouse = warehouses[warehouse_index];
+        var bin_index = 0;
+
+        for (i = 0; i < warehouse['bins'].length; i++)
+          if (warehouse['bins'][i]['id'] == bin_id) {
+            bin_index = i;
+            break;
+          }
+
+        for (i = 0; i < warehouse['bins'].length; i++) {
+          control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']);
+        }
+
+
+        control.options[bin_index].selected = true;
+      }
+
+      function on_load() {
+        warehouse_selected([% warehouse_id %], [% bin_id %]);
+      }
+    -->
+ </script>
+
+ <form name="Form" method="post" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="transfer_assembly">
+  <input type="hidden" name="update_nextsub" value="transfer_assembly_update_part">
+
+  [% IF saved_message %]
+  <p>[% saved_message %]</p>
+  [% END %]
+
+  <div class="listtop">[% title %]</div>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right" nowrap>Destination warehouse</th>
+     <td>
+      <select name="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)">
+       [%- FOREACH warehouse = WAREHOUSES %]
+       <option value="[% HTML.escape(warehouse.id) %]"[% IF warehouse_id == warehouse.id %] selected[% END %]>[% warehouse.description %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Destination bin:</th>
+     <td><select id="bin_id" name="bin_id"></select></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Assembly Number</th>
+     <td>
+      <input type="hidden" name="parts_id" id="parts_id" value="[% HTML.escape(parts_id) %]">
+      <input type="hidden" name="old_partnumber" id="old_partnumber" value="[% HTML.escape(partnumber) %]">
+      <input name="partnumber" size="30" value="[% HTML.escape(partnumber) %]">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Assembly Description</th>
+     <td>
+      <input name="description" size="30" value="[% HTML.escape(description) %]">
+      <input type="button" onclick="part_selection_window('partnumber', 'description', 'parts_id', 0, 'Form', 'assemblies:click_button=update_button')" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Charge number</th>
+     <td><input name="chargenumber" size="30" value="[% HTML.escape(chargenumber) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Quantity</th>
+     <td>
+      <input name="qty" size="10" value="[% HTML.escape(LxERP.format_amount(qty)) %]">
+      <select name="unit">
+       [%- FOREACH unit = UNITS %]<option[% IF unit.selected %] selected[% END %]>[% HTML.escape(unit.name) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Optional comment</th>
+     <td><input name="comment" size="30" value="[% HTML.escape(comment) %]"></td>
+    </tr>
+
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" id="update_button" value="Update">
+   [%- IF parts_id %]
+   <input type="submit" class="submit" name="action" value="Create Assembly">
+   [%- END %]
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/warehouse_selection_en.html b/templates/webpages/wh/warehouse_selection_en.html
new file mode 100644 (file)
index 0000000..78a3178
--- /dev/null
@@ -0,0 +1,131 @@
+[% USE HTML %][% USE JavaScript %]<body onload="on_load();">
+
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/part_selection.js"></script>
+ <script type="text/javascript">
+   <!--
+      warehouses = new Array();
+      [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['id'] = [% warehouse.id %];
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][0] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][0]['description'] = "---";
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][0]['id'] = "";
+      [% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count %]]['description'] = "[% JavaScript.escape(bin.description) %]";
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count %]]['id'] = [% bin.id %];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(warehouse_id, bin_id) {
+        var control = document.getElementById("bin_id");
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        var warehouse_index = 0;
+
+        for (i = 0; i < warehouses.length; i++)
+          if (warehouses[i]['id'] == warehouse_id) {
+            warehouse_index = i;
+            break;
+          }
+
+        var warehouse = warehouses[warehouse_index];
+        var bin_index = 0;
+
+        for (i = 0; i < warehouse['bins'].length; i++)
+          if (warehouse['bins'][i]['id'] == bin_id) {
+            bin_index = i;
+            break;
+          }
+
+        for (i = 0; i < warehouse['bins'].length; i++) {
+          control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']);
+        }
+
+
+        control.options[bin_index].selected = true;
+      }
+
+      function on_load() {
+        warehouse_selected(0, 0);
+        document.Form.partnumber.focus();
+      }
+     -->
+ </script>
+
+ <form name="Form" method="post" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="[% HTML.escape(nextsub) %]">
+
+  [% IF saved_message %]
+  <p>[% saved_message %]</p>
+  [% END %]
+
+  <div class="listtop">[% title %]</div>
+
+  <p>
+   If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.
+  </p>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right" nowrap>Transfer from warehouse:</th>
+     <td>
+      <select name="warehouse_id" id="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)">
+       [%- FOREACH warehouse = WAREHOUSES %]
+       <option value="[% HTML.escape(warehouse.id) %]">[% warehouse.description %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Bin:</th>
+     <td><select id="bin_id" name="bin_id"></select></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Limit part selection:</th>
+     <td></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Part Number</th>
+     <td>
+      <input type="hidden" name="parts_id" id="parts_id">
+      <input name="partnumber" id="partnumber" size="30">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Part Description</th>
+     <td>
+      <input name="description" size="30">
+      <input type="button" onclick="part_selection_window('partnumber', 'description', 'parts_id', 0, 'Form', 'no_services:')" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Charge number</th>
+     <td><input name="chargenumber" size="30"></td>
+    </tr>
+    <tr>
+     <th align="right" nowrap>EAN</th>
+     <td><input name="ean" size="30"></td>
+    </tr>
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" value="Continue">
+  </p>
+ </form>
+
+</body>
+</html>
diff --git a/templates/webpages/wh/warehouse_selection_stock_en.html b/templates/webpages/wh/warehouse_selection_stock_en.html
new file mode 100644 (file)
index 0000000..348592f
--- /dev/null
@@ -0,0 +1,139 @@
+[% USE HTML %][% USE JavaScript %][% USE LxERP %]<body onload="on_load(); [% onload %]">
+
+ <script type="text/javascript" src="js/common.js"></script>
+ <script type="text/javascript" src="js/part_selection.js"></script>
+ <script type="text/javascript">
+  <!--
+      warehouses = new Array();
+      [%- USE WAREHOUSES_it = Iterator(WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %]
+      warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['id'] = [% warehouse.id %];
+      warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'] = new Array();
+      [% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %]
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]] = new Array();
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]]['description'] = "[% JavaScript.escape(bin.description) %]";
+      warehouses[[% WAREHOUSES_it.count - 1%]]['bins'][[% BINS_it.count - 1 %]]['id'] = [% bin.id %];
+      [% END %]
+      [% END %]
+
+      function warehouse_selected(warehouse_id, bin_id) {
+        var control = document.getElementById("bin_id");
+
+        for (var i = control.options.length - 1; i >= 0; i--) {
+          control.options[i] = null;
+        }
+
+        var warehouse_index = 0;
+
+        for (i = 0; i < warehouses.length; i++)
+          if (warehouses[i]['id'] == warehouse_id) {
+            warehouse_index = i;
+            break;
+          }
+
+        var warehouse = warehouses[warehouse_index];
+        var bin_index = 0;
+
+        for (i = 0; i < warehouse['bins'].length; i++)
+          if (warehouse['bins'][i]['id'] == bin_id) {
+            bin_index = i;
+            break;
+          }
+
+        for (i = 0; i < warehouse['bins'].length; i++) {
+          control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']);
+        }
+
+
+        control.options[bin_index].selected = true;
+      }
+
+      function on_load() {
+        warehouse_selected([% warehouse_id %], [% bin_id %]);
+      }
+    -->
+ </script>
+
+ <form name="Form" method="post" action="wh.pl">
+
+  <input type="hidden" name="nextsub" value="transfer_stock">
+  <input type="hidden" name="update_nextsub" value="transfer_stock_update_part">
+
+  [% IF saved_message %]
+  <p>[% saved_message %]</p>
+  [% END %]
+
+  <div class="listtop">[% title %]</div>
+
+  <p>
+   <table>
+    <tr>
+     <th align="right" nowrap>Destination warehouse</th>
+     <td>
+      <select name="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)">
+       [%- FOREACH warehouse = WAREHOUSES %]
+       <option value="[% HTML.escape(warehouse.id) %]"[% IF warehouse_id == warehouse.id %] selected[% END %]>[% warehouse.description %]</option>
+       [%- END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Destination bin:</th>
+     <td><select id="bin_id" name="bin_id"></select></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Part Number</th>
+     <td>
+      <input type="hidden" name="parts_id" id="parts_id" value="[% HTML.escape(parts_id) %]">
+      <input type="hidden" name="old_partnumber" id="old_partnumber" value="[% HTML.escape(partnumber) %]">
+      <input name="partnumber" size="30" value="[% HTML.escape(partnumber) %]">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Part Description</th>
+     <td>
+      <input name="description" size="30" value="[% HTML.escape(description) %]">
+      <input type="button" onclick="part_selection_window('partnumber', 'description', 'parts_id', 0, 'Form', 'no_services:click_button=update_button')" value="?">
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Charge number</th>
+     <td><input name="chargenumber" size="30" value="[% HTML.escape(chargenumber) %]"></td>
+    </tr>
+    <tr>
+     <th align="right" nowrap>EAN</th>
+     <td><input name="ean" size="30" value="[% HTML.escape(ean) %]"></td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Quantity</th>
+     <td>
+      <input name="qty" size="10" value="[% HTML.escape(LxERP.format_amount(qty)) %]">
+      <select name="unit">
+       [%- FOREACH unit = UNITS %]<option[% IF unit.selected %] selected[% END %]>[% HTML.escape(unit.name) %]</option>[% END %]
+      </select>
+     </td>
+    </tr>
+
+    <tr>
+     <th align="right" nowrap>Optional comment</th>
+     <td><input name="comment" size="30" value="[% HTML.escape(comment) %]"></td>
+    </tr>
+
+   </table>
+  </p>
+
+  <p>
+   <input type="submit" class="submit" name="action" id="update_button" value="Update">
+   [%- IF parts_id %]
+   <input type="submit" class="submit" name="action" value="Stock">
+   [%- END %]
+  </p>
+ </form>
+
+</body>
+</html>