Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 809d6481

Von Niclas Zimmermann vor mehr als 11 Jahren hinzugefügt

Upgrade-Script für Steuerfilterung

Bei Dialogbuchungen kam es in der Vergangenheit oft zu Verwechslungen
mit Vor-/Umsatzsteuer. Daher werden für jede Steuer nun auch alle
Kontoarten gespeichert, bei denen die Steuer angezeigt werden soll.
Dieser Commit enthält das DB-Update, um die Speicherung möglich zu
machen.

Siehe auch #2249.

Unterschiede anzeigen:

locale/de/all
931 931
  'Fristsetzung'                => 'Fristsetzung',
932 932
  'From'                        => 'Von',
933 933
  'From Date'                   => 'Von',
934
  'From this version on a new feature is available.' => 'Ab dieser Version ist ein neues Feature verfügbar.',
934 935
  'From this version on the partnumber of services, articles and assemblies have to be unique.' => 'Ab dieser Version müssen Artikelnummern eindeutig vergeben werden.',
935 936
  'From this version on the taxkey 0 must have a tax rate of 0 (for DATEV compatibility).' => 'Ab dieser Version muss der Steuerschlüssel 0 einen Steuersatz von 0% haben (auf Grund der DATEV-Kompatibilität).',
936 937
  'Full Access'                 => 'Vollzugriff',
......
996 997
  '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:' => 'Falls der oben genannte Datenbankbenutzer nicht die Berechtigung zum Anlegen neuer Datenbanken hat, so können Sie hier den Namen und das Passwort des Datenbankadministratoraccounts angeben:',
997 998
  'If you chose to let kivitendo do the migration then kivitendo will also remove the old member file after creating a backup copy of it in the directory "#1".' => 'Falls Sie sich entscheiden, kivitendo die Migration durchführen zu lassen, so wird kivitendo ein Backup der alten Dateien im Verzeichnis "#1" erstellen und die Dateien anschließend löschen.',
998 999
  '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.' => 'Wenn Sie für die Artikelnummer und / oder die Beschreibung etwas eingeben, so werden nur die Lagerplätze angezeigt, in denen Waren eingelagert sind, die Ihre Suchbegriffe enthalten.',
1000
  'If you have not chosen for example the category revenue for a tax and you choose an revenue account to create a transfer in the general ledger, this tax will not be displayed in the tax dropdown.' => 'Wenn Sie z.B. die Kategory Erlös für eine Steuer nicht gewählt haben und ein Erlöskonto beim Erstellen einer Dialogbuchung wählen, wird diese Steuer auch nicht im Dropdown-Menü für die Steuern angezeigt.',
999 1001
  '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.' => 'Wenn Sie diese Meldung sehen haben Sie wahrscheinlich ein frisches LX-Office Setup und noch keine Buchungsgruppen eingerichtet. Ein Administrator kann dies im Systemmenü erledigen.',
1000 1002
  'If you select a base unit then you also have to enter a factor.' => 'Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben.',
1001 1003
  'If you want to change any of these parameters then press the "Back" button, edit the file "config/kivitendo.conf" and login into the admin module again.' => 'Wenn Sie einen der Parameter ändern wollen, so drücken Sie auf den "Zurück"-Button, bearbeiten Sie die Datei "config/kivitendo.conf", und melden Sie sich erneut im Administrationsbereich an.',
......
1253 1255
  'New bank account'            => 'Neues Bankkonto',
1254 1256
  'New contact'                 => 'Neue Ansprechperson',
1255 1257
  'New customer'                => 'Neuer Kunde',
1258
  'New filter for tax accounts' => 'Neue Filter für Steuerkonten',
1256 1259
  'New invoice'                 => 'Neue Rechnung',
1257 1260
  'New part'                    => 'Neue Ware',
1258 1261
  'New sales order'             => 'Neuer Auftrag',
......
1446 1449
  'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:',
1447 1450
  'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.',
1448 1451
  'Please change the partnumber of the following parts and run the update again:' => 'Bitte ändern Sie daher die Artikelnumer folgender Artikel:',
1452
  'Please choose for which categories the taxes should be displayed:' => 'Bitte wählen Sie für welche Kontoarten die Steuer angezeigt werden soll:',
1449 1453
  'Please contact your administrator or a service provider.' => 'Bitte kontaktieren Sie Ihren Administrator oder einen Dienstleister.',
1450 1454
  'Please contact your administrator.' => 'Bitte wenden Sie sich an Ihren Administrator.',
1451 1455
  'Please define a taxkey for the following taxes and run the update again:' => 'Bitte definieren Sie einen Steuerschlüssel für die folgenden Steuern und starten Sie dann das Update erneut:',
......
1886 1890
  'Tax deleted!'                => 'Steuer gelöscht!',
1887 1891
  'Tax number'                  => 'Steuernummer',
1888 1892
  'Tax paid'                    => 'Vorsteuer',
