]> wagnertech.de Git - kivitendo-erp.git/commitdiff
RP.pm income_statement: EÜR/GuV mit Kontennachweis
authorG. Richardson <information@kivitendo-premium.de>
Mon, 3 Apr 2017 06:35:53 +0000 (08:35 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Fri, 7 Apr 2017 09:00:36 +0000 (11:00 +0200)
* Am Ende des Berichts kann man sich eine Liste aller Konten aus dem
Bericht anzeigen, mit Betrag und der Kategorie, in dem das Konto vorkommt.
Die Liste ist nach Kontonummer sortiert.

* Mit Klick auf eine Kategorie werden die dazugehörigen Konten
angezeigt, indem sie unterhalb der Überschrift mit einer etwas
kleineren Schrift innerhalb der Tabelle "aufgeklappt" werden.

* Am Kopf der Seite kann man mit dem Knopf "Konten zeigen" alle Konten
auf einmal aufklappen.

* Der Knopf "Knöpfe verstecken" dient dazu, die Knöpfe auszublenden,
damit man die Seite ausdrucken kann. Mit Klick auf die Überschrift
"Einnahmenüberschußrechnung" werden alle Knöpfe wieder eingeblendet.

* die Namen der Kategorien werden jetzt aus der Datenbank ausgelesen und
stehen nicht mehr hartkodiert im Template. Außerdem wurde das Template
vereinfacht, indem die Summen der Kategorien nicht mehr in einzelnen
Form-Variablen "eur1", "eur2", ... gespeichert werden, sondern alle
Summe in einem zentralen Hash stehen, und per FOREACH-Schleife im
Template ausgelesen werden können.

SL/RP.pm
locale/de/all
templates/webpages/rp/income_statement.html

index a04351e0deb6b11f37578f921a6158e3f78e57de..452f1164d66ee44375a071cb05824849c79ccb42 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -39,6 +39,7 @@ use SL::DBUtils;
 use Data::Dumper;
 use SL::DB::Helper::AccountingPeriod qw(get_balance_starting_date);
 use List::Util qw(sum);
+use List::UtilsBy qw(partition_by sort_by);
 use SL::DB;
 
 # use warnings;
@@ -1845,19 +1846,34 @@ sub income_statement {
                   $form, "pos_eur");
 
 
+  # add extra information to form to be used by template
+  my %charts_by_category =
+    partition_by { $_->{pos_eur} }
+    sort_by      { $_->{accno}   }
+    map          { $form->{charts}->{$_} }
+    keys %{ $form->{charts} };
+  $form->{"charts_by_category"} = \%charts_by_category;
+
+  $form->{"categories_income"}  = \@categories_einnahmen;
+  $form->{"categories_expense"} = \@categories_ausgaben;
+
+  $form->{category_names} = AM->get_eur_categories($myconfig, $form);
+
+  my %eur_amounts;
+
   foreach my $item (@categories_einnahmen) {
-    $form->{"eur${item}"} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
+    $eur_amounts{$item} = $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
     $form->{"sumeura"} += $form->{$item};
   }
   foreach my $item (@categories_ausgaben) {
-    $form->{"eur${item}"} =
-      $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
+    $eur_amounts{$item} = $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
     $form->{"sumeurb"} += $form->{$item};
   }
 
   $form->{"guvsumme"} = $form->{"sumeura"} - $form->{"sumeurb"};
 
+  $form->{eur_amounts} = \%eur_amounts;
+
   foreach my $item (@ergebnisse) {
     $form->{$item} =
       $form->format_amount($myconfig, $form->round_amount($form->{$item}, 2),2);
index 0896c909146ea18e24407fdd589a4e5874488849..839d7ab56ece757353f648137927f467c104aa1a 100755 (executable)
@@ -548,6 +548,7 @@ $self->{texts} = {
   'Cash'                        => 'Zahlungsverkehr',
   'Cash accounting'             => 'Ist-Versteuerung',
   'Cash basis accounting'       => 'Einnahmen-Überschuss-Rechnung',
+  'Category'                    => 'Kategorie',
   'Cc'                          => 'Cc',
   'Cc E-mail'                   => 'CC (E-Mail)',
   'Change default bin for this parts' => 'Standardlagerplatz für diese Waren ändern',
@@ -565,6 +566,7 @@ $self->{texts} = {
   'Chart'                       => 'Buchungskonto',
   'Chart Type'                  => 'Kontentyp',
   'Chart balance'               => 'Kontensaldo',
+  'Chart list'                  => 'Kontenliste',
   'Chart of Accounts'           => 'Kontenübersicht',
   'Chart picker'                => 'Kontenauswahl',
   'Chartaccounts connected to this Tax:' => 'Konten, die mit dieser Steuer verknüpft sind:',
@@ -1444,8 +1446,11 @@ $self->{texts} = {
   'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
   'Hide Filter'                 => 'Filter verbergen',
   'Hide all details'            => 'Alle Details verbergen',
+  'Hide buttons'                => 'Knöpfe verstecken',
   'Hide by default'             => 'Standardm&auml;&szlig;ig verstecken',
   'Hide chart details'          => 'Konteninformation verstecken',
+  'Hide chart list'             => 'Kontenliste verstecken',
+  'Hide charts'                 => 'Konten verstecken',
   'Hide details'                => 'Details verbergen',
   'Hide help text'              => 'Hilfetext verbergen',
   'Hide mappings (csv_import)'  => 'Spaltenzuordnungen verbergen',
@@ -2661,6 +2666,8 @@ $self->{texts} = {
   'Show all details'            => 'Alle Details anzeigen',
   'Show all parts'              => 'Alle Artikel anzeigen',
   'Show by default'             => 'Standardm&auml;&szlig;ig anzeigen',
+  'Show chart list'             => 'Kontenliste zeigen',
+  'Show charts'                 => 'Konten zeigen',
   'Show custom variable search inputs' => 'Suchoptionen für Benutzerdefinierte Variablen verstecken',
   'Show delete button in purchase delivery orders?' => 'Soll der "Löschen"-Knopf bei Einkaufslieferscheinen angezeigt werden?',
   'Show delete button in purchase orders?' => 'Soll der "Löschen"-Knopf bei Lieferantenaufträgen angezeigt werden?',
index a38cd99eb259d53456eff7cb9f7e16c38e0d9b39..9800d1e727b39da0eac54a9cbb7102d82c76cfdb 100644 (file)
@@ -1,8 +1,12 @@
 [%- USE T8 %]
 [%- USE HTML %]
 [%- USE LxERP %]
+[%- USE L %]
+[% L.button_tag('', LxERP.t8('Hide buttons'), id="hide_buttons_button", class="hide") %]
+[% L.button_tag('', LxERP.t8('Show charts'),  id="show_charts_button",  class="hide") %]
+[% L.button_tag('', LxERP.t8('Hide charts'),  id="hide_charts_button",  class="hide") %]
 
-<h3 align=center> [% title %]</h3>
+<h3 align="center" id="show_buttons"> [% title %]</h3>
 <h3 align=center>
 [% period %]<br>
 [% accounting_method %]<br>
 <br>[% report_date %]
 </h3>
 
-<table width=100% border=0>
+<style type="text/css">
+
+#eurtable {
+  border-collapse: collapse;
+  width: 100%;
+}
+
+tr.category {
+  /* background set via jquery */
+}
+
+tr.chart {
+  border: 0;
+}
+
+td.chartname {
+  padding-left: 50px;
+}
+
+tr.chartrow {
+  font-size: 75%;
+}
+
+.guv_row_background {
+  background:#f0f0f0;
+}
+</style>
+
+<table id="eurtable">
 <tr>
   <td width=75% align=left colspan=2><font size="+1"><b>A. Betriebseinnahmen</font></b><br></td>
   <td></td>
 </tr>
 
-<tr>
-  <td>
-    Umsatzerl&ouml;se
-  </td>
-  <td>
-    [% eur1 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    sonstige Erl&ouml;se
-  </td>
-  <td>
-    [% eur2 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Privatanteile
-  </td>
-  <td>
-    [% eur3 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Zinsertr&auml;ge
-  </td>
-  <td>
-    [% eur4 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Au&szlig;erordentliche Ertr&auml;ge
-  </td>
-  <td>
-    [% eur5 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Vereinnahmte Umsatzsteuer
-  </td>
-  <td>
-    [% eur6 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Umsatzsteuererstattungen
-  </td>
-  <td>
-    [% eur7 %]
-  </td>
-</tr>
-
-
+[% FOREACH i IN categories_income %]
+  <tr class="category" data-catid="cat[% i %]">
+    <td>
+      [% HTML.escape(category_names.item(i)) %]
+    </td>
+    <td class="numeric">
+      [% eur_amounts.item(i) %]
+    </td>
+  </tr>
+  [% FOREACH chart = charts_by_category.item(i).list %]
+  <tr class="chartrow cat[% i %]">
+    <td class="chartname">[% chart.accno %] [% chart.description %]</td>
+    <td class="numeric"> [% LxERP.format_amount(chart.amount,2) %] </td>
+  </tr>
+  [% END %]
+[% END %]
 <tr>
   <td> </td>
   <td><hr noshade size=1></td>
   <td></td>
 </tr>
 
-<tr>
-  <td>
-    Wareneing&auml;nge
-  </td>
-  <td>
-    [% eur8 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    L&ouml;hne und Geh&auml;lter
-  </td>
-  <td>
-    [% eur9 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Gesetzlicher sozialer Aufwand
-  </td>
-  <td>
-    [% eur10 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Mieten
-  </td>
-  <td>
-    [% eur11 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Gas, Strom, Wasser
-  </td>
-  <td>
-    [% eur12 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Instandhaltung
-  </td>
-  <td>
-    [% eur13 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Steuern, Versicherungen, Beitr&auml;ge
-  </td>
-  <td>
-    [% eur14 %]
-  </td>
-</tr>
-<tr>
-  <td>
-    Kfz-Steuern
-  </td>
-  <td>
-    [% eur15 %]
-  </td>
-</tr><tr>
-  <td>
-    Kfz-Versicherungen
-  </td>
-  <td>
-    [% eur16 %]
-  </td>
-</tr><tr>
-  <td>
-    Sonstige Fahrzeugkosten
-  </td>
-  <td>
-    [% eur17 %]
-  </td>
-</tr><tr>
-  <td>
-    Werbe- und Reisekosten
-  </td>
-  <td>
-    [% eur18 %]
-  </td>
-</tr><tr>
-  <td>
-    Instandhaltung und Werkzeuge
-  </td>
-  <td>
-    [% eur19 %]
-  </td>
-</tr><tr>
-  <td>
-    Fachzeitschriften, B&uuml;cher
-  </td>
-  <td>
-    [% eur20 %]
-  </td>
-</tr><tr>
-  <td>
-    Miete f&uuml;r Einrichtungen
-  </td>
-  <td>
-    [% eur21 %]
-  </td>
-</tr><tr>
-  <td>
-    Rechts- und Beratungskosten
-  </td>
-  <td>
-    [% eur22 %]
-  </td>
-</tr><tr>
-  <td>
-    B&uuml;robedarf, Porto, Telefon
-  </td>
-  <td>
-    [% eur23 %]
-  </td>
-</tr><tr>
-  <td>
-    Sonstige Aufwendungen
-  </td>
-  <td>
-    [% eur24 %]
-  </td>
-</tr><tr>
-  <td>
-    Abschreibungen auf Anlageverm&ouml;gen
-  </td>
-  <td>
-    [% eur25 %]
-  </td>
-</tr><tr>
-  <td>
-    Abschreibungen auf GWG
-  </td>
-  <td>
-    [% eur26 %]
-  </td>
-</tr><tr>
-  <td>
-    Vorsteuer
-  </td>
-  <td>
-    [% eur27 %]
-  </td>
-</tr><tr>
-  <td>
-    Umsatzsteuerzahlungen
-  </td>
-  <td>
-    [% eur28 %]
-  </td>
-</tr><tr>
-  <td>
-    Zinsaufwand
-  </td>
-  <td>
-    [% eur29 %]
-  </td>
-</tr><tr>
-  <td>
-    Au&szlig;erordentlicher Aufwand
-  </td>
-  <td>
-    [% eur30 %]
-  </td>
-</tr><tr>
-  <td>
-    Betriebliche Steuern
-  </td>
-  <td>
-    [% eur31 %]
-  </td>
-</tr>
-
-
+[% FOREACH i IN categories_expense %]
+  <tr class="category" data-catid="cat[% i %]">
+    <td>
+      [% HTML.escape(category_names.item(i)) %]
+    </td>
+    <td class="numeric">
+      [% eur_amounts.item(i) %]
+    </td>
+  </tr>
+  [% FOREACH chart = charts_by_category.item(i).list %]
+  <tr class="chartrow cat[% i %]">
+    <td class="chartname">[% chart.accno %] [% chart.description %]</td>
+    <td class="numeric"> [% LxERP.format_amount(chart.amount,2) %] </td>
+  </tr>
+  [% END %]
+[% END %]
 <tr>
   <td> </td>
   <td><hr noshade size=1></td>
 
 </table>
 
+
+<br>
+
+[% L.button_tag('', LxERP.t8('Show chart list'), id="show_chartlist_button", class="hide") %]
+[% L.button_tag('', LxERP.t8('Hide chart list'), id="hide_chartlist_button", class="hide") %]
+
+<div id="chartlist">
+<div>[% 'Chart list' | $T8 %]</div>
+<div>
+<table>
+<tr>
+  <th>[% 'Chart'    | $T8 %]</th>
+  <th>[% 'Amount'   | $T8 %]</th>
+  <th>[% 'Category' | $T8 %]</th>
+</tr>
+[% FOREACH key = charts.keys.sort %]
+[% UNLESS charts.$key.pos_eur %]
+[% NEXT %]
+[% END %]
+<tr>
+ <td>[% charts.$key.accno %]</td>
+ <td class="numeric">[%  LxERP.format_amount( charts.$key.amount, 2 ) %]</td>
+ <td>[% HTML.escape(category_names.item(charts.$key.pos_eur)) %]</td>
+</tr>
+[% END %]
+</table>
+</div>
+</div>
 </body>
 </html>
 
+<script language="javascript">
+$( document ).ready(function() {
+  $( ".chartrow" ).hide();
+  $( "#hide_charts_button" ).hide();
+  $( "#hide_chartlist_button" ).hide();
+  $( "#chartlist" ).hide();
+  $( '.category:even' ).css('background-color','#f0f0f0');
+  $( '.category:odd' ).css('background-color','#f8f8f8');
+
+  $( "#show_chartlist_button" ).click(function() {
+    $( "#chartlist" ).toggle();
+    $('html, body').animate({
+        scrollTop: $(this).offset().top
+    }, 500);
+    $(this).hide();
+    $("#hide_chartlist_button").show();
+  });
+
+  $( "#hide_chartlist_button" ).click(function() {
+    $( "#chartlist" ).toggle();
+    $('html, body').animate({
+        scrollTop: $(this).offset().top
+    }, 500);
+    $(this).hide();
+    $("#show_chartlist_button").show();
+  });
+
+  $( "#hide_buttons_button" ).click(function() {
+    $( ".hide" ).hide();
+  });
+
+  $( "#show_buttons" ).click(function() {
+    $( ".hide" ).show();
+  });
+
+  $( "#show_charts_button" ).click(function() {
+    $( ".chartrow" ).show();
+    $(this).hide();
+    $("#hide_charts_button").show();
+  });
+
+  $( "#hide_charts_button" ).click(function() {
+    $( ".chartrow" ).hide();
+    $(this).hide();
+    $("#show_charts_button").show();
+  });
+
+  $( ".category" ).click(function() {
+    var chartrow_class = $(this).attr('data-catid');
+    $('.' + chartrow_class).toggle();
+  });
+})
+
+</script>