session = $session; $this->instance = 'checkout'; } public function makeShoppingOrder($shopping_user, $data) { $user_shop = Util::getUserShop(); if ($shopping_user->is_from === 'homeparty') { // get data $homeparty = Homeparty::find($shopping_user->homeparty_id); // set Data! $total = Yard::instance($this->instance)->total(2, '.', ''); // ek_price $data = [ 'shopping_user_id' => $shopping_user->id, 'auth_user_id' => $shopping_user->auth_user_id, 'country_id' => Yard::instance($this->instance)->getShippingCountryId(), 'language' => \App::getLocale(), 'user_shop_id' => $user_shop->id, 'payment_for' => $shopping_user->getOrderPaymentFor(), 'homeparty_id' => $shopping_user->homeparty_id, 'total' => $total, 'subtotal' => $homeparty->order['ek_price_net'], 'shipping' => $homeparty->order['shipping_price'], 'shipping_net' => $homeparty->order['shipping_price_net'], 'subtotal_ws' => 0, 'tax' => $total - $homeparty->order['ek_price_net'], 'total_shipping' => Yard::instance($this->instance)->totalWithShipping(2, '.', ''), 'points' => round($homeparty->order['points'] - $homeparty->order['bonus_points_diff'], 2), 'weight' => 0, 'txaction' => 'prev', 'mode' => Util::getUserShoppingMode(), ]; } elseif ($shopping_user->is_from === 'collection') { // get data $ShoppingCollectOrder = ShoppingCollectOrder::find($shopping_user->shopping_collect_order_id); // set Data! $total = Yard::instance($this->instance)->total(2, '.', ''); // ek_price $data = [ 'shopping_user_id' => $shopping_user->id, 'auth_user_id' => $shopping_user->auth_user_id, 'country_id' => Yard::instance($this->instance)->getShippingCountryId(), 'language' => \App::getLocale(), 'user_shop_id' => $user_shop->id, 'payment_for' => $shopping_user->getOrderPaymentFor(), 'total' => $total, 'subtotal' => $ShoppingCollectOrder->price_total_net, 'shipping' => 0, 'shipping_net' => 0, 'subtotal_ws' => $ShoppingCollectOrder->price_total_net, 'tax' => $ShoppingCollectOrder->tax_total, 'tax_split' => $ShoppingCollectOrder->tax_split, 'net_split' => $ShoppingCollectOrder->net_split, 'total_shipping' => Yard::instance($this->instance)->totalWithShipping(2, '.', ''), 'points' => round($ShoppingCollectOrder->points, 2), 'weight' => 0, 'txaction' => 'prev', 'mode' => Util::getUserShoppingMode(), ]; } else { $data = [ 'shopping_user_id' => $shopping_user->id, 'auth_user_id' => $shopping_user->auth_user_id, 'country_id' => Yard::instance($this->instance)->getShippingCountryId(), 'language' => \App::getLocale(), 'user_shop_id' => $user_shop->id, 'payment_for' => $shopping_user->getOrderPaymentFor(), 'total' => Yard::instance($this->instance)->total(2, '.', ''), 'subtotal' => Yard::instance($this->instance)->subtotal(2, '.', ''), 'shipping' => Yard::instance($this->instance)->shipping(2, '.', ','), 'shipping_net' => Yard::instance($this->instance)->shippingNet(2, '.', ''), 'subtotal_ws' => Yard::instance($this->instance)->subtotalWithShipping(2, '.', ''), 'tax' => Yard::instance($this->instance)->taxWithShipping(2, '.', ''), 'total_shipping' => Yard::instance($this->instance)->totalWithShipping(2, '.', ''), 'points' => round(Yard::instance($this->instance)->points(), 2), 'weight' => Yard::instance($this->instance)->weight(), 'is_abo' => isset($data['is_abo']) ? $data['is_abo'] : false, 'abo_interval' => isset($data['abo_interval']) ? $data['abo_interval'] : null, 'txaction' => 'prev', 'mode' => Util::getUserShoppingMode(), ]; } $shopping_order = false; if ($this->getSessionPayments('shopping_order_id')) { $shopping_order = ShoppingOrder::find($this->getSessionPayments('shopping_order_id')); if ($shopping_order) { $shopping_order->fill($data); $shopping_order->save(); } } if (! $shopping_order) { $shopping_order = ShoppingOrder::create($data); if ($shopping_user->is_from === 'collection' && $ShoppingCollectOrder) { $ShoppingCollectOrder->shopping_order_id = $shopping_order->id; $ShoppingCollectOrder->save(); } } $this->putSessionPayments('shopping_order_id', $shopping_order->id); $items = Yard::instance($this->instance)->getContentByOrder(); $shopping_order->shopping_order_items()->each(function ($model) use ($items, $shopping_order, $shopping_user) { foreach ($items as $item) { if ($model->row_id === $item->rowId) { $price_net = Yard::instance($this->instance)->rowPriceNet($item, 2, '.', ''); $tax = $item->price - $price_net; $data = [ 'shopping_order_id' => $shopping_order->id, 'row_id' => $item->rowId, 'product_id' => $item->id, 'comp' => $item->options->comp, 'qty' => $item->qty, 'price' => $item->price, 'price_net' => $price_net, 'tax_rate' => $item->taxRate, 'tax' => $tax, 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), 'points' => $item->options->points, 'slug' => $item->options->slug, ]; if ($shopping_user->is_from === 'homeparty') { $data['homeparty_id'] = (int) $shopping_user->homeparty_id; $data['product_id'] = null; } if ($shopping_user->is_from === 'collection') { $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; $data['product_id'] = null; } $model->fill($data)->save(); return false; } } return $model->delete(); }); foreach ($items as $item) { if (! ShoppingOrderItem::where('shopping_order_id', $shopping_order->id)->where('row_id', $item->rowId)->count()) { $price_net = Yard::instance($this->instance)->rowPriceNet($item, 2, '.', ''); $tax = $item->price - $price_net; $data = [ 'shopping_order_id' => $shopping_order->id, 'row_id' => $item->rowId, 'product_id' => $item->id, 'comp' => $item->options->comp, 'qty' => $item->qty, 'price' => $item->price, 'price_net' => $price_net, 'tax_rate' => $item->taxRate, 'tax' => $tax, 'price_vk_net' => $shopping_order->getPriceVkNetBy($item->id), 'discount' => $item->options->no_commission ? 0 : $shopping_order->getUserDiscount(), 'points' => $item->options->points, 'slug' => $item->options->slug, ]; if ($shopping_user->is_from === 'homeparty') { $data['homeparty_id'] = (int) $shopping_user->homeparty_id; $data['price_vk_net'] = 0; $data['product_id'] = null; } if ($shopping_user->is_from === 'collection') { $data['price_vk_net'] = 0; $data['shopping_collect_order_id'] = (int) $shopping_user->shopping_collect_order_id; $data['product_id'] = null; } $shopping_order_item = ShoppingOrderItem::create($data); } } if ($shopping_user->is_from === 'homeparty') { $shopping_order->makeHomepartyTaxSplit(); } elseif ($shopping_user->is_from === 'collection') { // is set on create / filll. } else { $shopping_order->makeTaxSplit(); } return $shopping_order; } public function makeShoppingUser($data) { $data['same_as_billing'] = isset($data['same_as_billing']) ? false : true; // reinvert $data['accepted_data_checkbox'] = isset($data['accepted_data_checkbox']) ? true : false; $shopping_user = false; if ($this->getSessionPayments('shopping_user_id')) { $shopping_user = ShoppingUser::find($this->getSessionPayments('shopping_user_id')); if ($shopping_user) { $shopping_user->fill($data); $shopping_user->mode = null; $shopping_user->save(); } } if (! $shopping_user) { $shopping_user = ShoppingUser::create($data); } $this->putSessionPayments('shopping_user_id', $shopping_user->id); return $shopping_user; } public function getPaymentsMethods($is_from, $is_abo = false) { $payment_methods = []; if ($is_from !== 'shopping' && Util::getAuthUser()) { $user = Util::getAuthUser(); $payment_methods['default'] = $user->payment_methods; $payment_methods['data'] = $user->account->payment_data; } else { $payment_methods['default'] = PaymentMethod::getDefaultAsArray($is_abo)->toArray(); $payment_methods['data'] = false; } if ($is_abo) { $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->where('is_abo', true)->get()->pluck('id', 'short')->toArray(); } else { $payment_methods['active'] = \App\Models\PaymentMethod::where('active', true)->get()->pluck('id', 'short')->toArray(); } return $payment_methods; } public function isPaymentsMethodsActive($payment_method, $is_from, $is_abo = false) { $payment_names = ['wlt#PPE' => 'PP', 'cc' => 'CC', 'sb#PNT' => 'SB', 'elv' => 'SEPA', 'vor' => 'VOR', 'fnc#MIV' => 'FNC']; $payment_methods = $this->getPaymentsMethods($is_from, $is_abo); if (isset($payment_names[$payment_method])) { $payment_with = $payment_names[$payment_method]; if (array_key_exists($payment_with, $payment_methods['active']) && in_array($payment_methods['active'][$payment_with], $payment_methods['default'])) { return true; } } abort(404); } public function makeCustomerShoppingUser($shopping_data, $is_for, $is_from) { // $shopping_user = ShoppingUser::findOrFail($shopping_data['shopping_user_id']); $shopping_user = new ShoppingUser; $shopping_user->fill($shopping_data); $shopping_user->faker_mail = false; $shopping_user->auth_user_id = null; $shopping_user->homeparty_id = null; $shopping_user->same_as_billing = $shopping_user->same_as_billing ? false : true; // reinvert // $shopping_user->id = null; $shopping_user->accepted_data_checkbox = 1; $shopping_user->is_for = $is_for; $shopping_user->is_from = $is_from; $shopping_user->mode = 'prev'; $shopping_user->language = \App::getLocale(); return $shopping_user; } public function initShoppingUser($is_for, $is_from, $homeparty_id = null) { $shopping_user = new ShoppingUser; $shopping_user->homeparty_id = $homeparty_id; $shopping_user->language = \App::getLocale(); // eingeloggter Kunde if (\Auth::guard('customers')->check()) { $shopping_user = $this->shoppingUserByAuthCustomer(\Auth::guard('customers')->user()); } // eingeloggter User Berater if (\Auth::guard('user')->check()) { $shopping_user = $this->shoppingUserByAuthUser(\Auth::guard('user')->user(), $is_from, $is_for); } $shopping_user->mode = 'prev'; $shopping_user->is_for = $is_for; $shopping_user->is_from = $is_from; return $shopping_user; } public function shoppingUserByAuthCustomer(\App\Models\Customer $user) { // clone shopping user! if ($user->shopping_user_id) { $find_shopping_user = ShoppingUser::find($user->shopping_user_id); if ($find_shopping_user) { $shopping_user = $find_shopping_user->replicate(); $shopping_user->billing_country_id = null; $shopping_user->shipping_country_id = null; } } else { $shopping_user = new ShoppingUser; $shopping_user->language = \App::getLocale(); } return $shopping_user; } public function shoppingUserByAuthUser(\App\User $user, $is_from, $is_for) { $shopping_user = new ShoppingUser; $shopping_user->language = \App::getLocale(); $shopping_user->billing_salutation = $user->account->salutation; $shopping_user->billing_company = $user->account->company; $shopping_user->billing_firstname = $user->account->first_name; $shopping_user->billing_lastname = $user->account->last_name; $shopping_user->billing_address = $user->account->address; $shopping_user->billing_address_2 = $user->account->address_2; $shopping_user->billing_zipcode = $user->account->zipcode; $shopping_user->billing_city = $user->account->city; // $shopping_user->billing_country_id = $user->account->country_id; $shopping_user->billing_phone = $user->account->phone; $shopping_user->billing_email = $user->email; $shopping_user->faker_mail = false; $shopping_user->shipping_email = $user->email; $shopping_user->language = $user->account->getLocale(); $shopping_user->accepted_data_checkbox = 1; // Lieferadresse $shopping_user->same_as_billing = $user->account->same_as_billing ? false : true; $shopping_user->shipping_salutation = $user->account->shipping_salutation; $shopping_user->shipping_company = $user->account->shipping_company; $shopping_user->shipping_firstname = $user->account->shipping_firstname; $shopping_user->shipping_lastname = $user->account->shipping_lastname; $shopping_user->shipping_address = $user->account->shipping_address; $shopping_user->shipping_address_2 = $user->account->shipping_address_2; $shopping_user->shipping_zipcode = $user->account->shipping_zipcode; $shopping_user->shipping_city = $user->account->shipping_city; // $shopping_user->shipping_country_id = $user->account->shipping_country_id; $shopping_user->shipping_phone = $user->account->shipping_phone; $shopping_user->shipping_postnumber = $user->account->shipping_postnumber; return $shopping_user; } public function shoppingUserAuthData($is_from, $is_for, $data = []) { $user = Util::getAuthUser(); $shopping_user = new ShoppingUser; $shopping_user->auth_user_id = $user->id; $shopping_user->mode = 'prev'; $shopping_user->language = \App::getLocale(); $shopping_user->billing_salutation = $user->account->salutation; $shopping_user->billing_company = $user->account->company; $shopping_user->billing_firstname = $user->account->first_name; $shopping_user->billing_lastname = $user->account->last_name; $shopping_user->billing_address = $user->account->address; $shopping_user->billing_address_2 = $user->account->address_2; $shopping_user->billing_zipcode = $user->account->zipcode; $shopping_user->billing_city = $user->account->city; $shopping_user->billing_country_id = $user->account->country_id; $shopping_user->billing_phone = $user->account->phone; $shopping_user->billing_email = $user->email; $shopping_user->faker_mail = false; $shopping_user->shipping_email = $user->email; $shopping_user->language = $user->account->getLocale(); $shopping_user->accepted_data_checkbox = 1; $shopping_user->is_for = $is_for; $shopping_user->is_from = $is_from; $shopping_user->homeparty_id = isset($data['homeparty_id']) ? $data['homeparty_id'] : null; $shopping_user->shopping_collect_order_id = isset($data['shopping_collect_order_id']) ? $data['shopping_collect_order_id'] : null; // Lieferadresse if ($is_from === 'user_order') { if (isset($data['shopping_user_id']) && strpos($data['is_for'], 'ot') !== false) { $s_user = ShoppingUser::findOrFail($data['shopping_user_id']); /* $shopping_user->billing_salutation = $s_user->billing_salutation; $shopping_user->billing_company = $s_user->billing_company; $shopping_user->billing_firstname = $s_user->billing_firstname; $shopping_user->billing_lastname = $s_user->billing_lastname; $shopping_user->billing_address = $s_user->billing_address; $shopping_user->billing_address_2 = $s_user->billing_address_2; $shopping_user->billing_zipcode = $s_user->billing_zipcode; $shopping_user->billing_city = $s_user->billing_city; $shopping_user->billing_country_id = $s_user->billing_country_id; $shopping_user->billing_phone = $s_user->billing_phone; $shopping_user->billing_email = $s_user->billing_email; ;*/ $shopping_user->faker_mail = $s_user->faker_mail; if (! $s_user->faker_mail) { $shopping_user->shipping_email = $s_user->billing_email; } $shopping_user->shopping_user_id = $data['shopping_user_id']; $shopping_user->member_id = $s_user->member_id; } $shopping_user->same_as_billing = true; $shopping_user->shipping_salutation = isset($data['shipping_salutation']) ? $data['shipping_salutation'] : ''; $shopping_user->shipping_company = isset($data['shipping_company']) ? $data['shipping_company'] : ''; $shopping_user->shipping_firstname = isset($data['shipping_firstname']) ? $data['shipping_firstname'] : ''; $shopping_user->shipping_lastname = isset($data['shipping_lastname']) ? $data['shipping_lastname'] : ''; $shopping_user->shipping_address = isset($data['shipping_address']) ? $data['shipping_address'] : ''; $shopping_user->shipping_address_2 = isset($data['shipping_address_2']) ? $data['shipping_address_2'] : ''; $shopping_user->shipping_zipcode = isset($data['shipping_zipcode']) ? $data['shipping_zipcode'] : ''; $shopping_user->shipping_city = isset($data['shipping_city']) ? $data['shipping_city'] : ''; $shopping_user->shipping_country_id = Yard::instance($this->instance)->getShippingCountryCountryId(); $shopping_user->shipping_phone = isset($data['shipping_phone']) ? $data['shipping_phone'] : ''; $shopping_user->shipping_postnumber = isset($data['shipping_postnumber']) ? $data['shipping_postnumber'] : ''; } else { $shopping_user->same_as_billing = $user->account->same_as_billing ? false : true; $shopping_user->shipping_salutation = $user->account->shipping_salutation; $shopping_user->shipping_company = $user->account->shipping_company; $shopping_user->shipping_firstname = $user->account->shipping_firstname; $shopping_user->shipping_lastname = $user->account->shipping_lastname; $shopping_user->shipping_address = $user->account->shipping_address; $shopping_user->shipping_address_2 = $user->account->shipping_address_2; $shopping_user->shipping_zipcode = $user->account->shipping_zipcode; $shopping_user->shipping_city = $user->account->shipping_city; $shopping_user->shipping_country_id = $user->account->shipping_country_id; $shopping_user->shipping_phone = $user->account->shipping_phone; $shopping_user->shipping_postnumber = $user->account->shipping_postnumber; } return $shopping_user; } public function putSessionPayments($key, $value) { $content = $this->getContent(); $content->put($key, $value); $this->session->put($this->instance, $content); } public function getSessionPayments($key) { $content = $this->getContent(); if ($content->has($key)) { return $content->get($key); } return false; } public function sessionDestroy($with_shopping = false) { if ($with_shopping) { if (session('user_shop_payment') === 1) { // ShoppingInstance payment 1 = webshop Yard::instance('webshop')->destroy(); } else { Yard::instance('shopping')->destroy(); } } $this->session->remove($this->instance); } private function getContent() { if (is_null($this->session->get($this->instance))) { return new Collection([]); } return $this->session->get($this->instance); } }