Revision a90eee6a
Von Werner Hahn vor mehr als 6 Jahren hinzugefügt
SL/Controller/ShopOrder.pm | ||
---|---|---|
6 | 6 |
|
7 | 7 |
use parent qw(SL::Controller::Base); |
8 | 8 |
|
9 |
use SL::BackgroundJob::ShopOrderMassTransfer; |
|
10 |
use SL::System::TaskServer; |
|
9 | 11 |
use SL::DB::ShopOrder; |
10 | 12 |
use SL::DB::ShopOrderItem; |
11 | 13 |
use SL::DB::Shop; |
14 |
use SL::DB::History; |
|
12 | 15 |
use SL::Shop; |
13 | 16 |
use SL::Presenter; |
17 |
use SL::Helper::Flash; |
|
14 | 18 |
use SL::Locale::String; |
15 | 19 |
use SL::Controller::Helper::ParseFilter; |
16 | 20 |
use Rose::Object::MakeMethods::Generic |
17 | 21 |
( |
18 |
'scalar --get_set_init' => [ qw(shop_order transferred) ], |
|
22 |
'scalar --get_set_init' => [ qw(shop_order transferred js) ],
|
|
19 | 23 |
); |
24 |
|
|
25 |
__PACKAGE__->run_before('setup'); |
|
26 |
|
|
20 | 27 |
use Data::Dumper; |
21 | 28 |
|
22 | 29 |
sub action_get_orders { |
... | ... | |
34 | 41 |
|
35 | 42 |
sub action_list { |
36 | 43 |
my ( $self ) = @_; |
37 |
$::lxdebug->dump(0, "WH: LIST ", \$::form); |
|
38 |
my %filter = ($::form->{filter} ? parse_filter($::form->{filter}) : query => [ transferred => 0 ]); |
|
44 |
my %filter = ($::form->{filter} ? parse_filter($::form->{filter}) : query => [ transferred => 0, obsolete => 0 ]); |
|
39 | 45 |
my $transferred = $::form->{filter}->{transferred_eq_ignore_empty} ne '' ? $::form->{filter}->{transferred_eq_ignore_empty} : ''; |
40 | 46 |
#$::lxdebug->dump(0, "WH: FILTER ", $::form->{filter}->{_eq_ignore_empty}." - ".$transferred); |
41 | 47 |
#$::lxdebug->dump(0, "WH: FILTER2 ", \%filter); |
... | ... | |
43 | 49 |
$sort_by .=$::form->{sort_dir} ? ' DESC' : ' ASC'; |
44 | 50 |
my $shop_orders = SL::DB::Manager::ShopOrder->get_all( %filter, sort_by => $sort_by, |
45 | 51 |
with_objects => ['shop_order_items'], |
52 |
with_objects => ['customer'], |
|
46 | 53 |
); |
47 |
$::lxdebug->dump(0, "WH: IMPORTS ", \$shop_orders); |
|
54 |
|
|
55 |
foreach my $shop_order(@{ $shop_orders }){ |
|
56 |
|
|
57 |
my $open_invoices = SL::DB::Manager::Invoice->get_all_count( |
|
58 |
query => [customer_id => $shop_order->{kivi_customer_id}, |
|
59 |
paid => {lt_sql => 'amount'}, |
|
60 |
], |
|
61 |
); |
|
62 |
$shop_order->{open_invoices} = $open_invoices; |
|
63 |
} |
|
64 |
$main::lxdebug->dump(0, 'WH:SHOPORDER ',\$shop_orders); |
|
65 |
|
|
66 |
|
|
48 | 67 |
$self->render('shop_order/list', |
49 | 68 |
title => t8('ShopOrders'), |
50 | 69 |
SHOPORDERS => $shop_orders, |
... | ... | |
55 | 74 |
sub action_show { |
56 | 75 |
my ( $self ) = @_; |
57 | 76 |
my $id = $::form->{id} || {}; |
58 |
my $shop_order = SL::DB::Manager::ShopOrder->find_by( id => $id ); |
|
77 |
my $shop_order = SL::DB::Manager::ShopOrder->get_all(query => [ id => $id ], |
|
78 |
with_objects => ['customer'], )->[0]; |
|
59 | 79 |
die "can't find shoporder with id $id" unless $shop_order; |
60 | 80 |
|
61 | 81 |
# the different importaddresscheck if there complete in the customer table to prevent duplicats inserts |
... | ... | |
83 | 103 |
#### |
84 | 104 |
|
85 | 105 |
my $lastname = $shop_order->customer_lastname; |
106 |
|
|
86 | 107 |
my $proposals = SL::DB::Manager::Customer->get_all( |
87 | 108 |
where => [ |
88 | 109 |
or => [ |
89 | 110 |
and => [ # when matching names also match zipcode |
90 |
or => [ 'name' => { like => "%$lastname%"}, |
|
91 |
'name' => { like => $shop_order->customer_company }, |
|
111 |
or => [ 'name' => { ilike => "%$lastname%"},
|
|
112 |
'name' => { ilike => $shop_order->customer_company },
|
|
92 | 113 |
], |
93 |
'zipcode' => { like => $shop_order->customer_zipcode }, |
|
114 |
'zipcode' => { ilike => $shop_order->customer_zipcode },
|
|
94 | 115 |
], |
95 |
or => [ 'email' => { like => $shop_order->customer_email } ], |
|
116 |
and => [ # check for street and zipcode |
|
117 |
and => [ 'street' => { ilike => "%".$shop_order->customer_street."%" }, |
|
118 |
'zipcode' => { ilike => $shop_order->customer_zipcode }, |
|
119 |
or => [ 'email' => { ilike => $shop_order->customer_email } ], |
|
96 | 120 |
], |
97 | 121 |
], |
98 | 122 |
); |
123 |
$main::lxdebug->dump(0, 'WH:PROP ',\$proposals); |
|
124 |
|
|
99 | 125 |
|
100 | 126 |
$self->render('shop_order/show', |
101 | 127 |
title => t8('Shoporder'), |
... | ... | |
108 | 134 |
|
109 | 135 |
} |
110 | 136 |
|
137 |
sub action_delete_order { |
|
138 |
my ( $self ) = @_; |
|
139 |
|
|
140 |
$self->shop_order->obsolete(1); |
|
141 |
$self->shop_order->save; |
|
142 |
$self->redirect_to(controller => "ShopOrder", action => 'list', filter => { 'transferred:eq_ignore_empty' => 0 }); |
|
143 |
} |
|
144 |
|
|
145 |
sub action_valid_order { |
|
146 |
my ( $self ) = @_; |
|
147 |
|
|
148 |
$self->shop_order->obsolete(0); |
|
149 |
$self->shop_order->save; |
|
150 |
$self->redirect_to(controller => "ShopOrder", action => 'show', id => $self->shop_order->id); |
|
151 |
} |
|
152 |
|
|
111 | 153 |
sub action_transfer { |
112 | 154 |
my ( $self ) = @_; |
113 | 155 |
my $customer = SL::DB::Manager::Customer->find_by(id => $::form->{customer}); |
114 | 156 |
die "Can't find customer" unless $customer; |
115 | 157 |
my $employee = SL::DB::Manager::Employee->current; |
116 | 158 |
|
117 |
# $self->shop_order inits via $::form->{import_id} |
|
118 | 159 |
die "Can't load shop_order form form->import_id" unless $self->shop_order; |
119 | 160 |
|
120 | 161 |
my $order = $self->shop_order->convert_to_sales_order(customer => $customer, employee => $employee); |
121 | 162 |
$order->save; |
163 |
|
|
164 |
my $snumbers = "ordernumber_" . $order->ordnumber; |
|
165 |
SL::DB::History->new( |
|
166 |
trans_id => $order->id, |
|
167 |
snumbers => $snumbers, |
|
168 |
employee_id => SL::DB::Manager::Employee->current->id, |
|
169 |
addition => 'SAVED', |
|
170 |
what_done => 'Shopimport -> Order', |
|
171 |
)->save(); |
|
172 |
foreach my $item(@{ $order->orderitems }){ |
|
173 |
$item->parse_custom_variable_values->save; |
|
174 |
$item->{custom_variables} = \@{ $item->cvars_by_config }; |
|
175 |
$item->save; |
|
176 |
} |
|
177 |
|
|
122 | 178 |
$self->shop_order->transferred(1); |
123 | 179 |
$self->shop_order->transfer_date(DateTime->now_local); |
124 | 180 |
$self->shop_order->oe_transid($order->id); |
... | ... | |
127 | 183 |
$self->redirect_to(controller => "oe.pl", action => 'edit', type => 'sales_order', vc => 'customer', id => $order->id); |
128 | 184 |
} |
129 | 185 |
|
186 |
sub action_mass_transfer { |
|
187 |
my ($self) = @_; |
|
188 |
my @shop_orders = @{ $::form->{id} || [] }; |
|
189 |
|
|
190 |
my $job = SL::DB::BackgroundJob->new( |
|
191 |
type => 'once', |
|
192 |
active => 1, |
|
193 |
package_name => 'ShopOrderMassTransfer', |
|
194 |
)->set_data( |
|
195 |
shop_order_record_ids => [ @shop_orders ], |
|
196 |
num_order_created => 0, |
|
197 |
num_delivery_order_created => 0, |
|
198 |
status => SL::BackgroundJob::ShopOrderMassTransfer->WAITING_FOR_EXECUTION(), |
|
199 |
conversation_errors => [ ], |
|
200 |
)->update_next_run_at; |
|
201 |
|
|
202 |
SL::System::TaskServer->new->wake_up; |
|
203 |
|
|
204 |
my $html = $self->render('shop_order/_transfer_status', { output => 0 }, job => $job); |
|
205 |
|
|
206 |
$self->js |
|
207 |
->html('#status_mass_transfer', $html) |
|
208 |
->run('kivi.ShopOrder.massTransferStarted') |
|
209 |
->render; |
|
210 |
} |
|
211 |
|
|
212 |
sub action_transfer_status { |
|
213 |
my ($self) = @_; |
|
214 |
my $job = SL::DB::BackgroundJob->new(id => $::form->{job_id})->load; |
|
215 |
my $html = $self->render('shop_order/_transfer_status', { output => 0 }, job => $job); |
|
216 |
|
|
217 |
$self->js->html('#status_mass_transfer', $html); |
|
218 |
$self->js->run('kivi.ShopOrder.massTransferFinished') if $job->data_as_hash->{status} == SL::BackgroundJob::ShopOrderMassTransfer->DONE(); |
|
219 |
$self->js->render; |
|
220 |
|
|
221 |
} |
|
222 |
|
|
130 | 223 |
sub action_apply_customer { |
131 |
my ( $self ) = @_; |
|
132 |
$::lxdebug->dump(0, "WH: CUSTOMER ", \$::form); |
|
133 |
my $what = $::form->{create_customer}; # billing, customer or delivery |
|
134 |
$::lxdebug->dump(0, "WH: WHAT ",$what); |
|
135 |
my %address = ( 'name' => $::form->{$what.'_name'}, |
|
136 |
'street' => $::form->{$what.'_street'}, |
|
137 |
'zipcode' => $::form->{$what.'_zipcode'}, |
|
138 |
'city' => $::form->{$what.'_city'}, |
|
139 |
'email' => $::form->{$what.'_email'}, |
|
140 |
'country' => $::form->{$what.'_country'}, |
|
141 |
'greeting' => $::form->{$what.'_greeting'}, |
|
142 |
'taxzone_id' => 4, # hardcoded, use default taxzone instead |
|
143 |
'currency' => 1, # hardcoded |
|
224 |
my ( $self, %params ) = @_; |
|
225 |
my $shop = SL::DB::Manager::Shop->find_by( id => $self->shop_order->shop_id ); |
|
226 |
my $what = $::form->{create_customer}; # new from billing, customer or delivery address |
|
227 |
my %address = ( 'name' => $::form->{$what.'_name'}, |
|
228 |
'department_1' => $::form->{$what.'_company'}, |
|
229 |
'department_2' => $::form->{$what.'_department'}, |
|
230 |
'street' => $::form->{$what.'_street'}, |
|
231 |
'zipcode' => $::form->{$what.'_zipcode'}, |
|
232 |
'city' => $::form->{$what.'_city'}, |
|
233 |
'email' => $::form->{$what.'_email'}, |
|
234 |
'country' => $::form->{$what.'_country'}, |
|
235 |
'phone' => $::form->{$what.'_phone'}, |
|
236 |
'email' => $::form->{$what.'_email'}, |
|
237 |
'greeting' => $::form->{$what.'_greeting'}, |
|
238 |
# TODO in shopconfig |
|
239 |
'taxincluded_checked' => $shop->pricetype eq "brutto" ? 1 : 0, |
|
240 |
'taxincluded' => $shop->pricetype eq "brutto" ? 1 : 0, |
|
241 |
'klass' => (split '\/',$shop->price_source)[1], |
|
242 |
'taxzone_id' => $shop->taxzone_id, |
|
243 |
'currency' => 1, # TODO hardcoded |
|
244 |
'payment_id' => 7345,# TODO hardcoded |
|
144 | 245 |
); |
145 |
$address{contact} = ($address{name} ne $::form->{$what.'_firstname'} . " " . $::form->{$what.'_lastname'} ? $::form->{$what.'_firstname'} . " " . $::form->{$what.'_lastname'} : ''); |
|
146 |
$::lxdebug->dump(0, "WH: ADDRESS ",\%address); |
|
147 |
my $customer = SL::DB::Customer->new(%address); |
|
148 |
$customer->save; |
|
246 |
my $customer; |
|
247 |
if($::form->{cv_id}){ |
|
248 |
$customer = SL::DB::Customer->new(id => $::form->{cv_id})->load; |
|
249 |
$customer->assign_attributes(%address); |
|
250 |
$customer->save; |
|
251 |
}else{ |
|
252 |
$customer = SL::DB::Customer->new(%address); |
|
253 |
$customer->save; |
|
254 |
} |
|
255 |
my $snumbers = "customernumber_" . $customer->customernumber; |
|
256 |
SL::DB::History->new( |
|
257 |
trans_id => $customer->id, |
|
258 |
snumbers => $snumbers, |
|
259 |
employee_id => SL::DB::Manager::Employee->current->id, |
|
260 |
addition => 'SAVED', |
|
261 |
what_done => 'Shopimport', |
|
262 |
)->save(); |
|
263 |
|
|
149 | 264 |
if($::form->{$what.'_country'} ne "Deutschland") { # hardcoded |
150 | 265 |
$self->redirect_to(controller => "controller.pl", action => 'CustomerVendor/edit', id => $customer->id); |
151 | 266 |
}else{ |
152 | 267 |
$self->redirect_to(action => 'show', id => $::form->{import_id}); |
153 | 268 |
} |
154 | 269 |
} |
270 |
|
|
271 |
sub setup { |
|
272 |
my ($self) = @_; |
|
273 |
$::auth->assert('invoice_edit'); |
|
274 |
|
|
275 |
$::request->layout->use_javascript("${_}.js") for qw(kivi.ShopOrder); |
|
276 |
} |
|
277 |
|
|
155 | 278 |
# |
156 | 279 |
# Helper |
157 | 280 |
# |
... | ... | |
159 | 282 |
my ($self,%address) = @_; |
160 | 283 |
my $addressdata = SL::DB::Manager::Customer->get_all( |
161 | 284 |
query => [ |
162 |
or => [ 'name' => { like => "%$address{'name'}%" }, 'name' => { like => $address{'company'} }, ],
|
|
163 |
'street' => { like => $address{'street'} }, |
|
164 |
'zipcode'=> { like => $address{'zipcode'} }, |
|
165 |
'city' => { like => $address{'city'} }, |
|
285 |
or => [ 'name' => { ilike => "%$address{'name'}%" }, 'name' => { ilike => $address{'company'} }, ],
|
|
286 |
'street' => { ilike => $address{'street'} },
|
|
287 |
'zipcode'=> { ilike => $address{'zipcode'} },
|
|
288 |
'city' => { ilike => $address{'city'} },
|
|
166 | 289 |
]); |
167 | 290 |
$::lxdebug->dump(0, "WH: CUSTOMER ", \$addressdata); |
168 | 291 |
return @{$addressdata}[0]; |
Auch abrufbar als: Unified diff
Shopmodul: ShopOrder: Massenübernahme von Shopaufträgen
Webshop:: ShopOrderMassTransfer
Webshop: ShopOrder
Webshop: ShopOrder BGJ Anzahl Orders und welche in Backgroundjob Data/Info
Webshop: ShopOrder - Bestellung löschen bzw. auf ungültig setzten
Conflicts:
SL/Controller/ShopOrder.pm
templates/webpages/shop_order/list.html
Webshop: ShopOrder - Anzahl der Positionen wird mit in die Stammdaten der Bestellung übernommen.
Conflicts:
SL/DB/ShopOrder.pm
Conflicts:
SL/ShopConnector/Shopware.pm
Webshop: Shoporder BGJ in bearbeitung
Conflicts:
SL/BackgroundJob/ShopOrderMassTransfer.pm
templates/webpages/shop_order/_transfer_status.html
Conflicts:
SL/BackgroundJob/ShopOrderMassTransfer.pm
WebShop: ShopOrder BGJ - Kundenvorschläge groß und kleinschreibung bei abfrage ignorieren
Cvars beim übernehmen der Shopimporte
Bestellbemerkung bzw. Kundenbemerkungen mit in den Auftrag in intnotes
andere fehlende Felder wie active_price_source übernehmen oder einfügen
Conflicts:
SL/ShopConnector/Shopware.pm
Webshop: ShopOrder
Webshop: ShopOrder: css, Kundendaten mit Shoprechnungsdaten überschreiben, löschen Rückgängig, löschen aus der ShopOrder heraus, In den Vorschlägen Link zum Kunden, Kunden mit Auftragssperre in den Vorschlägen kenntlich gemacht für diese können auch von dort keinen Aufträge generiert werden
Conflicts:
css/webshop.css
Conflicts:
css/webshop.css
Webshop: ShopOrder - shop_ordernumber als Kundenbestellnummer in Aufträgen usw. nutzen
Webshop: ShopOrder - TODO comment
Webshop: ShopOrder Abrufen zeigt nur nicht übernommene, Sortierung der Tabelle übernimmt die Datumsfilter.
Conflicts:
templates/webpages/shop_order/list.html
Webshop: ShopOrder - Massenkonvertierung geht wieder
WebShop: ShopOrder Liste Shoporders checkall eingebunden
WebShop: ShopOrder - Historie beim Kundenanlegen, Auftrag übernehmen und Massenauftragsübernahme
Conflicts:
SL/ShopConnector/Shopware.pm
Webshop: ShopOrder
Webshop: ShopOrder - Anlegen/Überschreiben der Kunden-, Rechnungs-, Lieferadresse als/mit Kundenadresse geht wieder
Conflicts:
SL/Controller/ShopOrder.pm
Webshop: ShopOrder - Kundenadresse ausblenden
Webshop: ShopOrder - Shopimport Kundensuche ilike; Anzahl OP's in Webshopliste; Lieferant Name 2 wird mit übertragen
Webshop: ShopOrder - payment_id wird anhand Kunden payment_id an Auftrag übergeben
Webshop: ShopOrder
Webshop: ShopOrder - Liste OPs oder Auftragssperre rot markiert
Filter Obsolete eingebaut
Proposals beim Import verbessert unschäfere Suche
Conflicts:
templates/webpages/shop_order/_transfer_status.html
Webshop: ShopOrder - Vorschläge unschäfere Suche
Webshop: ShopOrder
Conflicts:
SL/ShopConnector/Shopware.pm
Webshop: ShopOrder - BGJ ShopOrderMassTransfer angepasst wg cherry-pick
Conflicts:
SL/BackgroundJob/ShopOrderMassTransfer.pm
SL/Controller/ShopOrder.pm
SL/ShopConnector/Shopware.pm
js/kivi.ShopOrder.js
templates/webpages/shop_order/list.html
Conflicts:
SL/Controller/ShopOrder.pm
SL/DB/ShopOrder.pm
templates/webpages/shop_order/list.html