Revision 4ecb8321
Von Jan Büren vor etwa 10 Jahren hinzugefügt
SL/Controller/DeliveryPlan.pm | ||
---|---|---|
26 | 26 |
not_shipped_qty => t8('not shipped'), |
27 | 27 |
ordnumber => t8('Order'), |
28 | 28 |
customer => t8('Customer'), |
29 |
value_of_goods => t8('Value of goods'), |
|
29 | 30 |
); |
30 | 31 |
|
31 | 32 |
sub action_list { |
... | ... | |
47 | 48 |
my $report = SL::ReportGenerator->new(\%::myconfig, $::form); |
48 | 49 |
$self->{report} = $report; |
49 | 50 |
|
50 |
my @columns = qw(reqdate customer ordnumber partnumber description qty shipped_qty not_shipped_qty delivered_qty); |
|
51 |
my @columns = qw(reqdate customer ordnumber partnumber description qty shipped_qty not_shipped_qty delivered_qty value_of_goods);
|
|
51 | 52 |
my @sortable = qw(reqdate customer ordnumber partnumber description); |
52 | 53 |
|
53 | 54 |
my %column_defs = ( |
... | ... | |
66 | 67 |
obj_link => sub { $self->link_to($_[0]->order->customer) } }, |
67 | 68 |
); |
68 | 69 |
|
70 |
# add value of goods in report |
|
71 |
if ($main::auth->assert('sales_order_edit') && $::instance_conf->get_delivery_plan_show_value_of_goods) { |
|
72 |
$column_defs{value_of_goods} = { sub => sub { $::form->format_amount(\%::myconfig, $_[0]->value_of_goods, 2) . ' ' . $_[0]->taxincluded } }; |
|
73 |
} |
|
69 | 74 |
$column_defs{$_}->{text} = $sort_columns{$_} for keys %column_defs; |
70 | 75 |
|
71 | 76 |
$report->set_options( |
... | ... | |
127 | 132 |
sub delivery_plan_query { |
128 | 133 |
my $employee_id = SL::DB::Manager::Employee->current->id; |
129 | 134 |
my $oe_owner = $_[0]->all_edit_right ? '' : " oe.eployee_id = $employee_id AND"; |
135 |
# check delivered state for delivery_orders (transferred out) if enabled |
|
136 |
my $filter_delivered = $::instance_conf->get_delivery_plan_calculate_transferred_do ? |
|
137 |
"AND (SELECT delivered from delivery_orders where id = doi.delivery_order_id)" : ''; |
|
130 | 138 |
[ |
131 | 139 |
'order.customer_id' => { gt => 0 }, |
132 | 140 |
'order.closed' => 0, |
... | ... | |
155 | 163 |
rl.to_table = 'delivery_orders' AND |
156 | 164 |
rl.to_id = doi.delivery_order_id AND |
157 | 165 |
oi.parts_id = doi.parts_id |
166 |
$filter_delivered |
|
158 | 167 |
) tuples GROUP BY parts_id, trans_id, qty |
159 | 168 |
) partials |
160 | 169 |
LEFT JOIN orderitems oi ON partials.parts_id = oi.parts_id AND partials.trans_id = oi.trans_id |
... | ... | |
162 | 171 |
|
163 | 172 |
UNION ALL |
164 | 173 |
|
165 |
-- 4. since the join over record_links fails for sales_orders wihtout any delivery order
|
|
174 |
-- 4. since the join over record_links fails for sales_orders without any delivery order
|
|
166 | 175 |
-- retrieve those without record_links at all |
167 | 176 |
SELECT oi.id FROM orderitems oi, oe |
168 | 177 |
WHERE |
... | ... | |
207 | 216 |
(oe.quotation = 'f' OR oe.quotation IS NULL) AND NOT oe.closed |
208 | 217 |
) rl |
209 | 218 |
LEFT JOIN delivery_order_items doi ON (rl.to_id = doi.delivery_order_id) |
219 |
WHERE 1 = 1 |
|
220 |
$filter_delivered |
|
210 | 221 |
GROUP BY rl.from_id, doi.parts_id |
211 | 222 |
) agg ON (agg.oid = oi.trans_id AND agg.parts_id = oi.parts_id) |
212 | 223 |
LEFT JOIN oe ON oe.id = oi.trans_id |
SL/DB/MetaSetup/Default.pm | ||
---|---|---|
40 | 40 |
datev_check_on_gl_transaction => { type => 'boolean', default => 'true' }, |
41 | 41 |
datev_check_on_purchase_invoice => { type => 'boolean', default => 'true' }, |
42 | 42 |
datev_check_on_sales_invoice => { type => 'boolean', default => 'true' }, |
43 |
delivery_plan_calculate_transferred_do => { type => 'boolean', default => 'false', not_null => 1 }, |
|
44 |
delivery_plan_show_value_of_goods => { type => 'boolean', default => 'false', not_null => 1 }, |
|
43 | 45 |
dunning_ar => { type => 'integer' }, |
44 | 46 |
dunning_ar_amount_fee => { type => 'integer' }, |
45 | 47 |
dunning_ar_amount_interest => { type => 'integer' }, |
SL/DB/OrderItem.pm | ||
---|---|---|
50 | 50 |
return sum(map { AM->convert_unit($_->unit => $self->unit) * $_->qty } @doi_delivered); |
51 | 51 |
} |
52 | 52 |
|
53 |
sub value_of_goods { |
|
54 |
my ($self) = @_; |
|
55 |
|
|
56 |
my $price_factor = $self->price_factor ? $self->price_factor : 1; |
|
57 |
|
|
58 |
return ($self->qty * $self->sellprice * (1 - $self->discount ) / $price_factor); |
|
59 |
} |
|
60 |
|
|
61 |
sub taxincluded { |
|
62 |
my ($self) = @_; |
|
63 |
|
|
64 |
return SL::DB::Manager::Order->find_by(id => $self->trans_id)->taxincluded ? $::locale->text('WARN: Tax included value!') : ''; |
|
65 |
} |
|
53 | 66 |
1; |
locale/de/all | ||
---|---|---|
414 | 414 |
'CSV import: shipping addresses' => 'CSV-Import: Lieferadressen', |
415 | 415 |
'CTI settings' => 'CTI-Einstellungen', |
416 | 416 |
'Calculate' => 'Berechnen', |
417 |
'Calculate the value of goods for delivery plan (WARNING: Experimental (not taxincluded safe!)' => 'Warenverkaufswert anzeigen (Brutto / Netto), so wie im Auftrags-Beleg gespeichert. Benötigt das Recht: Verkaufs-Aufträge bearbeiten.', |
|
417 | 418 |
'Calling #1 now' => 'Wähle jetzt #1', |
418 | 419 |
'Can not create that quantity with current stock' => 'Diese Anzahl kann mit dem gegenwärtigen Lagerbestand nicht hergestellt werden.', |
419 | 420 |
'Cancel' => 'Abbrechen', |
... | ... | |
787 | 788 |
'Delivery Order(s) for full qty created' => 'Lieferschein(e) mit kompletter Menge erstellt', |
788 | 789 |
'Delivery Orders' => 'Lieferscheine', |
789 | 790 |
'Delivery Plan' => 'Lieferplan', |
791 |
'Delivery Plan check for transferred delivery orders' => 'Lieferplan berücksichtig den Status des Lieferscheins (ausgelagert / nicht ausgelagert)', |
|
790 | 792 |
'Delivery Plan for currently outstanding sales orders' => 'Lieferplan für offene Verkaufsaufträge', |
791 | 793 |
'Delivery Terms' => 'Lieferbedingungen', |
792 | 794 |
'Delivery terms' => 'Lieferbedingungen', |
... | ... | |
2170 | 2172 |
'Show Salesman' => 'Verkäufer anzeigen', |
2171 | 2173 |
'Show TODO list' => 'Aufgabenliste anzeigen', |
2172 | 2174 |
'Show Transfer via default' => 'Ein- / Auslagern über Standardlagerplatz anzeigen (zusätzlicher Knopf in Beleg Lieferschein)', |
2175 |
'Show Value of Goods for Delivery Plan' => 'Warenverkaufswert im Lieferplan anzeigen.', |
|
2173 | 2176 |
'Show administration link' => 'Link zur Administration anzeigen', |
2174 | 2177 |
'Show all parts' => 'Alle Artikel anzeigen', |
2175 | 2178 |
'Show by default' => 'Standardmäßig anzeigen', |
... | ... | |
2420 | 2423 |
'The dataset #1 has been created.' => 'Die Datenbank #1 wurde angelegt.', |
2421 | 2424 |
'The dataset #1 has been deleted.' => 'Die Datenbank #1 wurde gelöscht.', |
2422 | 2425 |
'The deductible amount' => 'Der abziehbare Skontobetrag', |
2426 |
'The default delivery plan only checks if all delivery orders have been created not if the goods are transferred. This feature will check if all the goods are transferred. Caveat: Only the state of the delivery orders are checked not partial transferred delivery orders (in technical terms: the table inventory is not checked' => 'Standardmässig wird beim Lieferplan überprüft, ob es eine vollständige Liefermenge über alle Lieferscheine gibt. Dies ist dann die Statusbedingung für geliefert oder nicht geliefert. Mit dieser Erweiterung wird geprüft ob die Lieferbelege auch wirklich ausgelagert sind oder nicht. Teilausgelagerte Lieferscheine werden allerdings nicht berücksichtigt (Technischer Hintergrund: Keine Überprüfung der Lagertabelle inventory).', |
|
2423 | 2427 |
'The default value depends on the variable type:' => 'Die Bedeutung des Standardwertes hängt vom Variablentypen ab:', |
2424 | 2428 |
'The delivery order has not been marked as delivered. The warehouse contents have not changed.' => 'Der Lieferschein wurde nicht als geliefert markiert. Der Lagerinhalt wurde nicht verändert.', |
2425 | 2429 |
'The delivery term has been created.' => 'Die Lieferbedingungen wurden angelegt.', |
... | ... | |
2793 | 2797 |
'Valid until' => 'gültig bis', |
2794 | 2798 |
'Valid/Obsolete' => 'Gültig/ungültig', |
2795 | 2799 |
'Value' => 'Wert', |
2800 |
'Value of goods' => 'Warenverkaufswert', |
|
2796 | 2801 |
'Variable' => 'Variable', |
2797 | 2802 |
'Variable Description' => 'Datenfeldbezeichnung', |
2798 | 2803 |
'Variable Name' => 'Datenfeldname (intern)', |
... | ... | |
2825 | 2830 |
'View warehouse content' => 'Lagerbestand ansehen', |
2826 | 2831 |
'View/edit all employees sales documents' => 'Bearbeiten/ansehen der Verkaufsdokumente aller Mitarbeiter', |
2827 | 2832 |
'Von Konto: ' => 'von Konto: ', |
2833 |
'WARN: Tax included value!' => 'ACHTUNG: Steuer im Preis inbegriffen!', |
|
2828 | 2834 |
'WHJournal' => 'Lagerbuchungen', |
2829 | 2835 |
'Warehouse' => 'Lager', |
2830 | 2836 |
'Warehouse From' => 'Quelllager', |
sql/Pg-upgrade2/defaults_add_delivery_plan_config.sql | ||
---|---|---|
1 |
-- @tag: defaults_add_delivery_plan_config |
|
2 |
-- @description: Konfigurative Erweiterungen für den Lieferplan (od) |
|
3 |
-- @depends: release_3_1_0 |
|
4 |
ALTER TABLE defaults ADD COLUMN delivery_plan_show_value_of_goods boolean NOT NULL DEFAULT FALSE; |
|
5 |
ALTER TABLE defaults ADD COLUMN delivery_plan_calculate_transferred_do boolean NOT NULL DEFAULT FALSE; |
|
6 |
|
templates/webpages/client_config/_warehouse.html | ||
---|---|---|
87 | 87 |
[% LxERP.t8('Any stock contents containing a best before date will be impossible to stock out otherwise.') %] |
88 | 88 |
</td> |
89 | 89 |
</tr> |
90 |
<tr><td colspan="3"><hr /></td></tr> |
|
91 |
<tr> |
|
92 |
<td align="right">[% LxERP.t8('Show Value of Goods for Delivery Plan') %]</td> |
|
93 |
<td> |
|
94 |
[% L.yes_no_tag('defaults.delivery_plan_show_value_of_goods', SELF.defaults.delivery_plan_show_value_of_goods) %] |
|
95 |
</td> |
|
96 |
<td> |
|
97 |
[% LxERP.t8('Calculate the value of goods for delivery plan (WARNING: Experimental (not taxincluded safe!)') %] |
|
98 |
</td> |
|
99 |
</tr> |
|
100 |
<tr> |
|
101 |
<td align="right">[% LxERP.t8('Delivery Plan check for transferred delivery orders') %]</td> |
|
102 |
<td> |
|
103 |
[% L.yes_no_tag('defaults.delivery_plan_calculate_transferred_do', SELF.defaults.delivery_plan_calculate_transferred_do) %] |
|
104 |
</td> |
|
105 |
<td> |
|
106 |
[% LxERP.t8('The default delivery plan only checks if all delivery orders have been created not if the goods are transferred. This feature will check if all the goods are transferred. Caveat: Only the state of the delivery orders are checked not partial transferred delivery orders (in technical terms: the table inventory is not checked') %] |
|
107 |
</td> |
|
108 |
</tr> |
|
90 | 109 |
</table> |
91 | 110 |
</div> |
Auch abrufbar als: Unified diff
Erweiterung Lieferplan Belege wirklich ausgelagert und Warenverkaufswert (default: aus)
Erweiterung Mandantenkonfiguration im Bereich Lager zum Einschalten von
a) Warenverkaufswert
Falls aktiviert erscheint eine neue Spalte im Lieferplan, die den Wert der
ausgeliefert Waren angibt. Berechnungen mit sellprice sind in der kivi immer
hakelig. Hier die getesten Fälle:
- Rabatt i.O.
- Preisfaktor i.O.
- Steuer im Preis inbegriffen (eine Warnung wird generiert).
b) Lieferplan berücksichtigt die tatsächlich ausgelagerten Lieferscheine
Falls der Firmenprozess zwei Rollen vorgibt (Lieferschein-Ersteller und
Lieferschein-Auslagerer), konnte dies mit dem vorhanden Bericht nicht klar
eingesehen werden. Entsprechend werden bei dieser Funktion nur die tatsächlich
ausgelagerten Lieferscheine berücksichtigt. Achtung: Teilausgelagerte Belege
werden nicht berücksichtigt (keine verknüpfung mit tabelle inventory)