+
+sub storno {
+ $lxdebug->enter_sub();
+
+ if (IS->has_storno(\%myconfig, $form, 'ap')) {
+ $form->{title} = $locale->text("Cancel Accounts Payables Transaction");
+ $form->error($locale->text("Transaction has already been cancelled!"));
+ }
+
+ # negate amount/taxes
+ for my $i (1 .. $form->{rowcount}) {
+ $form->{"amount_$i"} *= -1;
+ $form->{"tax_$i"} *= -1;
+ }
+
+ # format things
+ for my $i (1 .. $form->{rowcount}) {
+ for (qw(amount tax)) {
+ $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) if $form->{"${_}_$i"};
+ }
+ }
+
+ $form->{storno} = 1;
+ $form->{storno_id} = $form->{id};
+ $form->{id} = 0;
+
+ $form->{invnumber} = "Storno-" . $form->{invnumber};
+
+ post();
+
+ # saving the history
+ if(!exists $form->{addition} && $form->{id} ne "") {
+ $form->{snumbers} = "ordnumber_$form->{ordnumber}";
+ $form->{addition} = "STORNO";
+ $form->save_history($form->dbconnect(\%myconfig));
+ }
+ # /saving the history
+
+ $lxdebug->leave_sub();
+}