Revision b6213d35
Von Moritz Bunkus vor mehr als 10 Jahren hinzugefügt
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
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.