Revision 8688e71e
Von Moritz Bunkus vor fast 17 Jahren hinzugefügt
SL/CT.pm | ||
---|---|---|
36 | 36 |
#====================================================================== |
37 | 37 |
|
38 | 38 |
package CT; |
39 |
|
|
39 | 40 |
use Data::Dumper; |
41 |
|
|
42 |
use SL::CVar; |
|
40 | 43 |
use SL::DBUtils; |
41 | 44 |
|
42 | 45 |
sub get_tuple { |
... | ... | |
381 | 384 |
# add shipto |
382 | 385 |
$form->add_shipto( $dbh, $form->{id}, "CT" ); |
383 | 386 |
|
387 |
CVar->save_custom_variables('dbh' => $dbh, |
|
388 |
'module' => 'CT', |
|
389 |
'trans_id' => $form->{id}, |
|
390 |
'variables' => $form); |
|
391 |
|
|
384 | 392 |
$rc = $dbh->commit(); |
385 | 393 |
$dbh->disconnect(); |
386 | 394 |
|
... | ... | |
578 | 586 |
# add shipto |
579 | 587 |
$form->add_shipto( $dbh, $form->{id}, "CT" ); |
580 | 588 |
|
589 |
CVar->save_custom_variables('dbh' => $dbh, |
|
590 |
'module' => 'CT', |
|
591 |
'trans_id' => $form->{id}, |
|
592 |
'variables' => $form); |
|
593 |
|
|
581 | 594 |
$rc = $dbh->commit(); |
582 | 595 |
$dbh->disconnect(); |
583 | 596 |
|
... | ... | |
666 | 679 |
push(@values, conv_i($form->{business_id})); |
667 | 680 |
} |
668 | 681 |
|
682 |
my ($cvar_where, @cvar_values) = CVar->build_filter_query('module' => 'CT', |
|
683 |
'trans_id_field' => 'ct.id', |
|
684 |
'filter' => $form); |
|
685 |
|
|
686 |
if ($cvar_where) { |
|
687 |
$where .= qq| AND ($cvar_where)|; |
|
688 |
push @values, @cvar_values; |
|
689 |
} |
|
690 |
|
|
669 | 691 |
my $query = |
670 | 692 |
qq|SELECT ct.*, b.description AS business | . |
671 | 693 |
qq|FROM $cv ct | . |
SL/CVar.pm | ||
---|---|---|
1 |
package CVar; |
|
2 |
|
|
3 |
use List::Util qw(first); |
|
4 |
|
|
5 |
use SL::DBUtils; |
|
6 |
|
|
7 |
sub get_configs { |
|
8 |
$main::lxdebug->enter_sub(); |
|
9 |
|
|
10 |
my $self = shift; |
|
11 |
my %params = @_; |
|
12 |
|
|
13 |
my $myconfig = \%main::myconfig; |
|
14 |
my $form = $main::form; |
|
15 |
|
|
16 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
17 |
|
|
18 |
my ($where, @values); |
|
19 |
if ($params{module}) { |
|
20 |
$where = 'WHERE module = ?'; |
|
21 |
push @values, $params{module}; |
|
22 |
} |
|
23 |
|
|
24 |
my $query = qq|SELECT * FROM custom_variable_configs $where ORDER BY sortkey|; |
|
25 |
|
|
26 |
my $configs = selectall_hashref_query($form, $dbh, $query, @values); |
|
27 |
|
|
28 |
foreach my $config (@{ $configs }) { |
|
29 |
if ($config->{type} eq 'select') { |
|
30 |
$config->{OPTIONS} = [ map { { 'value' => $_ } } split(m/\#\#/, $config->{options}) ]; |
|
31 |
|
|
32 |
} elsif ($config->{type} eq 'number') { |
|
33 |
$config->{precision} = $1 if ($config->{options} =~ m/precision=(\d+)/i); |
|
34 |
|
|
35 |
} |
|
36 |
} |
|
37 |
|
|
38 |
$main::lxdebug->leave_sub(); |
|
39 |
|
|
40 |
return $configs; |
|
41 |
} |
|
42 |
|
|
43 |
sub get_config { |
|
44 |
$main::lxdebug->enter_sub(); |
|
45 |
|
|
46 |
my $self = shift; |
|
47 |
my %params = @_; |
|
48 |
|
|
49 |
Common::check_params(\%params, qw(id)); |
|
50 |
|
|
51 |
my $myconfig = \%main::myconfig; |
|
52 |
my $form = $main::form; |
|
53 |
|
|
54 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
55 |
|
|
56 |
my $query = qq|SELECT * FROM custom_variable_configs WHERE id = ?|; |
|
57 |
|
|
58 |
my $config = selectfirst_hashref_query($form, $dbh, $query, conv_i($params{id})) || { }; |
|
59 |
|
|
60 |
$main::lxdebug->leave_sub(); |
|
61 |
|
|
62 |
return $config; |
|
63 |
} |
|
64 |
|
|
65 |
sub save_config { |
|
66 |
$main::lxdebug->enter_sub(); |
|
67 |
|
|
68 |
my $self = shift; |
|
69 |
my %params = @_; |
|
70 |
|
|
71 |
Common::check_params(\%params, qw(module config)); |
|
72 |
|
|
73 |
my $myconfig = \%main::myconfig; |
|
74 |
my $form = $main::form; |
|
75 |
|
|
76 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
77 |
|
|
78 |
my $q_id = qq|SELECT nextval('custom_variable_configs_id')|; |
|
79 |
my $h_id = prepare_query($form, $dbh, $q_id); |
|
80 |
|
|
81 |
my $q_new = |
|
82 |
qq|INSERT INTO custom_variable_configs (name, description, type, default_value, options, searchable, includeable, included_by_default, module, id, sortkey) |
|
83 |
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, |
|
84 |
(SELECT COALESCE(MAX(sortkey) + 1, 1) FROM custom_variable_configs))|; |
|
85 |
my $h_new = prepare_query($form, $dbh, $q_new); |
|
86 |
|
|
87 |
my $q_update = |
|
88 |
qq|UPDATE custom_variable_configs SET |
|
89 |
name = ?, description = ?, |
|
90 |
type = ?, default_value = ?, |
|
91 |
options = ?, searchable = ?, |
|
92 |
includeable = ?, included_by_default = ?, |
|
93 |
module = ? |
|
94 |
WHERE id = ?|; |
|
95 |
my $h_update = prepare_query($form, $dbh, $q_update); |
|
96 |
|
|
97 |
my @configs; |
|
98 |
if ('ARRAY' eq ref $params{config}) { |
|
99 |
@configs = @{ $params{config} }; |
|
100 |
} else { |
|
101 |
@configs = ($params{config}); |
|
102 |
} |
|
103 |
|
|
104 |
foreach my $config (@configs) { |
|
105 |
my ($h_actual, $q_actual); |
|
106 |
|
|
107 |
if (!$config->{id}) { |
|
108 |
do_statement($form, $h_id, $q_id); |
|
109 |
($config->{id}) = $h_id->fetchrow_array(); |
|
110 |
|
|
111 |
$h_actual = $h_new; |
|
112 |
$q_actual = $q_new; |
|
113 |
|
|
114 |
} else { |
|
115 |
$h_actual = $h_update; |
|
116 |
$q_actual = $q_update; |
|
117 |
} |
|
118 |
|
|
119 |
do_statement($form, $h_actual, $q_actual, @{$config}{qw(name description type default_value options)}, |
|
120 |
$config->{searchable} ? 't' : 'f', $config->{includeable} ? 't' : 'f', $config->{included_by_default} ? 't' : 'f', |
|
121 |
$params{module}, conv_i($config->{id})); |
|
122 |
} |
|
123 |
|
|
124 |
$h_id->finish(); |
|
125 |
$h_new->finish(); |
|
126 |
$h_update->finish(); |
|
127 |
|
|
128 |
$dbh->commit(); |
|
129 |
|
|
130 |
$main::lxdebug->leave_sub(); |
|
131 |
} |
|
132 |
|
|
133 |
sub delete_config { |
|
134 |
$main::lxdebug->enter_sub(); |
|
135 |
|
|
136 |
my $self = shift; |
|
137 |
my %params = @_; |
|
138 |
|
|
139 |
Common::check_params(\%params, qw(id)); |
|
140 |
|
|
141 |
my $myconfig = \%main::myconfig; |
|
142 |
my $form = $main::form; |
|
143 |
|
|
144 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
145 |
|
|
146 |
do_query($form, $dbh, qq|DELETE FROM custom_variables WHERE config_id = ?|, conv_i($params{id})); |
|
147 |
do_query($form, $dbh, qq|DELETE FROM custom_variable_configs WHERE id = ?|, conv_i($params{id})); |
|
148 |
|
|
149 |
$dbh->commit(); |
|
150 |
|
|
151 |
$main::lxdebug->leave_sub(); |
|
152 |
} |
|
153 |
|
|
154 |
sub get_custom_variables { |
|
155 |
$main::lxdebug->enter_sub(); |
|
156 |
|
|
157 |
my $self = shift; |
|
158 |
my %params = @_; |
|
159 |
|
|
160 |
Common::check_params(\%params, qw(module)); |
|
161 |
|
|
162 |
my $myconfig = \%main::myconfig; |
|
163 |
my $form = $main::form; |
|
164 |
|
|
165 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
166 |
|
|
167 |
my $trans_id = $params{trans_id} ? 'OR (v.trans_id = ?) ' : ''; |
|
168 |
|
|
169 |
my $q_cfg = |
|
170 |
qq|SELECT id, name, description, type, default_value, options, |
|
171 |
date_trunc('seconds', localtimestamp) AS current_timestamp, current_date AS current_date |
|
172 |
FROM custom_variable_configs |
|
173 |
WHERE module = ? |
|
174 |
ORDER BY sortkey|; |
|
175 |
|
|
176 |
my $q_var = |
|
177 |
qq|SELECT text_value, timestamp_value, timestamp_value::date AS date_value, number_value, bool_value |
|
178 |
FROM custom_variables |
|
179 |
WHERE (config_id = ?) AND (trans_id = ?)|; |
|
180 |
my $h_var = prepare_query($form, $dbh, $q_var); |
|
181 |
|
|
182 |
my $custom_variables = selectall_hashref_query($form, $dbh, $q_cfg, $params{module}); |
|
183 |
|
|
184 |
foreach my $cvar (@{ $custom_variables }) { |
|
185 |
if ($cvar->{type} eq 'textfield') { |
|
186 |
$cvar->{width} = 30; |
|
187 |
$cvar->{height} = 5; |
|
188 |
|
|
189 |
$cvar->{width} = $1 if ($cvar->{options} =~ m/width=(\d+)/i); |
|
190 |
$cvar->{height} = $1 if ($cvar->{options} =~ m/height=(\d+)/i); |
|
191 |
|
|
192 |
} elsif ($cvar->{type} eq 'text') { |
|
193 |
$cvar->{maxlength} = $1 if ($cvar->{options} =~ m/maxlength=(\d+)/i); |
|
194 |
|
|
195 |
} elsif ($cvar->{type} eq 'number') { |
|
196 |
$cvar->{precision} = $1 if ($cvar->{options} =~ m/precision=(\d+)/i); |
|
197 |
|
|
198 |
} elsif ($cvar->{type} eq 'select') { |
|
199 |
$cvar->{OPTIONS} = [ map { { 'value' => $_ } } split(m/\#\#/, $cvar->{options}) ]; |
|
200 |
} |
|
201 |
|
|
202 |
my $act_var; |
|
203 |
if ($params{trans_id}) { |
|
204 |
do_statement($form, $h_var, $q_var, conv_i($cvar->{id}), conv_i($params{trans_id})); |
|
205 |
$act_var = $h_var->fetchrow_hashref(); |
|
206 |
} |
|
207 |
|
|
208 |
if ($act_var) { |
|
209 |
$cvar->{value} = $cvar->{type} eq 'date' ? $act_var->{date_value} |
|
210 |
: $cvar->{type} eq 'timestamp' ? $act_var->{timestamp_value} |
|
211 |
: $cvar->{type} eq 'number' ? $act_var->{number_value} |
|
212 |
: $cvar->{type} eq 'bool' ? $act_var->{bool_value} |
|
213 |
: $act_var->{text_value}; |
|
214 |
|
|
215 |
} else { |
|
216 |
if ($cvar->{type} eq 'date') { |
|
217 |
if ($cvar->{default_value} eq 'NOW') { |
|
218 |
$cvar->{value} = $cvar->{current_date}; |
|
219 |
} else { |
|
220 |
$cvar->{value} = $cvar->{default_value}; |
|
221 |
} |
|
222 |
|
|
223 |
} elsif ($cvar->{type} eq 'timestamp') { |
|
224 |
if ($cvar->{default_value} eq 'NOW') { |
|
225 |
$cvar->{value} = $cvar->{current_timestamp}; |
|
226 |
} else { |
|
227 |
$cvar->{value} = $cvar->{default_value}; |
|
228 |
} |
|
229 |
|
|
230 |
} elsif ($cvar->{type} eq 'bool') { |
|
231 |
$cvar->{value} = $cvar->{default_value} * 1; |
|
232 |
|
|
233 |
} elsif ($cvar->{type} eq 'number') { |
|
234 |
$cvar->{value} = $cvar->{default_value} * 1 if ($cvar->{default_value} ne ''); |
|
235 |
|
|
236 |
} else { |
|
237 |
$cvar->{value} = $cvar->{default_value}; |
|
238 |
} |
|
239 |
} |
|
240 |
|
|
241 |
if ($cvar->{type} eq 'number') { |
|
242 |
$cvar->{value} = $form->format_amount($myconfig, $cvar->{value} * 1, $cvar->{precision}); |
|
243 |
} |
|
244 |
} |
|
245 |
|
|
246 |
$h_var->finish(); |
|
247 |
|
|
248 |
$main::lxdebug->leave_sub(); |
|
249 |
|
|
250 |
return $custom_variables; |
|
251 |
} |
|
252 |
|
|
253 |
sub save_custom_variables { |
|
254 |
$main::lxdebug->enter_sub(); |
|
255 |
|
|
256 |
my $self = shift; |
|
257 |
my %params = @_; |
|
258 |
|
|
259 |
Common::check_params(\%params, qw(module trans_id variables)); |
|
260 |
|
|
261 |
my $myconfig = \%main::myconfig; |
|
262 |
my $form = $main::form; |
|
263 |
|
|
264 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
265 |
|
|
266 |
my @configs = grep { $_->{module} eq $params{module} } @{ CVar->get_configs() }; |
|
267 |
|
|
268 |
my $query = |
|
269 |
qq|DELETE FROM custom_variables |
|
270 |
WHERE (trans_id = ?) |
|
271 |
AND (config_id IN (SELECT DISTINCT id |
|
272 |
FROM custom_variable_configs |
|
273 |
WHERE module = ?))|; |
|
274 |
do_query($form, $dbh, $query, conv_i($params{trans_id}), $params{module}); |
|
275 |
|
|
276 |
$query = |
|
277 |
qq|INSERT INTO custom_variables (config_id, trans_id, bool_value, timestamp_value, text_value, number_value) |
|
278 |
VALUES (?, ?, ?, ?, ?, ?)|; |
|
279 |
my $sth = prepare_query($form, $dbh, $query); |
|
280 |
|
|
281 |
foreach my $config (@configs) { |
|
282 |
my @values = (conv_i($config->{id}), conv_i($params{trans_id})); |
|
283 |
|
|
284 |
my $value = $params{variables}->{"cvar_$config->{name}"}; |
|
285 |
|
|
286 |
if (($config->{type} eq 'text') || ($config->{type} eq 'textfield') || ($config->{type} eq 'select')) { |
|
287 |
push @values, undef, undef, $value, undef; |
|
288 |
|
|
289 |
} elsif (($config->{type} eq 'date') || ($config->{type} eq 'timestamp')) { |
|
290 |
push @values, undef, conv_date($value), undef, undef; |
|
291 |
|
|
292 |
} elsif ($config->{type} eq 'number') { |
|
293 |
push @values, undef, undef, undef, conv_i($form->parse_amount($myconfig, $value)); |
|
294 |
|
|
295 |
} elsif ($config->{type} eq 'bool') { |
|
296 |
push @values, $value ? 't' : 'f', undef, undef, undef; |
|
297 |
} |
|
298 |
|
|
299 |
do_statement($form, $sth, $query, @values); |
|
300 |
} |
|
301 |
|
|
302 |
$sth->finish(); |
|
303 |
|
|
304 |
$dbh->commit(); |
|
305 |
|
|
306 |
$main::lxdebug->leave_sub(); |
|
307 |
} |
|
308 |
|
|
309 |
sub render_inputs { |
|
310 |
$main::lxdebug->enter_sub(); |
|
311 |
|
|
312 |
my $self = shift; |
|
313 |
my %params = @_; |
|
314 |
|
|
315 |
Common::check_params(\%params, qw(variables)); |
|
316 |
|
|
317 |
my $myconfig = \%main::myconfig; |
|
318 |
my $form = $main::form; |
|
319 |
|
|
320 |
foreach my $var (@{ $params{variables} }) { |
|
321 |
$var->{HTML_CODE} = $form->parse_html_template('amcvar/render_inputs', { 'var' => $var }); |
|
322 |
} |
|
323 |
|
|
324 |
$main::lxdebug->leave_sub(); |
|
325 |
} |
|
326 |
|
|
327 |
sub render_search_options { |
|
328 |
$main::lxdebug->enter_sub(); |
|
329 |
|
|
330 |
my $self = shift; |
|
331 |
my %params = @_; |
|
332 |
|
|
333 |
Common::check_params(\%params, qw(variables)); |
|
334 |
|
|
335 |
my $myconfig = \%main::myconfig; |
|
336 |
my $form = $main::form; |
|
337 |
|
|
338 |
$params{include_prefix} = 'l_' unless defined($params{include_prefix}); |
|
339 |
$params{include_value} ||= '1'; |
|
340 |
|
|
341 |
my $filter = $form->parse_html_template('amcvar/search_filter', \%params); |
|
342 |
my $include = $form->parse_html_template('amcvar/search_include', \%params); |
|
343 |
|
|
344 |
$main::lxdebug->leave_sub(); |
|
345 |
|
|
346 |
return ($filter, $include); |
|
347 |
} |
|
348 |
|
|
349 |
sub build_filter_query { |
|
350 |
$main::lxdebug->enter_sub(); |
|
351 |
|
|
352 |
my $self = shift; |
|
353 |
my %params = @_; |
|
354 |
|
|
355 |
Common::check_params(\%params, qw(module trans_id_field filter)); |
|
356 |
|
|
357 |
my $myconfig = \%main::myconfig; |
|
358 |
my $form = $main::form; |
|
359 |
|
|
360 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
361 |
|
|
362 |
my $configs = $self->get_configs(%params); |
|
363 |
|
|
364 |
my (@where, @values); |
|
365 |
|
|
366 |
foreach my $config (@{ $configs }) { |
|
367 |
next unless ($config->{searchable}); |
|
368 |
|
|
369 |
my $name = "cvar_$config->{name}"; |
|
370 |
|
|
371 |
my (@sub_values, @sub_where, $not); |
|
372 |
|
|
373 |
if (($config->{type} eq 'text') || ($config->{type} eq 'textfield')) { |
|
374 |
next unless ($params{filter}->{$name}); |
|
375 |
|
|
376 |
push @sub_where, qq|cvar.text_value ILIKE ?|; |
|
377 |
push @sub_values, '%' . $params{filter}->{$name} . '%' |
|
378 |
|
|
379 |
} elsif ($config->{type} eq 'select') { |
|
380 |
next unless ($params{filter}->{$name}); |
|
381 |
|
|
382 |
push @sub_where, qq|cvar.text_value = ?|; |
|
383 |
push @sub_values, $params{filter}->{$name}; |
|
384 |
|
|
385 |
} elsif (($config->{type} eq 'date') || ($config->{type} eq 'timestamp')) { |
|
386 |
my $name_from = "${name}_from"; |
|
387 |
my $name_to = "${name}_to"; |
|
388 |
|
|
389 |
if ($params{filter}->{$name_from}) { |
|
390 |
push @sub_where, qq|cvar.timestamp_value >= ?|; |
|
391 |
push @sub_values, conv_date($params{filter}->{$name_from}); |
|
392 |
} |
|
393 |
|
|
394 |
if ($params{filter}->{$name_to}) { |
|
395 |
push @sub_where, qq|cvar.timestamp_value <= ?|; |
|
396 |
push @sub_values, conv_date($params{filter}->{$name_to}); |
|
397 |
} |
|
398 |
|
|
399 |
} elsif ($config->{type} eq 'number') { |
|
400 |
next if ($params{filter}->{$name} eq ''); |
|
401 |
|
|
402 |
my $f_op = $params{filter}->{"${name}_qtyop"}; |
|
403 |
|
|
404 |
if ($f_op eq '==') { |
|
405 |
$op = '='; |
|
406 |
|
|
407 |
} elsif ($f_op eq '=/=') { |
|
408 |
$not = 'NOT'; |
|
409 |
$op = '<>'; |
|
410 |
|
|
411 |
} elsif ($f_op eq '<') { |
|
412 |
$not = 'NOT'; |
|
413 |
$op = '>='; |
|
414 |
|
|
415 |
} elsif ($f_op eq '<=') { |
|
416 |
$not = 'NOT'; |
|
417 |
$op = '>'; |
|
418 |
|
|
419 |
} elsif (($f_op eq '>') || ($f_op eq '>=')) { |
|
420 |
$op = $f_op; |
|
421 |
|
|
422 |
} else { |
|
423 |
$op = '='; |
|
424 |
} |
|
425 |
|
|
426 |
push @sub_where, qq|cvar.number_value $op ?|; |
|
427 |
push @sub_values, $form->parse_amount($myconfig, $params{filter}->{$name}); |
|
428 |
|
|
429 |
} elsif ($config->{type} eq 'bool') { |
|
430 |
next unless ($params{filter}->{$name}); |
|
431 |
|
|
432 |
$not = 'NOT' if ($params{filter}->{$name} eq 'no'); |
|
433 |
push @sub_where, qq|COALESCE(cvar.bool_value, false) = TRUE|; |
|
434 |
} |
|
435 |
|
|
436 |
if (@sub_where) { |
|
437 |
push @where, |
|
438 |
qq|$not EXISTS( |
|
439 |
SELECT cvar.id |
|
440 |
FROM custom_variables cvar |
|
441 |
LEFT JOIN custom_variable_configs cvarcfg ON (cvar.config_id = cvarcfg.id) |
|
442 |
WHERE (cvarcfg.module = ?) |
|
443 |
AND (cvarcfg.id = ?) |
|
444 |
AND (cvar.trans_id = $params{trans_id_field}) |
|
445 |
AND | . join(' AND ', map { "($_)" } @sub_where) . qq|)|; |
|
446 |
push @values, $params{module}, conv_i($config->{id}), @sub_values; |
|
447 |
} |
|
448 |
} |
|
449 |
|
|
450 |
my $query = join ' AND ', @where; |
|
451 |
|
|
452 |
$main::lxdebug->leave_sub(); |
|
453 |
|
|
454 |
return ($query, @values); |
|
455 |
} |
|
456 |
|
|
457 |
sub add_custom_variables_to_report { |
|
458 |
$main::lxdebug->enter_sub(); |
|
459 |
|
|
460 |
my $self = shift; |
|
461 |
my %params = @_; |
|
462 |
|
|
463 |
Common::check_params(\%params, qw(module trans_id_field column_defs data configs)); |
|
464 |
|
|
465 |
my $myconfig = \%main::myconfig; |
|
466 |
my $form = $main::form; |
|
467 |
my $locale = $main::locale; |
|
468 |
|
|
469 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
470 |
|
|
471 |
my $configs = [ grep { $_->{includeable} && $params{column_defs}->{"cvar_$_->{name}"}->{visible} } @{ $params{configs} } ]; |
|
472 |
|
|
473 |
if (!scalar(@{ $params{data} }) || ! scalar(@{ $configs })) { |
|
474 |
$main::lxdebug->leave_sub(); |
|
475 |
return; |
|
476 |
} |
|
477 |
|
|
478 |
my %cfg_map = map { $_->{id} => $_ } @{ $configs }; |
|
479 |
my @cfg_ids = keys %cfg_map; |
|
480 |
|
|
481 |
my $query = |
|
482 |
qq|SELECT text_value, timestamp_value, timestamp_value::date AS date_value, number_value, bool_value, config_id |
|
483 |
FROM custom_variables |
|
484 |
WHERE (config_id IN (| . join(', ', ('?') x scalar(@cfg_ids)) . qq|)) AND (trans_id = ?)|; |
|
485 |
my $sth = prepare_query($form, $dbh, $query); |
|
486 |
|
|
487 |
foreach my $row (@{ $params{data} }) { |
|
488 |
do_statement($form, $sth, $query, @cfg_ids, conv_i($row->{$params{trans_id_field}})); |
|
489 |
|
|
490 |
while (my $ref = $sth->fetchrow_hashref()) { |
|
491 |
my $cfg = $cfg_map{$ref->{config_id}}; |
|
492 |
|
|
493 |
$row->{"cvar_$cfg->{name}"} = |
|
494 |
$cfg->{type} eq 'date' ? $ref->{date_value} |
|
495 |
: $cfg->{type} eq 'timestamp' ? $ref->{timestamp_value} |
|
496 |
: $cfg->{type} eq 'number' ? $form->format_amount($myconfig, $ref->{number_value} * 1, $config->{precision}) |
|
497 |
: $cfg->{type} eq 'bool' ? ($ref->{bool_value} ? $locale->text('Yes') : $locale->text('No')) |
|
498 |
: $ref->{text_value}; |
|
499 |
} |
|
500 |
} |
|
501 |
|
|
502 |
$sth->finish(); |
|
503 |
|
|
504 |
$main::lxdebug->leave_sub(); |
|
505 |
} |
|
506 |
|
|
507 |
sub get_field_format_list { |
|
508 |
$main::lxdebug->enter_sub(); |
|
509 |
|
|
510 |
my $self = shift; |
|
511 |
my %params = @_; |
|
512 |
|
|
513 |
Common::check_params(\%params, qw(module)); |
|
514 |
|
|
515 |
my $myconfig = \%main::myconfig; |
|
516 |
my $form = $main::form; |
|
517 |
|
|
518 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
519 |
|
|
520 |
my $configs = $self->get_configs(%params); |
|
521 |
|
|
522 |
my $date_fields = []; |
|
523 |
my $number_fields = {}; |
|
524 |
|
|
525 |
foreach my $config (@{ $configs }) { |
|
526 |
my $name = "$params{prefix}cvar_$config->{name}"; |
|
527 |
$main::lxdebug->message(0, "name $name"); |
|
528 |
if ($config->{type} eq 'date') { |
|
529 |
push @{ $date_fields }, $name; |
|
530 |
|
|
531 |
} elsif ($config->{type} eq 'number') { |
|
532 |
$number_fields->{$config->{precision}} ||= []; |
|
533 |
push @{ $number_fields->{$config->{precision}} }, $name; |
|
534 |
} |
|
535 |
} |
|
536 |
|
|
537 |
$main::lxdebug->leave_sub(); |
|
538 |
|
|
539 |
return ($date_fields, $number_fields); |
|
540 |
} |
|
541 |
|
|
542 |
|
|
543 |
1; |
SL/IR.pm | ||
---|---|---|
1108 | 1108 |
|
1109 | 1109 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
1110 | 1110 |
|
1111 |
my $custom_variables = CVar->get_custom_variables('dbh' => $dbh, |
|
1112 |
'module' => 'CT', |
|
1113 |
'trans_id' => $form->{vendor_id}); |
|
1114 |
map { $form->{"vc_cvar_$_->{name}"} = $_->{value} } @{ $custom_variables }; |
|
1115 |
|
|
1111 | 1116 |
$dbh->disconnect(); |
1112 | 1117 |
|
1113 | 1118 |
$main::lxdebug->leave_sub(); |
SL/IS.pm | ||
---|---|---|
37 | 37 |
use List::Util qw(max); |
38 | 38 |
|
39 | 39 |
use SL::AM; |
40 |
use SL::CVar; |
|
40 | 41 |
use SL::Common; |
41 | 42 |
use SL::DBUtils; |
42 | 43 |
use SL::MoreCommon; |
... | ... | |
463 | 464 |
|
464 | 465 |
map { $form->{"dv_$_"} = $ref->{$_} } keys %$ref; |
465 | 466 |
} |
467 |
|
|
468 |
my $custom_variables = CVar->get_custom_variables('dbh' => $dbh, |
|
469 |
'module' => 'CT', |
|
470 |
'trans_id' => $form->{customer_id}); |
|
471 |
map { $form->{"vc_cvar_$_->{name}"} = $_->{value} } @{ $custom_variables }; |
|
472 |
|
|
466 | 473 |
$dbh->disconnect; |
467 | 474 |
|
468 | 475 |
$main::lxdebug->leave_sub(); |
amcvar.pl | ||
---|---|---|
1 |
am.pl |
bin/mozilla/amcvar.pl | ||
---|---|---|
1 |
#===================================================================== |
|
2 |
# LX-Office ERP |
|
3 |
# Copyright (C) 2004 |
|
4 |
# Based on SQL-Ledger Version 2.1.9 |
|
5 |
# Web http://www.lx-office.org |
|
6 |
# |
|
7 |
#===================================================================== |
|
8 |
# SQL-Ledger Accounting |
|
9 |
# Copyright (c) 1998-2002 |
|
10 |
# |
|
11 |
# Author: Dieter Simader |
|
12 |
# Email: dsimader@sql-ledger.org |
|
13 |
# Web: http://www.sql-ledger.org |
|
14 |
# |
|
15 |
# |
|
16 |
# This program is free software; you can redistribute it and/or modify |
|
17 |
# it under the terms of the GNU General Public License as published by |
|
18 |
# the Free Software Foundation; either version 2 of the License, or |
|
19 |
# (at your option) any later version. |
|
20 |
# |
|
21 |
# This program is distributed in the hope that it will be useful, |
|
22 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
23 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
24 |
# GNU General Public License for more details. |
|
25 |
# You should have received a copy of the GNU General Public License |
|
26 |
# along with this program; if not, write to the Free Software |
|
27 |
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|
28 |
#====================================================================== |
|
29 |
# |
|
30 |
# administration |
|
31 |
# |
|
32 |
#====================================================================== |
|
33 |
|
|
34 |
use SL::AM; |
|
35 |
use SL::CVar; |
|
36 |
use SL::Form; |
|
37 |
|
|
38 |
use Data::Dumper; |
|
39 |
|
|
40 |
1; |
|
41 |
|
|
42 |
require "bin/mozilla/common.pl"; |
|
43 |
|
|
44 |
# end of main |
|
45 |
|
|
46 |
our %translations = ('text' => $locale->text('Free-form text'), |
|
47 |
'textfield' => $locale->text('Text field'), |
|
48 |
'number' => $locale->text('Number'), |
|
49 |
'date' => $locale->text('Date'), |
|
50 |
'timestamp' => $locale->text('Timestamp'), |
|
51 |
'bool' => $locale->text('Yes/No (Checkbox)'), |
|
52 |
'select' => $locale->text('Selection'), |
|
53 |
); |
|
54 |
|
|
55 |
our @types = qw(text textfield number date bool select); # timestamp |
|
56 |
|
|
57 |
sub add { |
|
58 |
add_cvar_config(); |
|
59 |
} |
|
60 |
|
|
61 |
sub edit { |
|
62 |
edit_cvar_config(); |
|
63 |
} |
|
64 |
|
|
65 |
sub list_cvar_configs { |
|
66 |
$lxdebug->enter_sub(); |
|
67 |
|
|
68 |
$auth->assert('config'); |
|
69 |
|
|
70 |
$form->{module} ||= $form->{cvar_module}; |
|
71 |
|
|
72 |
my @configs = grep { $_->{module} eq $form->{module} } @{ CVar->get_configs() }; |
|
73 |
|
|
74 |
my $previous_config; |
|
75 |
|
|
76 |
foreach (@configs) { |
|
77 |
$_->{type_tr} = $translations{$_->{type}}; |
|
78 |
|
|
79 |
if ($previous_config) { |
|
80 |
$previous_config->{next_id} = $_->{id}; |
|
81 |
$_->{previous_id} = $previous_config->{id}; |
|
82 |
} |
|
83 |
|
|
84 |
$previous_config = $_; |
|
85 |
} |
|
86 |
|
|
87 |
$form->{title} = $locale->text('List of custom variables'); |
|
88 |
$form->header(); |
|
89 |
print $form->parse_html_template('amcvar/list_cvar_configs', { 'CONFIGS' => \@configs }); |
|
90 |
|
|
91 |
$lxdebug->leave_sub(); |
|
92 |
} |
|
93 |
|
|
94 |
sub add_cvar_config { |
|
95 |
$lxdebug->enter_sub(); |
|
96 |
|
|
97 |
$auth->assert('config'); |
|
98 |
|
|
99 |
$form->{module} ||= $form->{cvar_module}; |
|
100 |
|
|
101 |
$form->{edit} = 0; |
|
102 |
display_cvar_config_form(); |
|
103 |
|
|
104 |
$lxdebug->leave_sub(); |
|
105 |
} |
|
106 |
|
|
107 |
sub edit_cvar_config { |
|
108 |
$lxdebug->enter_sub(); |
|
109 |
|
|
110 |
$auth->assert('config'); |
|
111 |
|
|
112 |
my $config = CVar->get_config('id' => $form->{id}); |
|
113 |
|
|
114 |
map { $form->{$_} = $config->{$_} } keys %{ $config }; |
|
115 |
|
|
116 |
$form->{edit} = 1; |
|
117 |
display_cvar_config_form(); |
|
118 |
|
|
119 |
$lxdebug->leave_sub(); |
|
120 |
} |
|
121 |
|
|
122 |
sub save { |
|
123 |
$lxdebug->enter_sub(); |
|
124 |
|
|
125 |
$auth->assert('config'); |
|
126 |
|
|
127 |
$form->isblank('name', $locale->text('The name is missing.')); |
|
128 |
$form->isblank('description', $locale->text('The description is missing.')); |
|
129 |
$form->isblank('options', $locale->text('The option field is empty.')) if ($form->{type} eq 'select'); |
|
130 |
|
|
131 |
if ($form->{name} !~ /^[a-z][a-z0-9_]*$/i) { |
|
132 |
$form->error($locale->text('The name must only consist of letters, numbers and underscores and start with a letter.')); |
|
133 |
} |
|
134 |
|
|
135 |
if (($form->{type} eq 'number') && ($form->{default_value} ne '')) { |
|
136 |
$form->{default_value} = $form->parse_amount(\%myconfig, $form->{default_value}); |
|
137 |
} |
|
138 |
|
|
139 |
$form->{included_by_default} = $form->{inclusion} eq 'yes_default_on'; |
|
140 |
$form->{includeable} = $form->{inclusion} ne 'no'; |
|
141 |
|
|
142 |
CVar->save_config('module' => $form->{module}, |
|
143 |
'config' => $form); |
|
144 |
|
|
145 |
$form->{MESSAGE} = $locale->text('The custom variable has been saved.'); |
|
146 |
|
|
147 |
list_cvar_configs(); |
|
148 |
|
|
149 |
$lxdebug->leave_sub(); |
|
150 |
} |
|
151 |
|
|
152 |
sub delete { |
|
153 |
$lxdebug->enter_sub(); |
|
154 |
|
|
155 |
CVar->delete_config('id' => $form->{id}); |
|
156 |
|
|
157 |
$form->{MESSAGE} = $locale->text('The custom variable has been deleted.'); |
|
158 |
|
|
159 |
list_cvar_configs(); |
|
160 |
|
|
161 |
$lxdebug->leave_sub(); |
|
162 |
} |
|
163 |
|
|
164 |
sub display_cvar_config_form { |
|
165 |
$lxdebug->enter_sub(); |
|
166 |
|
|
167 |
$auth->assert('config'); |
|
168 |
|
|
169 |
my @types = map { { 'type' => $_, 'type_tr' => $translations{$_} } } @types; |
|
170 |
|
|
171 |
if (($form->{type} eq 'number') && ($form->{default_value} ne '')) { |
|
172 |
$form->{default_value} = $form->format_amount(\%myconfig, $form->{default_value}); |
|
173 |
} |
|
174 |
|
|
175 |
$form->{title} = $form->{edit} ? $locale->text("Edit custom variable") : $locale->text("Add custom variable"); |
|
176 |
|
|
177 |
$form->header(); |
|
178 |
print $form->parse_html_template("amcvar/display_cvar_config_form", { 'TYPES' => \@types }); |
|
179 |
|
|
180 |
$lxdebug->leave_sub(); |
|
181 |
} |
|
182 |
|
|
183 |
sub swap_cvar_configs { |
|
184 |
$lxdebug->enter_sub(); |
|
185 |
|
|
186 |
AM->swap_sortkeys(\%myconfig, $form, 'custom_variable_configs'); |
|
187 |
|
|
188 |
list_cvar_configs(); |
|
189 |
|
|
190 |
$lxdebug->leave_sub(); |
|
191 |
} |
|
192 |
|
|
193 |
1; |
bin/mozilla/ct.pl | ||
---|---|---|
42 | 42 |
use POSIX qw(strftime); |
43 | 43 |
|
44 | 44 |
use SL::CT; |
45 |
use SL::CVar; |
|
45 | 46 |
use SL::ReportGenerator; |
46 | 47 |
|
47 | 48 |
require "bin/mozilla/common.pl"; |
... | ... | |
80 | 81 |
$form->get_lists("business_types" => "ALL_BUSINESS_TYPES"); |
81 | 82 |
$form->{SHOW_BUSINESS_TYPES} = scalar @{ $form->{ALL_BUSINESS_TYPES} } > 0; |
82 | 83 |
|
83 |
$form->{title} = $form->{IS_CUSTOMER} ? $locale->text('Customers') : $locale->text('Vendors'); |
|
84 |
$form->{fokus} = 'Form.name'; |
|
84 |
$form->{CUSTOM_VARIABLES} = CVar->get_configs('module' => 'CT'); |
|
85 |
($form->{CUSTOM_VARIABLES_FILTER_CODE}, |
|
86 |
$form->{CUSTOM_VARIABLES_INCLUSION_CODE}) = CVar->render_search_options('variables' => $form->{CUSTOM_VARIABLES}, |
|
87 |
'include_prefix' => 'l_', |
|
88 |
'include_value' => 'Y'); |
|
89 |
|
|
90 |
$form->{jsscript} = 1; |
|
91 |
$form->{title} = $form->{IS_CUSTOMER} ? $locale->text('Customers') : $locale->text('Vendors'); |
|
92 |
$form->{fokus} = 'Form.name'; |
|
85 | 93 |
|
86 | 94 |
$form->header(); |
87 | 95 |
print $form->parse_html_template('ct/search'); |
... | ... | |
98 | 106 |
|
99 | 107 |
CT->search(\%myconfig, \%$form); |
100 | 108 |
|
109 |
my $cvar_configs = CVar->get_configs('module' => 'CT'); |
|
110 |
|
|
101 | 111 |
my @options; |
102 | 112 |
if ($form->{status} eq 'all') { |
103 | 113 |
push @options, $locale->text('All'); |
... | ... | |
125 | 135 |
'ordnumber', 'quonumber' |
126 | 136 |
); |
127 | 137 |
|
138 |
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; |
|
139 |
my %column_defs_cvars = map { +"cvar_$_->{name}" => { 'text' => $_->{description} } } @includeable_custom_variables; |
|
140 |
|
|
141 |
push @columns, map { "cvar_$_->{name}" } @includeable_custom_variables; |
|
142 |
|
|
128 | 143 |
my %column_defs = ( |
129 | 144 |
'id' => { 'text' => $locale->text('ID'), }, |
130 | 145 |
"$form->{db}number" => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Customer Number') : $locale->text('Vendor Number'), }, |
... | ... | |
141 | 156 |
'invnumber' => { 'text' => $locale->text('Invoice'), }, |
142 | 157 |
'ordnumber' => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Sales Order') : $locale->text('Purchase Order'), }, |
143 | 158 |
'quonumber' => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Quotation') : $locale->text('Request for Quotation'), }, |
159 |
%column_defs_cvars, |
|
144 | 160 |
); |
145 | 161 |
|
146 | 162 |
map { $column_defs{$_}->{visible} = $form->{"l_$_"} eq 'Y' } @columns; |
... | ... | |
183 | 199 |
|
184 | 200 |
$report->set_sort_indicator($form->{sort}, 1); |
185 | 201 |
|
202 |
CVar->add_custom_variables_to_report('module' => 'CT', |
|
203 |
'trans_id_field' => 'id', |
|
204 |
'configs' => $cvar_configs, |
|
205 |
'column_defs' => \%column_defs, |
|
206 |
'data' => $form->{CT}); |
|
207 |
|
|
186 | 208 |
my $previous_id; |
187 | 209 |
|
188 | 210 |
foreach my $ref (@{ $form->{CT} }) { |
... | ... | |
273 | 295 |
map { $form->{"MB_$_"} = [ map +{ id => $_, description => $_ }, @{ $form->{$_} } ] } qw(TITLES GREETINGS COMPANY_GREETINGS DEPARTMENT); |
274 | 296 |
## /LINET |
275 | 297 |
|
298 |
$form->{CUSTOM_VARIABLES} = CVar->get_custom_variables('module' => 'CT', 'trans_id' => $form->{id}); |
|
299 |
|
|
300 |
CVar->render_inputs('variables' => $form->{CUSTOM_VARIABLES}) if (scalar @{ $form->{CUSTOM_VARIABLES} }); |
|
301 |
|
|
302 |
$main::lxdebug->dump(0, "cvar", $form->{CUSTOM_VARIABLES}); |
|
303 |
|
|
276 | 304 |
$form->header; |
277 | 305 |
print $form->parse_html_template('ct/form_header'); |
278 | 306 |
|
bin/mozilla/io.pl | ||
---|---|---|
37 | 37 |
use CGI::Ajax; |
38 | 38 |
use List::Util qw(max first); |
39 | 39 |
|
40 |
use SL::CVar; |
|
40 | 41 |
use SL::Common; |
41 | 42 |
use SL::CT; |
42 | 43 |
use SL::IC; |
... | ... | |
1412 | 1413 |
$form->{language} = "_" . $form->{language}; |
1413 | 1414 |
} |
1414 | 1415 |
|
1415 |
# Format dates. |
|
1416 |
# Format dates and numbers.
|
|
1416 | 1417 |
format_dates($output_dateformat, $output_longdates, |
1417 | 1418 |
qw(invdate orddate quodate pldate duedate reqdate transdate |
1418 | 1419 |
shippingdate deliverydate validitydate paymentdate |
... | ... | |
1448 | 1449 |
grep({ /^qty_\d+$/ |
1449 | 1450 |
} keys(%{$form}))); |
1450 | 1451 |
|
1452 |
my ($cvar_date_fields, $cvar_number_fields) = CVar->get_field_format_list('module' => 'CT', 'prefix' => 'vc_'); |
|
1453 |
|
|
1454 |
if (scalar @{ $cvar_date_fields }) { |
|
1455 |
format_dates($output_dateformat, $output_longdates, @{ $cvar_date_fields }); |
|
1456 |
} |
|
1457 |
|
|
1458 |
while (my ($precision, $field_list) = each %{ $cvar_number_fields }) { |
|
1459 |
reformat_numbers($output_numberformat, $precision, @{ $field_list }); |
|
1460 |
} |
|
1461 |
|
|
1451 | 1462 |
$form->{IN} = "$form->{formname}$form->{language}${printer_code}.html"; |
1452 | 1463 |
if ($form->{format} eq 'postscript') { |
1453 | 1464 |
$form->{postscript} = 1; |
doc/dokumentenvorlagen-und-variablen.html | ||
---|---|---|
81 | 81 |
|
82 | 82 |
<li><a href="dokumentenvorlagen-und-variablen.html#invoice_zahlungen"> |
83 | 83 |
Variablen für die Zahlungseingänge</a></li> |
84 |
|
|
85 |
<li><a href="dokumentenvorlagen-und-variablen.html#benutzerdefinierte_variablen_vc"> |
|
86 |
Benutzerdefinierte Kunden- und Lieferantenvariablen</a></li> |
|
84 | 87 |
</ol> |
85 | 88 |
</li> |
86 | 89 |
|
... | ... | |
817 | 820 |
</table> |
818 | 821 |
</p> |
819 | 822 |
|
823 |
<h3><a name="benutzerdefinierte_variablen_vc"> |
|
824 |
Benutzerdefinierte Kunden- und Lieferantenvariablen:</a></h3> |
|
825 |
|
|
826 |
<p> |
|
827 |
Die vom Benutzer definierten Variablen für Kunden und |
|
828 |
Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen |
|
829 |
ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem |
|
830 |
Präfix <code>vc_cvar_</code> und dem vom Benutzer festgelegten |
|
831 |
Variablennamen zusammen.</p> |
|
832 |
|
|
833 |
<p>Beispiel: Der Benutzer hat eine Variable |
|
834 |
namens <code>number_of_employees</code> definiert, die die Anzahl |
|
835 |
der Mitarbeiter des Unternehmens enthält. Diese Variable steht |
|
836 |
dann unter dem Namen <code>vc_cvar_number_of_employees</code> zur |
|
837 |
Verfügung.</p> |
|
838 |
|
|
820 | 839 |
<small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis"> |
821 | 840 |
zum Inhaltsverzeichnis</a></small><br> |
822 | 841 |
<hr> |
locale/de/all | ||
---|---|---|
98 | 98 |
'Add Buchungsgruppe' => 'Buchungsgruppe erfassen', |
99 | 99 |
'Add Business' => 'Kunden-/Lieferantentyp erfassen', |
100 | 100 |
'Add Credit Note' => 'Gutschrift erfassen', |
101 |
'Add Custom Variable' => 'Benutzerdefinierte Variable erfassen', |
|
101 | 102 |
'Add Customer' => 'Kunde erfassen', |
102 | 103 |
'Add Department' => 'Abteilung erfassen', |
103 | 104 |
'Add Dunning' => 'Mahnung erzeugen', |
... | ... | |
127 | 128 |
'Add Vendor Invoice' => 'Einkaufsrechnung erfassen', |
128 | 129 |
'Add a new group' => 'Neue Gruppe erfassen', |
129 | 130 |
'Add and edit %s' => '%s hinzufügen und bearbeiten', |
131 |
'Add custom variable' => 'Benutzerdefinierte Variable erfassen', |
|
130 | 132 |
'Add to group' => 'Zu Gruppe hinzuf?gen', |
131 | 133 |
'Add unit' => 'Einheit hinzufügen', |
132 | 134 |
'Address' => 'Adresse', |
... | ... | |
144 | 146 |
'Amended Advance Turnover Tax Return (Nr. 10)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererkl?rung)', |
145 | 147 |
'Amount' => 'Betrag', |
146 | 148 |
'Amount Due' => 'Betrag f?llig', |
149 |
'Annotations' => 'Anmerkungen', |
|
147 | 150 |
'Ansprechpartner' => 'Ansprechpartner', |
148 | 151 |
'Application Error. No Format given' => 'Fehler in der Anwendung. Das Ausgabeformat fehlt.', |
149 | 152 |
'Application Error. Wrong Format' => 'Fehler in der Anwendung. Falsches Format: ', |
... | ... | |
208 | 211 |
'Bis Konto: ' => 'bis Konto: ', |
209 | 212 |
'Body:' => 'Text:', |
210 | 213 |
'Books are open' => 'Die B?cher sind ge?ffnet.', |
214 |
'Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.' => 'Ja/Nein-Variablen: Wenn der Standardwert nicht leer ist, so wird die Checkbox standardmäßig angehakt.', |
|
211 | 215 |
'Both' => 'Sowohl als auch', |
212 | 216 |
'Bottom' => 'Unten', |
213 | 217 |
'Bought' => 'Gekauft', |
... | ... | |
337 | 341 |
'Current / Next Level' => 'Aktuelles / N?chstes Mahnlevel', |
338 | 342 |
'Current Earnings' => 'Gewinn', |
339 | 343 |
'Current unit' => 'Aktuelle Einheit', |
344 |
'Custom Variables' => 'Benutzerdefinierte Variablen', |
|
340 | 345 |
'Customer' => 'Kunde', |
341 | 346 |
'Customer Number' => 'Kundennummer', |
342 | 347 |
'Customer Order Number' => 'Bestellnummer des Kunden', |
... | ... | |
350 | 355 |
'Customername' => 'Kundenname', |
351 | 356 |
'Customernumberinit' => 'Kunden-/Lieferantennummernkreis', |
352 | 357 |
'Customers' => 'Kunden', |
358 |
'Customers and Vendors' => 'Kunden und Lieferanten', |
|
353 | 359 |
'Customized Report' => 'Vorgew?hlte Zeitr?ume', |
354 | 360 |
'DATEV - Export Assistent' => 'DATEV-Exportassistent', |
355 | 361 |
'DATEV Angaben' => 'DATEV-Angaben', |
... | ... | |
374 | 380 |
'Date' => 'Datum', |
375 | 381 |
'Date Format' => 'Datumsformat', |
376 | 382 |
'Date Paid' => 'Zahlungsdatum', |
383 |
'Date and timestamp variables: If the default value equals \'NOW\' then the current date/current timestamp will be used. Otherwise the default value is copied as-is.' => 'Datums- und Uhrzeitvariablen: Wenn der Standardwert \'NOW\' ist, so wird das aktuelle Datum/die aktuelle Uhrzeit eingefügt. Andernfalls wird der Standardwert so wie er ist benutzt.', |
|
377 | 384 |
'Date missing!' => 'Datum fehlt!', |
378 | 385 |
'Datevautomatik' => 'Datevexport', |
379 | 386 |
'Datum von' => 'Datum von', |
... | ... | |
390 | 397 |
'Default output medium' => 'Standardausgabekanal', |
391 | 398 |
'Default printer' => 'Standarddrucker', |
392 | 399 |
'Default template format' => 'Standardvorlagenformat', |
400 |
'Default value' => 'Standardwert', |
|
393 | 401 |
'Defaults saved.' => 'Die Standardeinstellungen wurden gespeichert.', |
394 | 402 |
'Delete' => 'L?schen', |
395 | 403 |
'Delete Account' => 'Konto l?schen', |
... | ... | |
496 | 504 |
'Edit Vendor' => 'Lieferant editieren', |
497 | 505 |
'Edit Vendor Invoice' => 'Einkaufsrechnung bearbeiten', |
498 | 506 |
'Edit and delete a group' => 'Gruppen bearbeiten und löschen', |
507 |
'Edit custom variable' => 'Benutzerdefinierte Variable bearbeiten', |
|
499 | 508 |
'Edit file' => 'Datei bearbeiten', |
500 | 509 |
'Edit group ' => 'Gruppe bearbeiten', |
501 | 510 |
'Edit group membership' => 'Gruppenmitgliedschaften bearbeiten', |
... | ... | |
563 | 572 |
'Form details (second row)' => 'Formulardetails (zweite Positionszeile)', |
564 | 573 |
'Formula' => 'Formel', |
565 | 574 |
'Free report period' => 'Freier Zeitraum', |
575 |
'Free-form text' => 'Textzeile', |
|
566 | 576 |
'Fristsetzung' => 'Fristsetzung', |
567 | 577 |
'From' => 'Von', |
568 | 578 |
'Full Access' => 'Vollzugriff', |
... | ... | |
616 | 626 |
'Include column headings' => 'Spaltenüberschriften erzeugen', |
617 | 627 |
'Include in Report' => 'In Bericht aufnehmen', |
618 | 628 |
'Include in drop-down menus' => 'In Aufklappmen? aufnehmen', |
629 |
'Includeable in reports' => 'In Berichten anzeigbar', |
|
619 | 630 |
'Income Statement' => 'GuV', |
620 | 631 |
'Income accno' => 'Erlöskonto', |
621 | 632 |
'Incoming Payments' => 'Zahlungseing?nge', |
... | ... | |
713 | 724 |
'List Accounting Groups' => 'Buchungsgruppen anzeigen', |
714 | 725 |
'List Accounts' => 'Konten anzeigen', |
715 | 726 |
'List Businesses' => 'Kunden-/Lieferantentypen anzeigen', |
727 |
'List Custom Variables' => 'Benutzerdefinierte Variablen anzeigen', |
|
716 | 728 |
'List Departments' => 'Abteilungen anzeigen', |
717 | 729 |
'List Groups' => 'Warengruppen anzeigen', |
718 | 730 |
'List Languages' => 'Sprachen anzeigen', |
... | ... | |
724 | 736 |
'List Printer' => 'Drucker anzeigen', |
725 | 737 |
'List Tax' => 'Bearbeiten', |
726 | 738 |
'List Transactions' => 'Buchungsliste', |
739 |
'List of custom variables' => 'Liste der benutzerdefinierten Variablen', |
|
727 | 740 |
'Load draft' => 'Entwurf laden', |
728 | 741 |
'Local Tax Office Preferences' => 'Angaben zum Finanzamt', |
729 | 742 |
'Lock System' => 'System sperren', |
... | ... | |
840 | 853 |
'Number missing in Row' => 'Nummer fehlt in Zeile', |
841 | 854 |
'Number of copies' => 'Anzahl Kopien', |
842 | 855 |
'Number pages' => 'Seiten nummerieren', |
856 |
'Number variables: \'PRECISION=n\' forces numbers to be shown with exactly n decimal places.' => 'Zahlenvariablen: Mit \'PRECISION=n\' erzwingt man, dass Zahlen mit n Nachkommastellen formatiert werden.', |
|
843 | 857 |
'OBE-Export erfolgreich!' => 'OBE-Export erfolgreich!', |
844 | 858 |
'Obsolete' => 'Ung?ltig', |
845 | 859 |
'Oct' => 'Okt', |
... | ... | |
864 | 878 |
'Ordered' => 'Vom Kunde bestellt', |
865 | 879 |
'Orientation' => 'Seitenformat', |
866 | 880 |
'Orphaned' => 'Nie benutzt', |
881 |
'Other values are ignored.' => 'Andere Eingaben werden ignoriert.', |
|
867 | 882 |
'Others' => 'Andere', |
868 | 883 |
'Otherwise all users will only have access to their own settings.' => 'Andernfalls haben alle Benutzer nur Zugriff auf ihre Benutzereinstellungen.', |
869 | 884 |
'Out of balance transaction!' => 'Buchung ist nicht ausgeglichen!', |
... | ... | |
1067 | 1082 |
'Saving the file \'%s\' failed. OS error message: %s' => 'Das Speichern der Datei \'%s\' schlug fehl. Fehlermeldung des Betriebssystems: %s', |
1068 | 1083 |
'Screen' => 'Bildschirm', |
1069 | 1084 |
'Search Dunning' => 'Mahnung suchen', |
1085 |
'Searchable' => 'Durchsuchbar', |
|
1070 | 1086 |
'Select' => 'ausw?hlen', |
1071 | 1087 |
'Select a Customer' => 'Endkunde ausw?hlen', |
1072 | 1088 |
'Select a customer' => 'Einen Kunden auswählen', |
... | ... | |
1079 | 1095 |
'Select postscript or PDF!' => 'Postscript oder PDF ausw?hlen!', |
1080 | 1096 |
'Select the chart of accounts in use' => 'Benutzten Kontenrahmen auswählen', |
1081 | 1097 |
'Select the checkboxes that match users to the groups they should belong to.' => 'Wählen Sie diejenigen Checkboxen aus, die die Benutzer zu den gewüschten Gruppen zuordnen.', |
1098 |
'Selection' => 'Auswahlbox', |
|
1099 |
'Selection fields: The option field must contain the available options for the selection. Options are separated by \'##\', for example \'Early##Normal##Late\'.' => 'Auswahlboxen: Das Optionenfeld muss die für die Auswahl verfügbaren Einträge enthalten. Die Einträge werden mit \'##\' voneinander getrennt. Beispiel: \'Früh##Normal##Spät\'.', |
|
1082 | 1100 |
'Sell Price' => 'Verkaufspreis', |
1083 | 1101 |
'Send the backup via Email' => 'Die Sicherungsdatei per Email verschicken', |
1084 | 1102 |
'Sep' => 'Sep', |
... | ... | |
1179 | 1197 |
'Template database' => 'Datenbankvorlage', |
1180 | 1198 |
'Templates' => 'Vorlagen', |
1181 | 1199 |
'Terms missing in row ' => '+Tage fehlen in Zeile ', |
1200 |
'Text field' => 'Textfeld', |
|
1201 |
'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' => 'Textfelder: \'WIDTH=w HEIGHT=h\' setzen die Breite und die Höhe des Textfeldes. Wenn nicht anders angegeben, so werden sie 30 Zeichen breit und fünf Zeichen hoch dargestellt.', |
|
1202 |
'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => 'Textzeilen: \'MAXLENGTH=n\' setzt eine Maximallänge von n Zeichen.', |
|
1203 |
'Text, text field and number variables: The default value will be used as-is.' => 'Textzeilen, Textfelder und Zahlenvariablen: Der Standardwert wird so wie er ist übernommen.', |
|
1182 | 1204 |
'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', |
1183 | 1205 |
'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', |
1184 | 1206 |
'The authentication configuration file "config/authentication.pl" does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => 'Die Konfigurationsdatei für die Authentifizierung "config/authentication.pl" wurde nicht gefunden. Diese Lx-Office-Installation wurde vermutlich noch nicht vollständig aktualisiert oder eingerichtet. Bitte wenden Sie sich an Ihren Administrator.', |
1185 | 1207 |
'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => 'Die Authentifizierungsdatenbank kann momentan nicht erreicht werden. Entweder wurde sie noch nicht eingerichtet, oder der Datenbankserver antwortet nicht. Bitte wenden Sie sich an Ihren Administrator.', |
1208 |
'The available options depend on the varibale type:' => 'Die verfügbaren Optionen hängen vom Variablentypen ab:', |
|
1186 | 1209 |
'The backup you upload here has to be a file created with "pg_dump -o -Ft".' => 'Die von Ihnen hochzuladende Sicherungsdatei muss mit dem Programm und den Parametern "pg_dump -o -Ft" erstellt worden sein.', |
1187 | 1210 |
'The base unit does not exist or it is about to be deleted in row %d.' => 'Die Basiseinheit in Zeile %d existiert nicht oder soll gelöscht werden.', |
1188 | 1211 |
'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.', |
... | ... | |
1194 | 1217 |
'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', |
1195 | 1218 |
'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', |
1196 | 1219 |
'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', |
1220 |
'The custom variable has been deleted.' => 'Die benutzerdefinierte Variable wurde gelöscht.', |
|
1221 |
'The custom variable has been saved.' => 'Die benutzerdefinierte Variable wurde gespeichert.', |
|
1197 | 1222 |
'The database [% HTML.escape(db) %] has been successfully deleted.' => 'Die Datenbank [% HTML.escape(db) %] wurde erfolgreich gelöscht.', |
1198 | 1223 |
'The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:' => 'Die Datenbank zur Verwaltung der Benutzerdaten und zur Authentifizierung existiert nicht. Sie können Lx-Office diese Datenbank mit den folgenden Parametern anlegen lassen:', |
1199 | 1224 |
'The database update/creation did not succeed. The file [% HTML.escape(file) %] contained the following error:' => 'Die Datenbankaktualisierung/erstellung schlug fehl. Die Datei [% HTML.escape(file) %] enthielt den folgenden Fehler:', |
... | ... | |
1203 | 1228 |
'The dataset backup has been sent via email to [% HTML.escape(to) %].' => 'Die Datenbanksicherung wurde per Email an [% HTML.escape(to) %] verschickt.', |
1204 | 1229 |
'The dataset has to exist before a restoration can be started.' => 'Die Datenbank muss vor der Wiederherstellung bereits angelegt worden sein.', |
1205 | 1230 |
'The dataset name is missing.' => 'Der Datenbankname fehlt.', |
1231 |
'The default value depends on the variable type:' => 'Die Bedeutung des Standardwertes hängt vom Variablentypen ab:', |
|
1232 |
'The description is missing.' => 'Die Beschreibung fehlt.', |
|
1233 |
'The description is shown on the form. Chose something short and descriptive.' => 'Die Beschreibung wird in der jeweiligen Maske angezeigt. Sie sollte kurz und prägnant sein.', |
|
1206 | 1234 |
'The directory "%s" could not be created:\n%s' => 'Das Verzeichnis "%s" konnte nicht erstellt werden:\n%s', |
1207 | 1235 |
'The directory %s does not exist.' => 'Das Verzeichnis %s existiert nicht.', |
1208 | 1236 |
'The dunning process started' => 'Der Mahnprozess ist gestartet.', |
... | ... | |
1229 | 1257 |
'The name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.', |
1230 | 1258 |
'The name is missing in row %d.' => 'Der Name fehlt in Zeile %d.', |
1231 | 1259 |
'The name is missing.' => 'Der Name fehlt.', |
1260 |
'The name must only consist of letters, numbers and underscores and start with a letter.' => 'Der Name darf nur aus Buchstaben (keine Umlaute), Ziffern und Unterstrichen bestehen und muss mit einem Buchstaben beginnen.', |
|
1232 | 1261 |
'The old file containing the user information is still present ("[% HTML.escape(memberfile) %]"). Do you want to migrate these users into the database? If not then you will not be able to log in with any of the users present in the old file. ' => 'Die alte Datei mit den Benutzerdaten existiert in dieser Installation noch immer ("[% HTML.escape(memberfile) %]"). Wollen Sie diese Benutzer in die neue Authentifizierungsdatenbank migrieren lassen? Falls nicht, so werden Sie sich nicht mehr mit den Benutzerdaten aus der alten Mitgliedsdatei anmelden können.', |
1262 |
'The option field is empty.' => 'Das Optionsfeld ist leer.', |
|
1233 | 1263 |
'The pg_dump process could not be started.' => 'Der pg_dump-Prozess konnte nicht gestartet werden.', |
1234 | 1264 |
'The pg_restore process could not be started.' => 'Der pg_restore-Prozess konnte nicht gestartet werden.', |
1235 | 1265 |
'The preferred one is to install packages provided by your operating system distribution (e.g. Debian or RPM packages).' => 'Die bevorzugte Art, ein Perl-Modul zu installieren, ist durch Installation eines von Ihrem Betriebssystem zur Verfügung gestellten Paketes (z.B. Debian-Pakete oder RPM).', |
... | ... | |
1248 | 1278 |
'The user has been removed from this group.' => 'Der Benutzer wurde aus der Gruppe entfernt.', |
1249 | 1279 |
'The user is a member in the following group(s):' => 'Der Benutzer ist Mitglied in den folgenden Gruppen:', |
1250 | 1280 |
'The user migration process is complete.' => 'Der Prozess der Benutzerdatenmigration ist abgeschlossen.', |
1281 |
'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => 'Der Variablenname darf nur aus Zeichen (keine Umlaute), Ziffern und Unterstrichen bestehen. Er muss mit einem Buchstaben beginnen. Beispiel: weihnachtsgruss_verschicken', |
|
1251 | 1282 |
'There are four tax zones.' => 'Es gibt vier Steuerzonen.', |
1252 | 1283 |
'There are still entries in the database for which no unit has been assigned.' => 'Es gibt noch Einträge in der Datenbank, für die keine Einheit zugeordnet ist.', |
1253 | 1284 |
'There are usually three ways to install Perl modules.' => 'Es gibt normalerweise drei Arten, ein Perlmodul zu installieren.', |
... | ... | |
1262 | 1293 |
'This upgrade script tries to map all existing parts in the database to the newly created Buchungsgruppen.' => 'Dieses Upgradescript versucht, bei allen bestehenden Artikeln neu erstellte Buchungsgruppen zuzuordnen.', |
1263 | 1294 |
'This upgrade script tries to map all existing units in the database to the newly created units.' => 'Dieses Update-Script versucht, alle bestehenden Einheiten automatisch in die neuen Einheiten umzuwandeln.', |
1264 | 1295 |
'This vendor number is already in use.' => 'Diese Lieferantennummer wird bereits verwendet.', |
1296 |
'Timestamp' => 'Uhrzeit', |
|
1265 | 1297 |
'Title' => 'Titel', |
1266 | 1298 |
'To' => 'An', |
1267 | 1299 |
'To (email)' => 'An', |
... | ... | |
1369 | 1401 |
'Yearly' => 'j?hrlich', |
1370 | 1402 |
'Yearly taxreport not yet implemented' => 'J?hrlicher Steuerreport f?r dieses Ausgabeformat noch nicht implementiert', |
1371 | 1403 |
'Yes' => 'Ja', |
1404 |
'Yes, included by default' => 'Ja, standardmäßig an', |
|
1405 |
'Yes/No (Checkbox)' => 'Ja/Nein (Checkbox)', |
|
1372 | 1406 |
'You are logged out!' => 'Auf Wiedersehen!', |
1373 | 1407 |
'You can also create new units now.' => 'Sie können jetzt auch neue Einheiten anlegen.', |
1374 | 1408 |
'You can create a missing dataset by going back and chosing "Create Dataset".' => 'Sie können eine fehlende Datenbank erstellen, indem Sie jetzt zuück gehen und den Punkt "Datenbank anlegen" wählen.', |
locale/de/amcvar | ||
---|---|---|
1 |
$self->{texts} = { |
|
2 |
'ADDED' => 'Hinzugef?gt', |
|
3 |
'AP' => 'Einkauf', |
|
4 |
'AR' => 'Verkauf', |
|
5 |
'Add custom variable' => 'Benutzerdefinierte Variable erfassen', |
|
6 |
'Address' => 'Adresse', |
|
7 |
'Advance turnover tax return' => 'Umsatzsteuervoranmeldung', |
|
8 |
'All reports' => 'Alle Berichte (Kontenübersicht, Saldenbilanz, GuV, BWA, Bilanz, Projektbuchungen)', |
|
9 |
'Attempt to call an undefined sub named \'%s\'' => 'Es wurde versucht, eine nicht definierte Unterfunktion namens \'%s\' aufzurufen.', |
|
10 |
'Bcc' => 'Bcc', |
|
11 |
'Bin List' => 'Lagerliste', |
|
12 |
'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte überprüfen Sie die Angaben in config/authentication.pl.', |
|
13 |
'CANCELED' => 'Storniert', |
|
14 |
'Cc' => 'Cc', |
|
15 |
'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Verändern der Lx-Office-Installationseinstellungen (Menüpunkte unterhalb von \'System\')', |
|
16 |
'Confirmation' => 'Auftragsbest?tigung', |
|
17 |
'Contact' => 'Kontakt', |
|
18 |
'Create and edit RFQs' => 'Lieferantenanfragen erfassen und bearbeiten', |
|
19 |
'Create and edit customers and vendors' => 'Kunden und Lieferanten erfassen und bearbeiten', |
|
20 |
'Create and edit dunnings' => 'Mahnungen erfassen und bearbeiten', |
|
21 |
'Create and edit invoices and credit notes' => 'Rechnungen und Gutschriften erfassen und bearbeiten', |
|
22 |
'Create and edit parts, services, assemblies' => 'Artikel, Dienstleistungen, Erzeugnisse erfassen und bearbeiten', |
|
23 |
'Create and edit projects' => 'Projekte erfassen und bearbeiten', |
|
24 |
'Create and edit purchase delivery orders' => 'Lieferscheine von Lieferanten erfassen und bearbeiten', |
|
25 |
'Create and edit purchase orders' => 'Lieferantenaufträge erfassen und bearbeiten', |
|
26 |
'Create and edit sales delivery orders' => 'Lieferscheine für Kunden erfassen und bearbeiten', |
|
27 |
'Create and edit sales orders' => 'Auftragsbestätigungen erfassen und bearbeiten', |
|
28 |
'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', |
|
29 |
'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', |
|
30 |
'Credit Note' => 'Gutschrift', |
|
31 |
'Customer Number' => 'Kundennummer', |
|
32 |
'Customer details' => 'Kundendetails', |
|
33 |
'DATEV Export' => 'DATEV-Export', |
|
34 |
'DELETED' => 'Gel?scht', |
|
35 |
'DUNNING STARTED' => 'Mahnprozess gestartet', |
|
36 |
'Dataset upgrade' => 'Datenbankaktualisierung', |
|
37 |
'Date' => 'Datum', |
|
38 |
'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', |
|
39 |
'Directory' => 'Verzeichnis', |
|
40 |
'ELSE' => 'Zusatz', |
|
41 |
'Edit custom variable' => 'Benutzerdefinierte Variable bearbeiten', |
|
42 |
'Enter longdescription' => 'Langtext eingeben', |
|
43 |
'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', |
|
44 |
'File' => 'Datei', |
|
45 |
'Free-form text' => 'Textzeile', |
|
46 |
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', |
|
47 |
'History' => 'Historie', |
|
48 |
'Invoice' => 'Rechnung', |
|
49 |
'List of custom variables' => 'Liste der benutzerdefinierten Variablen', |
|
50 |
'MAILED' => 'Gesendet', |
|
51 |
'Manage license keys' => 'Lizenzschlüssel verwalten', |
|
52 |
'Mark as paid?' => 'Als bezahlt markieren?', |
|
53 |
'Marked as paid' => 'Als bezahlt markiert', |
|
54 |
'Master Data' => 'Stammdaten', |
|
55 |
'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen', |
|
56 |
'Message' => 'Nachricht', |
|
57 |
'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', |
|
58 |
'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', |
|
59 |
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
|
60 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
|
61 |
'Name' => 'Name', |
|
62 |
'No' => 'Nein', |
|
63 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
|
64 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
|
65 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
|
66 |
'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.', |
|
67 |
'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', |
|
68 |
'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgew?hlt.', |
|
69 |
'Number' => 'Nummer', |
|
70 |
'Others' => 'Andere', |
|
71 |
'PAYMENT POSTED' => 'Rechung gebucht', |
|
72 |
'POSTED' => 'Gebucht', |
|
73 |
'POSTED AS NEW' => 'Als neu gebucht', |
|
74 |
'PRINTED' => 'Gedruckt', |
|
75 |
'Packing List' => 'Lieferschein', |
|
76 |
'Pick List' => 'Sammelliste', |
|
77 |
'Please enter values' => 'Bitte Werte eingeben', |
|
78 |
'Proforma Invoice' => 'Proformarechnung', |
|
79 |
'Purchase Order' => 'Lieferantenauftrag', |
|
80 |
'Quotation' => 'Angebot', |
|
81 |
'RFQ' => 'Anfrage', |
|
82 |
'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich', |
|
83 |
'Reports' => 'Berichte', |
|
84 |
'SAVED' => 'Gespeichert', |
|
85 |
'SAVED FOR DUNNING' => 'Gespeichert', |
|
86 |
'SCREENED' => 'Angezeigt', |
|
87 |
'Select a Customer' => 'Endkunde ausw?hlen', |
|
88 |
'Select a customer' => 'Einen Kunden auswählen', |
|
89 |
'Select a vendor' => 'Einen Lieferanten auswählen', |
|
90 |
'Selection' => 'Auswahlbox', |
|
91 |
'Storno Invoice' => 'Stornorechnung', |
|
92 |
'Storno Packing List' => 'Stornolieferschein', |
|
93 |
'Subject' => 'Betreff', |
|
94 |
'Text field' => 'Textfeld', |
|
95 |
'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', |
|
96 |
'The LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', |
|
97 |
'The config file "config/authentication.pl" contained invalid Perl code:' => 'Die Konfigurationsdatei "config/authentication.pl" enthielt ungütigen Perl-Code:', |
|
98 |
'The config file "config/authentication.pl" was not found.' => 'Die Konfigurationsdatei "config/authentication.pl" wurde nicht gefunden.', |
|
99 |
'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/authentication.pl.', |
|
100 |
'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', |
|
101 |
'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', |
|
102 |
'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', |
|
103 |
'The custom variable has been deleted.' => 'Die benutzerdefinierte Variable wurde gelöscht.', |
|
104 |
'The custom variable has been saved.' => 'Die benutzerdefinierte Variable wurde gespeichert.', |
|
105 |
'The description is missing.' => 'Die Beschreibung fehlt.', |
|
106 |
'The name is missing.' => 'Der Name fehlt.', |
|
107 |
'The name must only consist of letters, numbers and underscores and start with a letter.' => 'Der Name darf nur aus Buchstaben (keine Umlaute), Ziffern und Unterstrichen bestehen und muss mit einem Buchstaben beginnen.', |
|
108 |
'The option field is empty.' => 'Das Optionsfeld ist leer.', |
|
109 |
'Timestamp' => 'Uhrzeit', |
|
110 |
'To (email)' => 'An', |
|
111 |
'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen', |
|
112 |
'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.', |
|
113 |
'Unit' => 'Einheit', |
|
114 |
'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', |
|
115 |
'Value' => 'Wert', |
|
116 |
'Variable' => 'Variable', |
|
117 |
'Vendor details' => 'Lieferantendetails', |
|
118 |
'Yes' => 'Ja', |
|
119 |
'Yes/No (Checkbox)' => 'Ja/Nein (Checkbox)', |
|
120 |
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', |
|
121 |
'[email]' => '[email]', |
|
122 |
'bin_list' => 'Lagerliste', |
|
123 |
'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Das Schlüsselwort "DB_config" fehlt.', |
|
124 |
'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schlüssel "LDAP_config" fehlt.', |
|
125 |
'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Fehlende Parameter in "DB_config". Benötigte Parameter sind "host", "db" und "user".', |
|
126 |
'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Fehlende Parameter in "LDAP_config". Benötigt werden "host", "attribute" und "base_dn".', |
|
127 |
'customer' => 'Kunde', |
|
128 |
'invoice' => 'Rechnung', |
|
129 |
'no' => 'nein', |
|
130 |
'packing_list' => 'Versandliste', |
|
131 |
'pick_list' => 'Entnahmeliste', |
|
132 |
'proforma' => 'Proforma', |
|
133 |
'purchase_order' => 'Auftrag', |
|
134 |
'request_quotation' => 'Angebotsanforderung', |
|
135 |
'sales_order' => 'Kundenauftrag', |
|
136 |
'sales_quotation' => 'Verkaufsangebot', |
|
137 |
'vendor' => 'Lieferant', |
|
138 |
'yes' => 'ja', |
|
139 |
}; |
|
140 |
|
|
141 |
$self->{subs} = { |
|
142 |
'E' => 'E', |
|
143 |
'H' => 'H', |
|
144 |
'NTI' => 'NTI', |
|
145 |
'Q' => 'Q', |
|
146 |
'add' => 'add', |
|
147 |
'add_cvar_config' => 'add_cvar_config', |
|
148 |
'build_std_url' => 'build_std_url', |
|
149 |
'calculate_qty' => 'calculate_qty', |
|
150 |
'call_sub' => 'call_sub', |
|
151 |
'cov_selection_internal' => 'cov_selection_internal', |
|
152 |
'delete' => 'delete', |
|
153 |
'delivery_customer_selection' => 'delivery_customer_selection', |
|
154 |
'display_cvar_config_form' => 'display_cvar_config_form', |
|
155 |
'edit' => 'edit', |
|
156 |
'edit_cvar_config' => 'edit_cvar_config', |
|
157 |
'format_dates' => 'format_dates', |
|
158 |
'list_cvar_configs' => 'list_cvar_configs', |
|
159 |
'mark_as_paid_common' => 'mark_as_paid_common', |
|
160 |
'reformat_numbers' => 'reformat_numbers', |
|
161 |
'retrieve_partunits' => 'retrieve_partunits', |
|
162 |
'save' => 'save', |
|
163 |
'set_longdescription' => 'set_longdescription', |
|
164 |
'show_history' => 'show_history', |
|
165 |
'show_vc_details' => 'show_vc_details', |
|
166 |
'swap_cvar_configs' => 'swap_cvar_configs', |
|
167 |
'vendor_selection' => 'vendor_selection', |
|
168 |
'erfassen' => 'add', |
|
169 |
'weiter' => 'continue', |
|
170 |
'l?schen' => 'delete', |
|
171 |
'speichern' => 'save', |
|
172 |
}; |
|
173 |
|
|
174 |
1; |
locale/de/ap | ||
---|---|---|
124 | 124 |
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
125 | 125 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
126 | 126 |
'Name' => 'Name', |
127 |
'No' => 'Nein', |
|
127 | 128 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
128 | 129 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
129 | 130 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
locale/de/ar | ||
---|---|---|
131 | 131 |
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
132 | 132 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
133 | 133 |
'Name' => 'Name', |
134 |
'No' => 'Nein', |
|
134 | 135 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
135 | 136 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
136 | 137 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
locale/de/cp | ||
---|---|---|
77 | 77 |
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
78 | 78 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
79 | 79 |
'Name' => 'Name', |
80 |
'No' => 'Nein', |
|
80 | 81 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
81 | 82 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
82 | 83 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
... | ... | |
144 | 145 |
'Vendor details' => 'Lieferantendetails', |
145 | 146 |
'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', |
146 | 147 |
'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', |
148 |
'Yes' => 'Ja', |
|
147 | 149 |
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', |
148 | 150 |
'Zero amount posting!' => 'Buchung ohne Wert', |
149 | 151 |
'[email]' => '[email]', |
locale/de/ct | ||
---|---|---|
75 | 75 |
'Name' => 'Name', |
76 | 76 |
'Name missing!' => 'Name fehlt!', |
77 | 77 |
'New contact' => 'Neuer Ansprechpartner', |
78 |
'No' => 'Nein', |
|
78 | 79 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
79 | 80 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
80 | 81 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
... | ... | |
136 | 137 |
'Vendor details' => 'Lieferantendetails', |
137 | 138 |
'Vendor saved!' => 'Lieferant gespeichert!', |
138 | 139 |
'Vendors' => 'Lieferanten', |
140 |
'Yes' => 'Ja', |
|
139 | 141 |
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', |
140 | 142 |
'[email]' => '[email]', |
141 | 143 |
'bin_list' => 'Lagerliste', |
locale/de/dn | ||
---|---|---|
126 | 126 |
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', |
127 | 127 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
128 | 128 |
'Name' => 'Name', |
129 |
'No' => 'Nein', |
|
129 | 130 |
'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', |
130 | 131 |
'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', |
131 | 132 |
'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden', |
... | ... | |
224 | 225 |
'Variable' => 'Variable', |
225 | 226 |
'Vendor Number' => 'Lieferantennummer', |
226 | 227 |
'Vendor details' => 'Lieferantendetails', |
228 |
'Yes' => 'Ja', |
|
227 | 229 |
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', |
228 | 230 |
'Zipcode' => 'PLZ', |
229 | 231 |
'[email]' => '[email]', |
locale/de/gl | ||
---|---|---|
124 | 124 |
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', |
125 | 125 |
'MwSt. inkl.' => 'MwSt. inkl.', |
126 | 126 |
'Name' => 'Name', |
Auch abrufbar als: Unified diff
Implementation des Features "Benutzerdefinierte Variablen für Kunden- und Lieferantenstammdaten".