Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a28a585e

Von Kivitendo Admin vor mehr als 9 Jahren hinzugefügt

  • ID a28a585e4cc989f4428d47352ef5f118035c237f
  • Vorgänger e8c424de
  • Nachfolger f775a055

Überarbeitung Speichern von Buchungsgruppen

analog zum Verhalten von Steuerzonen: beim Speichern bessere Prüfung und
gegebenenfalls Fehlermeldungen und Rollback, wenn Speichern fehlschlägt.
Verhindert, daß "unfertige" Buchungsgruppen gespeichert werden, wo die
TaxzoneCharts fehlen.

Unterschiede anzeigen:

SL/Controller/Buchungsgruppen.pm
my $params = delete($::form->{config}) || { };
delete $params->{id};
$self->config->assign_attributes(%{ $params });
my @errors;
my @errors = $self->config->validate;
my $db = $self->config->db;
$db->do_transaction( sub {
if (@errors) {
flash('error', @errors);
$self->show_form(title => $is_new ? t8('Add taxzone') : t8('Edit taxzone'));
return;
}
$self->config->assign_attributes(%{ $params }); # assign description and inventory_accno_id
@errors = $self->config->validate; # check for description and inventory_accno_id
if (@errors) {
die "foo" . @errors . "\n";
};
$self->config->save;
$self->config->save;
# Save or update taxzone_charts for new or unused Buchungsgruppen
if ($is_new or $self->config->orphaned) {
my $taxzones = SL::DB::Manager::TaxZone->get_all_sorted();
# Save or update taxzone_charts for new or unused Buchungsgruppen
if ($is_new or $self->config->orphaned) {
my $taxzones = SL::DB::Manager::TaxZone->get_all_sorted();
foreach my $tz (@{ $taxzones }) {
foreach my $tz (@{ $taxzones }) {
my $taxzone_chart = SL::DB::Manager::TaxzoneChart->find_by_or_create(buchungsgruppen_id => $self->config->id, taxzone_id => $tz->id);
$taxzone_chart->taxzone_id($tz->id);
$taxzone_chart->buchungsgruppen_id($self->config->id);
$taxzone_chart->income_accno_id($::form->{"income_accno_id_" . $tz->id});
$taxzone_chart->expense_accno_id($::form->{"expense_accno_id_" . $tz->id});
$taxzone_chart->save;
my $income_accno_id = $::form->{"income_accno_id_" . $tz->id};
my $expense_accno_id = $::form->{"expense_accno_id_" . $tz->id};
my ($income_accno, $expense_accno);
$income_accno = SL::DB::Manager::Chart->find_by( id => $income_accno_id ) if $income_accno_id;
$expense_accno = SL::DB::Manager::Chart->find_by( id => $expense_accno_id ) if $expense_accno_id;
push(@errors, t8('Tax zone #1 needs a valid income account' , $tz->description)) unless $income_accno;
push(@errors, t8('Tax zone #1 needs a valid expense account' , $tz->description)) unless $expense_accno;
my $taxzone_chart = SL::DB::Manager::TaxzoneChart->find_by_or_create(buchungsgruppen_id => $self->config->id, taxzone_id => $tz->id);
$taxzone_chart->taxzone_id($tz->id);
$taxzone_chart->buchungsgruppen_id($self->config->id);
$taxzone_chart->income_accno_id($income_accno->id);
$taxzone_chart->expense_accno_id($expense_accno->id);
$taxzone_chart->save;
}
}
}
} ) || die @errors ? join("\n", @errors) . "\n" : $db->error . "\n";
# die with rollback of taxzone save if saving of any of the taxzone_charts fails
# only show the $db->error if we haven't already identified the likely error ourselves
flash_later('info', $is_new ? t8('The Buchungsgruppe has been created.') : t8('The Buchungsgruppe has been saved.'));
$self->redirect_to(action => 'list');
SL/DB/Buchungsgruppe.pm
my @errors;
push @errors, $::locale->text('The description is missing.') if !$self->description;
if( $self->inventory_accno_id ) {
require SL::DB::Chart;
my $inventory_accno = SL::DB::Manager::Chart->find_by( id => $self->inventory_accno_id );
push(@errors, $::locale->text('Buchungsgruppe #1 needs a valid inventory account', $self->description)) unless $inventory_accno;
} else {
push @errors, $::locale->text('The Buchungsgruppe needs an inventory account.');
};
return @errors;
}
locale/de/all
'Buchungsgruppe' => 'Buchungsgruppe',
'Buchungsgruppe #1 needs a valid expense account' => 'Buchungsgruppe #1 braucht ein gültiges Aufwandskonto',
'Buchungsgruppe #1 needs a valid income account' => 'Buchungsgruppe #1 braucht ein gültiges Erfolgskonto',
'Buchungsgruppe #1 needs a valid inventory account' => 'Buchungsgruppe #1 braucht ein gültiges Warenbestandskonto',
'Buchungsgruppe (database ID)' => 'Buchungsgruppe (Datenbank-ID)',
'Buchungsgruppe (name)' => 'Buchungsgruppe (Name)',
'Buchungsgruppen' => 'Buchungsgruppen',
......
'Tax paid' => 'Vorsteuer',
'Tax rate' => 'Steuersatz',
'Tax saved!' => 'Steuer gespeichert!',
'Tax zone #1 needs a valid expense account' => 'Steuerzone #1 braucht ein gültiges Aufwandskonto',
'Tax zone #1 needs a valid income account' => 'Steuerzone #1 braucht ein gültiges Ertragskonto',
'Tax zone (database ID)' => 'Steuerzone ((Datenbank-ID)',
'Tax zone (description)' => 'Steuerzone (Beschreibung)',
'Tax-O-Matic' => 'Steuer',

Auch abrufbar als: Unified diff