Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 86bb04e4

Von Andreas Rudin vor 10 Monaten hinzugefügt

  • ID 86bb04e41f0df71515b17ff5221d317861c967b6
  • Vorgänger b0c61725
  • Nachfolger d2ec2817

Vereinfachte Methode beim Jahresabschluss

- Nur 2 statt 3 Konten bei den Jahresabschluss-Standardkonten:
Jahresabschluss-Konto und
Konto zum Verbuchen des Jahresgewinns oder verlusts
Keine Abschlussbuchungen bei den Erfolgskonten
- Auswahl der Methode in der Mandantenkonfiguration unter Buchungskonfiguration
- Alle Konten als Abschlusskonten auswählbar
- Verbuchen des Jahresgewinns oder -verlusts nur bei den Eröffnungsbuchungen

Unterschiede anzeigen:

SL/Controller/ClientConfig.pm
30 30
use Rose::Object::MakeMethods::Generic (
31 31
  'scalar --get_set_init' => [ qw(defaults all_warehouses all_weightunits all_languages all_currencies all_templates all_price_sources h_unit_name available_quick_search_modules
32 32
                                  all_project_statuses all_project_types zugferd_settings
33
                                  posting_options payment_options accounting_options inventory_options profit_options balance_startdate_method_options
33
                                  posting_options payment_options accounting_options inventory_options profit_options balance_startdate_method_options yearend_options
34 34
                                  displayable_name_specs_by_module available_documents_with_no_positions) ],
35 35
);
36 36

  
......
208 208
  return SL::DB::Helper::AccountingPeriod::get_balance_startdate_method_options;
209 209
}
210 210

  
211
sub init_yearend_options {
212
  [ { title => t8("default"),         value => "default"   },
213
    { title => t8("simple"),          value => "simple"    }, ]
214
}
215

  
211 216
sub init_all_price_sources {
212 217
  my @classes = SL::PriceSource::ALL->all_price_sources;
213 218

  
SL/Controller/YearEndTransactions.pm
12 12
use Data::Dumper;
13 13
use List::Util qw(sum);
14 14
use SL::ClientJS;
15
use SL::DB::Default;
15 16

  
16 17
use SL::DB::Chart;
17 18
use SL::DB::GLTransaction;
......
20 21
use SL::DB::Helper::AccountingPeriod qw(get_balance_starting_date get_balance_startdate_method_options);
21 22

  
22 23
use Rose::Object::MakeMethods::Generic (
23
  'scalar --get_set_init' => [ qw(cb_date cb_startdate ob_date) ],
24
  'scalar --get_set_init' => [ qw(cb_date cb_startdate ob_date defaults) ],
24 25
);
25 26

  
26 27
__PACKAGE__->run_before('check_auth');
......
30 31

  
31 32
  $self->cb_startdate($::locale->parse_date_to_object($self->get_balance_starting_date($self->cb_date)));
32 33

  
33
  my $defaults         = SL::DB::Default->get;
34
  my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $defaults->carry_over_account_chart_id     );
35
  my $profit_chart     = SL::DB::Manager::Chart->find_by( id => $defaults->profit_carried_forward_chart_id );
36
  my $loss_chart       = SL::DB::Manager::Chart->find_by( id => $defaults->loss_carried_forward_chart_id   );
34
  my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $self->defaults->carry_over_account_chart_id     );
35
  my $profit_chart     = SL::DB::Manager::Chart->find_by( id => $self->defaults->profit_carried_forward_chart_id );
36
  my $loss_chart       = SL::DB::Manager::Chart->find_by( id => $self->defaults->loss_carried_forward_chart_id   );
