Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b6213d35

Von Moritz Bunkus vor mehr als 10 Jahren hinzugefügt

  • ID b6213d3539ccd179cd1f21b9afc54b8de8970774
  • Vorgänger 81b492ac
  • Nachfolger 88bfacbf

Einkauf/Verkauf: Lieferadressenfelder nie aus Stammdaten vorbelegen

Das neue Verhalten ist wie folgt:

- Weder die shipto_id (die Drop-Down-Box in den Belegmasken) noch die
individuellen shipto*-Felder werden weder beim Neuanlegen eines
Beleges noch bei Wechsel des Kunden aus den Datenbanken belegt.

- Beim Ausdruck werden die shipto*-Felder nicht mehr aus der
Mandantenkonfiguration vorbelegt, wenn keine Lieferadresse gesetzt
ist.

- Beim Ausdruck werden die shipto*-Felder mit den Daten aus den
Kundenstammdaten belegt, wenn die shipto_id (die Drop-Down-Box in den
Belegmasken) gesetzt ist.

Die ursprüngliche Intention war, möglichst viele Fälle abzudecken. Ganz
ursprünglich war es nämlich in den Druckvorlagen gar nicht möglich,
Kontrollstrukturen zu benutzen und damit die Ausgabe konditional zu
steuern. Es konnte also rein in den Druckvorlagen nicht unterschieden
werden zwischen »der Benutzer hat keine Lieferadresse eingegeben« und
»der Benutzer hat eine eingegeben oder ausgewählt«.

Daher wurde die ganze Logik immer im Perl-Code abgehandelt.

Das macht aber erhebliche Probleme für den Benutzer, für den es absolut
intransparent ist, wann welche Lieferadresse wie vorbelegt wird. Hinzu
kommt, dass in den Belegmasken nicht ersichtlich ist, dass eine
individuelle Lieferadresse eingetragen wurde.

Hinzu kommt, dass die Druckvorlagen inzwischen verschiedene Mechanismen
zur Verfügung haben, um Fallunterscheidungen zu treffen (z.B. die
kivitendo-Mechanismen $(if shipto…)$ oder die LaTeX-eigenen
\IfThenElse{\equal{$(shipto…)$}{…}}}…). Leider war es mit dem vorherigen
Code für die Druckvorlagen nicht mehr möglich festzustellen, ob der
Benutzer nun eine Lieferadresse eingegeben hat oder nicht.

Die neue Situation ist recht einfach:

Steht in »shiptoname« oder »shiptostreet« ein nicht leerer Wert, so ist
eine Lieferadresse vorhanden, ansonsten nicht.

Für die »nicht«-Fall kann dann jede Vorlage selber entscheiden, was zu
tun ist. Für Vorlagen im Verkaufsbereich sinnvollerweise gar keine
Lieferadresse ausgeben (oder einfach die Lieferadresse aus den
Kundenrechnungsdaten), für Vorlagen im Einkaufsbereich ebenfalls keine
Lieferadresse oder die Adresse aus der Mandantenkonfiguration.

Behebt #2345, #2400.

Unterschiede anzeigen:

SL/DO.pm
391 391
             conv_i($form->{id}));
392 392
  do_query($form, $dbh, $query, @values);
393 393

  
394
  # add shipto
395 394
  $form->{name} = $form->{ $form->{vc} };
396 395
  $form->{name} =~ s/--$form->{"$form->{vc}_id"}//;
397 396

  
397
  # add shipto
398 398
  if (!$form->{shipto_id}) {
399 399
    $form->add_shipto($dbh, $form->{id}, "DO");
400 400
  }
SL/Form.pm
3337 3337
    $self->{"employee_${_}"} = $defaults->$_   for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
3338 3338
  }
3339 3339

  
3340
  # set shipto from billto unless set
3341
  my $has_shipto = any { $self->{"shipto$_"} } qw(name street zipcode city country contact);
