Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 817e6304

Von Tamino Steinert vor 6 Monaten hinzugefügt

  • ID 817e63046192ef491e72a50a9f79d279641bafa8
  • Vorgänger dec0e491
  • Nachfolger 537f8f59

EmailJournal: Anhang als ZUGFeRD importieren

Unterschiede anzeigen:

SL/Controller/ZUGFeRD.pm
127 127
  my $file = $::form->{file};
128 128
  my $file_name = $::form->{file_name};
129 129

  
130
  my %res;          # result data structure returned by SL::ZUGFeRD->extract_from_{pdf,xml}()
131
  my $parser;       # SL::XMLInvoice object created by SL::ZUGFeRD->extract_from_{pdf,xml}()
132
  my $vendor;       # SL::DB::Vendor object
130
  my %res; # result data structure returned by SL::ZUGFeRD->extract_from_{pdf,xml}()
133 131

  
134 132
  die t8("missing file for action import")   unless $file;
135 133
  die t8("can only parse a pdf or xml file") unless $file =~ m/^%PDF|<\?xml/;
......
145 143
    die(t8("Could not extract Factur-X/ZUGFeRD data, data and error message:") . " $res{'message'}");
146 144
  }
147 145

  
148
  $parser = $res{'invoice_xml'};
146
  my $form_defaults = $self->build_ap_transaction_form_defaults(\%res);
147

  
148
  # save the zugferd file to session file for reuse in ap.pl
149
  my $session_file = SL::SessionFile->new($file_name, mode => 'w');
150
  $session_file->fh->print($file);
151
  $session_file->fh->close;
152
  $form_defaults->{zugferd_session_file} = $file_name;
153

  
154
  $form_defaults->{callback} = $self->url_for(action => 'upload_zugferd');
155

  
156
  $self->redirect_to(
157
    controller    => 'ap.pl',
158
    action        => 'load_zugferd',
159
    form_defaults => $form_defaults,
160
  );
161
}
162

  
163
sub build_ap_transaction_form_defaults {
164
  my ($self, $data) = @_;
165

  
166
  my $parser = $data->{'invoice_xml'};
149 167

  
150 168
  my %metadata = %{$parser->metadata};
151 169
  my @items = @{$parser->items};
......
158 176
    die t8("Cannot process this invoice: neither VAT ID nor tax ID present.");
159 177
  }
160 178

  
161
  $vendor = find_vendor($metadata{'ustid'}, $metadata{'taxnumber'});
179
  my $vendor = find_vendor($metadata{'ustid'}, $metadata{'taxnumber'});
162 180

  
163 181
  die t8("Vendor with VAT ID (#1) and/or tax ID (#2) not found. Please check if the vendor " .
164 182
          "#3 exists and whether it has the correct tax ID/VAT ID." ,
......
170 188

  
171 189
  # Check IBAN specified on bill matches the one we've got in
172 190
  # the database for this vendor.
173
 if ($iban) {
174
   $intnotes .= "\nIBAN: ";
175
   $intnotes .= $iban ne $vendor->iban ?
176
         t8("Record IBAN #1 doesn't match vendor IBAN #2", $iban, $vendor->iban)
177
       : $iban
178
 }
179

  
180
  # save the zugferd file to session file for reuse in ap.pl
181
  my $session_file = SL::SessionFile->new($file_name, mode => 'w');
182
  $session_file->fh->print($file);
183
  $session_file->fh->close;
191
  if ($iban) {
192
    $intnotes .= "\nIBAN: ";
193
    $intnotes .= $iban ne $vendor->iban ?
194
          t8("Record IBAN #1 doesn't match vendor IBAN #2", $iban, $vendor->iban)
195
        : $iban
196
  }
184 197

  
185 198
  # Use invoice creation date as due date if there's no due date
186 199
  $metadata{'duedate'} = $metadata{'transdate'} unless defined $metadata{'duedate'};
......
254 267
  }
255 268
  $item_form{rowcount} = $row;
256 269

  
257
  $self->redirect_to(
258
    controller           => 'ap.pl',
259
    action               => 'load_zugferd',
260
    form_defaults => {
261
      zugferd_session_file => $file_name,
262
      callback             => $self->url_for(action => 'upload_zugferd'),
263
      vendor_id            => $vendor->id,
264
      vendor               => $vendor->name,
265
      invnumber            => $invnumber,
266
      transdate            => $metadata{'transdate'},
267
      duedate              => $metadata{'duedate'},
268
      no_payment_bookings  => 0,
269
      intnotes             => $intnotes,
270
      taxincluded          => 0,
271
      direct_debit         => $metadata{'direct_debit'},
272
      currency             => $currency->name,
273
      AP_chart_id          => $ap_chart_id,
274
      paid_1_suggestion    => $::form->format_amount(\%::myconfig, $metadata{'total'}, 2),
275
      %item_form,
276
    },
277
  );
278

  
270
  return {
271
    vendor_id            => $vendor->id,
272
    vendor               => $vendor->name,
273
    invnumber            => $invnumber,
274
    transdate            => $metadata{'transdate'},
275
    duedate              => $metadata{'duedate'},
276
    no_payment_bookings  => 0,
277
    intnotes             => $intnotes,
278
    taxincluded          => 0,
279
    direct_debit         => $metadata{'direct_debit'},
280
    currency             => $currency->name,
281
    AP_chart_id          => $ap_chart_id,
282
    paid_1_suggestion    => $::form->format_amount(\%::myconfig, $metadata{'total'}, 2),
283
    %item_form,
284
  },
279 285
}
280 286

  
281 287
sub check_auth {

Auch abrufbar als: Unified diff