37 37

  
38 38
  $self->render('yearend/form',
39 39
                title                            => t8('Year-end closing'),
......
50 50
  $self->_parse_form;
51 51

  
52 52
  eval {
53
    _year_end_bookings( start_date => $self->cb_startdate,
53
    $self->_year_end_bookings( start_date => $self->cb_startdate,
54 54
                        cb_date    => $self->cb_date,
55 55
                      );
56 56
    1;
......
59 59
    return $self->js->render;
60 60
  };
61 61

  
62
  my ($report_data, $profit_loss_sum) = _report(
62
  my ($report_data, $profit_loss_sum) = $self->_report(
63 63
                                                cb_date    => $self->cb_date,
64 64
                                                start_date => $self->cb_startdate,
65 65
                                               );
......
98 98

  
99 99
  $self->_parse_form;
100 100

  
101
  my ($report_data, $profit_loss_sum) = _report(
101
  my ($report_data, $profit_loss_sum) = $self->_report(
102 102
                                                cb_date   => $self->cb_date,
103 103
                                                start_date => $self->cb_startdate,
104 104
                                               );
......
123 123
}
124 124

  
125 125
sub _year_end_bookings {
126
  my (%params) = @_;
126
  my ($self, %params) = @_;
127 127

  
128 128
  my $start_date = delete $params{start_date};
129 129
  my $cb_date    = delete $params{cb_date};
130 130

  
131
  my $defaults         = SL::DB::Default->get;
132
  my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $defaults->carry_over_account_chart_id     ) // die t8('No carry-over chart configured!');
133
  my $profit_chart     = SL::DB::Manager::Chart->find_by( id => $defaults->profit_carried_forward_chart_id ) // die t8('No profit carried forward chart configured!');
134
  my $loss_chart       = SL::DB::Manager::Chart->find_by( id => $defaults->loss_carried_forward_chart_id   ) // die t8('No profit and loss carried forward chart configured!');
131
  my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $self->defaults->carry_over_account_chart_id     ) // die t8('No carry-over chart configured!');
132
  my $profit_chart     = SL::DB::Manager::Chart->find_by( id => $self->defaults->profit_carried_forward_chart_id ) // die t8('No profit carried forward chart configured!');
133
  my $loss_chart;
134
  if ( $self->defaults->yearend_method eq 'simple' ) {
135
    $loss_chart       = $profit_chart;
136
  } else {
137
    $loss_chart     = SL::DB::Manager::Chart->find_by( id => $self->defaults->loss_carried_forward_chart_id   ) // die t8('No profit and loss carried forward chart configured!');
138
  }
135 139

  
136
  my ($report_data, $profit_loss_sum) = _report(
140
  my ($report_data, $profit_loss_sum) = $self->_report(
137 141
                                                start_date => $start_date,
138 142
                                                cb_date    => $cb_date,
139 143
                                               );
......
288 292
                              @{$report_data};
289 293
    $profit_loss_sum ||= 0;
290 294
    my $pl_chart;
291
    if ( $profit_loss_sum > 0 ) {
295
    if ( $profit_loss_sum > 0 || $self->defaults->yearend_method eq 'simple' ) {
292 296
      $pl_chart = $profit_chart;
293 297
    } else {
294 298
      $pl_chart = $loss_chart;
......
297 301
    my $pl_debit_balance  = 0;
298 302
    my $pl_credit_balance = 0;
299 303
    # soll = debit, haben = credit
300
    my $pl_cb_debit_entry = SL::DB::GLTransaction->new(
301
      employee_id    => $employee_id,
302
      transdate      => $cb_date,
303
      reference      => 'SB ' . $cb_date->year,
304
      description    => 'Automatische SB-Buchungen Erfolgskonten Soll für ' . $cb_date->year,
305
      ob_transaction => 0,
306
      cb_transaction => 1,
307
      taxincluded    => 0,
308
      transactions   => [],
309
    );
310
    my $pl_cb_credit_entry = SL::DB::GLTransaction->new(
311
      employee_id    => $employee_id,
312
      transdate      => $cb_date,
313
      reference      => 'SB ' . $cb_date->year,
314
      description    => 'Automatische SB-Buchungen Erfolgskonten Haben für ' . $cb_date->year,
315
      ob_transaction => 0,
316
      cb_transaction => 1,
317
      taxincluded    => 0,
318
      transactions   => [],
319
    );
320

  
321
    foreach my $profit_loss_account ( @profit_loss_accounts ) {
322
      # $main::lxdebug->message(0, sprintf("found chart %s with balance %s", $profit_loss_account->{accno}, $profit_loss_account->{amount_with_cb}));
323
      my $chart = $charts_by_id{ $profit_loss_account->{chart_id} };
324

  
325
      next if $profit_loss_account->{amount_with_cb} == 0;
304
    if ( $self->defaults->yearend_method ne 'simple' ) {
305
      my $pl_cb_debit_entry = SL::DB::GLTransaction->new(
306
        employee_id    => $employee_id,
307
        transdate      => $cb_date,
308
        reference      => 'SB ' . $cb_date->year,
309
        description    => 'Automatische SB-Buchungen Erfolgskonten Soll für ' . $cb_date->year,
310
        ob_transaction => 0,
311
        cb_transaction => 1,
312
        taxincluded    => 0,
313
        transactions   => [],
314
      );
315
      my $pl_cb_credit_entry = SL::DB::GLTransaction->new(
316
        employee_id    => $employee_id,
317
        transdate      => $cb_date,
318
        reference      => 'SB ' . $cb_date->year,
319
        description    => 'Automatische SB-Buchungen Erfolgskonten Haben für ' . $cb_date->year,
320
        ob_transaction => 0,
321
        cb_transaction => 1,
322
        taxincluded    => 0,
323
        transactions   => [],
324
      );
326 325

  
327
      if ( $profit_loss_account->{amount_with_cb} < 0 ) {
328
        $pl_debit_balance -= $profit_loss_account->{amount_with_cb};
329
        $pl_cb_debit_entry->add_chart_booking(
330
          chart  => $chart,
331
          tax_id => 0,
332
          credit => - $profit_loss_account->{amount_with_cb},
333
        );
334
      } else {
335
        $pl_credit_balance += $profit_loss_account->{amount_with_cb};
336
        $pl_cb_credit_entry->add_chart_booking(
337
          chart  => $chart,
338
          tax_id => 0,
339
          debit  => $profit_loss_account->{amount_with_cb},
340
        );
326
      foreach my $profit_loss_account ( @profit_loss_accounts ) {
327
        # $main::lxdebug->message(0, sprintf("found chart %s with balance %s", $profit_loss_account->{accno}, $profit_loss_account->{amount_with_cb}));
328
        my $chart = $charts_by_id{ $profit_loss_account->{chart_id} };
329

  
330
        next if $profit_loss_account->{amount_with_cb} == 0;
331

  
332
        if ( $profit_loss_account->{amount_with_cb} < 0 ) {
333
          $pl_debit_balance -= $profit_loss_account->{amount_with_cb};
334
          $pl_cb_debit_entry->add_chart_booking(
335
            chart  => $chart,
336
            tax_id => 0,
337
            credit => - $profit_loss_account->{amount_with_cb},
338
          );
339
        } else {
340
          $pl_credit_balance += $profit_loss_account->{amount_with_cb};
341
          $pl_cb_credit_entry->add_chart_booking(
342
            chart  => $chart,
343
            tax_id => 0,
344
            debit  => $profit_loss_account->{amount_with_cb},
345
          );
346
        };
341 347
      };
342
    };
343

  
344
    # $main::lxdebug->message(0, "pl_debit_balance  = $pl_debit_balance");
345
    # $main::lxdebug->message(0, "pl_credit_balance = $pl_credit_balance");
346 348

  
347
    $pl_cb_debit_entry->add_chart_booking(
348
      chart  => $pl_chart,
349
      tax_id => 0,
350
      debit  => $pl_debit_balance,
351
    ) if $pl_debit_balance;
349
      # $main::lxdebug->message(0, "pl_debit_balance  = $pl_debit_balance");
350
      # $main::lxdebug->message(0, "pl_credit_balance = $pl_credit_balance");
352 351

  
353
    $pl_cb_credit_entry->add_chart_booking(
354
      chart  => $pl_chart,
355
      tax_id => 0,
356
      credit => $pl_credit_balance,
357
    ) if $pl_credit_balance;
352
      $pl_cb_debit_entry->add_chart_booking(
353
        chart  => $pl_chart,
354
        tax_id => 0,
355
        debit  => $pl_debit_balance,
356
      ) if $pl_debit_balance;
358 357

  
359
    # printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_debit_entry->transactions };
360
    # printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_credit_entry->transactions };
358
      $pl_cb_credit_entry->add_chart_booking(
359
        chart  => $pl_chart,
360
        tax_id => 0,
361
        credit => $pl_credit_balance,
362
      ) if $pl_credit_balance;
361 363

  
362
    $pl_cb_debit_entry->post  if scalar @{ $pl_cb_debit_entry->transactions }  > 1;
363
    $pl_cb_credit_entry->post if scalar @{ $pl_cb_credit_entry->transactions } > 1;
364
      # printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_debit_entry->transactions };
365
      # printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_credit_entry->transactions };
364 366

  
367
      $pl_cb_debit_entry->post  if scalar @{ $pl_cb_debit_entry->transactions }  > 1;
368
      $pl_cb_credit_entry->post if scalar @{ $pl_cb_credit_entry->transactions } > 1;
369
    };
365 370
    ######### profit-loss transfer #########
366 371
    # and finally transfer the new balance of the profit-loss account via the carry-over account
367 372
    # we want to use profit_loss_sum with cb!
368 373

  
369 374
    if ( $profit_loss_sum != 0 ) {
370

  
371
      my $carry_over_cb_entry = SL::DB::GLTransaction->new(
372
        employee_id    => $employee_id,
373
        transdate      => $cb_date,
374
        reference      => 'SB ' . $cb_date->year,
375
        description    => sprintf('Automatische SB-Buchung für %s %s',
376
                                  $profit_loss_sum >= 0 ? 'Gewinnvortrag' : 'Verlustvortrag',
377
                                  $cb_date->year,
378
                                 ),
379
        ob_transaction => 0,
380
        cb_transaction => 1,
381
        taxincluded    => 0,
382
        transactions   => [],
383
      );
375
      my $carry_over_cb_entry;
376
      if ($self->defaults->yearend_method ne 'simple') {
377
        $carry_over_cb_entry = SL::DB::GLTransaction->new(
378
          employee_id    => $employee_id,
379
          transdate      => $cb_date,
380
          reference      => 'SB ' . $cb_date->year,
381
          description    => sprintf('Automatische SB-Buchung für %s %s',
382
                                    $profit_loss_sum >= 0 ? 'Gewinnvortrag' : 'Verlustvortrag',
383
                                    $cb_date->year,
384
                                   ),
385
          ob_transaction => 0,
386
          cb_transaction => 1,
387
          taxincluded    => 0,
388
          transactions   => [],
389
        );
390
      };
384 391
      my $carry_over_ob_entry = SL::DB::GLTransaction->new(
385 392
        employee_id    => $employee_id,
386 393
        transdate      => $ob_date,
......
404 411
        $amount2 = 'debit';
405 412
      };
406 413

  
407
      $carry_over_cb_entry->add_chart_booking(
408
        chart    => $carry_over_chart,
409
        tax_id   => 0,
410
        $amount1 => abs($profit_loss_sum),
411
      );
412
      $carry_over_cb_entry->add_chart_booking(
413
        chart    => $pl_chart,
414
        tax_id   => 0,
415
        $amount2 => abs($profit_loss_sum),
416
      );
414
      if ($self->defaults->yearend_method ne 'simple') {
415
        $carry_over_cb_entry->add_chart_booking(
416
          chart    => $carry_over_chart,
417
          tax_id   => 0,
418
          $amount1 => abs($profit_loss_sum),
419
        );
420
        $carry_over_cb_entry->add_chart_booking(
421
          chart    => $pl_chart,
422
          tax_id   => 0,
423
          $amount2 => abs($profit_loss_sum),
424
        );
425
      };
417 426
      $carry_over_ob_entry->add_chart_booking(
418 427
        chart    => $carry_over_chart,
419 428
        tax_id   => 0,
......
428 437
      # printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $carry_over_ob_entry->transactions };
429 438
      # printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $carry_over_ob_entry->transactions };
430 439

  
431
      $carry_over_cb_entry->post if scalar @{ $carry_over_cb_entry->transactions } > 1;
440
      if ($self->defaults->yearend_method ne 'simple') {
441
        $carry_over_cb_entry->post if scalar @{ $carry_over_cb_entry->transactions } > 1;
442
      };
432 443
      $carry_over_ob_entry->post if scalar @{ $carry_over_ob_entry->transactions } > 1;
433 444
    };
434 445

  
......
449 460
}
450 461

  
451 462
sub _report {
452
  my (%params) = @_;
463
  my ($self, %params) = @_;
453 464

  
454 465
  my $start_date = delete $params{start_date};
455 466
  my $cb_date    = delete $params{cb_date};
456 467

  
457
  my $defaults = SL::DB::Default->get;
458 468
  die "no carry over account defined"
459
    unless defined $defaults->carry_over_account_chart_id
460
           and $defaults->carry_over_account_chart_id > 0;
469
    unless defined $self->defaults->carry_over_account_chart_id
470
           and $self->defaults->carry_over_account_chart_id > 0;
461 471

  
462 472
  my $salden_query = <<SQL;
463 473
select c.id as chart_id,
......
486 496
  my $report = selectall_hashref_query($::form, $dbh, $salden_query,
487 497
                                       $start_date,
488 498
                                       $cb_date,
489
                                       $defaults->carry_over_account_chart_id,
499
                                       $self->defaults->carry_over_account_chart_id,
490 500
                                      );
491 501
  # profit_loss_sum is the actual profit/loss for the year, without cb, use "amount_without_cb")
492 502
  my $profit_loss_sum = sum map { $_->{amount_without_cb} }
......
512 522
sub init_ob_date        { $::locale->parse_date_to_object($::form->{ob_date})      }
513 523
sub init_cb_startdate   { $::locale->parse_date_to_object($::form->{cb_startdate}) }
514 524
sub init_cb_date        { $::locale->parse_date_to_object($::form->{cb_date})      }
515

  
525
sub init_defaults       { SL::DB::Default->get }
516 526
1;
SL/DB/MetaSetup/Default.pm
237 237
  webdav_sync_extern_url                    => { type => 'text' },
238 238
  weightunit                                => { type => 'varchar', length => 5 },
239 239
  workflow_po_ap_chart_id                   => { type => 'integer' },
240
  yearend_method                            => { type => 'text' },
240 241
);
241 242

  
242 243
__PACKAGE__->meta->primary_key_columns([ 'id' ]);
doc/changelog
92 92
    verschiedenen Lagerplätzen oder mit verschiedenen Chargen, so können diese
93 93
    gewählt ausgewählt werden. Das Mindeshaltbarkeitsdatum wird dabei (noch
94 94
    nicht) berücksichtigt.
95
  - Beim Jahresabschluss besteht neu die Möglichkeit, zwischen den Methoden Einfach und Standard
96
    zu wählen. Die Methode Einfach berücksichtigt nur die Bestandskonten und verwendet das
97
    gleiche Konto für die Verbuchung von Gewinn oder Verlust.
95 98

  
96 99
Kleinere neue Features und Detailverbesserungen:
97 100

  
locale/de/all
2891 2891
  'Please choose for which categories the taxes should be displayed (otherwise remove the ticks):' => 'Bitte wählen Sie für welche Kontoart die Steuer angezeigt werden soll (ansonsten einfach die Häkchen entfernen)',
2892 2892
  'Please choose the action to be processed for your target quantity:' => 'Bitte wählen Sie eine Aktion, die mit Ihrer gezählten Zielmenge durchgeführt werden soll:',
2893 2893
  'Please configure the carry over and profit and loss accounts for year-end closing in the client configuration!' => 'Bitte konfigurieren Sie in der Mandantenkonfiguration das Saldenvortragskonto, das Gewinnvortragskonto und das Verlustvortragskonto!',
2894
  'Please configure the year-end closing and the profit or loss carried forward accounts for year-end closing in the client configuration!' => 'Bitte konfigurieren Sie in der Mandantenkonfiguration das Jahresabschluss-Konto und das Konto zum Verbuchen des Jahresgewinns oder -verlusts!',
2894 2895
  'Please contact your administrator or a service provider.' => 'Bitte kontaktieren Sie Ihren Administrator oder einen Dienstleister.',
2895 2896
  'Please contact your administrator.' => 'Bitte wenden Sie sich an Ihren Administrator.',
2896 2897
  'Please correct the settings and try again or deactivate that client.' => 'Bitte korrigieren Sie die Einstellungen und versuchen Sie es erneut, oder deaktivieren Sie diesen Mandanten.',
......
3060 3061
  'Profit and loss accounts'    => 'Erfolgskonten',
3061 3062
  'Profit carried forward account' => 'Gewinnvortragskonto',
3062 3063
  'Profit determination'        => 'Gewinnermittlung',
3064
  'Profit or loss carried forward account' => 'Konto zum Verbuchen des Jahresgewinns oder -verlusts',
3063 3065
  'Proforma Invoice'            => 'Proformarechnung',
3064 3066
  'Program'                     => 'Programm',
3065 3067
  'Project'                     => 'Projekt',
......
3096 3098
  'Purchase Credit Notes'       => 'Einkaufsgutschriften',
3097 3099
  'Purchase Delivery Order'     => 'Einkaufslieferschein',
3098 3100
  'Purchase Delivery Orders'    => 'Einkaufslieferscheine',
3099
  'Purchase Delivery Orders deleteable' => 'Einkaufslieferscheine löschbar',
3100 3101
  'Purchase Invoice'            => 'Einkaufsrechnung',
3101 3102
  'Purchase Invoices'           => 'Einkaufsrechnungen',
3102 3103
  'Purchase Order'              => 'Lieferantenauftrag',
......
3104 3105
  'Purchase Order Confirmations' => 'Lieferantenauftragsbestätigungen',
3105 3106
  'Purchase Orders'             => 'Lieferantenaufträge',
3106 3107
  'Purchase Orders Services are deliverable' => 'Dienstleistungen im Einkaufsauftrag sind lieferbar',
3107
  'Purchase Orders deleteable'  => 'Lieferantenaufträge löschbar',
3108 3108
  'Purchase Price Rules'        => 'Preisregeln Einkauf',
3109 3109
  'Purchase Price Rules '       => 'Preisregeln (Einkauf)',
3110 3110
  'Purchase Quotation Intake'   => 'Angebotseingang',
3111 3111
  'Purchase Quotation Intakes'  => 'Angebotseingänge',
3112 3112
  'Purchase Reclamation'        => 'Einkaufsreklamation',
3113 3113
  'Purchase Reclamations'       => 'Einkaufsreklamationen',
3114
  'Purchase Reclamations deleteable' => 'Einkaufsreklamationen löschbar',
3115 3114
  'Purchase basket'             => 'Einkaufswarenkorb',
3116 3115
  'Purchase basket item not existing any more for position(s): #1.' => 'Einkaufskorbartikel existiert nicht mehr für Position(en): #1.',
3117 3116
  'Purchase delivery order'     => 'Lieferschein (Einkauf)',
......
3371 3370
  'Sales (typeabbreviation)'    => 'V',
3372 3371
  'Sales Delivery Order'        => 'Verkaufslieferschein',
3373 3372
  'Sales Delivery Orders'       => 'Verkaufslieferscheine',
3374
  'Sales Delivery Orders deleteable' => 'Verkaufslieferscheine löschbar',
3375 3373
  'Sales Invoice'               => 'Rechnung',
3376 3374
  'Sales Invoices'              => 'Kundenrechnungen',
3377 3375
  'Sales Order'                 => 'Kundenauftrag',
......
3382 3380
  'Sales Orders'                => 'Aufträge',
3383 3381
  'Sales Orders Advance'        => 'Auftragsvorlauf',
3384 3382
  'Sales Orders Services are deliverable' => 'Dienstleistungen im Verkaufsauftrag sind lieferbar',
3385
  'Sales Orders deleteable'     => 'Kundenaufträge löschbar',
3386 3383
  'Sales Price Rules'           => 'Preisregeln Verkauf',
3387 3384
  'Sales Price Rules '          => 'Preisregeln (Verkauf)',
3388 3385
  'Sales Price information'     => 'Verkaufspreisinformation',
......
3390 3387
  'Sales Quotations'            => 'Angebote',
3391 3388
  'Sales Reclamation'           => 'Verkaufsreklamation',
3392 3389
  'Sales Reclamations'          => 'Verkaufsreklamationen',
3393
  'Sales Reclamations deleteable' => 'Verkaufsreklamationen löschbar',
3394 3390
  'Sales Report'                => 'Verkaufsbericht',
3395 3391
  'Sales and purchase invoices with inventory transactions with taxkeys' => 'Einkaufs- und Verkaufsrechnungen mit Warenbestandsbuchungen mit Steuerschlüsseln',
3396 3392
  'Sales delivery order'        => 'Lieferschein (Verkauf)',
......
3664 3660
  'Show custom variable search inputs' => 'Suchoptionen für Benutzerdefinierte Variablen verstecken',
3665 3661
  'Show delete button in purchase delivery orders?' => 'Soll der "Löschen"-Knopf bei Einkaufslieferscheinen angezeigt werden?',
3666 3662
  'Show delete button in purchase orders?' => 'Soll der "Löschen"-Knopf bei Lieferantenaufträgen angezeigt werden?',
3667
  'Show delete button in purchase reclamations?' => 'Soll der "Löschen"-Knopf bei Einkaufsreklamationen angezeigt werden?',
3668 3663
  'Show delete button in sales delivery orders?' => 'Soll der "Löschen"-Knopf bei Verkaufslieferscheinen angezeigt werden?',
3669 3664
  'Show delete button in sales orders?' => 'Soll der "Löschen"-Knopf bei Kundenaufträgen angezeigt werden?',
3670
  'Show delete button in sales reclamations?' => 'Soll der "Löschen"-Knopf bei Verkaufsreklamationen angezeigt werden?',
3671 3665
  'Show delivery plan'          => 'Lieferplan anzeigen',
3672 3666
  'Show delivery value report'  => 'Lieferwertbericht anzeigen',
3673 3667
  'Show detail informationen'   => 'Detaillierte Informationen anzeigen',
......
4426 4420
  'This option controls the inventory system.' => 'Dieser Parameter legt die Warenbuchungsmethode fest.',
4427 4421
  'This option controls the method used for determining the startdate for the balance report.' => 'Diese Option bestimmt, wie das Startdatum für den Bilanzbericht ermittelt wird',
4428 4422
  'This option controls the method used for profit determination.' => 'Dieser Parameter legt die Berechnungsmethode für die Gewinnermittlung fest.',
4423
  'This option controls the method used for the automated year-end bookings.' => 'Dieser Parameter legt die Methode für die automatischen Jahresabschluss-Buchungen fest.',
4429 4424
  'This option controls the posting and calculation behavior for the accounting method.' => 'Dieser Parameter steuert die Buchungs- und Berechnungsmethoden für die Versteuerungsart.',
4430 4425
  'This order has already a final invoice.' => 'Dieser Auftrag hat schon eine Schlussrechnung.',
4431 4426
  'This part has already been added.' => 'Dieser Artikel wurde schon hinzugefügt',
......
4866 4861
  'Year'                        => 'Jahr',
4867 4862
  'Year-end bookings were successfully completed!' => 'Die Jahresabschlußbuchungen wurden erfolgreich durchgeführt!',
4868 4863
  'Year-end closing'            => 'Jahresabschluß',
4864
  'Year-end closing account'    => 'Jahresabschluss-Konto',
4869 4865
  'Year-end date'               => 'Jahresabschlußdatum',
4870 4866
  'Year-end date missing'       => 'Jahresabschlußdatum fehlt',
4867
  'Year-end method'             => 'Jahresabschluss-Methode',
4871 4868
  'Yearly'                      => 'jährlich',
4872 4869
  'Yearly taxreport not yet implemented' => 'Jährlicher Steuerreport für dieses Ausgabeformat noch nicht implementiert',
4873 4870
  'Yes'                         => 'Ja',
......
5001 4998
  'cp_greeting to cp_gender migration' => 'Datenumwandlung von Titel nach Geschlecht (cp_greeting to cp_gender)',
5002 4999
  'customer_list'               => 'kundenliste',
5003 5000
  'dated'                       => 'datiert',
5001
  'default'                     => 'Standard',
5004 5002
  'default exchange rate'       => 'Tageskurs',
5005 5003
  'delete'                      => 'Löschen',
5006 5004
  'delete item'                 => 'Position löschen',
......
5208 5206
  'service_list'                => 'dienstleistungsliste',
5209 5207
  'shipped'                     => 'verschickt',
5210 5208
  'shipped_br'                  => 'Verschk.',
5209
  'simple'                      => 'Einfach',
5211 5210
  'singular first char'         => 'S',
5212 5211
  'sort items'                  => 'Positionen sortieren',
5213 5212
  'start upload'                => 'Hochladen beginnt',
locale/en/all
2890 2890
  'Please choose for which categories the taxes should be displayed (otherwise remove the ticks):' => '',
2891 2891
  'Please choose the action to be processed for your target quantity:' => '',
2892 2892
  'Please configure the carry over and profit and loss accounts for year-end closing in the client configuration!' => '',
2893
  'Please configure the year-end closing and the profit or loss carried forward accounts for year-end closing in the client configuration!' => '',
2893 2894
  'Please contact your administrator or a service provider.' => '',
2894 2895
  'Please contact your administrator.' => '',
2895 2896
  'Please correct the settings and try again or deactivate that client.' => '',
......
3059 3060
  'Profit and loss accounts'    => '',
3060 3061
  'Profit carried forward account' => '',
3061 3062
  'Profit determination'        => '',
3063
  'Profit or loss carried forward account' => '',
3062 3064
  'Proforma Invoice'            => '',
3063 3065
  'Program'                     => '',
3064 3066
  'Project'                     => '',
......
3095 3097
  'Purchase Credit Notes'       => '',
3096 3098
  'Purchase Delivery Order'     => '',
3097 3099
  'Purchase Delivery Orders'    => '',
3098
  'Purchase Delivery Orders deleteable' => '',
3099 3100
  'Purchase Invoice'            => '',
3100 3101
  'Purchase Invoices'           => '',
3101 3102
  'Purchase Order'              => '',
......
3103 3104
  'Purchase Order Confirmations' => '',
3104 3105
  'Purchase Orders'             => '',
3105 3106
  'Purchase Orders Services are deliverable' => '',
3106
  'Purchase Orders deleteable'  => '',
3107 3107
  'Purchase Price Rules'        => '',
3108 3108
  'Purchase Price Rules '       => '',
3109 3109
  'Purchase Quotation Intake'   => '',
3110 3110
  'Purchase Quotation Intakes'  => '',
3111 3111
  'Purchase Reclamation'        => '',
3112 3112
  'Purchase Reclamations'       => '',
3113
  'Purchase Reclamations deleteable' => '',
3114 3113
  'Purchase basket'             => '',
3115 3114
  'Purchase basket item not existing any more for position(s): #1.' => '',
3116 3115
  'Purchase delivery order'     => '',
......
3370 3369
  'Sales (typeabbreviation)'    => 'S',
3371 3370
  'Sales Delivery Order'        => '',
3372 3371
  'Sales Delivery Orders'       => '',
3373
  'Sales Delivery Orders deleteable' => '',
3374 3372
  'Sales Invoice'               => '',
3375 3373
  'Sales Invoices'              => '',
3376 3374
  'Sales Order'                 => '',
......
3381 3379
  'Sales Orders'                => '',
3382 3380
  'Sales Orders Advance'        => '',
3383 3381
  'Sales Orders Services are deliverable' => '',
3384
  'Sales Orders deleteable'     => '',
3385 3382
  'Sales Price Rules'           => '',
3386 3383
  'Sales Price Rules '          => '',
3387 3384
  'Sales Price information'     => '',
......
3389 3386
  'Sales Quotations'            => '',
3390 3387
  'Sales Reclamation'           => '',
3391 3388
  'Sales Reclamations'          => '',
3392
  'Sales Reclamations deleteable' => '',
3393 3389
  'Sales Report'                => '',
3394 3390
  'Sales and purchase invoices with inventory transactions with taxkeys' => '',
3395 3391
  'Sales delivery order'        => '',
......
3663 3659
  'Show custom variable search inputs' => '',
3664 3660
  'Show delete button in purchase delivery orders?' => '',
3665 3661
  'Show delete button in purchase orders?' => '',
3666
  'Show delete button in purchase reclamations?' => '',
3667 3662
  'Show delete button in sales delivery orders?' => '',
3668 3663
  'Show delete button in sales orders?' => '',
3669
  'Show delete button in sales reclamations?' => '',
3670 3664
  'Show delivery plan'          => '',
3671 3665
  'Show delivery value report'  => '',
3672 3666
  'Show detail informationen'   => '',
......
4424 4418
  'This option controls the inventory system.' => '',
4425 4419
  'This option controls the method used for determining the startdate for the balance report.' => '',
4426 4420
  'This option controls the method used for profit determination.' => '',
4421
  'This option controls the method used for the automated year-end bookings.' => '',
4427 4422
  'This option controls the posting and calculation behavior for the accounting method.' => '',
4428 4423
  'This order has already a final invoice.' => '',
4429 4424
  'This part has already been added.' => '',
......
4864 4859
  'Year'                        => '',
4865 4860
  'Year-end bookings were successfully completed!' => '',
4866 4861
  'Year-end closing'            => '',
4862
  'Year-end closing account'    => '',
4867 4863
  'Year-end date'               => '',
4868 4864
  'Year-end date missing'       => '',
4865
  'Year-end method'             => '',
4869 4866
  'Yearly'                      => '',
4870 4867
  'Yearly taxreport not yet implemented' => '',
4871 4868
  'Yes'                         => '',
......
4999 4996
  'cp_greeting to cp_gender migration' => '',
5000 4997
  'customer_list'               => '',
5001 4998
  'dated'                       => '',
4999
  'default'                     => '',
5002 5000
  'default exchange rate'       => '',
5003 5001
  'delete'                      => '',
5004 5002
  'delete item'                 => '',
......
5206 5204
  'service_list'                => '',
5207 5205
  'shipped'                     => '',
5208 5206
  'shipped_br'                  => 'shipped',
5207
  'simple'                      => '',
5209 5208
  'singular first char'         => '',
5210 5209
  'sort items'                  => '',
5211 5210
  'start upload'                => '',
sql/Pg-upgrade2/defaults_yearend_method.sql
1
-- @tag: defaults_yearend_method
2
-- @description: method used for the automated year-end bookings
3
-- @depends: release_3_8_0
4

  
5
ALTER TABLE defaults ADD COLUMN yearend_method TEXT;
templates/design40_webpages/client_config/_default_accounts.html
67 67
<table class="tbl-horizontal">
68 68
  <caption>[% LxERP.t8("Year-end closing") %]</caption>
69 69
  <tbody>
70
    [% IF SELF.defaults.yearend_method == 'simple' %] [% THEN %]
71
    <tr>
72
      <th>[% LxERP.t8("Year-end closing account") %]</th>
73
      <td>[% P.chart.picker('defaults.carry_over_account_chart_id', SELF.defaults.carry_over_account_chart_id, choose=1, style=style) %]</td>
74
    </tr>
75
    <tr>
76
      <th>[% LxERP.t8("Profit or loss carried forward account") %]</th>
77
      <td>[% P.chart.picker('defaults.profit_carried_forward_chart_id', SELF.defaults.profit_carried_forward_chart_id, choose=1, style=style) %]</td>
78
    </tr>
79
    [% ELSE %]
70 80
    <tr>
71 81
      <th>[% LxERP.t8("Carry over account for year-end closing") %]</th>
72 82
      <td>[% P.chart.picker('defaults.carry_over_account_chart_id', SELF.defaults.carry_over_account_chart_id, category='A', choose=1, style=style) %]</td>
......
79 89
      <th>[% LxERP.t8("Loss carried forward account") %]</th>
80 90
      <td>[% P.chart.picker('defaults.loss_carried_forward_chart_id', SELF.defaults.loss_carried_forward_chart_id, category='A', choose=1, style=style) %]</td>
81 91
    </tr>
92
    [% END %]
82 93
    <tr>
83 94
   <th>[% LxERP.t8("Transit Items account") %]</th>
84 95
   <td>[% P.chart.picker('defaults.transit_items_chart_id', SELF.defaults.transit_items_chart_id , category='A', choose=1, style=style) %]<td>
templates/design40_webpages/client_config/_posting_configuration.html
131 131
      <td>[% L.select_tag('defaults.balance_startdate_method', SELF.balance_startdate_method_options, value_key = 'value', title_key = 'title', default = SELF.defaults.balance_startdate_method, class='wi-morewide') %]</td>
132 132
      <td class="longdesc">[% LxERP.t8('This option controls the method used for determining the startdate for the balance report.') %]</td>
133 133
    </tr>
134
    <tr>
135
      <th>[% LxERP.t8('Year-end method') %]</th>
136
      <td>[% L.select_tag('defaults.yearend_method', SELF.yearend_options, value_key = 'value', title_key = 'title', default = SELF.defaults.yearend_method, class='wi-morewide') %]</td>
137
      <td class="longdesc">[% LxERP.t8('This option controls the method used for the automated year-end bookings.') %]</td>
138
    </tr>
134 139
    <tr>
135 140
      <th>[% LxERP.t8('Set valid until date for Sales Quotation') %]</th>
136 141
      <td>[% L.yes_no_tag('defaults.reqdate_on', SELF.defaults.reqdate_on) %]</td>
templates/design40_webpages/yearend/form.html
9 9

  
10 10
<div class="wrapper">
11 11

  
12
[% IF carry_over_chart AND profit_chart AND loss_chart %] [% THEN %]
12
[% IF carry_over_chart AND profit_chart AND (loss_chart OR SELF.defaults.yearend_method == 'simple') %] [% THEN %]
13 13
<form id="filter" name="filter" method="post" action="controller.pl">
14 14
<table class="tbl-horizontal">
15 15
  <tr>
......
24 24
    <td>[% 'Start date' | $T8 %]</td>
25 25
    <td>[% L.date_tag('cb_startdate', '', readonly=1) %]</td>
26 26
  </tr>
27
  [% IF SELF.defaults.yearend_method == 'simple' %] [% THEN %]
28
  <tr>
29
    <td>[% 'Year-end closing account' | $T8 %]</td>
30
    <td>[% carry_over_chart.displayable_name | html %]</td>
31
  </tr>
32
  <tr>
33
    <td>[% 'Profit or loss carried forward account' | $T8 %]</td>
34
    <td>[% profit_chart.displayable_name | html %]</td>
35
  </tr>
36
  [% ELSE %]
27 37
  <tr>
28 38
    <td>[% 'Carry over account for year-end closing' | $T8 %]</td>
29 39
    <td>[% carry_over_chart.displayable_name | html %]</td>
......
36 46
    <td>[% 'Loss carried forward account' | $T8 %]</td>
37 47
    <td>[% loss_chart.displayable_name | html %]</td>
38 48
  </tr>
49
  [% END %]
39 50
</table>
40 51
</form>
52
[% ELSIF SELF.defaults.yearend_method == 'simple' %]
53
  [% 'Please configure the year-end closing and the profit or loss carried forward accounts for year-end closing in the client configuration!' | $T8 %]
41 54
[% ELSE %]
42 55
  [% 'Please configure the carry over and profit and loss accounts for year-end closing in the client configuration!' | $T8 %]
43 56
[% END %]
templates/webpages/client_config/_default_accounts.html
68 68
  <tr>
69 69
    <th align="right">[% LxERP.t8("Year-end closing") %]</th>
70 70
  </tr>
71
  [% IF SELF.defaults.yearend_method == 'simple' %] [% THEN %]
72
  <tr>
73
    <td>[% LxERP.t8("Year-end closing account") %]</td>
74
    <td>[% P.chart.picker('defaults.carry_over_account_chart_id', SELF.defaults.carry_over_account_chart_id, choose=1, style=style) %]</td>
75
  </tr>
76
  <tr>
77
    <td>[% LxERP.t8("Profit or loss carried forward account") %]</td>
78
    <td>[% P.chart.picker('defaults.profit_carried_forward_chart_id', SELF.defaults.profit_carried_forward_chart_id, choose=1, style=style) %]</td>
79
  </tr>
80
  [% ELSE %]
71 81
  <tr>
72 82
   <td align="right">[% LxERP.t8("Carry over account for year-end closing") %]</td>
73 83
   <td>[% P.chart.picker('defaults.carry_over_account_chart_id', SELF.defaults.carry_over_account_chart_id, category='A', choose=1, style=style) %]<td>
......
82 92
   <td align="right">[% LxERP.t8("Loss carried forward account") %]</td>
83 93
   <td>[% P.chart.picker('defaults.loss_carried_forward_chart_id', SELF.defaults.loss_carried_forward_chart_id, category='A', choose=1, style=style) %]<td>
84 94
  </tr>
95
  [% END %]
85 96
  <tr>
86 97
   <td align="right">[% LxERP.t8("Transit Items account") %]</td>
87 98
   <td>[% P.chart.picker('defaults.transit_items_chart_id', SELF.defaults.transit_items_chart_id , category='A', choose=1, style=style) %]<td>
templates/webpages/client_config/_posting_configuration.html
113 113
   <td>[% L.select_tag('defaults.balance_startdate_method', SELF.balance_startdate_method_options, value_key = 'value', title_key = 'title', default = SELF.defaults.balance_startdate_method) %]</td>
114 114
   <td>[% LxERP.t8('This option controls the method used for determining the startdate for the balance report.') %]</td>
115 115
  </tr>
116
  <tr>
117
    <td align="right">[% LxERP.t8('Year-end method') %]</td>
118
    <td>[% L.select_tag('defaults.yearend_method', SELF.yearend_options, value_key = 'value', title_key = 'title', default = SELF.defaults.yearend_method, class='wi-morewide') %]</td>
119
    <td>[% LxERP.t8('This option controls the method used for the automated year-end bookings.') %]</td>
120
  </tr>
116 121
  <tr>
117 122
   <td align="right">[% LxERP.t8('Set valid until date for Sales Quotation') %]</td>
118 123
   <td>[% L.yes_no_tag('defaults.reqdate_on', SELF.defaults.reqdate_on) %]</td>
templates/webpages/yearend/form.html
7 7

  
8 8
[%- INCLUDE 'common/flash.html' %]
9 9

  
10
[% IF carry_over_chart AND profit_chart AND loss_chart %] [% THEN %]
10
[% IF carry_over_chart AND profit_chart AND (loss_chart OR SELF.defaults.yearend_method == 'simple') %] [% THEN %]
11 11
<form id="filter" name="filter" method="post" action="controller.pl">
12 12
<table>
13 13
  <tr>
......
22 22
    <td align="right">[% 'Start date' | $T8 %]</td>
23 23
    <td>[% L.date_tag('cb_startdate', '', readonly=1) %]</td>
24 24
  </tr>
25
  [% IF SELF.defaults.yearend_method == 'simple' %] [% THEN %]
26
  <tr>
27
    <td align="right">[% 'Year-end closing account' | $T8 %]</td>
28
    <td>[% carry_over_chart.displayable_name | html %]</td>
29
  </tr>
30
  <tr>
31
    <td align="right">[% 'Profit or loss carried forward account' | $T8 %]</td>
32
    <td>[% profit_chart.displayable_name | html %]</td>
33
  </tr>
34
  [% ELSE %]
25 35
  <tr>
26 36
    <td align="right">[% 'Carry over account for year-end closing' | $T8 %]</td>
27 37
    <td>[% carry_over_chart.displayable_name | html %]</td>
......
34 44
    <td align="right">[% 'Loss carried forward account' | $T8 %]</td>
35 45
    <td>[% loss_chart.displayable_name | html %]</td>
36 46
  </tr>
47
  [% END %]
37 48
</table>
38 49
</form>
50
[% ELSIF SELF.defaults.yearend_method == 'simple' %]
51
  [% 'Please configure the year-end closing and the profit or loss carried forward accounts for year-end closing in the client configuration!' | $T8 %]
39 52
[% ELSE %]
40 53
  [% 'Please configure the carry over and profit and loss accounts for year-end closing in the client configuration!' | $T8 %]
41 54
[% END %]

Auch abrufbar als: Unified diff