3342
  if (!$has_shipto && ($self->{type} =~ m/^(?:purchase_order|request_quotation)$/)) {
3343
    $self->{shiptoname}   = $defaults->company;
3344
    $self->{shiptostreet} = $defaults->address;
3340
  # Load shipping address from database if shipto_id is set.
3341
  if ($self->{shipto_id}) {
3342
    my $shipto  = SL::DB::Shipto->new(id => $self->{shipto_id})->load;
3343
    $self->{$_} = $shipto->$_ for grep { m{^shipto} } map { $_->name } @{ $shipto->meta->columns };
3345 3344
  }
3346 3345

  
3347 3346
  my $language = $self->{language} ? '_' . $self->{language} : '';
SL/IR.pm
720 720
  }
721 721

  
722 722

  
723
  # add shipto
724 723
  $form->{name} = $form->{vendor};
725 724
  $form->{name} =~ s/--\Q$form->{vendor_id}\E//;
725

  
726
  # add shipto
726 727
  $form->add_shipto($dbh, $form->{id}, "AP");
727 728

  
728 729
  # delete zero entries
......
1126 1127
  }
1127 1128
  $sth->finish();
1128 1129

  
1129
  # get shipto if we do not convert an order or invoice
1130
  if (!$params->{shipto}) {
1131
    delete @{$params}{qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptoemail)};
1132

  
1133
    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module= 'CT')|;
1134
    $ref = selectfirst_hashref_query($form, $dbh, $query, $vid);
1135
    @{$params}{keys %$ref} = @{$ref}{keys %$ref};
1136
    map { $params->{$_} = $ref->{$_} } keys %$ref;
1137
  }
1138

  
1139 1130
  if (!$params->{id} && $params->{type} !~ /_(order|quotation)/) {
1140 1131
    # setup last accounts used
1141 1132
    $query =
SL/IS.pm
1145 1145
    do_query($form, $dbh, qq|UPDATE ar SET paid = amount WHERE id = ?|, conv_i($form->{"id"}));
1146 1146
  }
1147 1147

  
1148
  # add shipto
1149 1148
  $form->{name} = $form->{customer};
1150 1149
  $form->{name} =~ s/--\Q$form->{customer_id}\E//;
1151 1150

  
1151
  # add shipto
1152 1152
  if (!$form->{shipto_id}) {
1153 1153
    $form->add_shipto($dbh, $form->{id}, "AR");
1154 1154
  }
......
1615 1615

  
1616 1616
    $form->{exchangerate} = $form->get_exchangerate($dbh, $form->{currency}, $form->{invdate}, "buy");
1617 1617

  
1618
    # get shipto
1619
    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module = 'AR')|;
1620
    $ref = selectfirst_hashref_query($form, $dbh, $query, $id);
1621
    delete $ref->{id};
1622
    map { $form->{$_} = $ref->{$_} } keys %{ $ref };
1623

  
1624 1618
    foreach my $vc (qw(customer vendor)) {
1625 1619
      next if !$form->{"delivery_${vc}_id"};
1626 1620
      ($form->{"delivery_${vc}_string"}) = selectrow_query($form, $dbh, qq|SELECT name FROM customer WHERE id = ?|, $id);
......
1837 1831
  }
1838 1832
  $sth->finish;
1839 1833

  
1840
  # get shipto if we did not converted an order or invoice
1841
  if (!$form->{shipto}) {
1842
    map { delete $form->{$_} }
1843
      qw(shiptoname shiptodepartment_1 shiptodepartment_2
1844
         shiptostreet shiptozipcode shiptocity shiptocountry
1845
         shiptocontact shiptophone shiptofax shiptoemail);
1846

  
1847
    $query = qq|SELECT * FROM shipto WHERE trans_id = ? AND module = 'CT'|;
1848
    $ref = selectfirst_hashref_query($form, $dbh, $query, $cid);
1849
    delete $ref->{id};
1850
    map { $form->{$_} = $ref->{$_} } keys %$ref;
1851
  }
1852

  
1853 1834
  # setup last accounts used for this customer
1854 1835
  if (!$form->{id} && $form->{type} !~ /_(order|quotation)/) {
1855 1836
    $query =
SL/OE.pm
609 609

  
610 610
  $form->{ordtotal} = $amount;
611 611

  
612
  # add shipto
613 612
  $form->{name} = $form->{ $form->{vc} };
614 613
  $form->{name} =~ s/--\Q$form->{"$form->{vc}_id"}\E//;
615 614

  
615
  # add shipto
616 616
  if (!$form->{shipto_id}) {
617 617
    $form->add_shipto($dbh, $form->{id}, "OE");
618 618
  }
bin/mozilla/do.pl
179 179
               'ids' => $form->{id});
