Revision d13114c0
Von Tamino Steinert vor 8 Tagen hinzugefügt
- ID d13114c01420dfdd4e0f53909647cf495e111c04
- Vorgänger e84b30f1
SL/Controller/Part.pm | ||
---|---|---|
22 | 22 |
use SL::DB::Part; |
23 | 23 |
use SL::DB::PartsGroup; |
24 | 24 |
use SL::DB::PriceRuleItem; |
25 |
use SL::DB::PartLabelPrint; |
|
25 | 26 |
use SL::DB::PurchaseBasketItem; |
26 | 27 |
use SL::DB::Shop; |
27 | 28 |
use SL::Helper::Flash; |
... | ... | |
34 | 35 |
use SL::MoreCommon qw(save_form); |
35 | 36 |
use SL::Presenter::EscapedText qw(escape is_escaped); |
36 | 37 |
use SL::Presenter::Part; |
37 |
use SL::Presenter::Tag qw(select_tag); |
|
38 |
use SL::Presenter::Tag qw(select_tag checkbox_tag); |
|
39 |
use SL::ReportGenerator; |
|
40 |
use SL::Controller::Helper::ReportGenerator; |
|
38 | 41 |
|
39 | 42 |
use Rose::Object::MakeMethods::Generic ( |
40 | 43 |
'scalar --get_set_init' => [ qw(parts models part p warehouses multi_items_models |
... | ... | |
138 | 141 |
$self->js_reset_part_after_save(); |
139 | 142 |
$self->js->flash('info', t8('The item has been saved.')); |
140 | 143 |
|
144 |
$self->print_part($self->part); |
|
145 |
|
|
146 |
$self->js->render(); |
|
147 |
} |
|
148 |
|
|
149 |
sub action_print_multi { |
|
150 |
my ($self) = @_; |
|
151 |
|
|
152 |
my $parts = SL::DB::Manager::Part->get_all(where => [id => $::form->{ids}]); |
|
153 |
foreach my $part(@{$parts}) { |
|
154 |
$self->print_part($part); |
|
155 |
} |
|
156 |
|
|
157 |
$self->js->render(); |
|
158 |
} |
|
159 |
|
|
160 |
sub print_part { |
|
161 |
my ($self, $part) = @_; |
|
162 |
|
|
141 | 163 |
my $formname = $::form->{print_options}->{formname}; |
142 | 164 |
my $format = $::form->{print_options}->{format}; |
143 | 165 |
my $media = $::form->{print_options}->{media}; |
... | ... | |
147 | 169 |
$language = SL::DB::Manager::Language->find_by( |
148 | 170 |
id => $::form->{print_options}->{language_id} |
149 | 171 |
); |
172 |
} |
|
150 | 173 |
my $copies; |
151 | 174 |
if ($::form->{print_options}->{part_labels_for_stock}) { |
152 |
$copies = $self->part->stockqty;
|
|
175 |
$copies = $part->stockqty; |
|
153 | 176 |
} else { |
154 | 177 |
$copies = $::form->{print_options}->{copies}; |
155 | 178 |
} |
... | ... | |
178 | 201 |
} |
179 | 202 |
|
180 | 203 |
my $print_form = Form->new(''); |
181 |
$print_form->{part} = $self->part;
|
|
204 |
$print_form->{part} = $part; |
|
182 | 205 |
|
183 | 206 |
# for doc_filename |
184 | 207 |
$print_form->{type} = 'part'; |
185 | 208 |
$print_form->{formname} = $formname; |
186 | 209 |
$print_form->{format} = $format; |
187 |
$print_form->{partnumber} = $self->part->partnumber;
|
|
210 |
$print_form->{partnumber} = $part->partnumber; |
|
188 | 211 |
$print_form->{language} = $language && ("_" . |
189 | 212 |
($language->template_code || $language->description) |
190 | 213 |
); |
... | ... | |
244 | 267 |
->flash('error', t8("Creating the PDF failed!")) |
245 | 268 |
->flash('error', $@); |
246 | 269 |
}; |
247 |
|
|
248 |
$self->js->render(); |
|
249 | 270 |
} |
250 | 271 |
|
251 | 272 |
sub action_save_and_purchase_order { |
... | ... | |
915 | 936 |
$self->render(\$output, { layout => 0, process => 0 }); |
916 | 937 |
} |
917 | 938 |
|
939 |
sub action_search_print_part_labels_of_changed_prices { |
|
940 |
my ($self) = @_; |
|
941 |
$self->_setup_search_print_part_labels_of_changed_prices_action_bar(); |
|
942 |
|
|
943 |
$::form->{filter} ||= {}; |
|
944 |
|
|
945 |
$::form->{filter}->{price_change_printed} ||= { |
|
946 |
template => 'part_label', |
|
947 |
print_type => 'stock', |
|
948 |
printed => 0 |
|
949 |
}; |
|
950 |
|
|
951 |
my $price_change_printed =$::form->{filter}->{price_change_printed}; |
|
952 |
$::form->{filter}->{price_change_printed} = \$price_change_printed; |
|
953 |
|
|
954 |
my $report = SL::ReportGenerator->new(\%::myconfig, $::form); |
|
955 |
|
|
956 |
$self->models->finalize; # for filter laundering |
|
957 |
|
|
958 |
$::form->{filter}->{price_change_printed} = ${$::form->{filter}->{price_change_printed}}; |
|
959 |
|
|
960 |
my $callback = $self->models->get_callback; |
|
961 |
|
|
962 |
$self->{report} = $report; |
|
963 |
|
|
964 |
my @columns_order = qw( |
|
965 |
id_check_box |
|
966 |
partnumber |
|
967 |
ean |
|
968 |
description |
|
969 |
notes |
|
970 |
partsgroup |
|
971 |
); |
|
972 |
|
|
973 |
my @default_columns = qw( |
|
974 |
id_check_box |
|
975 |
partnumber |
|
976 |
ean |
|
977 |
description |
|
978 |
partsgroup |
|
979 |
); |
|
980 |
|
|
981 |
my %column_defs = ( |
|
982 |
id_check_box => { |
|
983 |
raw_data => sub { |
|
984 |
checkbox_tag("ids[]", value => $_[0]->id, "data-checkall" => 1, checked => 1); |
|
985 |
}, |
|
986 |
raw_header_data => checkbox_tag("", id => "check_all", checkall => "[data-checkall=2]", checked => 1), |
|
987 |
text => ' ', |
|
988 |
}, |
|
989 |
partnumber => { |
|
990 |
obj_link => sub {$self->url_for(action => 'edit', 'part.id' => $_[0]->id, callback => $callback)}, |
|
991 |
sub => sub { $_[0]->partnumber }, |
|
992 |
}, |
|
993 |
ean => { |
|
994 |
obj_link => sub {$self->url_for(action => 'edit', 'part.id' => $_[0]->id, callback => $callback)}, |
|
995 |
sub => sub { $_[0]->ean }, |
|
996 |
}, |
|
997 |
description => { |
|
998 |
sub => sub {$_[0]->description }, |
|
999 |
}, |
|
1000 |
notes => { |
|
1001 |
sub => sub {$_[0]->notes }, |
|
1002 |
}, |
|
1003 |
partsgroup => { |
|
1004 |
sub => sub {t8($_[0]->partsgroup ? $_[0]->partsgroup->partsgroup : '') }, |
|
1005 |
}, |
|
1006 |
); |
|
1007 |
|
|
1008 |
$column_defs{$_}->{text} ||= t8( $self->models->get_sort_spec->{$_}->{title} || $_ ) |
|
1009 |
for keys %column_defs; |
|
1010 |
|
|
1011 |
unless ($::form->{active_in_report}) { |
|
1012 |
$::form->{active_in_report}->{$_} = 1 foreach @default_columns; |
|
1013 |
} |
|
1014 |
|
|
1015 |
$self->models->add_additional_url_params( |
|
1016 |
active_in_report => $::form->{active_in_report}); |
|
1017 |
map { $column_defs{$_}->{visible} = $::form->{active_in_report}->{"$_"} || 0 } |
|
1018 |
grep {$_ ne 'id_check_box'} |
|
1019 |
keys %column_defs; |
|
1020 |
|
|
1021 |
# make all sortable |
|
1022 |
my @sortable = |
|
1023 |
grep {$_ ne 'id_check_box'} |
|
1024 |
keys %column_defs; |
|
1025 |
|
|
1026 |
use SL::Presenter::Filter::Part; |
|
1027 |
my $filter_html = SL::Presenter::Filter::Part::filter( |
|
1028 |
$::form->{filter}, |
|
1029 |
show_price_change_printed_filter => 1, |
|
1030 |
active_in_report => $::form->{active_in_report} |
|
1031 |
); |
|
1032 |
|
|
1033 |
$report->set_options( |
|
1034 |
std_column_visibility => 1, |
|
1035 |
controller_class => 'Part', |
|
1036 |
output_format => 'HTML', |
|
1037 |
raw_top_info_text => $self->render( |
|
1038 |
'part/_print_part_labels_of_changed_prices_report_top', |
|
1039 |
{ output => 0 }, |
|
1040 |
FILTER_HTML => $filter_html, |
|
1041 |
), |
|
1042 |
raw_bottom_info_text => $self->render( |
|
1043 |
'part/_print_part_labels_of_changed_prices_report_bottom', |
|
1044 |
{ output => 0 }, |
|
1045 |
models => $self->models |
|
1046 |
), |
|
1047 |
title => t8('Parts with Changed Prices'), |
|
1048 |
allow_pdf_export => 1, |
|
1049 |
allow_csv_export => 1, |
|
1050 |
); |
|
1051 |
|
|
1052 |
$report->set_columns(%column_defs); |
|
1053 |
$report->set_column_order(@columns_order); |
|
1054 |
$report->set_export_options( |
|
1055 |
'search_print_part_labels_of_changed_prices', |
|
1056 |
qw(filter active_in_report) |
|
1057 |
); |
|
1058 |
$report->set_options_from_form; |
|
1059 |
$self->models->set_report_generator_sort_options( |
|
1060 |
report => $report, |
|
1061 |
sortable_columns => \@sortable |
|
1062 |
); |
|
1063 |
|
|
1064 |
$self->report_generator_list_objects( |
|
1065 |
report => $report, |
|
1066 |
objects => $self->models->get, |
|
1067 |
); |
|
1068 |
} |
|
1069 |
|
|
918 | 1070 |
sub action_print_label { |
919 | 1071 |
my ($self) = @_; |
920 | 1072 |
# TODO: implement |
... | ... | |
1437 | 1589 |
dir => 1, |
1438 | 1590 |
}, |
1439 | 1591 |
partnumber => t8('Partnumber'), |
1440 |
description => t8('Description'), |
|
1592 |
description => t8('Description'), |
|
1593 |
ean => t8('EAN'), |
|
1594 |
notes => t8('Notes'), |
|
1595 |
partsgroup => t8('Partsgroup'), |
|
1441 | 1596 |
}, |
1442 | 1597 |
with_objects => [ qw(unit_obj classification) ], |
1443 | 1598 |
); |
... | ... | |
2025 | 2180 |
} |
2026 | 2181 |
} |
2027 | 2182 |
|
2183 |
sub _setup_search_print_part_labels_of_changed_prices_action_bar { |
|
2184 |
my ($self, %params) = @_; |
|
2185 |
|
|
2186 |
for my $bar ($::request->layout->get('actionbar')) { |
|
2187 |
$bar->add( |
|
2188 |
action => [ |
|
2189 |
t8('Update'), |
|
2190 |
submit => [ |
|
2191 |
'#filter_form', { |
|
2192 |
action => 'Part/search_print_part_labels_of_changed_prices', |
|
2193 |
} |
|
2194 |
], |
|
2195 |
accesskey => 'enter', |
|
2196 |
], |
|
2197 |
combobox => [ |
|
2198 |
action => [ |
|
2199 |
t8('Print'), |
|
2200 |
], |
|
2201 |
action => [ |
|
2202 |
t8('Print one Label'), |
|
2203 |
call => [ 'kivi.Part.show_print_options' ], |
|
2204 |
], |
|
2205 |
action => [ |
|
2206 |
t8('Print Labels for Stock'), |
|
2207 |
call => [ 'kivi.Part.show_part_labels_for_stock_print_options' ], |
|
2208 |
], |
|
2209 |
], |
|
2210 |
); |
|
2211 |
} |
|
2212 |
} |
|
2213 |
|
|
2028 | 2214 |
1; |
2029 | 2215 |
|
2030 | 2216 |
__END__ |
SL/DB/Manager/Part.pm | ||
---|---|---|
34 | 34 |
return or => [ map { $prefix . $_ => $value } qw(partnumber description ean customerprices.customer_partnumber) ], |
35 | 35 |
$prefix . 'customerprices'; |
36 | 36 |
}, |
37 |
price_change_printed => sub { |
|
38 |
my ($key, $value, $prefix) = @_; |
|
39 |
die "value must be a scalar ref to a hash ref" |
|
40 |
unless ref $value eq 'REF' && ref ($$value) eq 'HASH'; |
|
41 |
|
|
42 |
my %value = %$$value; |
|
43 |
|
|
44 |
my $template = $value{template}; |
|
45 |
my $print_type = $value{print_type}; |
|
46 |
my $printed = $value{printed}; |
|
47 |
|
|
48 |
my $comp = !!$printed ? '>' : '<='; |
|
49 |
|
|
50 |
# table part_table is aliased as t1 |
|
51 |
return |
|
52 |
[\qq{( |
|
53 |
SELECT DISTINCT CASE WHEN count(*) $comp 1 THEN FALSE ELSE TRUE END |
|
54 |
FROM ( |
|
55 |
( |
|
56 |
-- last printed or first price |
|
57 |
SELECT t2_sellprice |
|
58 |
FROM ( |
|
59 |
( |
|
60 |
SELECT |
|
61 |
parts_price_history.sellprice AS t2_sellprice, |
|
62 |
parts_price_history.valid_from AS t2_valid_from, |
|
63 |
parts_price_history.id as t2_id |
|
64 |
FROM parts_price_history |
|
65 |
JOIN part_label_prints |
|
66 |
ON (parts_price_history.id = part_label_prints.price_history_id) |
|
67 |
WHERE parts_price_history.part_id = t1.id AND ( |
|
68 |
('' = ? OR part_label_prints.template = ?) AND |
|
69 |
('' = ? OR part_label_prints.print_type = ?) |
|
70 |
) |
|
71 |
ORDER by |
|
72 |
parts_price_history.valid_from DESC, |
|
73 |
parts_price_history.id DESC |
|
74 |
LIMIT 1 |
|
75 |
) UNION ( |
|
76 |
SELECT |
|
77 |
parts_price_history.sellprice AS t2_sellprice, |
|
78 |
parts_price_history.valid_from AS t2_valid_from, |
|
79 |
parts_price_history.id as t2_id |
|
80 |
FROM parts_price_history |
|
81 |
WHERE part_id = t1.id |
|
82 |
ORDER BY |
|
83 |
parts_price_history.valid_from ASC, |
|
84 |
parts_price_history.id ASC |
|
85 |
LIMIT 1 |
|
86 |
) |
|
87 |
) |
|
88 |
ORDER by |
|
89 |
t2_valid_from DESC, |
|
90 |
t2_id DESC |
|
91 |
LIMIT 1 |
|
92 |
) UNION ( |
|
93 |
-- current price |
|
94 |
SELECT parts_price_history.sellprice AS t2_sellprice |
|
95 |
FROM parts_price_history |
|
96 |
WHERE part_id = t1.id |
|
97 |
ORDER BY |
|
98 |
parts_price_history.valid_from DESC, |
|
99 |
parts_price_history.id |
|
100 |
DESC LIMIT 1 |
|
101 |
) |
|
102 |
) |
|
103 |
)} => ($template, $template, $print_type, $print_type || 'stock') |
|
104 |
] => \'TRUE'; |
|
105 |
}, |
|
37 | 106 |
); |
38 | 107 |
|
39 | 108 |
sub type_filter { |
js/kivi.Part.js | ||
---|---|---|
50 | 50 |
$.post("controller.pl", data, kivi.eval_json_result); |
51 | 51 |
}; |
52 | 52 |
|
53 |
ns.print_multi = function() { |
|
54 |
$('#print_options').dialog('close'); |
|
55 |
|
|
56 |
var data = $('#report_form').serializeArray(); |
|
57 |
data = data.concat($('#print_options_form').serializeArray()); |
|
58 |
data.push({ name: 'action', value: 'Part/print_multi' }); |
|
59 |
|
|
60 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
61 |
}; |
|
62 |
|
|
53 | 63 |
ns.show_part_labels_for_stock_print_options = function() { |
54 | 64 |
kivi.popup_dialog({ |
55 | 65 |
id: 'print_part_labels_for_stock_print_options', |
56 | 66 |
dialog: { |
57 |
title: kivi.t8('Part Labels for Stock Print options'),
|
|
67 |
title: kivi.t8('Print options for Stock Print'),
|
|
58 | 68 |
width: 800, |
59 | 69 |
height: 300 |
60 | 70 |
} |
61 | 71 |
}); |
62 |
} |
|
72 |
};
|
|
63 | 73 |
|
64 | 74 |
ns.save_and_print_part_labels_for_stock = function() { |
65 | 75 |
$('#print_part_labels_for_stock_print_options').dialog('close'); |
... | ... | |
71 | 81 |
$.post("controller.pl", data, kivi.eval_json_result); |
72 | 82 |
}; |
73 | 83 |
|
84 |
ns.print_multi_part_labels_for_stock = function() { |
|
85 |
$('#print_part_labels_for_stock_print_options').dialog('close'); |
|
86 |
|
|
87 |
var data = $('#report_form').serializeArray(); |
|
88 |
data = data.concat($('#print_part_labels_for_stock_print_options_form').serializeArray()); |
|
89 |
data.push({ name: 'action', value: 'Part/print_multi' }); |
|
90 |
|
|
91 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
92 |
}; |
|
93 |
|
|
74 | 94 |
ns.delete = function() { |
75 | 95 |
var data = $('#ic').serializeArray(); |
76 | 96 |
data.push({ name: 'action', value: 'Part/delete' }); |
js/locale/de.js | ||
---|---|---|
133 | 133 |
"Previous month":"vorheriger Monat", |
134 | 134 |
"Price Types":"Preistypen", |
135 | 135 |
"Print options":"Druckoptionen", |
136 |
"Print options for Stock Print":"Druckoptionen für Bestand-Druck", |
|
136 | 137 |
"Print record":"Beleg drucken", |
137 | 138 |
"Project link actions":"Projektverknüpfungs-Aktionen", |
138 | 139 |
"Project picker":"Projektauswahl", |
js/locale/en.js | ||
---|---|---|
133 | 133 |
"Previous month":"", |
134 | 134 |
"Price Types":"", |
135 | 135 |
"Print options":"", |
136 |
"Print options for Stock Print":"", |
|
136 | 137 |
"Print record":"", |
137 | 138 |
"Project link actions":"", |
138 | 139 |
"Project picker":"", |
locale/de/all | ||
---|---|---|
2837 | 2837 |
'Parts Classification' => 'Artikel-Klassifizierung', |
2838 | 2838 |
'Parts Inventory' => 'Warenliste', |
2839 | 2839 |
'Parts Master Data' => 'Artikelstammdaten', |
2840 |
'Parts with Changed Prices' => 'Artikel mit Preisänderung', |
|
2840 | 2841 |
'Parts with existing part numbers' => 'Artikel mit existierender Artikelnummer', |
2841 | 2842 |
'Parts, services and assemblies' => 'Waren, Dienstleistungen und Erzeugnisse', |
2842 | 2843 |
'Partsgroup' => 'Warengruppe', |
... | ... | |
3015 | 3016 |
'Previous transnumber text' => 'Letzte Buchung mit der Buchungsnummer', |
3016 | 3017 |
'Price' => 'Preis', |
3017 | 3018 |
'Price #1' => 'Preis #1', |
3019 |
'Price Change Printed' => 'Preisänderung gedruckt', |
|
3018 | 3020 |
'Price Factor' => 'Preisfaktor', |
3019 | 3021 |
'Price Factors' => 'Preisfaktoren', |
3020 | 3022 |
'Price List' => 'Preisliste', |
... | ... | |
3043 | 3045 |
'Prices' => 'Preise', |
3044 | 3046 |
'Prices & Discounts' => 'Preise & Rabatte', |
3045 | 3047 |
'Print' => 'Drucken', |
3048 |
'Print Labels for Stock' => 'Etikettendruck für Bestand', |
|
3049 |
'Print Part Labels of Changed Prices' => 'Etikettendruck für geänderte Preise', |
|
3050 |
'Print Type' => 'Drucktyp', |
|
3046 | 3051 |
'Print and Post' => 'Drucken und Buchen', |
3047 | 3052 |
'Print automatically' => 'Automatisch ausdrucken', |
3048 | 3053 |
'Print both sided' => 'Beidseitig ausdrucken', |
... | ... | |
3051 | 3056 |
'Print destination (copy)' => 'Druckausgabe (Kopie)', |
3052 | 3057 |
'Print dunnings' => 'Mahnungen drucken', |
3053 | 3058 |
'Print list' => 'Liste ausdrucken', |
3059 |
'Print one Label' => 'Etikettendruck einzeln', |
|
3054 | 3060 |
'Print options' => 'Druckoptionen', |
3061 |
'Print options for Stock Print' => 'Druckoptionen für Bestand-Druck', |
|
3055 | 3062 |
'Print record' => 'Beleg drucken', |
3056 | 3063 |
'Print template base file name' => 'Druckvorlagen-Basisdateiname', |
3057 | 3064 |
'Print templates' => 'Druckvorlagen', |
3058 | 3065 |
'Print templates to use' => 'Zu verwendende Druckvorlagen', |
3059 | 3066 |
'Printdate' => 'Druckdatum', |
3067 |
'Printed' => 'Gedruckt', |
|
3060 | 3068 |
'Printer' => 'Drucker', |
3061 | 3069 |
'Printer Command' => 'Druckbefehl', |
3062 | 3070 |
'Printer Description' => 'Druckerbeschreibung', |
... | ... | |
3468 | 3476 |
'Save and Invoice' => 'Speichern und Rechnung erfassen', |
3469 | 3477 |
'Save and Invoice for Advance Payment' => 'Speichern und Anzahlungsrechnung', |
3470 | 3478 |
'Save and Order' => 'Speichern und Auftrag erfassen', |
3479 |
'Save and Print Labels for Stock' => 'Speichern und Etiketten für Bestand drucken', |
|
3471 | 3480 |
'Save and Purchase Delivery Order' => 'Speichern und Lieferschein (Einkauf)', |
3472 | 3481 |
'Save and Purchase Delivery Order with item selection' => 'Speichern und Lieferschein (Einkauf) mit Artikelauswahl', |
3473 | 3482 |
'Save and Purchase Order' => 'Speichern und Lieferantenauftrag', |
... | ... | |
3750 | 3759 |
'Show »not delivered qty/value« column in sales and purchase orders' => 'Spalte »Nicht gelieferte Menge/Wert« in Aufträgen anzeigen', |
3751 | 3760 |
'Signature' => 'Unterschrift', |
3752 | 3761 |
'Since bin is not enforced in the parts data, please specify a bin where goods without a specified bin will be put.' => 'Da Lagerplätze kein Pflichtfeld sind, geben Sie bitte einen Lagerplatz an, in dem Waren ohne spezifizierten Lagerplatz eingelagert werden sollen.', |
3762 |
'Single' => 'Einzeln', |
|
3753 | 3763 |
'Single quotes' => 'Einfache Anführungszeichen', |
3754 | 3764 |
'Single values in item mode, cumulated values in invoice mode' => 'Einzelwerte im Artikelmodus, kumulierte Werte im Rechnungsmodus', |
3755 | 3765 |
'Singular' => 'Singular', |
... | ... | |
3817 | 3827 |
'Step 2' => 'Schritt 2', |
3818 | 3828 |
'Step 2 -- Watch status' => 'Schritt 2 -- Status beobachten', |
3819 | 3829 |
'Steuersatz' => 'Steuersatz', |
3830 |
'Stock' => 'Bestand', |
|
3820 | 3831 |
'Stock Local/Shop' => 'Bestand Lokal/Online', |
3821 | 3832 |
'Stock Qty for Date' => 'Lagerbestand am', |
3822 | 3833 |
'Stock for part #1' => 'Bestand für Artikel #1', |
... | ... | |
4208 | 4219 |
'The order intake has been deleted' => 'Der Auftragseingang wurde gelöscht', |
4209 | 4220 |
'The order intake has been saved' => 'Der Auftragseingang wurde gespeichert', |
4210 | 4221 |
'The package name is invalid.' => 'Der Paketname ist ungültig.', |
4222 |
'The part has no stock.' => 'Der Artikel hat kein Bestand', |
|
4211 | 4223 |
'The partnumber already exists!' => 'Die Artikelnummer wird bereits verwendet.', |
4212 | 4224 |
'The partnumber already exists.' => 'Die Artikelnummer wird bereits verwendet.', |
4213 | 4225 |
'The partnumber is already being used' => 'Der Artikel ist bereits in Verwendung', |
locale/en/all | ||
---|---|---|
2836 | 2836 |
'Parts Classification' => '', |
2837 | 2837 |
'Parts Inventory' => '', |
2838 | 2838 |
'Parts Master Data' => '', |
2839 |
'Parts with Changed Prices' => '', |
|
2839 | 2840 |
'Parts with existing part numbers' => '', |
2840 | 2841 |
'Parts, services and assemblies' => '', |
2841 | 2842 |
'Partsgroup' => '', |
... | ... | |
3014 | 3015 |
'Previous transnumber text' => '', |
3015 | 3016 |
'Price' => '', |
3016 | 3017 |
'Price #1' => '', |
3018 |
'Price Change Printed' => '', |
|
3017 | 3019 |
'Price Factor' => '', |
3018 | 3020 |
'Price Factors' => '', |
3019 | 3021 |
'Price List' => '', |
... | ... | |
3042 | 3044 |
'Prices' => '', |
3043 | 3045 |
'Prices & Discounts' => '', |
3044 | 3046 |
'Print' => '', |
3047 |
'Print Labels for Stock' => '', |
|
3048 |
'Print Part Labels of Changed Prices' => '', |
|
3049 |
'Print Type' => '', |
|
3045 | 3050 |
'Print and Post' => '', |
3046 | 3051 |
'Print automatically' => '', |
3047 | 3052 |
'Print both sided' => '', |
... | ... | |
3050 | 3055 |
'Print destination (copy)' => '', |
3051 | 3056 |
'Print dunnings' => '', |
3052 | 3057 |
'Print list' => '', |
3058 |
'Print one Label' => '', |
|
3053 | 3059 |
'Print options' => '', |
3060 |
'Print options for Stock Print' => '', |
|
3054 | 3061 |
'Print record' => '', |
3055 | 3062 |
'Print template base file name' => '', |
3056 | 3063 |
'Print templates' => '', |
3057 | 3064 |
'Print templates to use' => '', |
3058 | 3065 |
'Printdate' => '', |
3066 |
'Printed' => '', |
|
3059 | 3067 |
'Printer' => '', |
3060 | 3068 |
'Printer Command' => '', |
3061 | 3069 |
'Printer Description' => '', |
... | ... | |
3467 | 3475 |
'Save and Invoice' => '', |
3468 | 3476 |
'Save and Invoice for Advance Payment' => '', |
3469 | 3477 |
'Save and Order' => '', |
3478 |
'Save and Print Labels for Stock' => '', |
|
3470 | 3479 |
'Save and Purchase Delivery Order' => '', |
3471 | 3480 |
'Save and Purchase Delivery Order with item selection' => '', |
3472 | 3481 |
'Save and Purchase Order' => '', |
... | ... | |
3749 | 3758 |
'Show »not delivered qty/value« column in sales and purchase orders' => '', |
3750 | 3759 |
'Signature' => '', |
3751 | 3760 |
'Since bin is not enforced in the parts data, please specify a bin where goods without a specified bin will be put.' => '', |
3761 |
'Single' => '', |
|
3752 | 3762 |
'Single quotes' => '', |
3753 | 3763 |
'Single values in item mode, cumulated values in invoice mode' => '', |
3754 | 3764 |
'Singular' => '', |
... | ... | |
3816 | 3826 |
'Step 2' => '', |
3817 | 3827 |
'Step 2 -- Watch status' => '', |
3818 | 3828 |
'Steuersatz' => '', |
3829 |
'Stock' => '', |
|
3819 | 3830 |
'Stock Local/Shop' => '', |
3820 | 3831 |
'Stock Qty for Date' => '', |
3821 | 3832 |
'Stock for part #1' => '', |
... | ... | |
4206 | 4217 |
'The order intake has been deleted' => '', |
4207 | 4218 |
'The order intake has been saved' => '', |
4208 | 4219 |
'The package name is invalid.' => '', |
4220 |
'The part has no stock.' => '', |
|
4209 | 4221 |
'The partnumber already exists!' => '', |
4210 | 4222 |
'The partnumber already exists.' => '', |
4211 | 4223 |
'The partnumber is already being used' => '', |
menus/user/00-erp.yaml | ||
---|---|---|
96 | 96 |
action: RequirementSpec/new |
97 | 97 |
is_template: 1 |
98 | 98 |
- parent: master_data |
99 |
id: master_data_update_prices |
|
99 |
id: master_data_prices |
|
100 |
name: Prices |
|
101 |
order: 800 |
|
102 |
- parent: master_data_prices |
|
103 |
id: master_data_prices_update_prices |
|
100 | 104 |
name: Update Prices |
101 | 105 |
icon: prices_update |
102 |
order: 800
|
|
106 |
order: 100
|
|
103 | 107 |
access: part_service_assembly_edit & part_service_assembly_edit_prices |
104 | 108 |
params: |
105 | 109 |
action: PartsPriceUpdate/search_update_prices |
106 |
- parent: master_data |
|
107 |
id: master_data_price_rules |
|
110 |
- parent: master_data_prices |
|
111 |
id: master_data_prices_printing_part_labels |
|
112 |
name: Print Part Labels of Changed Prices |
|
113 |
order: 200 |
|
114 |
access: part_service_assembly_details |
|
115 |
params: |
|
116 |
action: Part/search_print_part_labels_of_changed_prices |
|
117 |
- parent: master_data_prices |
|
118 |
id: master_data_prices_price_rules |
|
108 | 119 |
name: Price Rules |
109 |
order: 900
|
|
120 |
order: 300
|
|
110 | 121 |
access: part_service_assembly_edit |
111 | 122 |
params: |
112 | 123 |
action: PriceRule/list |
templates/design40_webpages/part/_print_part_labels_of_changed_prices_report_bottom.html | ||
---|---|---|
1 |
[% USE L %] |
|
2 |
[%- L.paginate_controls(models=models) %] |
|
3 |
</form> <!-- report --> |
|
4 |
</div><!-- div report --> |
templates/design40_webpages/part/_print_part_labels_of_changed_prices_report_top.html | ||
---|---|---|
1 |
[%- USE L %] |
|
2 |
[%- USE LxERP %] |
|
3 |
|
|
4 |
[% BLOCK filter_toggle_panel %] |
|
5 |
[%- FILTER_HTML %] |
|
6 |
[% END %] |
|
7 |
|
|
8 |
<div class="wrapper"> |
|
9 |
[% SET display_status = 'open' %] |
|
10 |
[% INCLUDE 'common/toggle_panel.html' %] |
|
11 |
</div><!-- /.wrapper --> |
|
12 |
|
|
13 |
<div id="print_options" style="display:none"> |
|
14 |
<form method="post" action="controller.pl" id="print_options_form"> |
|
15 |
[% SELF.print_options %] |
|
16 |
<br> |
|
17 |
[% L.button_tag('kivi.Part.print_multi()', LxERP.t8('Print')) %] |
|
18 |
<a href="#" onclick="$('#print_options').dialog('close');" class="button neutral">[% LxERP.t8("Cancel") %]</a> |
|
19 |
</form> |
|
20 |
</div> |
|
21 |
|
|
22 |
<div id="print_part_labels_for_stock_print_options" style="display:none"> |
|
23 |
<form method="post" action="controller.pl" id="print_part_labels_for_stock_print_options_form"> |
|
24 |
[% SELF.part_labels_for_stock_print_options %] |
|
25 |
[% L.hidden_tag('print_options.part_labels_for_stock', 1) %] |
|
26 |
<br> |
|
27 |
[% L.button_tag('kivi.Part.print_multi_part_labels_for_stock()', LxERP.t8('Print')) %] |
|
28 |
<a href="#" onclick="$('#print_part_labels_for_stock_print_options').dialog('close');" class="button neutral">[% LxERP.t8("Cancel") %]</a> |
|
29 |
</form> |
|
30 |
</div> |
|
31 |
|
|
32 |
<div class="wrapper"><!-- div report --> |
|
33 |
<form id="report_form"> |
Auch abrufbar als: Unified diff
S:C:Part: Massendruck für Artikeletiketten