1893
  'Tax rate'                    => 'Steuersatz',
1889 1894
  'Tax saved!'                  => 'Steuer gespeichert!',
1890 1895
  'Tax-O-Matic'                 => 'Steuer',
1891 1896
  'Tax-o-matic Account'         => 'Automatikbuchung auf Konto',
......
2123 2128
  'This corresponds to kivitendo\'s behavior prior to version 2.4.4.' => 'Dies entspricht kivitendos Verhalten vor Version 2.4.4.',
2124 2129
  'This could have happened for two reasons:' => 'Dies kann aus zwei Gründen geschehen sein:',
2125 2130
  'This customer number is already in use.' => 'Diese Kundennummer wird bereits verwendet.',
2131
  'This feature especially prevents mistakes by mixing up prior tax and sales tax.' => 'Dieses Feature vermeidet insbesondere Verwechslungen von Umsatz- und Vorsteuer.',
2126 2132
  'This group will be called "Full Access".' => 'Diese Gruppe wird "Vollzugriff" genannt.',
2127 2133
  'This installation uses an unknown chart of accounts ("#1"). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen ("#1"). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.',
2128 2134
  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine Änderungen vorgenommen!',
......
2320 2326
  'You are logged out!'         => 'Auf Wiedersehen!',
2321 2327
  'You can also create new units now.' => 'Sie können jetzt auch neue Einheiten anlegen.',
2322 2328
  'You can also delete this transaction and re-enter it manually.' => 'Alternativ können Sie die Buchung auch mit löschen lassen und sie anschließend neu eingeben.',
2329
  'You can choose account categories for taxes. Depending on these categories taxes will be displayed for transfers in the general ledger or not.' => 'Sie können Kontoarten für Steuern auswählen. Abhängig von diesen Kontoarten werden dann Steuern bei Dialogbuchungen angezeigt oder nicht.',
2323 2330
  'You can correct this transaction by chosing the correct taxkeys from the drop down boxes and hitting the button "Fix transaction" afterwards.' => 'Sie haben die Möglichkeit, die Buchung zu korrigieren, indem Sie in den Drop-Down-Boxen die richtigen Steuerschlüssel auswählen und anschließend auf den Button "Buchung korrigieren" drücken.',
2324 2331
  'You can create a missing dataset by going back and chosing "Create Dataset".' => 'Sie können eine fehlende Datenbank erstellen, indem Sie jetzt zuück gehen und den Punkt "Neue Datenbank anlegen" wählen.',
2325 2332
  'You can create warehouses and bins via the menu "System -> Warehouses".' => 'Sie können Lager und Lagerplätze über das Menü "System -> Lager" anlegen.',
sql/Pg-upgrade2/steuerfilterung.pl
1
# @tag: steuerfilterung
2
# @description: Steuern in Dialogbuchungen filtern.
3
# @depends: release_3_0_0
4
package SL::DBUpgrade2::steuerfilterung;
5

  
6
use strict;
7
use utf8;
8

  
9
use parent qw(SL::DBUpgrade2::Base);
10

  
11
sub run {
12
  my ($self) = @_;
13

  
14
  if ( $::form->{'continued'} ) {
15
    my $update_query = qq|ALTER TABLE tax ADD chart_categories TEXT|;
16
    $self->db_query($update_query);
17
    my $categories;
18
    my $tax_id;
19
    foreach my $i (1 .. $::form->{rowcount}) {
20
      $tax_id = $::form->{"tax_id_$i"};
21
      $categories = '';
22
      $categories .= 'A' if $::form->{"asset_$i"};
23
      $categories .= 'L' if $::form->{"liability_$i"};
24
      $categories .= 'Q' if $::form->{"equity_$i"};
25
      $categories .= 'C' if $::form->{"costs_$i"};
26
      $categories .= 'I' if $::form->{"revenue_$i"};
27
      $categories .= 'E' if $::form->{"expense_$i"};
28
      $update_query = qq|UPDATE tax SET chart_categories = '$categories' WHERE id=$tax_id|;
29
      $self->db_query($update_query);
30
    }
31
    $update_query = qq|ALTER TABLE tax ALTER COLUMN chart_categories SET NOT NULL|;
32
    $self->db_query($update_query);
33
    $self->dbh->commit();
34
    return 1;
35
  }
36

  
37
  my $query = qq|SELECT taxkey, taxdescription, rate, id AS tax_id FROM tax order by taxkey, rate|;
38

  
39
  my $sth = $self->dbh->prepare($query);
40
  $sth->execute || $::form->dberror($query);
41

  
42
  $::form->{PARTS} = [];
43
  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
44
    $ref->{rate} = $::form->format_amount(\%::myconfig, $::form->round_amount($ref->{rate} * 100));
45
    push @{ $::form->{PARTS} }, $ref;
46
  }
47

  
48
  &print_message;
49
  return 2;
