ActionBar: Umstellung von Dialogbuchung und Berichtsfunktion in gl.pl
authorMartin Helmling martin.helmling@octosoft.eu <martin.helmling@octosoft.eu>
Tue, 3 Jan 2017 14:18:48 +0000 (15:18 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 28 Feb 2017 09:43:58 +0000 (10:43 +0100)
bin/mozilla/gl.pl
locale/de/all
templates/webpages/gl/form_footer.html
templates/webpages/gl/generate_report_bottom.html
templates/webpages/gl/search.html

index f44f3cb..f0cd92b 100644 (file)
@@ -338,6 +338,8 @@ sub search {
   $::form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]);
   $::form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all;
 
+  setup_gl_search_action_bar();
+
   $::form->header;
   print $::form->parse_html_template('gl/search', {
     employee_label => sub { "$_[0]{id}--$_[0]{name}" },
@@ -630,7 +632,9 @@ sub generate_report {
 
   $report->set_options('raw_bottom_info_text' => $raw_bottom_info_text);
 
-  $report->generate_with_headers();
+  setup_gl_transactions_action_bar(num_rows => scalar(@{$form->{GL}}));
+
+  $report->generate_with_headers(action_bar => 1);
 
   $main::lxdebug->leave_sub();
 }
@@ -949,6 +953,120 @@ sub _get_radieren {
   return ($::instance_conf->get_gl_changeable == 2) ? ($::form->current_date(\%::myconfig) eq $::form->{gldate}) : ($::instance_conf->get_gl_changeable == 1);
 }
 
+sub setup_gl_action_bar {
+  my %params = @_;
+  my $form   = $::form;
+  my $change_never            = $::instance_conf->get_gl_changeable == 0;
+  my $change_on_same_day_only = $::instance_conf->get_gl_changeable == 2 && ($form->current_date(\%::myconfig) ne $form->{gldate});
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      action => [
+        t8('Update'),
+        submit    => [ '#form', { action => 'update' } ],
+        id        => 'update_button',
+        accesskey => 'enter',
+      ],
+      action => [
+        t8('Post'),
+        submit   => [ '#form', { action => 'post' } ],
+        disabled => $form->{locked}                           ? t8('The billing period has already been locked.')
+                  : $form->{storno}                           ? t8('A canceled general ledger transaction cannot be posted.')
+                  : ($form->{id} && $change_never)            ? t8('Changing general ledger transaction has been disabled in the configuration.')
+                  : ($form->{id} && $change_on_same_day_only) ? t8('General ledger transactions can only be changed on the day they are posted.')
+                  :                                             undef,
+        ],
+      combobox => [
+        action => [ t8('Storno'),
+          submit   => [ '#form', { action => 'storno' } ],
+          confirm  => t8('Do you really want to cancel this general ledger transaction?'),
+          disabled => !$form->{id} ? t8('This general ledger transaction has not been posted yet.') : undef,
+        ],
+        action => [ t8('Delete'),
+          submit   => [ '#form', { action => 'delete' } ],
+          confirm  => t8('Do you really want to delete this object?'),
+          disabled => !$form->{id}             ? t8('This invoice has not been posted yet.')
+                    : $form->{locked}          ? t8('The billing period has already been locked.')
+                    : $change_never            ? t8('Changing invoices has been disabled in the configuration.')
+                    : $change_on_same_day_only ? t8('Invoices can only be changed on the day they are posted.')
+                    :                            undef,
+        ],
+      ], # end of combobox "Storno"
+
+      combobox => [
+        action => [ t8('more') ],
+        action => [
+          t8('History'),
+          call     => [ 'set_history_window', $form->{id} * 1, 'id' ],
+          disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef,
+        ],
+        action => [
+          t8('Follow-Up'),
+          call     => [ 'follow_up_window' ],
+          disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef,
+        ],
+        action => [
+          t8('Record templates'),
+          call => [ 'kivi.RecordTemplate.popup', 'gl_transaction' ],
+        ],
+        action => [
+          t8('Drafts'),
+          call     => [ 'kivi.Draft.popup', 'gl', 'unknown', $form->{draft_id}, $form->{draft_description} ],
+          disabled => $form->{id}     ? t8('This invoice has already been posted.')
+                    : $form->{locked} ? t8('The billing period has already been locked.')
+                    :                   undef,
+        ],
+      ], # end of combobox "more"
+    );
+  }
+}
+
+sub setup_gl_search_action_bar {
+  my %params = @_;
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      action => [
+        t8('Search'),
+        submit    => [ '#form', { action => 'continue', nextsub => 'generate_report' } ],
+        accesskey => 'enter',
+      ],
+    );
+  }
+}
+
+sub setup_gl_transactions_action_bar {
+  my %params = @_;
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      combobox => [
+        action => [ $::locale->text('Create new') ],
+        action => [
+          $::locale->text('GL Transaction'),
+          submit => [ '#create_new_form', { action => 'gl_transaction' } ],
+        ],
+        action => [
+          $::locale->text('AR Transaction'),
+          submit => [ '#create_new_form', { action => 'ar_transaction' } ],
+        ],
+        action => [
+          $::locale->text('AP Transaction'),
+          submit => [ '#create_new_form', { action => 'ap_transaction' } ],
+        ],
+        action => [
+          $::locale->text('Sales Invoice'),
+          submit => [ '#create_new_form', { action => 'sales_invoice'  } ],
+        ],
+        action => [
+          $::locale->text('Vendor Invoice'),
+          submit => [ '#create_new_form', { action => 'vendor_invoice' } ],
+        ],
+      ], # end of combobox "Create new"
+    );
+  }
+}
+
 sub form_header {
   $::lxdebug->enter_sub;
   $::auth->assert('gl_transactions');
@@ -986,6 +1104,8 @@ sub form_header {
   $::form->{previous_id}     ||= "--";
   $::form->{previous_gldate} ||= "--";
 
+  setup_gl_action_bar();
+
   $::form->header;
   print $::form->parse_html_template('gl/form_header', {
     hide_title => $title,
@@ -1019,42 +1139,6 @@ sub form_footer {
 sub delete {
   $main::lxdebug->enter_sub();
 
-  my $form     = $main::form;
-  my $locale   = $main::locale;
-
-  $form->header;
-
-  print qq|
-<form method=post action=gl.pl>
-|;
-
-  map { $form->{$_} =~ s/\"/&quot;/g } qw(reference description);
-
-  delete $form->{header};
-
-  foreach my $key (keys %$form) {
-    next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key}));
-    print qq|<input type="hidden" name="$key" value="$form->{$key}">\n|;
-  }
-
-  print qq|
-<h2 class=confirm>| . $locale->text('Confirm!') . qq|</h2>
-
-<h4>|
-    . $locale->text('Are you sure you want to delete Transaction')
-    . qq| $form->{reference}</h4>
-
-<input name=action class=submit type=submit value="|
-    . $locale->text('Yes') . qq|">
-</form>
-|;
-  $main::lxdebug->leave_sub();
-
-}
-
-sub yes {
-  $main::lxdebug->enter_sub();
-
   my $form     = $main::form;
   my %myconfig = %main::myconfig;
   my $locale   = $main::locale;
index 175f0cf..e8d8b65 100755 (executable)
@@ -51,6 +51,7 @@ $self->{texts} = {
   '<b>Automatically create new bins</b> in the following warehouse if not selected in the list above' => '<b>Automatisches Zuweisen der Lagerplätze</b> im folgenden Lager, falls keine andere Zuweisung oben ausgewählt ist. ',
   '<b>Default Bins Migration !READ CAREFULLY!</b>' => 'Standardlagerplatz Migration !AUFMERKSAM LESEN!',
   '<b>What</b> do you want to look for?' => '<b>Wonach</b> wollen Sie suchen?',
+  'A canceled general ledger transaction cannot be posted.' => 'Eine stornierte Dialogbuchung kann nicht mehr gebucht werden.',
   'A canceled invoice cannot be posted.' => 'Eine stornierte Rechnung kann nicht mehr gebucht werden.',
   'A digit is required.'        => 'Eine Ziffer ist vorgeschrieben.',
   'A directory with the name for the new print templates exists already.' => 'Ein Verzeichnis mit dem selben Namen wie die neuen Druckvorlagen existiert bereits.',
@@ -555,6 +556,7 @@ $self->{texts} = {
   'Changed text blocks: #1'     => 'Geänderte Textblöcke: #1',
   'Changes in this block are only sensible if the account is NOT a summary account AND there exists one valid taxkey. To select both Receivables and Payables only make sense for Payment / Receipt (i.e. account cash).' => 'Es ist nur sinnvoll Änderungen vorzunehmen, wenn das Konto KEIN Sammelkonto ist und wenn ein gültiger Steuerschlüssel für das Konto existiert. Gleichzeitig Haken bei Forderungen und Verbindlichkeiten zu setzen, macht auch NUR für den Zahlungsein- und Ausgang (bspw. Bank oder Kasse) Sinn.',
   'Changes to Receivables and Payables are only possible if no transactions to this account are posted yet.' => 'Änderungen bei Forderungen oder Verbindlichkeiten sind nur möglich, wenn dieses Konto noch nicht bebucht wurde.',
+  'Changing general ledger transaction has been disabled in the configuration.' => 'Das Verändern von Dialogbuchungen ist in der Konfiguration deaktiviert.',
   'Changing invoices has been disabled in the configuration.' => 'Das Verändern von Rechnungen ist in der Konfiguration deaktiviert.',
   'Charge'                      => 'Berechnen',
   'Charge Number'               => 'Chargennummer',
@@ -977,6 +979,7 @@ $self->{texts} = {
   'Do not set this comment'     => 'Diesen Kommentar nicht setzen',
   'Do not set this warehouse'   => 'Dieses Lager nicht setzen',
   'Do you really want do continue?' => 'Wollen Sie wirklich fortfahren?',
+  'Do you really want to cancel this general ledger transaction?' => 'Wollen Sie diese Dialogbuchung wirklich stornieren?',
   'Do you really want to cancel this invoice?' => 'Wollen Sie diese Rechnung wirklich stornieren?',
   'Do you really want to cancel?' => 'Wollen Sie wirklich abbrechen?',
   'Do you really want to close the following SEPA exports? No payment will be recorded for bank collections that haven\'t been marked as executed yet.' => 'Wollen Sie wirklich die folgenden SEPA-Exporte abschließen? Für Überweisungen, die noch nicht gebucht wurden, werden dann keine Zahlungen verbucht.',
@@ -1401,6 +1404,7 @@ $self->{texts} = {
   'General ledger and cash'     => 'Finanzbuchhaltung und Zahlungsverkehr',
   'General ledger corrections'  => 'Korrekturen im Hauptbuch',
   'General ledger transaction \'#1\' posted' => 'Dialogbuchung \'#1\' verbucht.',
+  'General ledger transactions can only be changed on the day they are posted.' => 'Dialogbuchungen können nur am Buchungstag geändert werden.',
   'General settings'            => 'Allgemeine Einstellungen',
   'Generate and print sales delivery orders' => 'Erzeuge und drucke Lieferscheine',
   'Generic Tax Report'          => 'USTVA Bericht',
@@ -3207,6 +3211,7 @@ $self->{texts} = {
   'This export will include all records in the given time range and all supplicant information from checked entities. You will receive a single zip file. Please extract this file onto the data medium requested by your auditor.' => 'Dieser Export umfasst alle Belege im gewählten Zeitrahmen und die dazugehörgen Informationen aus den gewählten Blöcken. Sie erhalten eine einzelne Zip-Datei. Bitte entpacken Sie diese auf das Medium das Ihr Steuerprüfer wünscht.',
   'This feature especially prevents mistakes by mixing up prior tax and sales tax.' => 'Dieses Feature vermeidet insbesondere Verwechslungen von Umsatz- und Vorsteuer.',
   'This function requires the presence of articles with a time-based unit such as "h" or "min".' => 'Für diese Funktion mussen Artikel mit einer Zeit-basierten Einheit wie "Std" oder "min" existieren.',
+  'This general ledger transaction has not been posted yet.' => 'Die Dialogbuchung wurde noch nicht gebucht.',
   'This group is valid for the following clients' => 'Diese Gruppe ist für die folgenden Mandanten gültig',
   'This has been changed in this version, therefore please change the "old" bins to some real warehouse bins.' => 'Das wurde in dieser Version umgestellt, bitte ändern Sie die Freitext-Lagerplätze auf vorhandene Lagerplätze.',
   'This has been changed in this version.' => 'Ab dieser Version ist dies nicht mehr so.',
index f9b018f..e278080 100644 (file)
 [%- IF id && follow_ups.size %]
   <p>[% LxERP.t8('There are #1 unfinished follow-ups of which #2 are due.', follow_ups.size , follow_ups_due) %]</p>
 [%- END %]
-
-<br>
-
-[%- IF id %]
-  [% L.submit_tag('action', LxERP.t8('Update'), id='update_button') %]
-
-  [% IF !locked && radieren %]
-    [% L.submit_tag('action', LxERP.t8('Post'), accesskey='b') %]
-    [% L.submit_tag('action', LxERP.t8('Delete')) %]
-  [%- END %]
-
-  [%- IF !storno %]
-    [% L.submit_tag('action', LxERP.t8('Storno')) %]
-  [%- END %]
-
-  [% L.submit_tag('action', LxERP.t8('Follow-Up'), onclick='follow_up_window()') %]
-[%- ELSE %]
-
-      [% L.submit_tag('action', LxERP.t8('Update'), id='update_button') %]
-      [% L.submit_tag('action', LxERP.t8('Post')) %]
-      [% L.button_tag('kivi.Draft.popup("gl", "unknown", "' _ draft_id _ '", "' _ draft_description _ '")', LxERP.t8('Drafts')) %]
-      [% L.hidden_tag('draft_id', draft_id) %]
-      [% L.hidden_tag('draft_description', draft_description) %]
-[%- END %]
-
-   [% L.button_tag("kivi.RecordTemplate.popup('gl_transaction')", LxERP.t8("Record templates")) %]
-  </form>
+</form>
 
 <script type="text/javascript">
  <!--
index 98d5c71..460ba02 100644 (file)
@@ -1,11 +1,4 @@
-[% USE T8 %][% USE HTML %]<form method="post" action="dispatcher.pl?M=gl">
-
+[% USE HTML %]
+<form method="post" id="create_new_form" action="gl.pl">
  <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
-
- <input class="submit" type="submit" name="A_gl_transaction" value="[%- 'GL Transaction' | $T8 %]">
- <input class="submit" type="submit" name="A_ar_transaction" value="[%- 'AR Transaction' | $T8 %]">
- <input class="submit" type="submit" name="A_ap_transaction" value="[%- 'AP Transaction' | $T8 %]">
- <input class="submit" type="submit" name="A_sales_invoice" value="[%- 'Sales Invoice' | $T8 %]">
- <input class="submit" type="submit" name="A_vendor_invoice" value="[%- 'Vendor Invoice' | $T8 %]">
-
 </form>
index 80a4aca..2ba1e39 100644 (file)
@@ -4,7 +4,7 @@
 [%- USE L %]
 <h1>[% 'Journal' | $T8 %]</h1>
 
-<form method=post action=gl.pl>
+<form method=post id="form" action=gl.pl>
 
 <input type=hidden name=sort value=datesort>
 
       </table>
     </td>
   </tr>
-  <tr>
-    <td><hr size=3 noshade></td>
-  </tr>
 </table>
-
-<input type=hidden name=nextsub value=generate_report>
-
-<br>
-<input class=submit type=submit name=action value="[% 'Continue' | $T8 %]">
 </form>