Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 87b04b66

Von Jan Büren vor fast 3 Jahren hinzugefügt

  • ID 87b04b66cd0c8cffbae03c4505fc5d1eb26f4af3
  • Vorgänger 5436e964
  • Nachfolger d7764194

Anzahlungsrechnung: Nur eine Mehrwertsteuer erlauben. Rückbuchungen nur Netto

Unterschiede anzeigen:

SL/IS.pm
796 796
    my $basefactor;
797 797
    my $baseqty;
798 798

  
799
    if ($form->{type} eq 'invoice_for_advance_payment') {
800
      $form->{"income_accno_$i"} = SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_clearing_chart_id)->load->accno;
801
    }
802

  
803 799
    $form->{"marge_percent_$i"} = $form->parse_amount($myconfig, $form->{"marge_percent_$i"}) * 1;
804 800
    $form->{"marge_absolut_$i"} = $form->parse_amount($myconfig, $form->{"marge_absolut_$i"}) * 1;
805 801
    $form->{"lastcost_$i"} = $form->parse_amount($myconfig, $form->{"lastcost_$i"}) * 1;
......
1034 1030
    }
1035 1031
  }
1036 1032

  
1037
  if ($form->{type} eq 'invoice_for_advance_payment') {
1038
    # invoice for advance payment show tax but does not account it.
1039
    # tax has to be accounted on payment
1040
    foreach my $item (split(/ /, $form->{taxaccounts})) {
1041
      delete $form->{amount}{ $form->{id} }{$item};
1042
    }
1043

  
1044
    $tax = 0;
1045
  }
1046

  
1047 1033
  # Invoice Summary includes Rounding
1048 1034
  my $grossamount = $netamount + $tax;
1049 1035
  my $rounding = $form->round_amount(
......
1073 1059
  # entsprechend auch beim Bestimmen des Steuerschlüssels in Taxkey.pm berücksichtigen
1074 1060
  my $taxdate = $form->{tax_point} ||$form->{deliverydate} || $form->{invdate};
1075 1061

  
1062
  # better type? maybe define Invoice->invoice_type
1063
  if ($form->{type} ne 'invoice_for_advance_payment') {
1064
    my $invoices_for_advance_payment = $self->_get_invoices_for_advance_payment($form->{convert_from_ar_ids} || $form->{id});
1065
    if (scalar @$invoices_for_advance_payment > 0) {
1066
      # reverse booking for invoices for advance payment
1067
      my $clearing_chart = SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_clearing_chart_id)->load;
1068
      die "No Clearing Chart for Advance Payment" unless ref $clearing_chart eq 'SL::DB::Chart';
1069
      foreach my $invoice_for_advance_payment (@$invoices_for_advance_payment) {
1070
        # delete ? post twice case ?
1071
        # TODO: helper table acc_trans_advance_payment
1072
        # trans_id for final invoice connects to acc_trans_id here
1073
        # my $booking = SL::DB::AccTrans->new( ...)
1074
        # TODO: If final_invoice change (delete storno) delete all connectin acc_trans entries, if
1075
        # period is not closed
1076
        # $booking->id, $self->id in helper table
1077
        $form->{amount}->{$invoice_for_advance_payment->id}->{$clearing_chart->accno} = -1 * $invoice_for_advance_payment->netamount;
1078
        $form->{memo}  ->{$invoice_for_advance_payment->id}->{$clearing_chart->accno} = 'reverse booking by final invoice';
1079
        # AR
1080
        $form->{amount}->{$invoice_for_advance_payment->id}->{$form->{AR}} = $invoice_for_advance_payment->netamount;
1081
        $form->{memo}  ->{$invoice_for_advance_payment->id}->{$form->{AR}} = 'reverse booking by final invoice';
1082
      }
1083
    }
1084
  }
1085
  if ($form->{type} eq 'invoice_for_advance_payment') {
1086
    # sanity and decomplex, allow only one tax rate
1087
    my $clearing_chart = SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_clearing_chart_id)->load;
1088
    die "No Clearing Chart for Advance Payment" unless ref $clearing_chart eq 'SL::DB::Chart';
1076 1089

  
1077
  # reverse booking for invoices for advance payment
1078
  my $invoices_for_advance_payment = $self->_get_invoices_for_advance_payment($form->{convert_from_ar_ids} || $form->{id});
1079
  foreach my $invoice_for_advance_payment (@$invoices_for_advance_payment) {
1080
    my $transactions = SL::DB::Manager::AccTransaction->get_all(query => [ trans_id => $invoice_for_advance_payment->id ], sort_by => 'acc_trans_id ASC');
1081
    foreach my $transaction (@$transactions) {
1082
      $form->{amount}->{$invoice_for_advance_payment->id}->{$transaction->chart->accno} = -1 * $transaction->amount;
1083
      $form->{memo}  ->{$invoice_for_advance_payment->id}->{$transaction->chart->accno} = 'reverse booking by final invoice';
1090
    my @current_taxaccounts = (split(/ /, $form->{taxaccounts}));
1091
    die 'Wrong Call, cannot post invoice for advance payment with more than one tax' if (scalar @current_taxaccounts > 1);
1092

  
1093
    my @trans_ids = keys %{ $form->{amount} };
1094
    if (scalar @trans_ids > 1) {
1095
      require Data::Dumper;
1096
      die "Invalid state for advance payment more than one trans_id " . Dumper($form->{amount});
1084 1097
    }
1098

  
1099
    # get gross and move to clearing chart - delete everything else
1100
    # 1. gross
1101
    my $gross = $form->{amount}{$trans_ids[0]}{$form->{AR}};
1102
    # 2. destroy
1103
    undef $form->{amount}{$trans_ids[0]};
1104
    # 3. rebuild
1105
    $form->{amount}{$trans_ids[0]}{$form->{AR}}            = $gross;
1106
    $form->{amount}{$trans_ids[0]}{$clearing_chart->accno} = $gross * -1;
1107
    # 4. no cogs, hopefully not commonly used at all
1108
    undef $form->{amount_cogs};
1085 1109
  }
1086 1110

  
1087 1111
  foreach my $trans_id (keys %{ $form->{amount_cogs} }) {
bin/mozilla/is.pl
1014 1014

  
1015 1015
  $form->isblank("exchangerate", $locale->text('Exchangerate missing!'))
1016 1016
    if ($form->{currency} ne $form->{defaultcurrency});
1017
  # advance payment allows only one tax
1018
  if ($form->{type} eq 'invoice_for_advance_payment') {
1019
    my @current_taxaccounts = (split(/ /, $form->{taxaccounts}));
1020
    $form->error($locale->text('Cannot post invoice for advance payment with more than one tax'))
1021
      if (scalar @current_taxaccounts > 1);
1022
  }
1017 1023

  
1018 1024
  for my $i (1 .. $form->{paidaccounts}) {
1019 1025
    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {

Auch abrufbar als: Unified diff