Revision 70ae535d
Von Jan Büren vor mehr als 2 Jahren hinzugefügt
SL/Controller/Order.pm | ||
---|---|---|
47 | 47 |
use File::Spec; |
48 | 48 |
use Cwd; |
49 | 49 |
use Sort::Naturally; |
50 |
use Try::Tiny; |
|
50 | 51 |
|
51 | 52 |
use Rose::Object::MakeMethods::Generic |
52 | 53 |
( |
... | ... | |
62 | 63 |
except => [ qw(edit show_customer_vendor_details_dialog price_popup load_second_rows) ]); |
63 | 64 |
|
64 | 65 |
__PACKAGE__->run_before('recalc', |
65 |
only => [ qw(save save_as_new save_and_delivery_order save_and_invoice save_and_invoice_for_advance_payment save_and_final_invoice save_and_ap_transaction |
|
66 |
only => [ qw(save save_as_new save_and_delivery_order save_and_invoice save_and_invoice_for_advance_payment |
|
67 |
save_and_final_invoice save_and_ap_transaction add_subversion |
|
66 | 68 |
print send_email) ]); |
67 | 69 |
|
68 | 70 |
__PACKAGE__->run_before('get_unalterable_data', |
69 |
only => [ qw(save save_as_new save_and_delivery_order save_and_invoice save_and_invoice_for_advance_payment save_and_final_invoice save_and_ap_transaction |
|
71 |
only => [ qw(save save_as_new save_and_delivery_order save_and_invoice save_and_invoice_for_advance_payment |
|
72 |
save_and_final_invoice save_and_ap_transaction add_subversion |
|
70 | 73 |
print send_email) ]); |
71 | 74 |
|
72 | 75 |
# |
... | ... | |
216 | 219 |
$self->redirect_to(@redirect_params); |
217 | 220 |
} |
218 | 221 |
|
219 |
# save the order as new document an open it for edit |
|
222 |
# create new version and set version number |
|
223 |
sub action_add_subversion { |
|
224 |
my ($self) = @_; |
|
225 |
|
|
226 |
try { |
|
227 |
my $new_version_number = $self->order->current_version_number + 1; |
|
228 |
|
|
229 |
if ($self->type eq sales_quotation_type() || $self->type eq request_quotation_type()) { |
|
230 |
$self->order->quonumber($self->order->quonumber . '-' . $new_version_number); |
|
231 |
} elsif ($self->type eq sales_order_type()|| $self->type eq purchase_order_type()) { |
|
232 |
$self->order->quonumber($self->order->quonumber . '-' . $new_version_number); |
|
233 |
} else { die "Invalid Call for Sub-Version. Need Order or Quotation."; } |
|
234 |
|
|
235 |
SL::DB::OrderVersion->new(oe_id => $self->order->id, |
|
236 |
version => $new_version_number, |
|
237 |
)->save; |
|
238 |
|
|
239 |
} catch { die "Could not create sub-version for record with id:" . $self->order->id . " Reason: $_" }; |
|
240 |
|
|
241 |
# call the save action |
|
242 |
$self->action_save(); |
|
243 |
|
|
244 |
} |
|
245 |
|
|
246 |
# save the order as new document and open it for edit |
|
220 | 247 |
sub action_save_as_new { |
221 | 248 |
my ($self) = @_; |
222 | 249 |
|
... | ... | |
582 | 609 |
|
583 | 610 |
$self->save_history('MAILED'); |
584 | 611 |
|
612 |
# self is generated on the fly. form is a file from the dms |
|
613 |
# TODO: for the case Filesystem and Webdav we want the real file from the filesystem |
|
614 |
# for the nyi case DMS/CMIS we need a gloid or whatever the system offers (elo_id for ELO) |
|
615 |
# DMS kivi version should have a record_link to email_journal |
|
616 |
# the record link has to refer to the correct version -> helper table file <-> file_version |
|
617 |
my $file_id = $self->{file_id} || $::form->{file_id}; |
|
618 |
die "No file id" unless $file_id; |
|
619 |
|
|
620 |
# $main::lxdebug->message(0, "was wir hier haben" . $self->order->id . " " . $::form->{email_journal_id} . " file id noch frisch " . $self->{file_id}); |
|
621 |
|
|
622 |
# email is sent -> set this version to final and link to journal and file |
|
623 |
my $current_version = SL::DB::Manager::OrderVersion->get_all(where => [oe_id => $self->order->id, final_version => 0]); |
|
624 |
die "Invalid version state" unless scalar @{ $current_version } == 1; |
|
625 |
$current_version->[0]->update_attributes(file_id => $file_id, |
|
626 |
email_journal_id => $::form->{email_journal_id}, |
|
627 |
final_version => 1)->save; |
|
628 |
|
|
585 | 629 |
flash_later('info', t8('The email has been sent.')); |
586 | 630 |
|
587 | 631 |
my @redirect_params = ( |
... | ... | |
1911 | 1955 |
|
1912 | 1956 |
SL::DB::OrderItem->new(id => $_)->delete for @{$self->item_ids_to_delete || []}; |
1913 | 1957 |
$self->order->save(cascade => 1); |
1958 |
# create first version if none exists |
|
1959 |
SL::DB::OrderVersion->new(oe_id => $self->order->id, version => 1)->save unless scalar @{ $self->order->order_version }; |
|
1914 | 1960 |
|
1915 | 1961 |
# link records |
1916 | 1962 |
if ($::form->{converted_from_oe_id}) { |
... | ... | |
2159 | 2205 |
my $right = $right_for->{ $self->type }; |
2160 | 2206 |
$right ||= 'DOES_NOT_EXIST'; |
2161 | 2207 |
my $may_edit_create = $::auth->assert($right, 'may fail'); |
2208 |
# VALID States for current Sales Version |
|
2209 |
# 1. save create version without email_id -> open |
|
2210 |
# 2. send email set email_id for version 1 -> final |
|
2211 |
# 3. save and subversion new version without email_id -> open |
|
2212 |
# 4. send email set email_id for current subversion -> final |
|
2213 |
# for all version > 1 set postfix -2 .. -n for recordnumber (don´t compute just use autoincrement db field) |
|
2214 |
my $final_sales_version = ($self->order->is_sales && $self->order->id) ? $self->order->is_final_version : undef; |
|
2162 | 2215 |
|
2163 | 2216 |
for my $bar ($::request->layout->get('actionbar')) { |
2164 | 2217 |
$bar->add( |
... | ... | |
2171 | 2224 |
checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'], |
2172 | 2225 |
@req_trans_cost_art, @req_cusordnumber, |
2173 | 2226 |
], |
2174 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef, |
|
2227 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2228 |
: $final_sales_version ? t8('This record is the final version. Please create a new subversion') : undef, |
|
2175 | 2229 |
], |
2176 | 2230 |
action => [ |
2177 | 2231 |
t8('Save and Close'), |
... | ... | |
2182 | 2236 |
checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'], |
2183 | 2237 |
@req_trans_cost_art, @req_cusordnumber, |
2184 | 2238 |
], |
2185 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef, |
|
2239 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2240 |
: $final_sales_version ? t8('This record is the final version. Please create a new sub-version') : undef, |
|
2241 |
], |
|
2242 |
action => [ |
|
2243 |
t8('Create Sub-Version'), |
|
2244 |
call => [ 'kivi.Order.save', 'add_subversion', |
|
2245 |
], |
|
2246 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2247 |
: !$final_sales_version ? t8('This sub-version is not yet finalized') : undef, |
|
2186 | 2248 |
], |
2187 | 2249 |
action => [ |
2188 | 2250 |
t8('Save as new'), |
... | ... | |
2298 | 2360 |
$::instance_conf->get_order_warn_no_deliverydate, |
2299 | 2361 |
], |
2300 | 2362 |
checks => [ @req_trans_cost_art, @req_cusordnumber ], |
2301 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef, |
|
2363 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2364 |
: $final_sales_version ? t8('This record is a final version. Please create a new subversion') : undef, |
|
2302 | 2365 |
], |
2303 | 2366 |
action => [ |
2304 | 2367 |
t8('Save and print'), |
... | ... | |
2306 | 2369 |
$::instance_conf->get_order_warn_no_deliverydate, |
2307 | 2370 |
], |
2308 | 2371 |
checks => [ @req_trans_cost_art, @req_cusordnumber ], |
2309 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef, |
|
2372 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2373 |
: $final_sales_version ? t8('This record is a final version. Please create a new subversion') : undef, |
|
2310 | 2374 |
], |
2311 | 2375 |
action => [ |
2312 | 2376 |
t8('Save and E-mail'), |
... | ... | |
2314 | 2378 |
call => [ 'kivi.Order.save', 'save_and_show_email_dialog', $::instance_conf->get_order_warn_duplicate_parts, |
2315 | 2379 |
$::instance_conf->get_order_warn_no_deliverydate, |
2316 | 2380 |
], |
2317 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') |
|
2318 |
: !$self->order->id ? t8('This object has not been saved yet.') |
|
2319 |
: undef,
|
|
2381 |
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
|
|
2382 |
: !$self->order->id ? t8('This object has not been saved yet.')
|
|
2383 |
: $final_sales_version ? t8('This record is a final version. Please create a new subversion') : undef,
|
|
2320 | 2384 |
], |
2321 | 2385 |
action => [ |
2322 | 2386 |
t8('Download attachments of all parts'), |
... | ... | |
2657 | 2721 |
push @errors, t8('Storing the document to the WebDAV folder failed: #1', $@); |
2658 | 2722 |
}; |
2659 | 2723 |
} |
2724 |
my $file_obj; |
|
2660 | 2725 |
if ($order->id && $::instance_conf->get_doc_storage) { |
2661 | 2726 |
eval { |
2662 |
SL::File->save(object_id => $order->id, |
|
2663 |
object_type => $order->type, |
|
2664 |
mime_type => SL::MIME->mime_type_from_ext($filename), |
|
2665 |
source => 'created', |
|
2666 |
file_type => 'document', |
|
2667 |
file_name => $filename, |
|
2668 |
file_contents => $content, |
|
2669 |
print_variant => $variant); |
|
2727 |
$file_obj = SL::File->save(object_id => $order->id, |
|
2728 |
object_type => $order->type, |
|
2729 |
mime_type => SL::MIME->mime_type_from_ext($filename), |
|
2730 |
source => 'created', |
|
2731 |
file_type => 'document', |
|
2732 |
file_name => $filename, |
|
2733 |
file_contents => $content, |
|
2734 |
print_variant => $variant); |
|
2735 |
|
|
2736 |
$self->{file_id} = $file_obj->id; |
|
2670 | 2737 |
1; |
2671 | 2738 |
} or do { |
2672 | 2739 |
push @errors, t8('Storing the document in the storage backend failed: #1', $@); |
Auch abrufbar als: Unified diff
Unterversionen für Angebote/Aufträge
Versionen werden finalisiert sobald sie per E-Mail rausgeschickt wurden
Danach ist die Bearbeitung gesperrt, aber es ist möglich eine neue
Unterversion des Belegs zu erstellen.
Unterversionen bekommen den Postfix -x, wobei x:= 2 .. n
Die Unterversion wird dann in die Belegnummer übernommen, es wird aber
kein neuer Beleg erstellt. Die alte Version ist über DMS/E-Mail-Journal
noch als PDF erkennbar.