Revision 9a578c8b
Von Jan Büren vor mehr als 11 Jahren hinzugefügt
SL/Common.pm | ||
---|---|---|
14 | 14 |
use Carp; |
15 | 15 |
use Time::HiRes qw(gettimeofday); |
16 | 16 |
use Data::Dumper; |
17 |
use File::Copy; |
|
18 |
use File::stat; |
|
19 |
use File::Slurp; |
|
17 | 20 |
|
18 | 21 |
use SL::DBUtils; |
19 | 22 |
|
... | ... | |
326 | 329 |
$main::lxdebug->leave_sub(); |
327 | 330 |
} |
328 | 331 |
|
332 |
# |
|
333 |
# Legt ein entsprechendes Webdav-Verzeichnis an, falls |
|
334 |
# Webdav als Option konfiguriert ist. Falls schon ein |
|
335 |
# Ordner vorhanden ist, werden alle Dateien alphabetisch |
|
336 |
# sortiert ausgelesen und an der Oberfläche angezeigt |
|
337 |
# |
|
329 | 338 |
sub webdav_folder { |
330 | 339 |
$main::lxdebug->enter_sub(); |
331 | 340 |
|
332 | 341 |
my ($form) = @_; |
333 | 342 |
|
334 | 343 |
return $main::lxdebug->leave_sub() |
335 |
unless ($::lx_office_conf{features}->{webdav} && $form->{id});
|
|
344 |
unless ($::instance_conf->get_webdav && $form->{id});
|
|
336 | 345 |
|
337 |
croak "No client set in \$::auth" unless $::auth->client; |
|
338 | 346 |
|
339 |
my ($path, $number); |
|
340 | 347 |
|
341 | 348 |
$form->{WEBDAV} = []; |
342 | 349 |
|
343 |
if ($form->{type} eq "sales_quotation") { |
|
344 |
($path, $number) = ("angebote", $form->{quonumber}); |
|
345 |
} elsif ($form->{type} eq "sales_order") { |
|
346 |
($path, $number) = ("bestellungen", $form->{ordnumber}); |
|
347 |
} elsif ($form->{type} eq "request_quotation") { |
|
348 |
($path, $number) = ("anfragen", $form->{quonumber}); |
|
349 |
} elsif ($form->{type} eq "purchase_order") { |
|
350 |
($path, $number) = ("lieferantenbestellungen", $form->{ordnumber}); |
|
351 |
} elsif ($form->{type} eq "sales_delivery_order") { |
|
352 |
($path, $number) = ("verkaufslieferscheine", $form->{donumber}); |
|
353 |
} elsif ($form->{type} eq "purchase_delivery_order") { |
|
354 |
($path, $number) = ("einkaufslieferscheine", $form->{donumber}); |
|
355 |
} elsif ($form->{type} eq "credit_note") { |
|
356 |
($path, $number) = ("gutschriften", $form->{invnumber}); |
|
357 |
} elsif ($form->{vc} eq "customer") { |
|
358 |
($path, $number) = ("rechnungen", $form->{invnumber}); |
|
359 |
} else { |
|
360 |
($path, $number) = ("einkaufsrechnungen", $form->{invnumber}); |
|
361 |
} |
|
362 |
|
|
350 |
my ($path, $number) = get_webdav_folder($form); # ausgelagert |
|
363 | 351 |
return $main::lxdebug->leave_sub() unless ($path && $number); |
364 | 352 |
|
365 |
$number =~ s|[/\\]|_|g; |
|
366 |
|
|
367 |
$path = "webdav/" . $::auth->client->{id} . "/${path}/${number}"; |
|
368 |
|
|
369 | 353 |
if (!-d $path) { |
370 | 354 |
mkdir_with_parents($path); |
371 | 355 |
|
... | ... | |
373 | 357 |
my $base_path = $ENV{'SCRIPT_NAME'}; |
374 | 358 |
$base_path =~ s|[^/]+$||; |
375 | 359 |
if (opendir my $dir, $path) { |
360 |
# alphabetisch sortiert. |
|
376 | 361 |
foreach my $file (sort { lc $a cmp lc $b } readdir $dir) { |
377 | 362 |
next if (($file eq '.') || ($file eq '..')); |
378 | 363 |
|
... | ... | |
574 | 559 |
} |
575 | 560 |
} |
576 | 561 |
|
562 |
# |
|
563 |
# Diese Routine baut aus dem Masken-Typ und der |
|
564 |
# Beleg-Nummer, das entsprechende Webdav-Verzeichnis zusammen |
|
565 |
# Nimmt leider noch die ganze Form entgegen und den if-elsif-Block |
|
566 |
# sollte man schöner "dispatchen" |
|
567 |
# Ergänzung 6.5.2011, den else-Zweig defensiver gestaltet und mit |
|
568 |
# -1 als n.i.O. Rückgabewert versehen |
|
569 |
# |
|
570 |
sub get_webdav_folder { |
|
571 |
$main::lxdebug->enter_sub(); |
|
572 |
|
|
573 |
my ($form) = @_; |
|
574 |
|
|
575 |
croak "No client set in \$::auth" unless $::auth->client; |
|
576 |
|
|
577 |
my ($path, $number); |
|
578 |
|
|
579 |
# dispatch table |
|
580 |
if ($form->{type} eq "sales_quotation") { |
|
581 |
($path, $number) = ("angebote", $form->{quonumber}); |
|
582 |
} elsif ($form->{type} eq "sales_order") { |
|
583 |
($path, $number) = ("bestellungen", $form->{ordnumber}); |
|
584 |
} elsif ($form->{type} eq "request_quotation") { |
|
585 |
($path, $number) = ("anfragen", $form->{quonumber}); |
|
586 |
} elsif ($form->{type} eq "purchase_order") { |
|
587 |
($path, $number) = ("lieferantenbestellungen", $form->{ordnumber}); |
|
588 |
} elsif ($form->{type} eq "sales_delivery_order") { |
|
589 |
($path, $number) = ("verkaufslieferscheine", $form->{donumber}); |
|
590 |
} elsif ($form->{type} eq "purchase_delivery_order") { |
|
591 |
($path, $number) = ("einkaufslieferscheine", $form->{donumber}); |
|
592 |
} elsif ($form->{type} eq "credit_note") { |
|
593 |
($path, $number) = ("gutschriften", $form->{invnumber}); |
|
594 |
} elsif ($form->{vc} eq "customer") { |
|
595 |
($path, $number) = ("rechnungen", $form->{invnumber}); |
|
596 |
} elsif ($form->{vc} eq "vendor") { |
|
597 |
($path, $number) = ("einkaufsrechnungen", $form->{invnumber}); |
|
598 |
} else { |
|
599 |
# wir befinden uns nicht in einer belegmaske |
|
600 |
# scheinbar wird diese routine auch bspw. bei waren |
|
601 |
# aufgerufen - naja, steuerung über die $form halt ... |
|
602 |
$main::lxdebug->leave_sub(); |
|
603 |
return undef; |
|
604 |
} |
|
605 |
|
|
606 |
$number =~ s|[/\\]|_|g; |
|
607 |
|
|
608 |
$path = "webdav/" . $::auth->client->{id} . "/${path}/${number}"; |
|
609 |
|
|
610 |
$main::lxdebug->leave_sub(); |
|
611 |
|
|
612 |
return ($path, $number); |
|
613 |
} |
|
614 |
|
|
615 |
# |
|
616 |
# Falls Webdav aktiviert ist, auch den generierten Beleg in das |
|
617 |
# Webdav-Verzeichnis kopieren |
|
618 |
# |
|
619 |
# |
|
620 |
sub copy_file_to_webdav_folder { |
|
621 |
$main::lxdebug->enter_sub(); |
|
622 |
|
|
623 |
my ($form) = @_; |
|
624 |
my ($last_mod_time, $latest_file_name, $complete_path); |
|
625 |
|
|
626 |
# checks |
|
627 |
foreach my $item (qw(tmpdir tmpfile type)){ |
|
628 |
if (!$form->{$item}){ |
|
629 |
$main::lxdebug->message(0, 'Missing parameter'); |
|
630 |
$main::form->error($main::locale->text("Missing parameter for webdav file copy")); |
|
631 |
} |
|
632 |
} |
|
633 |
|
|
634 |
# Den Webdav-Ordner ÜBER exakt denselben Mechanismus wie beim |
|
635 |
# Anlegen des Ordners bestimmen |
|
636 |
my ($webdav_folder, $document_name) = get_webdav_folder($form); |
|
637 |
|
|
638 |
if (! $webdav_folder){ |
|
639 |
$main::lxdebug->leave_sub(); |
|
640 |
$main::form->error($main::locale->text("Cannot check correct webdav folder")); |
|
641 |
return undef; # s.o. erstmal so ... |
|
642 |
} |
|
643 |
# kompletter pfad |
|
644 |
$complete_path = join('/', $form->{cwd}, $webdav_folder); |
|
645 |
opendir my $dh, $complete_path or die "Could not open $complete_path: $!"; |
|
646 |
|
|
647 |
my ($newest_name, $newest_time); |
|
648 |
while ( defined( my $file = readdir( $dh ) ) ) { |
|
649 |
my $path = File::Spec->catfile( $complete_path, $file ); |
|
650 |
next if -d $path; # skip directories, or anything else you like |
|
651 |
( $newest_name, $newest_time ) = ( $file, -M _ ) |
|
652 |
if( ! defined $newest_time or -M $path < $newest_time ); |
|
653 |
} |
|
654 |
$latest_file_name = $complete_path .'/' . $newest_name; |
|
655 |
my $filesize = stat($latest_file_name)->size; |
|
656 |
|
|
657 |
# prüfung auf identisch oder nicht |
|
658 |
my ($ext) = $form->{tmpfile} =~ /(\.[^.]+)$/; |
|
659 |
my $current_file = join('/', $form->{tmpdir}, $form->{tmpfile}); |
|
660 |
my $current_filesize = stat($current_file)->size; |
|
661 |
if ($current_filesize == $filesize) { # bei gleicher größe copy deaktivieren |
|
662 |
$main::lxdebug->leave_sub(); |
|
663 |
return; |
|
664 |
} |
|
665 |
# zeitstempel und dateinamen holen |
|
666 |
my $timestamp = get_current_formatted_time(); |
|
667 |
my $myfilename = $form->generate_attachment_filename(); |
|
668 |
# entsprechend vor der endung hinzufügen |
|
669 |
$myfilename =~ s/\./$timestamp\./; |
|
670 |
|
|
671 |
if (!copy(join('/', $form->{tmpdir}, $form->{tmpfile}), join('/', $form->{cwd}, $webdav_folder, $myfilename))) { |
|
672 |
my $j = join('/', $form->{tmpdir}, $form->{tmpfile}); |
|
673 |
my $k = join('/', $form->{cwd}, $webdav_folder); |
|
674 |
$main::lxdebug->message(0, "Copy file from $j to $k failed"); |
|
675 |
$main::form->error($main::locale->text("Copy file from #1 to #2 failed", $j, $k)); |
|
676 |
} |
|
677 |
|
|
678 |
$main::lxdebug->leave_sub(); |
|
679 |
} |
|
680 |
sub get_current_formatted_time { |
|
681 |
$main::lxdebug->enter_sub(); |
|
682 |
|
|
683 |
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); |
|
684 |
my $formatted_current_time = sprintf ( "_%04d%02d%02d_%02d%02d%02d", |
|
685 |
$year+1900,$mon+1,$mday,$hour,$min,$sec); |
|
686 |
|
|
687 |
$main::lxdebug->leave_sub(); |
|
688 |
return $formatted_current_time; |
|
689 |
} |
|
690 |
|
|
577 | 691 |
1; |
578 | 692 |
__END__ |
579 | 693 |
|
SL/DB/AuthClient.pm | ||
---|---|---|
45 | 45 |
sub _after_save_ensure_webdav_symlink_correctness { |
46 | 46 |
my ($self) = @_; |
47 | 47 |
|
48 |
$self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::lx_office_conf{features}->{webdav};
|
|
48 |
$self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::instance_conf->get_webdav;
|
|
49 | 49 |
return 1; |
50 | 50 |
} |
51 | 51 |
|
52 | 52 |
sub _after_delete_delete_webdav_symlink { |
53 | 53 |
my ($self) = @_; |
54 | 54 |
|
55 |
return 1 if !$::lx_office_conf{features}->{webdav};
|
|
55 |
return 1 if !$::instance_conf->get_webdav;
|
|
56 | 56 |
my $name = $self->webdav_symlink_basename; |
57 | 57 |
unlink "webdav/links/${name}"; |
58 | 58 |
return 1; |
... | ... | |
85 | 85 |
sub ensure_webdav_symlink_correctness { |
86 | 86 |
my ($self, $old_name) = @_; |
87 | 87 |
|
88 |
return unless $::lx_office_conf{features}->{webdav};
|
|
88 |
return unless $::instance_conf->get_webdav;
|
|
89 | 89 |
|
90 | 90 |
croak "Need object ID" unless $self->id; |
91 | 91 |
|
SL/DB/MetaSetup/Default.pm | ||
---|---|---|
34 | 34 |
mtime => { type => 'timestamp' }, |
35 | 35 |
rmanumber => { type => 'text' }, |
36 | 36 |
cnnumber => { type => 'text' }, |
37 |
accounting_method => { type => 'text' }, |
|
38 |
inventory_system => { type => 'text' }, |
|
39 |
profit_determination => { type => 'text' }, |
|
37 | 40 |
dunning_ar_amount_fee => { type => 'integer' }, |
38 | 41 |
dunning_ar_amount_interest => { type => 'integer' }, |
39 | 42 |
dunning_ar => { type => 'integer' }, |
40 | 43 |
pdonumber => { type => 'text' }, |
41 | 44 |
sdonumber => { type => 'text' }, |
42 |
id => { type => 'serial', not_null => 1 }, |
|
43 | 45 |
ar_paid_accno_id => { type => 'integer' }, |
46 |
id => { type => 'serial', not_null => 1 }, |
|
44 | 47 |
language_id => { type => 'integer' }, |
45 |
accounting_method => { type => 'text' }, |
|
46 |
inventory_system => { type => 'text' }, |
|
47 |
profit_determination => { type => 'text' }, |
|
48 | 48 |
datev_check_on_sales_invoice => { type => 'boolean', default => 'true' }, |
49 | 49 |
datev_check_on_purchase_invoice => { type => 'boolean', default => 'true' }, |
50 | 50 |
datev_check_on_ar_transaction => { type => 'boolean', default => 'true' }, |
... | ... | |
65 | 65 |
ir_show_mark_as_paid => { type => 'boolean', default => 'true' }, |
66 | 66 |
ar_show_mark_as_paid => { type => 'boolean', default => 'true' }, |
67 | 67 |
ap_show_mark_as_paid => { type => 'boolean', default => 'true' }, |
68 |
assemblynumber => { type => 'text' }, |
|
69 |
currency_id => { type => 'integer', not_null => 1 }, |
|
70 | 68 |
warehouse_id => { type => 'integer' }, |
71 | 69 |
bin_id => { type => 'integer' }, |
70 |
max_future_booking_interval => { type => 'integer', default => 360 }, |
|
71 |
assemblynumber => { type => 'text' }, |
|
72 | 72 |
show_weight => { type => 'boolean', default => 'false', not_null => 1 }, |
73 | 73 |
transfer_default => { type => 'boolean', default => 'true' }, |
74 | 74 |
transfer_default_use_master_default_bin => { type => 'boolean', default => 'false' }, |
75 | 75 |
transfer_default_ignore_onhand => { type => 'boolean', default => 'false' }, |
76 | 76 |
warehouse_id_ignore_onhand => { type => 'integer' }, |
77 | 77 |
bin_id_ignore_onhand => { type => 'integer' }, |
78 |
currency_id => { type => 'integer', not_null => 1 }, |
|
78 | 79 |
company => { type => 'text' }, |
79 | 80 |
address => { type => 'text' }, |
80 | 81 |
taxnumber => { type => 'text' }, |
... | ... | |
82 | 83 |
duns => { type => 'text' }, |
83 | 84 |
sepa_creditor_id => { type => 'text' }, |
84 | 85 |
templates => { type => 'text' }, |
85 |
max_future_booking_interval => { type => 'integer', default => 360 }, |
|
86 |
webdav => { type => 'boolean', default => 'false' }, |
|
87 |
webdav_documents => { type => 'boolean', default => 'false' }, |
|
88 |
vertreter => { type => 'boolean', default => 'false' }, |
|
89 |
parts_show_image => { type => 'boolean', default => 'true' }, |
|
90 |
parts_listing_image => { type => 'boolean', default => 'true' }, |
|
91 |
parts_image_css => { type => 'text', default => 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;' }, |
|
86 | 92 |
); |
87 | 93 |
|
88 | 94 |
__PACKAGE__->meta->primary_key_columns([ 'id' ]); |
SL/Form.pm | ||
---|---|---|
614 | 614 |
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig; |
615 | 615 |
} |
616 | 616 |
|
617 |
$additional_params->{"conf_webdav"} = $::lx_office_conf{features}->{webdav};
|
|
617 |
$additional_params->{"conf_webdav"} = $::instance_conf->get_webdav;
|
|
618 | 618 |
$additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex}; |
619 | 619 |
$additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument}; |
620 |
$additional_params->{"conf_vertreter"} = $::lx_office_conf{features}->{vertreter};
|
|
621 |
$additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css};
|
|
622 |
$additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images};
|
|
623 |
$additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image};
|
|
620 |
$additional_params->{"conf_vertreter"} = $::instance_conf->get_vertreter;
|
|
621 |
$additional_params->{"conf_parts_image_css"} = $::instance_conf->get_parts_image_css;
|
|
622 |
$additional_params->{"conf_parts_listing_images"} = $::instance_conf->get_parts_listing_images;
|
|
623 |
$additional_params->{"conf_parts_show_image"} = $::instance_conf->get_parts_show_image;
|
|
624 | 624 |
$additional_params->{"INSTANCE_CONF"} = $::instance_conf; |
625 | 625 |
|
626 | 626 |
if (my $debug_options = $::lx_office_conf{debug}{options}) { |
... | ... | |
1076 | 1076 |
$self->cleanup(); |
1077 | 1077 |
$self->error("$self->{IN} : " . $template->get_error()); |
1078 | 1078 |
} |
1079 |
|
|
1079 |
Common::copy_file_to_webdav_folder($self) if ($::instance_conf->get_webdav |
|
1080 |
and $::instance_conf->get_webdav_documents and not $self->{preview}); |
|
1080 | 1081 |
close OUT if $self->{OUT}; |
1081 | 1082 |
|
1082 | 1083 |
if ($self->{media} eq 'file') { |
SL/InstanceConfiguration.pm | ||
---|---|---|
184 | 184 |
return ($self->{data}->{max_future_booking_interval}); |
185 | 185 |
} |
186 | 186 |
|
187 |
sub get_webdav { |
|
188 |
my ($self) = @_; |
|
189 |
return ($self->{data}->{webdav}); |
|
190 |
} |
|
191 |
|
|
192 |
sub get_webdav_documents { |
|
193 |
my ($self) = @_; |
|
194 |
return ($self->{data}->{webdav_documents}); |
|
195 |
} |
|
196 |
|
|
197 |
sub get_vertreter { |
|
198 |
my ($self) = @_; |
|
199 |
return ($self->{data}->{vertreter}); |
|
200 |
} |
|
201 |
|
|
202 |
sub get_parts_show_image { |
|
203 |
my ($self) = @_; |
|
204 |
return ($self->{data}->{parts_show_image}); |
|
205 |
} |
|
206 |
|
|
207 |
sub get_parts_listing_images{ |
|
208 |
my ($self) = @_; |
|
209 |
return ($self->{data}->{parts_listing_image}); |
|
210 |
} |
|
211 |
|
|
212 |
sub get_parts_image_css { |
|
213 |
my ($self) = @_; |
|
214 |
return ($self->{data}->{parts_image_css}); |
|
215 |
} |
|
187 | 216 |
|
188 | 217 |
|
189 | 218 |
1; |
... | ... | |
330 | 359 |
|
331 | 360 |
Returns the maximum interval value for future bookings |
332 | 361 |
|
362 |
=item C<get_webdav> |
|
363 |
|
|
364 |
Returns the configuration for webdav |
|
365 |
|
|
366 |
=item C<get_webdav_documents> |
|
367 |
|
|
368 |
Returns the configuration for storing documents in the corresponding webdav folder |
|
369 |
|
|
370 |
=item C<get_vertreter> |
|
371 |
|
|
372 |
Returns the configuration for "vertreter" |
|
373 |
|
|
374 |
=item C<get_parts_show_image> |
|
375 |
|
|
376 |
Returns the configuarion for show image in parts |
|
377 |
|
|
378 |
=item C<get_parts_image_css> |
|
379 |
|
|
380 |
Returns the css format string for images shown in parts |
|
381 |
|
|
382 |
=item C<get_parts_listing_image> |
|
383 |
|
|
384 |
Returns the configuartion for showing the picture in the results when you search for parts |
|
385 |
|
|
333 | 386 |
=back |
334 | 387 |
|
335 | 388 |
=head1 BUGS |
bin/mozilla/ct.pl | ||
---|---|---|
174 | 174 |
my @columns = ( |
175 | 175 |
'id', 'name', "$form->{db}number", 'contact', 'phone', |
176 | 176 |
'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city', |
177 |
'business', 'invnumber', 'ordnumber', 'quonumber', 'salesman', 'country'
|
|
177 |
'business', 'invnumber', 'ordnumber', 'quonumber', 'salesman', 'country' |
|
178 | 178 |
); |
179 | 179 |
|
180 | 180 |
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; |
... | ... | |
465 | 465 |
currencies => "ALL_CURRENCIES"); |
466 | 466 |
$form->get_pricegroup(\%myconfig, { all => 1 }); |
467 | 467 |
|
468 |
$form->get_lists(customers => { key => "ALL_SALESMAN_CUSTOMERS", business_is_salesman => 1 }) if $::lx_office_conf{features}->{vertreter};
|
|
468 |
$form->get_lists(customers => { key => "ALL_SALESMAN_CUSTOMERS", business_is_salesman => 1 }) if $::instance_conf->get_vertreter;
|
|
469 | 469 |
$form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{FU_created_for_user}, deleted => 0 ] ]); |
470 | 470 |
$form->{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{salesman_id}, deleted => 0 ] ]); |
471 | 471 |
$form->{USER} = SL::DB::Manager::Employee->current; |
... | ... | |
536 | 536 |
|
537 | 537 |
$::form->isblank("name", $::locale->text("Name missing!")); |
538 | 538 |
|
539 |
if ($::form->{new_salesman_id} && $::lx_office_conf{features}->{vertreter}) {
|
|
539 |
if ($::form->{new_salesman_id} && $::instance_conf->get_vertreter) {
|
|
540 | 540 |
$::form->{salesman_id} = $::form->{new_salesman_id}; |
541 | 541 |
delete $::form->{new_salesman_id}; |
542 | 542 |
} |
bin/mozilla/do.pl | ||
---|---|---|
165 | 165 |
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP"); |
166 | 166 |
|
167 | 167 |
# retrieve order/quotation |
168 |
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
|
168 |
$form->{webdav} = $::instance_conf->get_webdav;
|
|
169 | 169 |
$form->{jsscript} = 1; |
170 | 170 |
|
171 | 171 |
my $editing = $form->{id}; |
bin/mozilla/ir.pl | ||
---|---|---|
101 | 101 |
$form->{vc} = 'vendor'; |
102 | 102 |
|
103 | 103 |
# create links |
104 |
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
|
104 |
$form->{webdav} = $::instance_conf->get_webdav;
|
|
105 | 105 |
$form->{jsscript} = 1; |
106 | 106 |
|
107 | 107 |
$form->create_links("AP", \%myconfig, "vendor"); |
bin/mozilla/is.pl | ||
---|---|---|
138 | 138 |
$form->{vc} = 'customer'; |
139 | 139 |
|
140 | 140 |
# create links |
141 |
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
|
141 |
$form->{webdav} = $::instance_conf->get_webdav;
|
|
142 | 142 |
|
143 | 143 |
$form->create_links("AR", \%myconfig, "customer"); |
144 | 144 |
|
bin/mozilla/oe.pl | ||
---|---|---|
229 | 229 |
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP"); |
230 | 230 |
|
231 | 231 |
# retrieve order/quotation |
232 |
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
|
232 |
$form->{webdav} = $::instance_conf->get_webdav;
|
|
233 | 233 |
$form->{jsscript} = 1; |
234 | 234 |
|
235 | 235 |
my $editing = $form->{id}; |
... | ... | |
528 | 528 |
|
529 | 529 |
print $form->parse_html_template("oe/form_footer", { |
530 | 530 |
%TMPL_VAR, |
531 |
webdav => $::lx_office_conf{features}->{webdav},
|
|
531 |
webdav => $::instance_conf->get_webdav,
|
|
532 | 532 |
print_options => print_options(inline => 1), |
533 | 533 |
label_edit => $locale->text("Edit the $form->{type}"), |
534 | 534 |
label_workflow => $locale->text("Workflow $form->{type}"), |
config/kivitendo.conf.default | ||
---|---|---|
65 | 65 |
# and "en" (English, not perfect) are available. |
66 | 66 |
language = de |
67 | 67 |
|
68 |
[features] |
|
69 |
# Activate certain optional features and modules. |
|
70 |
webdav = 0 |
|
71 |
vertreter = 0 |
|
72 |
|
|
73 |
## Pictures for parts |
|
74 |
# Show the picture in the part form |
|
75 |
parts_show_image = 1 |
|
76 |
# Style the picture with the following CSS code: |
|
77 |
parts_image_css = border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px; |
|
78 |
# Show the picture in the results when you search for parts |
|
79 |
parts_listing_images = 0 |
|
80 |
|
|
81 | 68 |
[paths] |
82 | 69 |
# path to temporary files (must be writeable by the web server) |
83 | 70 |
userspath = users |
doc/changelog | ||
---|---|---|
57 | 57 |
- #1897 implementiert. Zukunfts-Buchungen verhindern, durch einen konfigurierbaren |
58 | 58 |
maximalen Zeitraum in dem in die Zukunft gebucht werden darf (default 360 Tage) |
59 | 59 |
|
60 |
- #2300 Alle Feature-Konfigurationen sind jetzt in der Mandantenkonfiguration eingestellt |
|
61 |
- #2301 Dokumentenbelege optional in webdav-Ordner speichern |
|
60 | 62 |
|
61 | 63 |
Wichtige Änderungen: |
62 | 64 |
|
locale/de/all | ||
---|---|---|
352 | 352 |
'CRM status' => 'Admin Status', |
353 | 353 |
'CRM termin' => 'Termine', |
354 | 354 |
'CRM user' => 'Admin Benutzer', |
355 |
'CSS style for pictures' => 'CSS Style für Bilder', |
|
355 | 356 |
'CSV export -- options' => 'CSV-Export -- Optionen', |
356 | 357 |
'CSV import: contacts' => 'CSV-Import: Ansprechpersonen', |
357 | 358 |
'CSV import: customers and vendors' => 'CSV-Import: Kunden und Lieferanten', |
... | ... | |
363 | 364 |
'Cancel' => 'Abbrechen', |
364 | 365 |
'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren', |
365 | 366 |
'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren', |
367 |
'Cannot check correct webdav folder' => 'Kann nicht den richtigen webdav Pfad überprüfen', |
|
366 | 368 |
'Cannot delete account!' => 'Konto kann nicht gelöscht werden!', |
367 | 369 |
'Cannot delete customer!' => 'Kunde kann nicht gelöscht werden!', |
368 | 370 |
'Cannot delete default account!' => 'Das Standard-Konto kann nicht gelöscht werden!', |
... | ... | |
474 | 476 |
'Contra' => 'gegen', |
475 | 477 |
'Conversion of "birthday" contact person attribute' => 'Umstellung des Kontaktpersonenfeldes "Geburtstag"', |
476 | 478 |
'Copies' => 'Kopien', |
479 |
'Copy file from #1 to #2 failed' => 'Datei von #1 nach #2 kopieren fehlgeschlagen', |
|
477 | 480 |
'Correct taxkey' => 'Richtiger Steuerschlüssel', |
478 | 481 |
'Costs' => 'Kosten', |
479 | 482 |
'Could not load class #1 (#2): "#3"' => 'Konnte Klasse #1 (#2) nicht laden: "#3"', |
... | ... | |
904 | 907 |
'Factor missing!' => 'Der Faktor fehlt.', |
905 | 908 |
'Falsches Datumsformat!' => 'Falsches Datumsformat!', |
906 | 909 |
'Fax' => 'Fax', |
910 |
'Features' => 'Features', |
|
907 | 911 |
'Feb' => 'Feb', |
908 | 912 |
'February' => 'Februar', |
909 | 913 |
'Fee' => 'Gebühr', |
... | ... | |
1246 | 1250 |
'Missing amount' => 'Fehlbetrag', |
1247 | 1251 |
'Missing parameter #1 in call to sub #2.' => 'Fehlender Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
1248 | 1252 |
'Missing parameter (at least one of #1) in call to sub #2.' => 'Fehlernder Parameter (mindestens einer aus \'#1\') in Funktionsaufruf \'#2\'.', |
1253 |
'Missing parameter for webdav file copy' => 'Fehlender Parameter für webdav Datei kopieren', |
|
1249 | 1254 |
'Missing taxkeys in invoices with taxes.' => 'Fehlende Steuerschlüssel in Rechnungen mit Steuern', |
1250 | 1255 |
'Mitarbeiter' => 'Mitarbeiter', |
1251 | 1256 |
'Mixed (requires column "type")' => 'Gemischt (erfordert Spalte "type")', |
... | ... | |
1468 | 1473 |
'Phone1' => 'Telefon 1 ', |
1469 | 1474 |
'Phone2' => 'Telefon 2', |
1470 | 1475 |
'Pick List' => 'Sammelliste', |
1476 |
'Pictures for parts' => 'Bilder für Waren', |
|
1477 |
'Pictures for search parts' => 'Bilder für Warensuche', |
|
1471 | 1478 |
'Please Check the bank information for each customer:' => 'Bitte überprüfen Sie die Bankinformationen der Kunden:', |
1472 | 1479 |
'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:', |
1473 | 1480 |
'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.', |
... | ... | |
1646 | 1653 |
'Report for' => 'Bericht für', |
1647 | 1654 |
'Reports' => 'Berichte', |
1648 | 1655 |
'Representative' => 'Vertreter', |
1656 |
'Representative for Customer' => 'Vertreter für Kunden', |
|
1649 | 1657 |
'Reqdate' => 'Liefertermin', |
1650 | 1658 |
'Request Quotations' => 'Preisanfragen', |
1651 | 1659 |
'Request for Quotation' => 'Anfrage', |
... | ... | |
1720 | 1728 |
'Save and close' => 'Speichern und schließen', |
1721 | 1729 |
'Save and execute' => 'Speichern und ausführen', |
1722 | 1730 |
'Save as new' => 'als neu speichern', |
1731 |
'Save document in webdav repository' => 'Dokument in webdav-Ablage speichern', |
|
1723 | 1732 |
'Save draft' => 'Entwurf speichern', |
1724 | 1733 |
'Save profile' => 'Profil speichern', |
1725 | 1734 |
'Save settings as' => 'Einstellungen speichern unter', |
... | ... | |
1820 | 1829 |
'Show overdue sales quotations and requests for quotations...' => 'Überfällige Angebote und Preisanfragen anzeigen...', |
1821 | 1830 |
'Show parts' => 'Artikel anzeigen', |
1822 | 1831 |
'Show settings' => 'Einstellungen anzeigen', |
1832 |
'Show the picture in the part form' => 'Bild in Warenmaske anzeigen', |
|
1833 |
'Show the pictures in the result for search parts' => 'Bilder in Suchergebnis für Stammdaten -> Berichte -> Waren anzeigen', |
|
1823 | 1834 |
'Show the weights of articles and the total weight in orders, invoices and delivery notes?' => 'Sollen Warengewichte und Gesamtgewicht in Aufträgen, Rechnungen und Lieferscheinen angezeigt werden?', |
1824 | 1835 |
'Show weights' => 'Gewichte anzeigen', |
1825 | 1836 |
'Show your TODO list after loggin in' => 'Aufgabenliste nach dem Anmelden anzeigen', |
... | ... | |
1870 | 1881 |
'Storno (one letter abbreviation)' => 'S', |
1871 | 1882 |
'Storno Invoice' => 'Stornorechnung', |
1872 | 1883 |
'Street' => 'Straße', |
1884 |
'Style the picture with the following CSS code' => 'Bildeigenschaft mit folgendem CSS-Style versehen', |
|
1873 | 1885 |
'Stylesheet' => 'Stilvorlage', |
1874 | 1886 |
'Subject' => 'Betreff', |
1875 | 1887 |
'Subject:' => 'Betreff:', |
... | ... | |
2288 | 2300 |
'Updating the client fields in the database "#1" on host "#2:#3" failed.' => 'Die Aktualisierung der Mandantenfelder in der Datenbank "#1" auf Host "#2:#3" schlug fehl.', |
2289 | 2301 |
'Uploaded on #1, size #2 kB' => 'Am #1 hochgeladen, Größe #2 kB', |
2290 | 2302 |
'Use As New' => 'Als neu verwenden', |
2303 |
'Use Webdav Repository' => 'Webdav-Ablage verwenden', |
|
2291 | 2304 |
'Use existing templates' => 'Vorhandene Druckvorlagen verwenden', |
2292 | 2305 |
'Use master default bin for Default Transfer, if no default bin for the part is configured' => 'Standardlagerplatz für Ein- / Auslagern über Standard-Lagerplatz, falls für die Ware kein expliziter Lagerplatz konfiguriert ist', |
2293 | 2306 |
'User' => 'Benutzer', |
... | ... | |
2328 | 2341 |
'Vendors' => 'Lieferanten', |
2329 | 2342 |
'Verrechnungseinheit' => 'Verrechnungseinheit', |
2330 | 2343 |
'Version' => 'Version', |
2344 |
'Vertreter' => 'Vertreter', |
|
2331 | 2345 |
'View SEPA export' => 'SEPA-Export-Details ansehen', |
2332 | 2346 |
'View background job execution result' => 'Verlauf der Hintergrund-Job-Ausführungen anzeigen', |
2333 | 2347 |
'View background job history' => 'Hintergrund-Job-Verlauf anzeigen', |
... | ... | |
2348 | 2362 |
'Warning' => 'Warnung', |
2349 | 2363 |
'WebDAV' => 'WebDAV', |
2350 | 2364 |
'WebDAV link' => 'WebDAV-Link', |
2365 |
'Webdav' => 'Webdav', |
|
2366 |
'Webdav save documents' => 'Belege in Webdav-Ablage speichern', |
|
2351 | 2367 |
'Webserver interface' => 'Webserverschnittstelle', |
2352 | 2368 |
'Weight' => 'Gewicht', |
2353 | 2369 |
'Weight unit' => 'Gewichtseinheit', |
sql/Pg-upgrade2/defaults_feature.pl | ||
---|---|---|
21 | 21 |
|
22 | 22 |
# check current configuration and set default variables accordingly, so that |
23 | 23 |
# kivitendo's behaviour isn't changed by this update |
24 |
# if checks are not set in config set it to true
|
|
24 |
# if checks are not set in config leave it to the default value
|
|
25 | 25 |
foreach my $check (qw(webdav vertreter parts_show_image parts_listing_image)) { |
26 | 26 |
my $check_set = $::lx_office_conf{features}->{$check} ? 1 : 0; |
27 |
$self->db_query("UPDATE defaults SET $check = ?", bind => [ $check_set ]); |
|
27 |
$self->db_query("UPDATE defaults SET $check = ?", bind => [ $check_set ]) if $check_set;
|
|
28 | 28 |
} |
29 | 29 |
|
30 | 30 |
my $update_column = "UPDATE defaults SET parts_image_css = ?"; |
templates/webpages/client_config/form.html | ||
---|---|---|
62 | 62 |
<li><a href="#datev_check_configuration">[% LxERP.t8('DATEV check configuration') %]</a></li> |
63 | 63 |
<li><a href="#orders_deleteable">[% LxERP.t8('Orders / Delivery Orders deleteable') %]</a></li> |
64 | 64 |
<li><a href="#warehouse">[% LxERP.t8('Warehouse') %]</a></li> |
65 |
<li><a href="#features">[% LxERP.t8('Features') %]</a></li> |
|
65 | 66 |
</ul> |
66 | 67 |
|
67 | 68 |
[% PROCESS 'client_config/_ranges_of_numbers.html' %] |
... | ... | |
70 | 71 |
[% PROCESS 'client_config/_datev_check_configuration.html' %] |
71 | 72 |
[% PROCESS 'client_config/_orders_deleteable.html' %] |
72 | 73 |
[% PROCESS 'client_config/_warehouse.html' %] |
74 |
[% PROCESS 'client_config/_features.html' %] |
|
73 | 75 |
[% PROCESS 'client_config/_miscellaneous.html' %] |
74 | 76 |
|
75 | 77 |
<div> |
Auch abrufbar als: Unified diff
Trac 2300 / 2301 zweiter Versuch
;-)