- #Save Taxes
- if (!$form->{id}) {
- $query = qq|INSERT INTO taxkeys (chart_id,tax_id,taxkey_id, pos_ustva, startdate) VALUES ((SELECT id FROM chart where accno='$form->{accno}'), $tax_id, $taxkey,$form->{pos_ustva}, $startdate)|;
- $dbh->do($query) || $form->dberror($query);
- } else {
- $query = qq|DELETE FROM taxkeys WHERE chart_id=$form->{id} AND tax_id=$tax_id|;
- $dbh->do($query) || $form->dberror($query);
- $query = qq|INSERT INTO taxkeys (chart_id,tax_id,taxkey_id, pos_ustva, startdate) VALUES ($form->{id}, $tax_id, $taxkey,$form->{pos_ustva}, $startdate)|;
- $dbh->do($query) || $form->dberror($query);
- }
-
-# if ($form->{IC_taxpart} || $form->{IC_taxservice} || $form->{CT_tax}) {
-#
-# my $chart_id = $form->{id};
-#
-# unless ($form->{id}) {
-#
-# # get id from chart
-# $query = qq|SELECT c.id
-# FROM chart c
-# WHERE c.accno = '$form->{accno}'|;
-# $sth = $dbh->prepare($query);
-# $sth->execute || $form->dberror($query);
-#
-# ($chart_id) = $sth->fetchrow_array;
-# $sth->finish;
-# }
-#
-# # add account if it doesn't exist in tax
-# $query = qq|SELECT t.chart_id
-# FROM tax t
-# WHERE t.chart_id = $chart_id|;
-# $sth = $dbh->prepare($query);
-# $sth->execute || $form->dberror($query);
-#
-# my ($tax_id) = $sth->fetchrow_array;
-# $sth->finish;
-#
-# # add tax if it doesn't exist
-# unless ($tax_id) {
-# $query = qq|INSERT INTO tax (chart_id, rate)
-# VALUES ($chart_id, 0)|;
-# $dbh->do($query) || $form->dberror($query);
-# }
-# } else {
-#
-# # remove tax
-# if ($form->{id}) {
-# $query = qq|DELETE FROM tax
-# WHERE chart_id = $form->{id}|;
-# $dbh->do($query) || $form->dberror($query);
-# }
-# }
+ do_query($form, $dbh, $query, @values);
+
+ #Save Taxkeys
+
+ my @taxkeys = ();
+
+ my $MAX_TRIES = 10; # Maximum count of taxkeys in form
+ my $tk_count;
+
+ READTAXKEYS:
+ for $tk_count (0 .. $MAX_TRIES) {
+
+ # Loop control
+
+ # Check if the account already exists, else cancel
+
+ print(STDERR "Keine Taxkeys weil ID =: $form->{id}\n");
+
+ last READTAXKEYS if ( $form->{'id'} == 0);
+
+ # check if there is a startdate
+ if ( $form->{"taxkey_startdate_$tk_count"} eq '' ) {
+ $tk_count++;
+ next READTAXKEYS;
+ }
+
+ # Add valid taxkeys into the array
+ push @taxkeys ,
+ {
+ id => ($form->{"taxkey_id_$tk_count"} eq 'NEW') ? conv_i('') : conv_i($form->{"taxkey_id_$tk_count"}),
+ tax_id => conv_i($form->{"taxkey_tax_$tk_count"}),
+ startdate => conv_date($form->{"taxkey_startdate_$tk_count"}),
+ chart_id => conv_i($form->{"id"}),
+ pos_ustva => conv_i($form->{"taxkey_pos_ustva_$tk_count"}),
+ delete => ( $form->{"taxkey_del_$tk_count"} eq 'delete' ) ? '1' : '',
+ };
+
+ $tk_count++;
+ }
+
+ TAXKEY:
+ for my $j (0 .. $#taxkeys){
+ if ( defined $taxkeys[$j]{'id'} ){
+ # delete Taxkey?
+
+ if ($taxkeys[$j]{'delete'}){
+ $query = qq{
+ DELETE FROM taxkeys WHERE id = ?
+ };
+
+ @values = ($taxkeys[$j]{'id'});
+
+ do_query($form, $dbh, $query, @values);
+
+ next TAXKEY;
+ }
+
+ # UPDATE Taxkey
+
+ $query = qq{
+ UPDATE taxkeys
+ SET taxkey_id = (SELECT taxkey FROM tax WHERE tax.id = ?),
+ chart_id = ?,
+ tax_id = ?,
+ pos_ustva = ?,
+ startdate = ?
+ WHERE id = ?
+ };
+ @values = (
+ $taxkeys[$j]{'tax_id'},
+ $taxkeys[$j]{'chart_id'},
+ $taxkeys[$j]{'tax_id'},
+ $taxkeys[$j]{'pos_ustva'},
+ $taxkeys[$j]{'startdate'},
+ $taxkeys[$j]{'id'},
+ );
+ do_query($form, $dbh, $query, @values);
+ }
+ else {
+ # INSERT Taxkey
+
+ $query = qq{
+ INSERT INTO taxkeys (
+ taxkey_id,
+ chart_id,
+ tax_id,
+ pos_ustva,
+ startdate
+ )
+ VALUES ((SELECT taxkey FROM tax WHERE tax.id = ?), ?, ?, ?, ?)
+ };
+ @values = (
+ $taxkeys[$j]{'tax_id'},
+ $taxkeys[$j]{'chart_id'},
+ $taxkeys[$j]{'tax_id'},
+ $taxkeys[$j]{'pos_ustva'},
+ $taxkeys[$j]{'startdate'},
+ );
+
+ do_query($form, $dbh, $query, @values);
+ }
+
+ }