Revision 9a578c8b
Von Jan Büren vor fast 12 Jahren hinzugefügt
SL/Common.pm | ||
---|---|---|
use Carp;
|
||
use Time::HiRes qw(gettimeofday);
|
||
use Data::Dumper;
|
||
use File::Copy;
|
||
use File::stat;
|
||
use File::Slurp;
|
||
|
||
use SL::DBUtils;
|
||
|
||
... | ... | |
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
#
|
||
# Legt ein entsprechendes Webdav-Verzeichnis an, falls
|
||
# Webdav als Option konfiguriert ist. Falls schon ein
|
||
# Ordner vorhanden ist, werden alle Dateien alphabetisch
|
||
# sortiert ausgelesen und an der Oberfläche angezeigt
|
||
#
|
||
sub webdav_folder {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($form) = @_;
|
||
|
||
return $main::lxdebug->leave_sub()
|
||
unless ($::lx_office_conf{features}->{webdav} && $form->{id});
|
||
unless ($::instance_conf->get_webdav && $form->{id});
|
||
|
||
croak "No client set in \$::auth" unless $::auth->client;
|
||
|
||
my ($path, $number);
|
||
|
||
$form->{WEBDAV} = [];
|
||
|
||
if ($form->{type} eq "sales_quotation") {
|
||
($path, $number) = ("angebote", $form->{quonumber});
|
||
} elsif ($form->{type} eq "sales_order") {
|
||
($path, $number) = ("bestellungen", $form->{ordnumber});
|
||
} elsif ($form->{type} eq "request_quotation") {
|
||
($path, $number) = ("anfragen", $form->{quonumber});
|
||
} elsif ($form->{type} eq "purchase_order") {
|
||
($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
|
||
} elsif ($form->{type} eq "sales_delivery_order") {
|
||
($path, $number) = ("verkaufslieferscheine", $form->{donumber});
|
||
} elsif ($form->{type} eq "purchase_delivery_order") {
|
||
($path, $number) = ("einkaufslieferscheine", $form->{donumber});
|
||
} elsif ($form->{type} eq "credit_note") {
|
||
($path, $number) = ("gutschriften", $form->{invnumber});
|
||
} elsif ($form->{vc} eq "customer") {
|
||
($path, $number) = ("rechnungen", $form->{invnumber});
|
||
} else {
|
||
($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
|
||
}
|
||
|
||
my ($path, $number) = get_webdav_folder($form); # ausgelagert
|
||
return $main::lxdebug->leave_sub() unless ($path && $number);
|
||
|
||
$number =~ s|[/\\]|_|g;
|
||
|
||
$path = "webdav/" . $::auth->client->{id} . "/${path}/${number}";
|
||
|
||
if (!-d $path) {
|
||
mkdir_with_parents($path);
|
||
|
||
... | ... | |
my $base_path = $ENV{'SCRIPT_NAME'};
|
||
$base_path =~ s|[^/]+$||;
|
||
if (opendir my $dir, $path) {
|
||
# alphabetisch sortiert.
|
||
foreach my $file (sort { lc $a cmp lc $b } readdir $dir) {
|
||
next if (($file eq '.') || ($file eq '..'));
|
||
|
||
... | ... | |
}
|
||
}
|
||
|
||
#
|
||
# Diese Routine baut aus dem Masken-Typ und der
|
||
# Beleg-Nummer, das entsprechende Webdav-Verzeichnis zusammen
|
||
# Nimmt leider noch die ganze Form entgegen und den if-elsif-Block
|
||
# sollte man schöner "dispatchen"
|
||
# Ergänzung 6.5.2011, den else-Zweig defensiver gestaltet und mit
|
||
# -1 als n.i.O. Rückgabewert versehen
|
||
#
|
||
sub get_webdav_folder {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($form) = @_;
|
||
|
||
croak "No client set in \$::auth" unless $::auth->client;
|
||
|
||
my ($path, $number);
|
||
|
||
# dispatch table
|
||
if ($form->{type} eq "sales_quotation") {
|
||
($path, $number) = ("angebote", $form->{quonumber});
|
||
} elsif ($form->{type} eq "sales_order") {
|
||
($path, $number) = ("bestellungen", $form->{ordnumber});
|
||
} elsif ($form->{type} eq "request_quotation") {
|
||
($path, $number) = ("anfragen", $form->{quonumber});
|
||
} elsif ($form->{type} eq "purchase_order") {
|
||
($path, $number) = ("lieferantenbestellungen", $form->{ordnumber});
|
||
} elsif ($form->{type} eq "sales_delivery_order") {
|
||
($path, $number) = ("verkaufslieferscheine", $form->{donumber});
|
||
} elsif ($form->{type} eq "purchase_delivery_order") {
|
||
($path, $number) = ("einkaufslieferscheine", $form->{donumber});
|
||
} elsif ($form->{type} eq "credit_note") {
|
||
($path, $number) = ("gutschriften", $form->{invnumber});
|
||
} elsif ($form->{vc} eq "customer") {
|
||
($path, $number) = ("rechnungen", $form->{invnumber});
|
||
} elsif ($form->{vc} eq "vendor") {
|
||
($path, $number) = ("einkaufsrechnungen", $form->{invnumber});
|
||
} else {
|
||
# wir befinden uns nicht in einer belegmaske
|
||
# scheinbar wird diese routine auch bspw. bei waren
|
||
# aufgerufen - naja, steuerung über die $form halt ...
|
||
$main::lxdebug->leave_sub();
|
||
return undef;
|
||
}
|
||
|
||
$number =~ s|[/\\]|_|g;
|
||
|
||
$path = "webdav/" . $::auth->client->{id} . "/${path}/${number}";
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return ($path, $number);
|
||
}
|
||
|
||
#
|
||
# Falls Webdav aktiviert ist, auch den generierten Beleg in das
|
||
# Webdav-Verzeichnis kopieren
|
||
#
|
||
#
|
||
sub copy_file_to_webdav_folder {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($form) = @_;
|
||
my ($last_mod_time, $latest_file_name, $complete_path);
|
||
|
||
# checks
|
||
foreach my $item (qw(tmpdir tmpfile type)){
|
||
if (!$form->{$item}){
|
||
$main::lxdebug->message(0, 'Missing parameter');
|
||
$main::form->error($main::locale->text("Missing parameter for webdav file copy"));
|
||
}
|
||
}
|
||
|
||
# Den Webdav-Ordner ÜBER exakt denselben Mechanismus wie beim
|
||
# Anlegen des Ordners bestimmen
|
||
my ($webdav_folder, $document_name) = get_webdav_folder($form);
|
||
|
||
if (! $webdav_folder){
|
||
$main::lxdebug->leave_sub();
|
||
$main::form->error($main::locale->text("Cannot check correct webdav folder"));
|
||
return undef; # s.o. erstmal so ...
|
||
}
|
||
# kompletter pfad
|
||
$complete_path = join('/', $form->{cwd}, $webdav_folder);
|
||
opendir my $dh, $complete_path or die "Could not open $complete_path: $!";
|
||
|
||
my ($newest_name, $newest_time);
|
||
while ( defined( my $file = readdir( $dh ) ) ) {
|
||
my $path = File::Spec->catfile( $complete_path, $file );
|
||
next if -d $path; # skip directories, or anything else you like
|
||
( $newest_name, $newest_time ) = ( $file, -M _ )
|
||
if( ! defined $newest_time or -M $path < $newest_time );
|
||
}
|
||
$latest_file_name = $complete_path .'/' . $newest_name;
|
||
my $filesize = stat($latest_file_name)->size;
|
||
|
||
# prüfung auf identisch oder nicht
|
||
my ($ext) = $form->{tmpfile} =~ /(\.[^.]+)$/;
|
||
my $current_file = join('/', $form->{tmpdir}, $form->{tmpfile});
|
||
my $current_filesize = stat($current_file)->size;
|
||
if ($current_filesize == $filesize) { # bei gleicher größe copy deaktivieren
|
||
$main::lxdebug->leave_sub();
|
||
return;
|
||
}
|
||
# zeitstempel und dateinamen holen
|
||
my $timestamp = get_current_formatted_time();
|
||
my $myfilename = $form->generate_attachment_filename();
|
||
# entsprechend vor der endung hinzufügen
|
||
$myfilename =~ s/\./$timestamp\./;
|
||
|
||
if (!copy(join('/', $form->{tmpdir}, $form->{tmpfile}), join('/', $form->{cwd}, $webdav_folder, $myfilename))) {
|
||
my $j = join('/', $form->{tmpdir}, $form->{tmpfile});
|
||
my $k = join('/', $form->{cwd}, $webdav_folder);
|
||
$main::lxdebug->message(0, "Copy file from $j to $k failed");
|
||
$main::form->error($main::locale->text("Copy file from #1 to #2 failed", $j, $k));
|
||
}
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
sub get_current_formatted_time {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
|
||
my $formatted_current_time = sprintf ( "_%04d%02d%02d_%02d%02d%02d",
|
||
$year+1900,$mon+1,$mday,$hour,$min,$sec);
|
||
|
||
$main::lxdebug->leave_sub();
|
||
return $formatted_current_time;
|
||
}
|
||
|
||
1;
|
||
__END__
|
||
|
SL/DB/AuthClient.pm | ||
---|---|---|
sub _after_save_ensure_webdav_symlink_correctness {
|
||
my ($self) = @_;
|
||
|
||
$self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::lx_office_conf{features}->{webdav};
|
||
$self->ensure_webdav_symlink_correctness($self->{__before_save_remember_old_name}) if $self->id && $::instance_conf->get_webdav;
|
||
return 1;
|
||
}
|
||
|
||
sub _after_delete_delete_webdav_symlink {
|
||
my ($self) = @_;
|
||
|
||
return 1 if !$::lx_office_conf{features}->{webdav};
|
||
return 1 if !$::instance_conf->get_webdav;
|
||
my $name = $self->webdav_symlink_basename;
|
||
unlink "webdav/links/${name}";
|
||
return 1;
|
||
... | ... | |
sub ensure_webdav_symlink_correctness {
|
||
my ($self, $old_name) = @_;
|
||
|
||
return unless $::lx_office_conf{features}->{webdav};
|
||
return unless $::instance_conf->get_webdav;
|
||
|
||
croak "Need object ID" unless $self->id;
|
||
|
SL/DB/MetaSetup/Default.pm | ||
---|---|---|
mtime => { type => 'timestamp' },
|
||
rmanumber => { type => 'text' },
|
||
cnnumber => { type => 'text' },
|
||
accounting_method => { type => 'text' },
|
||
inventory_system => { type => 'text' },
|
||
profit_determination => { type => 'text' },
|
||
dunning_ar_amount_fee => { type => 'integer' },
|
||
dunning_ar_amount_interest => { type => 'integer' },
|
||
dunning_ar => { type => 'integer' },
|
||
pdonumber => { type => 'text' },
|
||
sdonumber => { type => 'text' },
|
||
id => { type => 'serial', not_null => 1 },
|
||
ar_paid_accno_id => { type => 'integer' },
|
||
id => { type => 'serial', not_null => 1 },
|
||
language_id => { type => 'integer' },
|
||
accounting_method => { type => 'text' },
|
||
inventory_system => { type => 'text' },
|
||
profit_determination => { type => 'text' },
|
||
datev_check_on_sales_invoice => { type => 'boolean', default => 'true' },
|
||
datev_check_on_purchase_invoice => { type => 'boolean', default => 'true' },
|
||
datev_check_on_ar_transaction => { type => 'boolean', default => 'true' },
|
||
... | ... | |
ir_show_mark_as_paid => { type => 'boolean', default => 'true' },
|
||
ar_show_mark_as_paid => { type => 'boolean', default => 'true' },
|
||
ap_show_mark_as_paid => { type => 'boolean', default => 'true' },
|
||
assemblynumber => { type => 'text' },
|
||
currency_id => { type => 'integer', not_null => 1 },
|
||
warehouse_id => { type => 'integer' },
|
||
bin_id => { type => 'integer' },
|
||
max_future_booking_interval => { type => 'integer', default => 360 },
|
||
assemblynumber => { type => 'text' },
|
||
show_weight => { type => 'boolean', default => 'false', not_null => 1 },
|
||
transfer_default => { type => 'boolean', default => 'true' },
|
||
transfer_default_use_master_default_bin => { type => 'boolean', default => 'false' },
|
||
transfer_default_ignore_onhand => { type => 'boolean', default => 'false' },
|
||
warehouse_id_ignore_onhand => { type => 'integer' },
|
||
bin_id_ignore_onhand => { type => 'integer' },
|
||
currency_id => { type => 'integer', not_null => 1 },
|
||
company => { type => 'text' },
|
||
address => { type => 'text' },
|
||
taxnumber => { type => 'text' },
|
||
... | ... | |
duns => { type => 'text' },
|
||
sepa_creditor_id => { type => 'text' },
|
||
templates => { type => 'text' },
|
||
max_future_booking_interval => { type => 'integer', default => 360 },
|
||
webdav => { type => 'boolean', default => 'false' },
|
||
webdav_documents => { type => 'boolean', default => 'false' },
|
||
vertreter => { type => 'boolean', default => 'false' },
|
||
parts_show_image => { type => 'boolean', default => 'true' },
|
||
parts_listing_image => { type => 'boolean', default => 'true' },
|
||
parts_image_css => { type => 'text', default => 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;' },
|
||
);
|
||
|
||
__PACKAGE__->meta->primary_key_columns([ 'id' ]);
|
SL/Form.pm | ||
---|---|---|
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig;
|
||
}
|
||
|
||
$additional_params->{"conf_webdav"} = $::lx_office_conf{features}->{webdav};
|
||
$additional_params->{"conf_webdav"} = $::instance_conf->get_webdav;
|
||
$additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex};
|
||
$additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument};
|
||
$additional_params->{"conf_vertreter"} = $::lx_office_conf{features}->{vertreter};
|
||
$additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css};
|
||
$additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images};
|
||
$additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image};
|
||
$additional_params->{"conf_vertreter"} = $::instance_conf->get_vertreter;
|
||
$additional_params->{"conf_parts_image_css"} = $::instance_conf->get_parts_image_css;
|
||
$additional_params->{"conf_parts_listing_images"} = $::instance_conf->get_parts_listing_images;
|
||
$additional_params->{"conf_parts_show_image"} = $::instance_conf->get_parts_show_image;
|
||
$additional_params->{"INSTANCE_CONF"} = $::instance_conf;
|
||
|
||
if (my $debug_options = $::lx_office_conf{debug}{options}) {
|
||
... | ... | |
$self->cleanup();
|
||
$self->error("$self->{IN} : " . $template->get_error());
|
||
}
|
||
|
||
Common::copy_file_to_webdav_folder($self) if ($::instance_conf->get_webdav
|
||
and $::instance_conf->get_webdav_documents and not $self->{preview});
|
||
close OUT if $self->{OUT};
|
||
|
||
if ($self->{media} eq 'file') {
|
SL/InstanceConfiguration.pm | ||
---|---|---|
return ($self->{data}->{max_future_booking_interval});
|
||
}
|
||
|
||
sub get_webdav {
|
||
my ($self) = @_;
|
||
return ($self->{data}->{webdav});
|
||
}
|
||
|
||
sub get_webdav_documents {
|
||
my ($self) = @_;
|
||
return ($self->{data}->{webdav_documents});
|
||
}
|
||
|
||
sub get_vertreter {
|
||
my ($self) = @_;
|
||
return ($self->{data}->{vertreter});
|
||
}
|
||
|
||
sub get_parts_show_image {
|
||
my ($self) = @_;
|
||
return ($self->{data}->{parts_show_image});
|
||
}
|
||
|
||
sub get_parts_listing_images{
|
||
my ($self) = @_;
|
||
return ($self->{data}->{parts_listing_image});
|
||
}
|
||
|
||
sub get_parts_image_css {
|
||
my ($self) = @_;
|
||
return ($self->{data}->{parts_image_css});
|
||
}
|
||
|
||
|
||
1;
|
||
... | ... | |
|
||
Returns the maximum interval value for future bookings
|
||
|
||
=item C<get_webdav>
|
||
|
||
Returns the configuration for webdav
|
||
|
||
=item C<get_webdav_documents>
|
||
|
||
Returns the configuration for storing documents in the corresponding webdav folder
|
||
|
||
=item C<get_vertreter>
|
||
|
||
Returns the configuration for "vertreter"
|
||
|
||
=item C<get_parts_show_image>
|
||
|
||
Returns the configuarion for show image in parts
|
||
|
||
=item C<get_parts_image_css>
|
||
|
||
Returns the css format string for images shown in parts
|
||
|
||
=item C<get_parts_listing_image>
|
||
|
||
Returns the configuartion for showing the picture in the results when you search for parts
|
||
|
||
=back
|
||
|
||
=head1 BUGS
|
bin/mozilla/ct.pl | ||
---|---|---|
my @columns = (
|
||
'id', 'name', "$form->{db}number", 'contact', 'phone',
|
||
'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city',
|
||
'business', 'invnumber', 'ordnumber', 'quonumber', 'salesman', 'country'
|
||
'business', 'invnumber', 'ordnumber', 'quonumber', 'salesman', 'country'
|
||
);
|
||
|
||
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
|
||
... | ... | |
currencies => "ALL_CURRENCIES");
|
||
$form->get_pricegroup(\%myconfig, { all => 1 });
|
||
|
||
$form->get_lists(customers => { key => "ALL_SALESMAN_CUSTOMERS", business_is_salesman => 1 }) if $::lx_office_conf{features}->{vertreter};
|
||
$form->get_lists(customers => { key => "ALL_SALESMAN_CUSTOMERS", business_is_salesman => 1 }) if $::instance_conf->get_vertreter;
|
||
$form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{FU_created_for_user}, deleted => 0 ] ]);
|
||
$form->{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{salesman_id}, deleted => 0 ] ]);
|
||
$form->{USER} = SL::DB::Manager::Employee->current;
|
||
... | ... | |
|
||
$::form->isblank("name", $::locale->text("Name missing!"));
|
||
|
||
if ($::form->{new_salesman_id} && $::lx_office_conf{features}->{vertreter}) {
|
||
if ($::form->{new_salesman_id} && $::instance_conf->get_vertreter) {
|
||
$::form->{salesman_id} = $::form->{new_salesman_id};
|
||
delete $::form->{new_salesman_id};
|
||
}
|
bin/mozilla/do.pl | ||
---|---|---|
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
|
||
|
||
# retrieve order/quotation
|
||
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
||
$form->{webdav} = $::instance_conf->get_webdav;
|
||
$form->{jsscript} = 1;
|
||
|
||
my $editing = $form->{id};
|
bin/mozilla/ir.pl | ||
---|---|---|
$form->{vc} = 'vendor';
|
||
|
||
# create links
|
||
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
||
$form->{webdav} = $::instance_conf->get_webdav;
|
||
$form->{jsscript} = 1;
|
||
|
||
$form->create_links("AP", \%myconfig, "vendor");
|
bin/mozilla/is.pl | ||
---|---|---|
$form->{vc} = 'customer';
|
||
|
||
# create links
|
||
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
||
$form->{webdav} = $::instance_conf->get_webdav;
|
||
|
||
$form->create_links("AR", \%myconfig, "customer");
|
||
|
bin/mozilla/oe.pl | ||
---|---|---|
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
|
||
|
||
# retrieve order/quotation
|
||
$form->{webdav} = $::lx_office_conf{features}->{webdav};
|
||
$form->{webdav} = $::instance_conf->get_webdav;
|
||
$form->{jsscript} = 1;
|
||
|
||
my $editing = $form->{id};
|
||
... | ... | |
|
||
print $form->parse_html_template("oe/form_footer", {
|
||
%TMPL_VAR,
|
||
webdav => $::lx_office_conf{features}->{webdav},
|
||
webdav => $::instance_conf->get_webdav,
|
||
print_options => print_options(inline => 1),
|
||
label_edit => $locale->text("Edit the $form->{type}"),
|
||
label_workflow => $locale->text("Workflow $form->{type}"),
|
config/kivitendo.conf.default | ||
---|---|---|
# and "en" (English, not perfect) are available.
|
||
language = de
|
||
|
||
[features]
|
||
# Activate certain optional features and modules.
|
||
webdav = 0
|
||
vertreter = 0
|
||
|
||
## Pictures for parts
|
||
# Show the picture in the part form
|
||
parts_show_image = 1
|
||
# Style the picture with the following CSS code:
|
||
parts_image_css = border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;
|
||
# Show the picture in the results when you search for parts
|
||
parts_listing_images = 0
|
||
|
||
[paths]
|
||
# path to temporary files (must be writeable by the web server)
|
||
userspath = users
|
doc/changelog | ||
---|---|---|
- #1897 implementiert. Zukunfts-Buchungen verhindern, durch einen konfigurierbaren
|
||
maximalen Zeitraum in dem in die Zukunft gebucht werden darf (default 360 Tage)
|
||
|
||
- #2300 Alle Feature-Konfigurationen sind jetzt in der Mandantenkonfiguration eingestellt
|
||
- #2301 Dokumentenbelege optional in webdav-Ordner speichern
|
||
|
||
Wichtige Änderungen:
|
||
|
locale/de/all | ||
---|---|---|
'CRM status' => 'Admin Status',
|
||
'CRM termin' => 'Termine',
|
||
'CRM user' => 'Admin Benutzer',
|
||
'CSS style for pictures' => 'CSS Style für Bilder',
|
||
'CSV export -- options' => 'CSV-Export -- Optionen',
|
||
'CSV import: contacts' => 'CSV-Import: Ansprechpersonen',
|
||
'CSV import: customers and vendors' => 'CSV-Import: Kunden und Lieferanten',
|
||
... | ... | |
'Cancel' => 'Abbrechen',
|
||
'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren',
|
||
'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren',
|
||
'Cannot check correct webdav folder' => 'Kann nicht den richtigen webdav Pfad überprüfen',
|
||
'Cannot delete account!' => 'Konto kann nicht gelöscht werden!',
|
||
'Cannot delete customer!' => 'Kunde kann nicht gelöscht werden!',
|
||
'Cannot delete default account!' => 'Das Standard-Konto kann nicht gelöscht werden!',
|
||
... | ... | |
'Contra' => 'gegen',
|
||
'Conversion of "birthday" contact person attribute' => 'Umstellung des Kontaktpersonenfeldes "Geburtstag"',
|
||
'Copies' => 'Kopien',
|
||
'Copy file from #1 to #2 failed' => 'Datei von #1 nach #2 kopieren fehlgeschlagen',
|
||
'Correct taxkey' => 'Richtiger Steuerschlüssel',
|
||
'Costs' => 'Kosten',
|
||
'Could not load class #1 (#2): "#3"' => 'Konnte Klasse #1 (#2) nicht laden: "#3"',
|
||
... | ... | |
'Factor missing!' => 'Der Faktor fehlt.',
|
||
'Falsches Datumsformat!' => 'Falsches Datumsformat!',
|
||
'Fax' => 'Fax',
|
||
'Features' => 'Features',
|
||
'Feb' => 'Feb',
|
||
'February' => 'Februar',
|
||
'Fee' => 'Gebühr',
|
||
... | ... | |
'Missing amount' => 'Fehlbetrag',
|
||
'Missing parameter #1 in call to sub #2.' => 'Fehlender Parameter \'#1\' in Funktionsaufruf \'#2\'.',
|
||
'Missing parameter (at least one of #1) in call to sub #2.' => 'Fehlernder Parameter (mindestens einer aus \'#1\') in Funktionsaufruf \'#2\'.',
|
||
'Missing parameter for webdav file copy' => 'Fehlender Parameter für webdav Datei kopieren',
|
||
'Missing taxkeys in invoices with taxes.' => 'Fehlende Steuerschlüssel in Rechnungen mit Steuern',
|
||
'Mitarbeiter' => 'Mitarbeiter',
|
||
'Mixed (requires column "type")' => 'Gemischt (erfordert Spalte "type")',
|
||
... | ... | |
'Phone1' => 'Telefon 1 ',
|
||
'Phone2' => 'Telefon 2',
|
||
'Pick List' => 'Sammelliste',
|
||
'Pictures for parts' => 'Bilder für Waren',
|
||
'Pictures for search parts' => 'Bilder für Warensuche',
|
||
'Please Check the bank information for each customer:' => 'Bitte überprüfen Sie die Bankinformationen der Kunden:',
|
||
'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:',
|
||
'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.',
|
||
... | ... | |
'Report for' => 'Bericht für',
|
||
'Reports' => 'Berichte',
|
||
'Representative' => 'Vertreter',
|
||
'Representative for Customer' => 'Vertreter für Kunden',
|
||
'Reqdate' => 'Liefertermin',
|
||
'Request Quotations' => 'Preisanfragen',
|
||
'Request for Quotation' => 'Anfrage',
|
||
... | ... | |
'Save and close' => 'Speichern und schließen',
|
||
'Save and execute' => 'Speichern und ausführen',
|
||
'Save as new' => 'als neu speichern',
|
||
'Save document in webdav repository' => 'Dokument in webdav-Ablage speichern',
|
||
'Save draft' => 'Entwurf speichern',
|
||
'Save profile' => 'Profil speichern',
|
||
'Save settings as' => 'Einstellungen speichern unter',
|
||
... | ... | |
'Show overdue sales quotations and requests for quotations...' => 'Überfällige Angebote und Preisanfragen anzeigen...',
|
||
'Show parts' => 'Artikel anzeigen',
|
||
'Show settings' => 'Einstellungen anzeigen',
|
||
'Show the picture in the part form' => 'Bild in Warenmaske anzeigen',
|
||
'Show the pictures in the result for search parts' => 'Bilder in Suchergebnis für Stammdaten -> Berichte -> Waren anzeigen',
|
||
'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?',
|
||
'Show weights' => 'Gewichte anzeigen',
|
||
'Show your TODO list after loggin in' => 'Aufgabenliste nach dem Anmelden anzeigen',
|
||
... | ... | |
'Storno (one letter abbreviation)' => 'S',
|
||
'Storno Invoice' => 'Stornorechnung',
|
||
'Street' => 'Straße',
|
||
'Style the picture with the following CSS code' => 'Bildeigenschaft mit folgendem CSS-Style versehen',
|
||
'Stylesheet' => 'Stilvorlage',
|
||
'Subject' => 'Betreff',
|
||
'Subject:' => 'Betreff:',
|
||
... | ... | |
'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.',
|
||
'Uploaded on #1, size #2 kB' => 'Am #1 hochgeladen, Größe #2 kB',
|
||
'Use As New' => 'Als neu verwenden',
|
||
'Use Webdav Repository' => 'Webdav-Ablage verwenden',
|
||
'Use existing templates' => 'Vorhandene Druckvorlagen verwenden',
|
||
'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',
|
||
'User' => 'Benutzer',
|
||
... | ... | |
'Vendors' => 'Lieferanten',
|
||
'Verrechnungseinheit' => 'Verrechnungseinheit',
|
||
'Version' => 'Version',
|
||
'Vertreter' => 'Vertreter',
|
||
'View SEPA export' => 'SEPA-Export-Details ansehen',
|
||
'View background job execution result' => 'Verlauf der Hintergrund-Job-Ausführungen anzeigen',
|
||
'View background job history' => 'Hintergrund-Job-Verlauf anzeigen',
|
||
... | ... | |
'Warning' => 'Warnung',
|
||
'WebDAV' => 'WebDAV',
|
||
'WebDAV link' => 'WebDAV-Link',
|
||
'Webdav' => 'Webdav',
|
||
'Webdav save documents' => 'Belege in Webdav-Ablage speichern',
|
||
'Webserver interface' => 'Webserverschnittstelle',
|
||
'Weight' => 'Gewicht',
|
||
'Weight unit' => 'Gewichtseinheit',
|
sql/Pg-upgrade2/defaults_feature.pl | ||
---|---|---|
|
||
# check current configuration and set default variables accordingly, so that
|
||
# kivitendo's behaviour isn't changed by this update
|
||
# if checks are not set in config set it to true
|
||
# if checks are not set in config leave it to the default value
|
||
foreach my $check (qw(webdav vertreter parts_show_image parts_listing_image)) {
|
||
my $check_set = $::lx_office_conf{features}->{$check} ? 1 : 0;
|
||
$self->db_query("UPDATE defaults SET $check = ?", bind => [ $check_set ]);
|
||
$self->db_query("UPDATE defaults SET $check = ?", bind => [ $check_set ]) if $check_set;
|
||
}
|
||
|
||
my $update_column = "UPDATE defaults SET parts_image_css = ?";
|
templates/webpages/client_config/form.html | ||
---|---|---|
<li><a href="#datev_check_configuration">[% LxERP.t8('DATEV check configuration') %]</a></li>
|
||
<li><a href="#orders_deleteable">[% LxERP.t8('Orders / Delivery Orders deleteable') %]</a></li>
|
||
<li><a href="#warehouse">[% LxERP.t8('Warehouse') %]</a></li>
|
||
<li><a href="#features">[% LxERP.t8('Features') %]</a></li>
|
||
</ul>
|
||
|
||
[% PROCESS 'client_config/_ranges_of_numbers.html' %]
|
||
... | ... | |
[% PROCESS 'client_config/_datev_check_configuration.html' %]
|
||
[% PROCESS 'client_config/_orders_deleteable.html' %]
|
||
[% PROCESS 'client_config/_warehouse.html' %]
|
||
[% PROCESS 'client_config/_features.html' %]
|
||
[% PROCESS 'client_config/_miscellaneous.html' %]
|
||
|
||
<div>
|
Auch abrufbar als: Unified diff
Trac 2300 / 2301 zweiter Versuch
;-)