Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 81860c0c

Von Andreas Rudin vor etwa 1 Jahr hinzugefügt

  • ID 81860c0c3e6f404fbd37c964a04e9552077b217f
  • Vorgänger 486e5c7c
  • Nachfolger 94fb7330

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/YearEndTransactions.pm
use Data::Dumper;
use List::Util qw(sum);
use SL::ClientJS;
use SL::DB::Default;
use SL::DB::Chart;
use SL::DB::GLTransaction;
......
use SL::DB::Helper::AccountingPeriod qw(get_balance_starting_date get_balance_startdate_method_options);
use Rose::Object::MakeMethods::Generic (
'scalar --get_set_init' => [ qw(cb_date cb_startdate ob_date) ],
'scalar --get_set_init' => [ qw(cb_date cb_startdate ob_date defaults) ],
);
__PACKAGE__->run_before('check_auth');
......
$self->cb_startdate($::locale->parse_date_to_object($self->get_balance_starting_date($self->cb_date)));
my $defaults = SL::DB::Default->get;
my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $defaults->carry_over_account_chart_id );
my $profit_chart = SL::DB::Manager::Chart->find_by( id => $defaults->profit_carried_forward_chart_id );
my $loss_chart = SL::DB::Manager::Chart->find_by( id => $defaults->loss_carried_forward_chart_id );
my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $self->defaults->carry_over_account_chart_id );
my $profit_chart = SL::DB::Manager::Chart->find_by( id => $self->defaults->profit_carried_forward_chart_id );
my $loss_chart = SL::DB::Manager::Chart->find_by( id => $self->defaults->loss_carried_forward_chart_id );
$self->render('yearend/form',
title => t8('Year-end closing'),
......
$self->_parse_form;
eval {
_year_end_bookings( start_date => $self->cb_startdate,
$self->_year_end_bookings( start_date => $self->cb_startdate,
cb_date => $self->cb_date,
);
1;
......
return $self->js->render;
};
my ($report_data, $profit_loss_sum) = _report(
my ($report_data, $profit_loss_sum) = $self->_report(
cb_date => $self->cb_date,
start_date => $self->cb_startdate,
);
......
$self->_parse_form;
my ($report_data, $profit_loss_sum) = _report(
my ($report_data, $profit_loss_sum) = $self->_report(
cb_date => $self->cb_date,
start_date => $self->cb_startdate,
);
......
}
sub _year_end_bookings {
my (%params) = @_;
my ($self, %params) = @_;
my $start_date = delete $params{start_date};
my $cb_date = delete $params{cb_date};
my $defaults = SL::DB::Default->get;
my $carry_over_chart = SL::DB::Manager::Chart->find_by( id => $defaults->carry_over_account_chart_id ) // die t8('No carry-over chart configured!');
my $profit_chart = SL::DB::Manager::Chart->find_by( id => $defaults->profit_carried_forward_chart_id ) // die t8('No profit carried forward chart configured!');
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!');
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!');
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!');
my $loss_chart;
if ( $self->defaults->yearend_method eq 'simple' ) {
$loss_chart = $profit_chart;
} else {
$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!');
}
my ($report_data, $profit_loss_sum) = _report(
my ($report_data, $profit_loss_sum) = $self->_report(
start_date => $start_date,
cb_date => $cb_date,
);
......
@{$report_data};
$profit_loss_sum ||= 0;
my $pl_chart;
if ( $profit_loss_sum > 0 ) {
if ( $profit_loss_sum > 0 || $self->defaults->yearend_method eq 'simple' ) {
$pl_chart = $profit_chart;
} else {
$pl_chart = $loss_chart;
......
my $pl_debit_balance = 0;
my $pl_credit_balance = 0;
# soll = debit, haben = credit
my $pl_cb_debit_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => 'Automatische SB-Buchungen Erfolgskonten Soll für ' . $cb_date->year,
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
my $pl_cb_credit_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => 'Automatische SB-Buchungen Erfolgskonten Haben für ' . $cb_date->year,
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
foreach my $profit_loss_account ( @profit_loss_accounts ) {
# $main::lxdebug->message(0, sprintf("found chart %s with balance %s", $profit_loss_account->{accno}, $profit_loss_account->{amount_with_cb}));
my $chart = $charts_by_id{ $profit_loss_account->{chart_id} };
next if $profit_loss_account->{amount_with_cb} == 0;
if ( $self->defaults->yearend_method ne 'simple' ) {
my $pl_cb_debit_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => 'Automatische SB-Buchungen Erfolgskonten Soll für ' . $cb_date->year,
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
my $pl_cb_credit_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => 'Automatische SB-Buchungen Erfolgskonten Haben für ' . $cb_date->year,
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
if ( $profit_loss_account->{amount_with_cb} < 0 ) {
$pl_debit_balance -= $profit_loss_account->{amount_with_cb};
$pl_cb_debit_entry->add_chart_booking(
chart => $chart,
tax_id => 0,
credit => - $profit_loss_account->{amount_with_cb},
);
} else {
$pl_credit_balance += $profit_loss_account->{amount_with_cb};
$pl_cb_credit_entry->add_chart_booking(
chart => $chart,
tax_id => 0,
debit => $profit_loss_account->{amount_with_cb},
);
foreach my $profit_loss_account ( @profit_loss_accounts ) {
# $main::lxdebug->message(0, sprintf("found chart %s with balance %s", $profit_loss_account->{accno}, $profit_loss_account->{amount_with_cb}));
my $chart = $charts_by_id{ $profit_loss_account->{chart_id} };
next if $profit_loss_account->{amount_with_cb} == 0;
if ( $profit_loss_account->{amount_with_cb} < 0 ) {
$pl_debit_balance -= $profit_loss_account->{amount_with_cb};
$pl_cb_debit_entry->add_chart_booking(
chart => $chart,
tax_id => 0,
credit => - $profit_loss_account->{amount_with_cb},
);
} else {
$pl_credit_balance += $profit_loss_account->{amount_with_cb};
$pl_cb_credit_entry->add_chart_booking(
chart => $chart,
tax_id => 0,
debit => $profit_loss_account->{amount_with_cb},
);
};
};
};
# $main::lxdebug->message(0, "pl_debit_balance = $pl_debit_balance");
# $main::lxdebug->message(0, "pl_credit_balance = $pl_credit_balance");
$pl_cb_debit_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
debit => $pl_debit_balance,
) if $pl_debit_balance;
# $main::lxdebug->message(0, "pl_debit_balance = $pl_debit_balance");
# $main::lxdebug->message(0, "pl_credit_balance = $pl_credit_balance");
$pl_cb_credit_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
credit => $pl_credit_balance,
) if $pl_credit_balance;
$pl_cb_debit_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
debit => $pl_debit_balance,
) if $pl_debit_balance;
# printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_debit_entry->transactions };
# printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_credit_entry->transactions };
$pl_cb_credit_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
credit => $pl_credit_balance,
) if $pl_credit_balance;
$pl_cb_debit_entry->post if scalar @{ $pl_cb_debit_entry->transactions } > 1;
$pl_cb_credit_entry->post if scalar @{ $pl_cb_credit_entry->transactions } > 1;
# printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_debit_entry->transactions };
# printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $pl_cb_credit_entry->transactions };
$pl_cb_debit_entry->post if scalar @{ $pl_cb_debit_entry->transactions } > 1;
$pl_cb_credit_entry->post if scalar @{ $pl_cb_credit_entry->transactions } > 1;
};
######### profit-loss transfer #########
# and finally transfer the new balance of the profit-loss account via the carry-over account
# we want to use profit_loss_sum with cb!
if ( $profit_loss_sum != 0 ) {
my $carry_over_cb_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => sprintf('Automatische SB-Buchung für %s %s',
$profit_loss_sum >= 0 ? 'Gewinnvortrag' : 'Verlustvortrag',
$cb_date->year,
),
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
my $carry_over_cb_entry;
if ($self->defaults->yearend_method ne 'simple') {
$carry_over_cb_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $cb_date,
reference => 'SB ' . $cb_date->year,
description => sprintf('Automatische SB-Buchung für %s %s',
$profit_loss_sum >= 0 ? 'Gewinnvortrag' : 'Verlustvortrag',
$cb_date->year,
),
ob_transaction => 0,
cb_transaction => 1,
taxincluded => 0,
transactions => [],
);
};
my $carry_over_ob_entry = SL::DB::GLTransaction->new(
employee_id => $employee_id,
transdate => $ob_date,
......
$amount2 = 'debit';
};
$carry_over_cb_entry->add_chart_booking(
chart => $carry_over_chart,
tax_id => 0,
$amount1 => abs($profit_loss_sum),
);
$carry_over_cb_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
$amount2 => abs($profit_loss_sum),
);
if ($self->defaults->yearend_method ne 'simple') {
$carry_over_cb_entry->add_chart_booking(
chart => $carry_over_chart,
tax_id => 0,
$amount1 => abs($profit_loss_sum),
);
$carry_over_cb_entry->add_chart_booking(
chart => $pl_chart,
tax_id => 0,
$amount2 => abs($profit_loss_sum),
);
};
$carry_over_ob_entry->add_chart_booking(
chart => $carry_over_chart,
tax_id => 0,
......
# printf("debit : %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $carry_over_ob_entry->transactions };
# printf("credit: %s -> %s\n", $_->chart->displayable_name, $_->amount) foreach @{ $carry_over_ob_entry->transactions };
$carry_over_cb_entry->post if scalar @{ $carry_over_cb_entry->transactions } > 1;
if ($self->defaults->yearend_method ne 'simple') {
$carry_over_cb_entry->post if scalar @{ $carry_over_cb_entry->transactions } > 1;
};
$carry_over_ob_entry->post if scalar @{ $carry_over_ob_entry->transactions } > 1;
};
......
}
sub _report {
my (%params) = @_;
my ($self, %params) = @_;
my $start_date = delete $params{start_date};
my $cb_date = delete $params{cb_date};
my $defaults = SL::DB::Default->get;
die "no carry over account defined"
unless defined $defaults->carry_over_account_chart_id
and $defaults->carry_over_account_chart_id > 0;
unless defined $self->defaults->carry_over_account_chart_id
and $self->defaults->carry_over_account_chart_id > 0;
my $salden_query = <<SQL;
select c.id as chart_id,
......
my $report = selectall_hashref_query($::form, $dbh, $salden_query,
$start_date,
$cb_date,
$defaults->carry_over_account_chart_id,
$self->defaults->carry_over_account_chart_id,
);
# profit_loss_sum is the actual profit/loss for the year, without cb, use "amount_without_cb")
my $profit_loss_sum = sum map { $_->{amount_without_cb} }
......
sub init_ob_date { $::locale->parse_date_to_object($::form->{ob_date}) }
sub init_cb_startdate { $::locale->parse_date_to_object($::form->{cb_startdate}) }
sub init_cb_date { $::locale->parse_date_to_object($::form->{cb_date}) }
sub init_defaults { SL::DB::Default->get }
1;

Auch abrufbar als: Unified diff