middleware('active.account'); } public function delivery($for, $id = null) { $user = User::find(Auth::user()->id); $shopping_user = null; $delivery_id = null; if (strpos($for, 'ot') !== false) { $shopping_user = Shop::checkShoppingUser($id, $user); $delivery_id = $shopping_user->id; if (! Shop::checkShoppingCountry($for, $delivery_id) && ! \Session()->has('custom-error')) { \Session()->flash('custom-error', __('validation.custom.shipping_not_found')); return redirect(route('user_order_my_delivery', [$for, $delivery_id])); } } if (Request::get('action') === 'next') { Yard::instance('shopping')->destroy(); if (strpos(Request::get('switchers-radio-is-for'), 'ot') !== false) { $delivery_id = $id; } return redirect(route('user_order_my_list', [Request::get('switchers-radio-is-for'), $delivery_id])); } $data = [ 'shopping_user' => $shopping_user, 'isAdmin' => false, 'isView' => 'customer', 'for' => $for, 'delivery_id' => $delivery_id, ]; return view('user.order.delivery', $data); } public function list($for, $id = null) { $user = User::find(Auth::user()->id); $shopping_user = null; $delivery_id = null; if (strpos($for, 'ot') !== false) { $shopping_user = Shop::checkShoppingUser($id, $user); $delivery_id = $shopping_user->id; } if ($for === 'ot-customer') { // noch nicht implementiert // Liederung an ot-customer (Kunden) Zahlung und Rechnung geht an Kunden UserService::initCustomerYard($shopping_user, $for); } else { // Lieferung an user oder ot-member (Kunden) rechnung geht an User // lieferland und rechnungsland prüfen $shipping_country_id = Shop::checkShoppingCountry($for, $id); if (! $shipping_country_id) { \Session()->flash('custom-error', __('validation.custom.shipping_not_found')); return redirect(route('user_order_my_delivery', [$for, $delivery_id])); } UserService::initUserYard($user, $shipping_country_id, $for); } if ($for === 'cr') { Yard::instance('shopping')->setGlobalTaxRate(0); Yard::instance('shopping')->setShoppingUser($user, false); } else { Yard::instance('shopping')->setShoppingUser($user, true); } $data = [ 'shopping_user' => $shopping_user, 'user' => $user, 'isAdmin' => false, 'isView' => 'customer', 'for' => $for, 'delivery_id' => $delivery_id, 'comp_products' => $this->getCompProducts($for), ]; return view('user.order.list', $data); } public function payment($for, $id = null) { $data = Request::all(); $user = User::find(Auth::user()->id); $rules = [ 'shipping_salutation' => 'required', 'shipping_firstname' => 'required', 'shipping_lastname' => 'required', 'shipping_address' => 'required', 'shipping_zipcode' => 'required', 'shipping_city' => 'required', 'shipping_state' => 'required', ]; $validator = Validator::make(Request::all(), $rules); if ($validator->fails()) { return back()->withErrors($validator)->withInput(Request::all()); } // hier prüfen, ob versand etc richtig berechnet wurde $this->checkSendYardForPayment($data, $id); if (Yard::instance('shopping')->getNumComp() > 0) { if (! isset($data['switchers-comp-product'])) { $validator->errors()->add('switchers-comp-product', __('Bitte wähle ein Kompensationsprodukt aus')); } else { if (! is_array($data['switchers-comp-product'])) { $validator->errors()->add('switchers-comp-product', __('Bitte wähle ein Kompensationsprodukt aus')); } else { if (count($data['switchers-comp-product']) !== Yard::instance('shopping')->getNumComp()) { $validator->errors()->add('switchers-comp-product', __('Bitte wähle :count Kompensationsprodukte aus', ['count' => Yard::instance('shopping')->getNumComp()])); } } } if ($validator->errors()->count()) { return back()->withErrors($validator)->withInput(Request::all()); } } /* do { $identifier = Util::getToken(); } while( ShoppingInstance::where('identifier', $identifier)->count() ); */ $identifier = Util::getToken(); $data['is_from'] = 'user_order'; $data['is_for'] = $for; $data['shopping_user_id'] = $id; $data['user_price_infos'] = Yard::instance('shopping')->getUserPriceInfos(); unset($data['quantity']); unset($data['_token']); Yard::instance('shopping')->putYardExtra('shopping_data', $data); /*ShoppingInstance::create([ 'identifier' => $identifier, 'user_shop_id' => 1, //is first faker shop for buy intern 'auth_user_id' => Auth::user()->id, 'payment' => 2, //Vertriebspartner Shop 'subdomain' => url('/'), 'country_id' => Yard::instance('shopping')->getShippingCountryId(), 'shopping_data' => $data, 'back' => url()->previous(), ]); Yard::instance('shopping')->store($identifier); */ // add to DB // $path = route('checkout.checkout_card', ['identifier'=>$identifier]); UserHistory::create(['user_id' => $user->id, 'action' => 'user_order_payment', 'status' => 1, 'product_id' => null, 'identifier' => $identifier]); // $path = str_replace('http', 'https', $path); // return redirect()->secure($path); return redirect(route('user_checkout', [$identifier])); } private function checkSendYardForPayment($data, $id) { $user = User::find(Auth::user()->id); $shopping_user = null; if (strpos($data['shipping_is_for'], 'ot') !== false) { $shopping_user = Shop::checkShoppingUser($id, $user); } $shipping_country_id = Shop::checkShoppingCountry($data['shipping_is_for'], $id); if (! $shipping_country_id) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'no shipping_country_id found | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_country_was_not_found')); } // must be the same shipping country if ($shipping_country_id != Yard::instance('shopping')->getShippingCountryId()) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'shipping_country_id is not the same from Yard | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_country_was_not_correctly')); } if ($data['shipping_is_for'] !== 'ot-customer') { if (Yard::instance('shopping')->shipping_free) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard can by not shipping_free | Yard identifier: '.$identifier, $data); abort(403, __('msg.shopping_cart_was_shipping_free')); } } if ($data['shipping_is_for'] === 'ot-customer') { if (! $user->shop) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'User has no Shop for an User to Customer order| Yard identifier: '.$identifier, $data); abort(403, __('msg.shopping_cart_was_not_user_shop')); } } $shipping_price = Shop::getShippingPriceByShippingCountryId($shipping_country_id, Yard::instance('shopping')->weight()); // for other and has weight - check if (strpos($data['shipping_is_for'], 'ot') !== false && $data['shipping_is_for'] !== 'ot-customer' && Yard::instance('shopping')->weight() > 0) { if (! Yard::instance('shopping')->getShippingPrice() || Yard::instance('shopping')->getShippingPrice() == 0) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard OT shipping_price is 0 or | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_cost_cannot_be_0')); } if (Yard::instance('shopping')->getShippingPrice() != $shipping_price->price) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard OT shipping_price is not the same from shipping_price | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_costs_were_not_calculated_correctly')); } } if ($data['shipping_is_for'] == 'me' && Yard::instance('shopping')->weight() > 0) { if (! Yard::instance('shopping')->getShippingPrice() || Yard::instance('shopping')->getShippingPrice() == 0) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard ME shipping_price is 0 or | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_cost_cannot_be_0')); } if (Yard::instance('shopping')->getShippingPrice() != $shipping_price->price_comp) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard ME shipping_price is not the same from shipping_price | Yard identifier: '.$identifier, $data); abort(403, __('msg.shipping_costs_were_not_calculated_correctly')); } if (Yard::instance('shopping')->getNumComp() != $shipping_price->num_comp) { $identifier = 'error-'.time().mt_rand(1000000, 9999999); Yard::instance('shopping')->store($identifier); $data['user_id'] = Auth::user()->id; $data['shopping_user_id'] = $id; MyLog::writeLog('payment', 'error', 'Yard num_comp is 0 | Yard identifier: '.$identifier, $data); abort(403, __('msg.compensation_products_cannot_be_0')); } } } public function datatable() { $not_show_pids = ProductBuy::getNotShowProductIDs(Auth::user()->id); switch (Request::get('shipping_is_for')) { case 'me': $query = Product::select('products.*')->where('active', true)->whereJsonContains('show_on', '2'); break; case 'mp': $query = Product::select('products.*')->where('active', true)->whereJsonContains('show_on', '2'); break; case 'cr': $query = Product::select('products.*')->where('active', true)->whereJsonContains('show_on', '6'); break; case 'ot': $query = Product::select('products.*')->where('active', true)->whereJsonContains('show_on', '1'); break; } foreach ($not_show_pids as $not_show_pid) { $query->where('id', '!=', $not_show_pid); } return \DataTables::eloquent($query) ->addColumn('product', function (Product $product) { $cartItem = Yard::instance('shopping')->getCartItemByProduct($product->id); $qty = isset($cartItem->qty) ? $cartItem->qty : 0; $rowId = isset($cartItem->rowId) ? $cartItem->rowId : ''; // AP-25: „Nicht vorrätig" ist nur ein Hinweis — der VP entscheidet selbst, // ob er die Ware später bekommt. Die Mengen-Buttons bleiben immer aktiv. $controls = ''; if ($product->isOutOfStock()) { $controls .= '