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', $@);
|
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.