180 180

  
181 181
  $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes delivery_term_id currency));
182
  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
183 182

  
184 183
  # get customer / vendor
185 184
  if ($form->{vc} eq 'vendor') {
......
801 800
  require "bin/mozilla/$form->{script}";
802 801

  
803 802
  my $currency = $form->{currency};
804
  $form->{shipto} = 1 if $form->{convert_from_do_ids};
805 803
  invoice_links();
806 804

  
807 805
  if ($form->{ordnumber}) {
bin/mozilla/io.pl
869 869
  }
870 870
  $form->{script} = 'oe.pl';
871 871

  
872
  $form->{shipto} = 1;
873

  
874 872
  $form->{rowcount}--;
875 873

  
876 874
  $form->{cp_id} *= 1;
......
935 933

  
936 934
  $form->{script} = 'oe.pl';
937 935

  
938
  $form->{shipto} = 1;
939

  
940 936
  $form->{rowcount}--;
941 937

  
942 938
  require "bin/mozilla/$form->{script}";
......
1417 1413
    $form->get_shipto(\%myconfig);
1418 1414
  }
1419 1415

  
1420
  my @a = qw(name department_1 department_2 street zipcode city country contact phone fax email);
1421

  
1422
  my $shipto = 1;
1423

  
1424
  # if there is no shipto fill it in from billto
1425
  foreach my $item (@a) {
1426
    if ($form->{"shipto$item"}) {
1427
      $shipto = 0;
1428
      last;
1429
    }
1430
  }
1431

  
1432
  if ($shipto) {
1433
    if (   $form->{formname} eq 'purchase_order'
1434
        || $form->{formname} eq 'request_quotation') {
1435
      $form->{shiptoname}   = $defaults->company;
1436
      $form->{shiptostreet} = $defaults->address;
1437
    } else {
1438
      map { $form->{"shipto$_"} = $form->{$_} } @a;
1439
    }
1440
  }
1441

  
1442 1416
  $form->{notes} =~ s/^\s+//g;
1443 1417

  
1444 1418
  delete $form->{printer_command};
bin/mozilla/is.pl
155 155
                        taxincluded currency cp_id intnotes id shipto_id
156 156
                        delivery_term_id));
157 157

  
158
  $form->{shipto} = 1 if $editing || $form->{convert_from_oe_ids} || $form->{convert_from_do_ids};
159 158
  IS->get_customer(\%myconfig, \%$form);
160 159

  
161 160
  #quote all_customer Bug 133
......
962 961

  
963 962
  $form->{id}     = '';
964 963
  $form->{rowcount}--;
965
  $form->{shipto} = 1;
966 964

  
967 965

  
968 966
  $form->{title}  = $locale->text('Add Credit Note');
bin/mozilla/oe.pl
257 257
  $form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"};
258 258

  
259 259
  $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id delivery_term_id currency));
260
  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
261 260

  
262 261
  # get customer / vendor
263 262
  IR->get_vendor(\%myconfig, \%$form)   if $form->{type} =~ /(purchase_order|request_quotation)/;
......
1429 1428
  $form->{convert_from_oe_ids} = $form->{id};
1430 1429
  $form->{transdate}           = $form->{invdate} = $form->current_date(\%myconfig);
1431 1430
  $form->{duedate}             = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
1432
  $form->{shipto}              = 1;
1433 1431
  $form->{defaultcurrency}     = $form->get_default_currency(\%myconfig);
1434 1432

  
1435 1433
  delete @{$form}{qw(id closed)};
......
1662 1660
  $form->{direct_delivery_checked} = 1;
1663 1661
  delete @{$form}{grep /^shipto/, keys %{ $form }};
1664 1662
  map { s/^CFDD_//; $form->{$_} = $form->{"CFDD_${_}"} } grep /^CFDD_/, keys %{ $form };
1665
  $form->{shipto} = 1;
1666 1663
  $form->{CFDD_shipto} = 1;
1667 1664
  purchase_order();
1668 1665
  $main::lxdebug->leave_sub();

Auch abrufbar als: Unified diff