]> wagnertech.de Git - mfinanz.git/commitdiff
Einkauf/Verkauf: Lieferadressenfelder nie aus Stammdaten vorbelegen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 26 Jun 2014 07:12:38 +0000 (09:12 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 26 Jun 2014 08:26:59 +0000 (10:26 +0200)
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.

SL/DO.pm
SL/Form.pm
SL/IR.pm
SL/IS.pm
SL/OE.pm
bin/mozilla/do.pl
bin/mozilla/io.pl
bin/mozilla/is.pl
bin/mozilla/oe.pl

index 1da5a8e2d107597bd330c6f8accfc3833a9df163..0960ad71f52248a178f9aff077145541382497e0 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -391,10 +391,10 @@ sub save {
              conv_i($form->{id}));
   do_query($form, $dbh, $query, @values);
 
-  # add shipto
   $form->{name} = $form->{ $form->{vc} };
   $form->{name} =~ s/--$form->{"$form->{vc}_id"}//;
 
+  # add shipto
   if (!$form->{shipto_id}) {
     $form->add_shipto($dbh, $form->{id}, "DO");
   }
index 9f0cf11bc3385cfbeaac74b3070906fa6b111883..f35327873d3ec8e0689689cd93f73ee5588e8656 100644 (file)
@@ -3337,11 +3337,10 @@ sub prepare_for_printing {
     $self->{"employee_${_}"} = $defaults->$_   for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
   }
 
-  # set shipto from billto unless set
-  my $has_shipto = any { $self->{"shipto$_"} } qw(name street zipcode city country contact);
-  if (!$has_shipto && ($self->{type} =~ m/^(?:purchase_order|request_quotation)$/)) {
-    $self->{shiptoname}   = $defaults->company;
-    $self->{shiptostreet} = $defaults->address;
+  # Load shipping address from database if shipto_id is set.
+  if ($self->{shipto_id}) {
+    my $shipto  = SL::DB::Shipto->new(id => $self->{shipto_id})->load;
+    $self->{$_} = $shipto->$_ for grep { m{^shipto} } map { $_->name } @{ $shipto->meta->columns };
   }
 
   my $language = $self->{language} ? '_' . $self->{language} : '';
index 301fe3b646e8ebc5e9cbe82f95e031c32d289658..931df6b4487849d59318ca6814843200f7f7df65 100644 (file)
--- a/SL/IR.pm
+++ b/SL/IR.pm
@@ -720,9 +720,10 @@ sub post_invoice {
   }
 
 
-  # add shipto
   $form->{name} = $form->{vendor};
   $form->{name} =~ s/--\Q$form->{vendor_id}\E//;
+
+  # add shipto
   $form->add_shipto($dbh, $form->{id}, "AP");
 
   # delete zero entries
@@ -1126,16 +1127,6 @@ sub get_vendor {
   }
   $sth->finish();
 
-  # get shipto if we do not convert an order or invoice
-  if (!$params->{shipto}) {
-    delete @{$params}{qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptoemail)};
-
-    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module= 'CT')|;
-    $ref = selectfirst_hashref_query($form, $dbh, $query, $vid);
-    @{$params}{keys %$ref} = @{$ref}{keys %$ref};
-    map { $params->{$_} = $ref->{$_} } keys %$ref;
-  }
-
   if (!$params->{id} && $params->{type} !~ /_(order|quotation)/) {
     # setup last accounts used
     $query =
index 64afc530a1abc7c4043bfcc2c2b90a217498f648..63420a54484a67bd9505c586e7150770932ef325 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -1145,10 +1145,10 @@ sub post_invoice {
     do_query($form, $dbh, qq|UPDATE ar SET paid = amount WHERE id = ?|, conv_i($form->{"id"}));
   }
 
-  # add shipto
   $form->{name} = $form->{customer};
   $form->{name} =~ s/--\Q$form->{customer_id}\E//;
 
+  # add shipto
   if (!$form->{shipto_id}) {
     $form->add_shipto($dbh, $form->{id}, "AR");
   }
@@ -1615,12 +1615,6 @@ sub retrieve_invoice {
 
     $form->{exchangerate} = $form->get_exchangerate($dbh, $form->{currency}, $form->{invdate}, "buy");
 
-    # get shipto
-    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module = 'AR')|;
-    $ref = selectfirst_hashref_query($form, $dbh, $query, $id);
-    delete $ref->{id};
-    map { $form->{$_} = $ref->{$_} } keys %{ $ref };
-
     foreach my $vc (qw(customer vendor)) {
       next if !$form->{"delivery_${vc}_id"};
       ($form->{"delivery_${vc}_string"}) = selectrow_query($form, $dbh, qq|SELECT name FROM customer WHERE id = ?|, $id);
@@ -1837,19 +1831,6 @@ sub get_customer {
   }
   $sth->finish;
 
-  # get shipto if we did not converted an order or invoice
-  if (!$form->{shipto}) {
-    map { delete $form->{$_} }
-      qw(shiptoname shiptodepartment_1 shiptodepartment_2
-         shiptostreet shiptozipcode shiptocity shiptocountry
-         shiptocontact shiptophone shiptofax shiptoemail);
-
-    $query = qq|SELECT * FROM shipto WHERE trans_id = ? AND module = 'CT'|;
-    $ref = selectfirst_hashref_query($form, $dbh, $query, $cid);
-    delete $ref->{id};
-    map { $form->{$_} = $ref->{$_} } keys %$ref;
-  }
-
   # setup last accounts used for this customer
   if (!$form->{id} && $form->{type} !~ /_(order|quotation)/) {
     $query =
index b6f653aed13d967ed37242f55a2f81c8f18831bf..8b073b9c58c9c288a421e238d68ddffca67f5246 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -609,10 +609,10 @@ sub save {
 
   $form->{ordtotal} = $amount;
 
-  # add shipto
   $form->{name} = $form->{ $form->{vc} };
   $form->{name} =~ s/--\Q$form->{"$form->{vc}_id"}\E//;
 
+  # add shipto
   if (!$form->{shipto_id}) {
     $form->add_shipto($dbh, $form->{id}, "OE");
   }
index 3e5e9dedc08a7daae052af773100fe1f5874cf36..c16f772d168591bb7c06bcdd45e7f80f4d642a86 100644 (file)
@@ -179,7 +179,6 @@ sub order_links {
                'ids' => $form->{id});
 
   $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes delivery_term_id currency));
-  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
 
   # get customer / vendor
   if ($form->{vc} eq 'vendor') {
@@ -801,7 +800,6 @@ sub invoice {
   require "bin/mozilla/$form->{script}";
 
   my $currency = $form->{currency};
-  $form->{shipto} = 1 if $form->{convert_from_do_ids};
   invoice_links();
 
   if ($form->{ordnumber}) {
index 7fc1ef1b8856a16bbeb96899e27eaf9b6cc23ccd..97218877be33c9e27bebebf3b9de45fff7852b81 100644 (file)
@@ -869,8 +869,6 @@ sub order {
   }
   $form->{script} = 'oe.pl';
 
-  $form->{shipto} = 1;
-
   $form->{rowcount}--;
 
   $form->{cp_id} *= 1;
@@ -935,8 +933,6 @@ sub quotation {
 
   $form->{script} = 'oe.pl';
 
-  $form->{shipto} = 1;
-
   $form->{rowcount}--;
 
   require "bin/mozilla/$form->{script}";
@@ -1417,28 +1413,6 @@ sub print_form {
     $form->get_shipto(\%myconfig);
   }
 
-  my @a = qw(name department_1 department_2 street zipcode city country contact phone fax email);
-
-  my $shipto = 1;
-
-  # if there is no shipto fill it in from billto
-  foreach my $item (@a) {
-    if ($form->{"shipto$item"}) {
-      $shipto = 0;
-      last;
-    }
-  }
-
-  if ($shipto) {
-    if (   $form->{formname} eq 'purchase_order'
-        || $form->{formname} eq 'request_quotation') {
-      $form->{shiptoname}   = $defaults->company;
-      $form->{shiptostreet} = $defaults->address;
-    } else {
-      map { $form->{"shipto$_"} = $form->{$_} } @a;
-    }
-  }
-
   $form->{notes} =~ s/^\s+//g;
 
   delete $form->{printer_command};
index ef8f5996e4d8c58b81bdf33f3824c0df203ed29f..b6c6298a0ab5bf471de0379f02c78e9f3a38adea 100644 (file)
@@ -155,7 +155,6 @@ sub invoice_links {
                         taxincluded currency cp_id intnotes id shipto_id
                         delivery_term_id));
 
-  $form->{shipto} = 1 if $editing || $form->{convert_from_oe_ids} || $form->{convert_from_do_ids};
   IS->get_customer(\%myconfig, \%$form);
 
   #quote all_customer Bug 133
@@ -962,7 +961,6 @@ sub credit_note {
 
   $form->{id}     = '';
   $form->{rowcount}--;
-  $form->{shipto} = 1;
 
 
   $form->{title}  = $locale->text('Add Credit Note');
index 4fff4f953da612863e82fac4aa32cf53be2edde9..9a8aea41e2e4be5403c7b34b55d09a360d86368a 100644 (file)
@@ -257,7 +257,6 @@ sub order_links {
   $form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"};
 
   $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id delivery_term_id currency));
-  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
 
   # get customer / vendor
   IR->get_vendor(\%myconfig, \%$form)   if $form->{type} =~ /(purchase_order|request_quotation)/;
@@ -1429,7 +1428,6 @@ sub invoice {
   $form->{convert_from_oe_ids} = $form->{id};
   $form->{transdate}           = $form->{invdate} = $form->current_date(\%myconfig);
   $form->{duedate}             = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
-  $form->{shipto}              = 1;
   $form->{defaultcurrency}     = $form->get_default_currency(\%myconfig);
 
   delete @{$form}{qw(id closed)};
@@ -1662,7 +1660,6 @@ sub check_for_direct_delivery_yes {
   $form->{direct_delivery_checked} = 1;
   delete @{$form}{grep /^shipto/, keys %{ $form }};
   map { s/^CFDD_//; $form->{$_} = $form->{"CFDD_${_}"} } grep /^CFDD_/, keys %{ $form };
-  $form->{shipto} = 1;
   $form->{CFDD_shipto} = 1;
   purchase_order();
   $main::lxdebug->leave_sub();