Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 8688e71e

Von Moritz Bunkus vor fast 17 Jahren hinzugefügt

  • ID 8688e71eb56abdd9641f07a47135bb02841607fb
  • Vorgänger 7f2cf947
  • Nachfolger eeae6c90

Implementation des Features "Benutzerdefinierte Variablen für Kunden- und Lieferantenstammdaten".

Unterschiede anzeigen:

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&uuml;r die Zahlungseing&auml;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&uuml;r Kunden und
828
  Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
829
  ebenfalls zur Verf&uuml;gung. Ihre Namen setzen sich aus dem
830
  Pr&auml;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&auml;lt. Diese Variable steht
836
  dann unter dem Namen <code>vc_cvar_number_of_employees</code> zur
837
  Verf&uuml;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&uuml;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&uuml;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&auml;&szlig;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&uuml;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&ouml;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&uuml;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&ouml;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&auml;hlen',
......
1079 1095
  'Select postscript or PDF!'   => 'Postscript oder PDF ausw?hlen!',
1080 1096
  'Select the chart of accounts in use' => 'Benutzten Kontenrahmen ausw&auml;hlen',
1081 1097
  'Select the checkboxes that match users to the groups they should belong to.' => 'W&auml;hlen Sie diejenigen Checkboxen aus, die die Benutzer zu den gew&uuml;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&uuml;r die Auswahl verf&uuml;gbaren Eintr&auml;ge enthalten. Die Eintr&auml;ge werden mit \'##\' voneinander getrennt. Beispiel: \'Fr&uuml;h##Normal##Sp&auml;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&ouml;he des Textfeldes. Wenn nicht anders angegeben, so werden sie 30 Zeichen breit und f&uuml;nf Zeichen hoch dargestellt.',
1202
  'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => 'Textzeilen: \'MAXLENGTH=n\' setzt eine Maximall&auml;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 &uuml;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 &uuml;berpr&uuml;fen Sie die Angaben in config/authentication.pl.',
1184 1206
  'The authentication configuration file &quot;config/authentication.pl&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => 'Die Konfigurationsdatei f&uuml;r die Authentifizierung &quot;config/authentication.pl&quot; wurde nicht gefunden. Diese Lx-Office-Installation wurde vermutlich noch nicht vollst&auml;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&uuml;gbaren Optionen h&auml;ngen vom Variablentypen ab:',
1186 1209
  'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' => 'Die von Ihnen hochzuladende Sicherungsdatei muss mit dem Programm und den Parametern &quot;pg_dump -o -Ft&quot; 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&ouml;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&ouml;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&ouml;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&ouml;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&auml;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&auml;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 (&quot;[% HTML.escape(memberfile) %]&quot;). 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 (&quot;[% HTML.escape(memberfile) %]&quot;). 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&ouml;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&uuml;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&auml;ge in der Datenbank, f&uuml;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&auml;&szlig;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&ouml;nnen jetzt auch neue Einheiten anlegen.',
1374 1408
  'You can create a missing dataset by going back and chosing &quot;Create Dataset&quot;.' => 'Sie k&ouml;nnen eine fehlende Datenbank erstellen, indem Sie jetzt zu&uuml;ck gehen und den Punkt &quot;Datenbank anlegen&quot; w&auml;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&uuml;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 &uuml;berpr&uuml;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&auml;ndern der Lx-Office-Installationseinstellungen (Men&uuml;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&auml;ge erfassen und bearbeiten',
26
  'Create and edit sales delivery orders' => 'Lieferscheine f&uuml;r Kunden erfassen und bearbeiten',
27
  'Create and edit sales orders' => 'Auftragsbest&auml;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&auml;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&uuml;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&auml;hlen',
89
  'Select a vendor'             => 'Einen Lieferanten ausw&auml;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 &uuml;berpr&uuml;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&uuml;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&uuml;sselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte &uuml;berpr&uuml;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&ouml;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&auml;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&uuml;gen nicht &uuml;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&uuml;sselwort "DB_config" fehlt.',
124
  'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schl&uuml;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&ouml;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&ouml;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&uuml;gen nicht &uuml;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&uuml;gen nicht &uuml;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&uuml;gen nicht &uuml;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',
... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.

Auch abrufbar als: Unified diff