50
} # end run
51

  
52
sub print_message {
53
  print $::form->parse_html_template("dbupgrade/steuerfilterung");
54
}
55

  
56
1;
templates/webpages/dbupgrade/steuerfilterung.html
1

  
2
[% USE T8 %]
3
[% USE HTML %]
4
[% USE L %]
5
<div class="listtop">[% 'New filter for tax accounts' | $T8 %]</div>
6

  
7
<form name="Form" method="post" action="login.pl">
8
<input type="hidden" name="action" value="login">
9
<input type="hidden" name="continued" value="1">
10

  
11
<p>[% 'From this version on a new feature is available.' | $T8 %]</p>
12
<p>[% 'You can choose account categories for taxes. Depending on these categories taxes will be displayed for transfers in the general ledger or not.' | $T8 %]</p>
13
<p>[% 'If you have not chosen for example the category revenue for a tax and you choose an revenue account to create a transfer in the general ledger, this tax will not be displayed in the tax dropdown.' | $T8 %]</p>
14
<p>[% 'This feature especially prevents mistakes by mixing up prior tax and sales tax.' | $T8 %]</p>
15
<p>[% 'Please choose for which categories the taxes should be displayed:' | $T8 %]</p>
16
<table>
17
  <tr>
18
    <th class="listheading">[% 'Taxkey' | $T8 %]</th>
19
    <th class="listheading">[% 'Description' | $T8 %]</th>
20
    <th class="listheading">[% 'Tax rate' | $T8 %]</th>
21
    <th class="listheading">[% 'Asset' | $T8 %] (A)</th>
22
    <th class="listheading">[% 'Liability' | $T8 %] (L)</th>
23
    <th class="listheading">[% 'Equity' | $T8 %] (Q)</th>
24
    <th class="listheading">[% 'Costs' | $T8 %] (C)</th>
25
    <th class="listheading">[% 'Revenue' | $T8 %] (I)</th>
26
    <th class="listheading">[% 'Expense' | $T8 %] (E)</th>
27
  </tr>
28

  
29
  [% SET row_odd = '1' %][% FOREACH row = PARTS %]
30
  <tr class="listrow[% IF row_odd %]1[% SET row_odd = '0' %][% ELSE %]0[% SET row_odd = '1' %][% END %]">
31
    <td align="right">[% HTML.escape(row.taxkey) %]</td>
32
    <td align="left"> [% HTML.escape(row.taxdescription) %]</a></td>
33
    <td align="right">[% HTML.escape(row.rate) %] %</td>
34
    <td align="center">[% IF row.taxkey == 0 or row.taxkey == 1 %]
35
                     [% L.checkbox_tag('asset_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
36
                     [% ELSE %]
37
                     [% L.checkbox_tag('asset_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
38
                     [% END %]</td>
39

  
40
    <td align="center">[% IF row.taxkey == 0 or row.taxkey == 1 %]
41
                     [% L.checkbox_tag('liability_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
42
                     [% ELSE %]
43
                     [% L.checkbox_tag('liability_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
44
                     [% END %]</td>
45

  
46
    <td align="center">[% IF row.taxkey == 0 or row.taxkey == 1 %]
47
                     [% L.checkbox_tag('equity_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
48
                     [% ELSE %]
49
                     [% L.checkbox_tag('equity_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
50
                     [% END %]</td>
51

  
52
    <td align="center">[% IF row.taxkey == 0 or row.taxkey == 1 %]
53
                     [% L.checkbox_tag('costs_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
54
                     [% ELSE %]
55
                     [% L.checkbox_tag('costs_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
56
                     [% END %]</td>
57

  
58
    <td align="center">[% IF row.taxkey == 8 or row.taxkey == 9 or row.taxkey == 18 or row.taxkey == 19%]
59
                     [% L.checkbox_tag('revenue_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
60
                     [% ELSE %]
61
                     [% L.checkbox_tag('revenue_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
62
                     [% END %]</td>
63

  
64
    <td align="center">[% IF row.taxkey == 2 or row.taxkey == 3 or row.taxkey == 10 or row.taxkey == 11 or row.taxkey == 12 or row.taxkey == 13 %]
65
                     [% L.checkbox_tag('expense_' _ loop.count, value => 1, checked => 0, class => 'checkbox') %]
66
                     [% ELSE %]
67
                     [% L.checkbox_tag('expense_' _ loop.count, value => 1, checked => 1, class => 'checkbox') %]
68
                     [% END %]</td>
69
  </tr>
70
  <input type="hidden" name="tax_id_[% loop.count %]" value="[% row.tax_id %]">
71
  [% SET rowcount = loop.count %]
72
  [% END %]
73
  <input type="hidden" name="rowcount" value="[% rowcount %]">
74
</table>
75

  
76
<input type="submit" value="[% 'Continue' | $T8 %]">
77

  
78
</form>

Auch abrufbar als: Unified diff