Revision 817e6304
Von Tamino Steinert vor 6 Monaten hinzugefügt
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
EmailJournal: Anhang als ZUGFeRD importieren