From c73299e52eab406844441127059e967ff5c8f516 Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Thu, 17 Dec 2020 23:02:22 +0100 Subject: [PATCH] Homparty v1.0 --- .env | 1 + .idea/workspace.xml | 74 ++- app/Http/Controllers/SalesController.php | 6 + .../Controllers/User/HomepartyController.php | 90 +++- app/Http/Controllers/User/OrderController.php | 3 + .../Controllers/Web/CheckoutController.php | 110 ++-- app/Models/Homeparty.php | 6 +- app/Models/HomepartyUser.php | 28 +- app/Models/Product.php | 3 + app/Models/ShoppingInstance.php | 1 + app/Models/ShoppingOrder.php | 6 + app/Models/ShoppingOrderItem.php | 6 + app/Models/ShoppingUser.php | 1 + app/Models/UserHistory.php | 4 +- app/Services/HomepartyCart.php | 483 ++++++------------ app/Services/HomepartyUserCart.php | 342 +------------ app/Services/Payment.php | 6 + config/app.php | 2 +- ..._23_161530_create_shopping_users_table.php | 1 + ...23_163527_create_shopping_orders_table.php | 1 + ...3724_create_shopping_order_items_table.php | 1 + ..._10_15_151059_create_homeparties_table.php | 3 + ...15_151136_create_homeparty_users_table.php | 4 + public/js/iq-homeparty-cart.js | 113 +--- resources/views/admin/product/form.blade.php | 6 +- resources/views/admin/sales/_detail.blade.php | 113 +++- .../admin/sales/_detail_homparty.blade.php | 246 +++++++++ .../sales/_detail_homparty_total.blade.php | 58 +++ resources/views/emails/checkout.blade.php | 26 + .../views/emails/checkout_status.blade.php | 26 + .../views/emails/homeparty_detail.blade.php | 142 +++++ .../emails/homeparty_detail_total.blade.php | 38 ++ .../views/user/homeparty/guests.blade.php | 10 +- .../views/user/homeparty/index.blade.php | 23 +- .../views/user/homeparty/order.blade.php | 43 +- .../homeparty/show_calc_bonus_host.blade.php | 4 +- .../homeparty/show_products_order.blade.php | 39 +- .../user/homeparty/show_total_order.blade.php | 5 +- .../views/web/templates/checkout.blade.php | 48 +- routes/web.php | 20 +- 40 files changed, 1234 insertions(+), 908 deletions(-) create mode 100644 resources/views/admin/sales/_detail_homparty.blade.php create mode 100644 resources/views/admin/sales/_detail_homparty_total.blade.php create mode 100644 resources/views/emails/homeparty_detail.blade.php create mode 100644 resources/views/emails/homeparty_detail_total.blade.php diff --git a/.env b/.env index a749dc4..a3b03a9 100644 --- a/.env +++ b/.env @@ -20,6 +20,7 @@ APP_DEFAULT_MAIL=kevin.adametz@me.com APP_CHECKOUT_TEST_MAIL=kevin.adametz@me.com APP_INFO_TEST_MAIL=kevin.adametz@me.com +APP_MAIN_TAX = 1.19 LOG_CHANNEL=stack diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 23b4d94..9e60f8b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,60 +5,45 @@ - - - - - - - - - - - - - - - + + + + - - - - - - + - - + + - - - + + + + + + + + + - - + - - - - - - + + + - - - - - - + + + + + + + - - @@ -600,7 +585,8 @@ - + + diff --git a/app/Http/Controllers/SalesController.php b/app/Http/Controllers/SalesController.php index f8c774a..5c35aae 100755 --- a/app/Http/Controllers/SalesController.php +++ b/app/Http/Controllers/SalesController.php @@ -79,6 +79,9 @@ class SalesController extends Controller if($ShoppingOrder->shopping_user->is_for === 'ot'){ return 'Kundenbestellung'; } + if($ShoppingOrder->shopping_user->is_for === 'hp'){ + return 'Homepartybestellung'; + } return '-'; }) ->addColumn('reference', function (ShoppingOrder $ShoppingOrder) { @@ -221,6 +224,9 @@ class SalesController extends Controller if($ShoppingOrder->shopping_user->is_for === 'ot'){ return 'Kundenbestellung'; } + if($ShoppingOrder->shopping_user->is_for === 'hp'){ + return 'Homepartybestellung'; + } return '-'; }) ->addColumn('reference', function (ShoppingOrder $ShoppingOrder) { diff --git a/app/Http/Controllers/User/HomepartyController.php b/app/Http/Controllers/User/HomepartyController.php index 45ba3e9..f21c44b 100755 --- a/app/Http/Controllers/User/HomepartyController.php +++ b/app/Http/Controllers/User/HomepartyController.php @@ -54,6 +54,11 @@ class HomepartyController extends Controller $homeparty_user = new HomepartyUser(); $homeparty_user->is_host = true; } + + if($homeparty->completed){ + abort(404); + } + $data = [ 'homeparty' => $homeparty, 'homeparty_user' => $homeparty_user, @@ -155,6 +160,9 @@ class HomepartyController extends Controller abort(404); } } + if($homeparty->completed){ + abort(404); + } $data = [ 'homeparty' => $homeparty, 'homeparty_user' => $homeparty_user, @@ -213,18 +221,25 @@ class HomepartyController extends Controller public function order($id = null) { + $user = User::find(Auth::user()->id); + $homeparty = $this->getHomparty($id); HomepartyCart::calculateHomeparty($homeparty); + $userHistoryPaymentOrder = UserHistory::whereUserId($user->id)->whereAction('payment_homeparty')->where('referenz', $homeparty->id)->get()->last(); $data = [ 'homeparty' => $homeparty, + 'userHistoryPaymentOrder' => $userHistoryPaymentOrder, ]; return view('user.homeparty.order', $data); } //perform Request public function orderStore($id = null) { + $homeparty = $this->getHomparty($id); + + if(Request::ajax()) { $data = Request::all(); @@ -265,7 +280,7 @@ class HomepartyController extends Controller } $homeparty_user = HomepartyUser::findOrFail($data['homeparty_user_id']); HomepartyCart::calculateHomeparty($homeparty); - $html_user_cart = view("user.homeparty.show_products_order", ['homeparty_guest' => $homeparty_user])->render(); + $html_user_cart = view("user.homeparty.show_products_order", ['homeparty' => $homeparty, 'homeparty_guest' => $homeparty_user])->render(); $html_bonus = view("user.homeparty.show_bonus", ['homeparty' => $homeparty])->render(); $html_host_bonus = view("user.homeparty.show_calc_bonus_host")->render(); $html_total = view("user.homeparty.show_total_order", ['homeparty' => $homeparty])->render(); @@ -292,7 +307,7 @@ class HomepartyController extends Controller } $homeparty_user = HomepartyUser::findOrFail($data['homeparty_user_id']); HomepartyCart::calculateHomeparty($homeparty); - $html_user_cart = view("user.homeparty.show_products_order", ['homeparty_guest' => $homeparty_user])->render(); + $html_user_cart = view("user.homeparty.show_products_order", ['homeparty' => $homeparty, 'homeparty_guest' => $homeparty_user])->render(); $html_bonus = view("user.homeparty.show_bonus", ['homeparty' => $homeparty])->render(); $html_host_bonus = view("user.homeparty.show_calc_bonus_host")->render(); $html_total = view("user.homeparty.show_total_order", ['homeparty' => $homeparty])->render(); @@ -313,20 +328,81 @@ class HomepartyController extends Controller } $homeparty_user = HomepartyUser::findOrFail($data['homeparty_user_id']); HomepartyCart::calculateHomeparty($homeparty); - $html_user_cart = view("user.homeparty.show_products_order", ['homeparty_guest' => $homeparty_user])->render(); + $html_user_cart = view("user.homeparty.show_products_order", ['homeparty' => $homeparty, 'homeparty_guest' => $homeparty_user])->render(); $html_bonus = view("user.homeparty.show_bonus", ['homeparty' => $homeparty])->render(); $html_host_bonus = view("user.homeparty.show_calc_bonus_host")->render(); $html_total = view("user.homeparty.show_total_order", ['homeparty' => $homeparty])->render(); return response()->json(['response' => true, 'data'=>$data, 'html_user_cart'=>$html_user_cart, 'html_bonus'=>$html_bonus, 'html_host_bonus'=>$html_host_bonus, 'html_total'=>$html_total]); } + if($data['action'] === 'updateDeliveryOption') { + if($data['homeparty_id'] == $homeparty->id){ + $homeparty_user = HomepartyUser::findOrFail($data['homeparty_user_id']); + if($homeparty_user->homeparty_id !== $homeparty->id){ + abort(404); + } + if(isset($data['delivery'])){ + $homeparty_user->delivery = $data['delivery']; + $homeparty_user->save(); + } + } + $homeparty_user = HomepartyUser::findOrFail($data['homeparty_user_id']); + HomepartyCart::calculateHomeparty($homeparty); + $html_user_cart = view("user.homeparty.show_products_order", ['homeparty' => $homeparty, 'homeparty_guest' => $homeparty_user])->render(); + $html_bonus = view("user.homeparty.show_bonus", ['homeparty' => $homeparty])->render(); + $html_host_bonus = view("user.homeparty.show_calc_bonus_host")->render(); + $html_total = view("user.homeparty.show_total_order", ['homeparty' => $homeparty])->render(); + return response()->json(['response' => true, 'data'=>$data, 'html_user_cart'=>$html_user_cart, 'html_bonus'=>$html_bonus, 'html_host_bonus'=>$html_host_bonus, 'html_total'=>$html_total]); + } + + return response()->json(['response' => false, 'data'=>$data]); } - /* $data = [ - 'homeparty' => $homeparty, - ]; - return view('user.homeparty.order', $data);*/ + HomepartyCart::calculateHomeparty($homeparty); + if(\App\Services\HomepartyCart::$price === 0){ + \Session()->flash('alert-error', 'Dein Warenkorb ist leer, bitte füge erst Produkte hinzu.'); + return redirect(route('user_homeparty_order', [$homeparty->id])); + } + + //save the calucalte card! + $time = time(); + $date = date('d.m.Y H:i:s', $time); + $user = User::find(Auth::user()->id); + Yard::instance('shopping')->destroy(); + Yard::instance('shopping')->add($homeparty->id, 'Bestellung Homeparty '.$date, 1, \App\Services\HomepartyCart::$price, ['image' => "", 'slug' => $time, 'weight' => 0]); + do { + $identifier = Util::getToken(); + } while( ShoppingInstance::where('identifier', $identifier)->count() ); + + HomepartyCart::store($identifier, $date); + + $data = []; + $data['is_from'] = 'homeparty'; + $data['shop_price_net'] = HomepartyCart::getFormattedPriceNet(); + $data['shop_price_tax'] = HomepartyCart::getFormattedPriceTax(); + $data['homeparty_id'] = $homeparty->id; + $data['is_for'] = 'hp'; + + ShoppingInstance::create([ + 'identifier' => $identifier, + 'user_shop_id' => 1, //is first faker shop for nuy intern + 'auth_user_id' => Auth::user()->id, + 'payment' => 5, //Berater Membership + 'subdomain' => url('/'), + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'shopping_data' => $data, + 'back' => url()->previous(), + + ]); + + HomepartyCart::store($identifier, $date); + Yard::instance('shopping')->store($identifier); + + $path = route('checkout.checkout_card', ['identifier'=>$identifier]); + UserHistory::create(['user_id' => $user->id, 'action'=>'payment_homeparty', 'status'=>1, 'referenz'=>$homeparty->id, 'identifier'=>$identifier]); + //$path = str_replace('http', 'https', $path); + return redirect()->secure($path); } diff --git a/app/Http/Controllers/User/OrderController.php b/app/Http/Controllers/User/OrderController.php index c97b4d1..40f1621 100755 --- a/app/Http/Controllers/User/OrderController.php +++ b/app/Http/Controllers/User/OrderController.php @@ -84,6 +84,9 @@ class OrderController extends Controller if($ShoppingOrder->shopping_user->is_for === 'ot'){ return 'Kundenbestellung'; } + if($ShoppingOrder->shopping_user->is_for === 'hp'){ + return 'Homepartybestellung'; + } return '-'; }) ->addColumn('reference', function (ShoppingOrder $ShoppingOrder) { diff --git a/app/Http/Controllers/Web/CheckoutController.php b/app/Http/Controllers/Web/CheckoutController.php index 1b18a57..f5e2ddb 100755 --- a/app/Http/Controllers/Web/CheckoutController.php +++ b/app/Http/Controllers/Web/CheckoutController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Web; use App\Http\Controllers\Controller; use App\Http\Controllers\Pay\PayoneController; +use App\Models\Homeparty; use App\Models\PaymentMethod; use App\Models\PaymentTransaction; use App\Models\ShippingCountry; @@ -48,6 +49,7 @@ class CheckoutController extends Controller $is_from = isset($shopping_data['is_from']) ? $shopping_data['is_from'] : 'shopping'; $is_for = isset($shopping_data['is_for']) ? $shopping_data['is_for'] : false; + $homeparty_id = isset($shopping_data['homeparty_id']) ? $shopping_data['homeparty_id'] : null; $shopping_user = null; @@ -76,6 +78,7 @@ class CheckoutController extends Controller $shopping_user = new ShoppingUser(); $shopping_user->is_for = $is_for; $shopping_user->is_from = $is_from; + $shopping_user->homeparty_id = $homeparty_id; $shopping_user->mode = 'prev'; } }else{ @@ -117,6 +120,7 @@ class CheckoutController extends Controller $data = [ 'is_from' => $is_from, 'is_for' => $is_for, + 'shopping_data' => $shopping_data, 'user_shop' => Util::getUserShop(), 'shopping_user' => $shopping_user, 'shopping_mode' => Util::getUserShoppingMode(), @@ -151,6 +155,8 @@ class CheckoutController extends Controller $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; + //Lieferadresse if($is_from === 'user_order'){ if(isset($data['shopping_user_id']) && $data['is_for'] === 'ot'){ @@ -456,30 +462,50 @@ class CheckoutController extends Controller $user_shop = Util::getUserShop(); - $data = [ - 'shopping_user_id' => $shopping_user->id, - 'auth_user_id' => $shopping_user->auth_user_id, - 'country_id' => Yard::instance('shopping')->getShippingCountryId(), - 'user_shop_id' => $user_shop->id, - 'payment_for' => Util::getUserPaymentFor(), + if($shopping_user->is_from === 'homeparty'){ + //get data + $homeparty = Homeparty::find($shopping_user->homeparty_id); + //set Data! + $data = [ + 'shopping_user_id' => $shopping_user->id, + 'auth_user_id' => $shopping_user->auth_user_id, + 'country_id' => Yard::instance('shopping')->getShippingCountryId(), + 'user_shop_id' => $user_shop->id, + 'payment_for' => Util::getUserPaymentFor(), + 'homeparty_id' => $shopping_user->homeparty_id, + 'total' => Yard::instance('shopping')->total(2, '.', ''), + 'subtotal' => $homeparty->order['price_net'], + 'shipping' => $homeparty->order['shipping_price'], + 'shipping_net' => $homeparty->order['shipping_price_net'], + 'subtotal_ws' => 0, + 'tax' => 0, + 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'points' => $homeparty->order['points'], + '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('shopping')->getShippingCountryId(), + 'user_shop_id' => $user_shop->id, + 'payment_for' => Util::getUserPaymentFor(), + 'total' => Yard::instance('shopping')->total(2, '.', ''), + 'subtotal' => Yard::instance('shopping')->subtotal(2, '.', ''), + 'shipping' => Yard::instance('shopping')->shipping(2, '.', ','), + 'shipping_net' => Yard::instance('shopping')->shippingNet(2, '.', ''), + 'subtotal_ws' => Yard::instance('shopping')->subtotalWithShipping(2, '.', ''), + 'tax' => Yard::instance('shopping')->taxWithShipping(2, '.', ''), + 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), + 'points' => Yard::instance('shopping')->points(), + 'weight' => Yard::instance('shopping')->weight(), + 'txaction' => 'prev', + 'mode' => Util::getUserShoppingMode(), + ]; + } - - 'total' => Yard::instance('shopping')->total(2, '.', ''), - 'subtotal' => Yard::instance('shopping')->subtotal(2, '.', ''), - - 'shipping' => Yard::instance('shopping')->shipping(2, '.', ','), - 'shipping_net' => Yard::instance('shopping')->shippingNet(2, '.', ''), - 'subtotal_ws' => Yard::instance('shopping')->subtotalWithShipping(2, '.', ''), - - 'tax' => Yard::instance('shopping')->taxWithShipping(2, '.', ''), - 'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''), - - 'points' => Yard::instance('shopping')->points(), - - 'weight' => Yard::instance('shopping')->weight(), - 'txaction' => 'prev', - 'mode' => Util::getUserShoppingMode(), - ]; $shopping_order= false; if($this->getPayments('shopping_order_id')){ $shopping_order = ShoppingOrder::find($this->getPayments('shopping_order_id')); @@ -493,13 +519,11 @@ class CheckoutController extends Controller } $this->putPayments('shopping_order_id', $shopping_order->id); - - $items = Yard::instance('shopping')->getContentByOrder(); - - $shopping_order->shopping_order_items()->each(function($model) use ($items, $shopping_order) { - foreach ($items as $item) { + $items = Yard::instance('shopping')->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) { - $model->fill([ + $data = [ 'shopping_order_id' => $shopping_order->id, 'row_id' => $item->rowId, 'product_id' => $item->id, @@ -509,27 +533,43 @@ class CheckoutController extends Controller 'price_net' => Yard::instance('shopping')->rowPriceNet($item, 3, '.', ''), 'tax_rate' => $item->taxRate, 'slug' => $item->options->slug, - ])->save(); + ]; + if($shopping_user->is_from === 'homeparty'){ + $data['homeparty_id'] = (int) $shopping_user->homeparty_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()) - ShoppingOrderItem::create([ + if (!ShoppingOrderItem::where('shopping_order_id', $shopping_order->id)->where('row_id', $item->rowId)->count()){ + $data = [ 'shopping_order_id' => $shopping_order->id, 'row_id' => $item->rowId, - 'product_id' => $item->id, + 'product_id' => 70, 'comp' => $item->options->comp, 'qty' => $item->qty, 'price' => $item->price, 'price_net' => Yard::instance('shopping')->rowPriceNet($item, 3, '.', ''), 'tax_rate' => $item->taxRate, 'slug' => $item->options->slug - ]); - }; + ]; + + if($shopping_user->is_from === 'homeparty'){ + $data['homeparty_id'] = (int) $shopping_user->homeparty_id; + $data['product_id'] = null; + } + + $shopping_order_item = ShoppingOrderItem::create($data); + } + } + + return $shopping_order; } diff --git a/app/Models/Homeparty.php b/app/Models/Homeparty.php index c534b87..c6d2df7 100644 --- a/app/Models/Homeparty.php +++ b/app/Models/Homeparty.php @@ -69,7 +69,9 @@ class Homeparty extends Model 'order_to' => 'bool', 'active' => 'bool', 'default' => 'bool', - 'token_active' => 'bool' + 'token_active' => 'bool', + 'settings' => 'array', + 'order' => 'array' ]; protected $dates = [ @@ -94,6 +96,8 @@ class Homeparty extends Model 'default', 'token', 'token_active', + 'settings', + 'order' ]; public function auth_user() diff --git a/app/Models/HomepartyUser.php b/app/Models/HomepartyUser.php index 31fe57c..07a0814 100644 --- a/app/Models/HomepartyUser.php +++ b/app/Models/HomepartyUser.php @@ -123,7 +123,9 @@ class HomepartyUser extends Model 'shipping_country_id' => 'int', 'has_buyed' => 'bool', 'subscribed' => 'bool', - ]; + 'settings' => 'array', + + ]; protected $dates = [ 'user_deleted_at' @@ -161,7 +163,9 @@ class HomepartyUser extends Model 'subscribed', 'notice', 'mode', - 'user_deleted_at' + 'settings', + 'delivery', + 'user_deleted_at' ]; public function homeparty() @@ -190,9 +194,27 @@ class HomepartyUser extends Model } public function isAddress(){ - if($this->billing_firstname !== null){ + if($this->billing_firstname !== null && $this->billing_country_id !== null){ return true; } return false; } + + public function getDelivery(){ + return $this->delivery === 'direct' ? 'direct' : 'host'; + } + + + public function getShipping(){ + if($this->same_as_billing){ + $country_id = $this->billing_country_id != null ? $this->billing_country_id : 1; + }else{ + $country_id = $this->shipping_country_id != null ? $this->shipping_country_id : 1; + } + $shippingCountry = ShippingCountry::whereCountryId($country_id)->first(); + if(!$shippingCountry){ + return null; + } + return $shippingCountry->shipping; + } } diff --git a/app/Models/Product.php b/app/Models/Product.php index 71a167a..035b1c0 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -174,6 +174,8 @@ class Product extends Model 'show_order' => 'Wird immer als Option angezeigt', 'upgrade' => 'Produktupgrade zur Produkt ID', 'upgrade_member' => 'Beraterupgrade zur Karriere ID', + 'proportional_voucher' => 'Anteiliger Gutschein Berater', + ]; public $unitTypes = [ @@ -192,6 +194,7 @@ class Product extends Model 4 => 'Nur Mitgliedschaft Berater', 5 => 'Onboarding Berater', 6 => 'Onboarding Berater + Berater Shop', + 7 => 'zur internen Berechnung', ]; diff --git a/app/Models/ShoppingInstance.php b/app/Models/ShoppingInstance.php index 225d727..be16859 100644 --- a/app/Models/ShoppingInstance.php +++ b/app/Models/ShoppingInstance.php @@ -43,6 +43,7 @@ class ShoppingInstance extends Model 2 => 'Berater Shop', 3 => 'Berater Membership', 4 => 'Berater Wizard', + 5 => 'Berater Homeparty', ]; protected $table = 'shopping_instances'; diff --git a/app/Models/ShoppingOrder.php b/app/Models/ShoppingOrder.php index 57431b8..8513290 100644 --- a/app/Models/ShoppingOrder.php +++ b/app/Models/ShoppingOrder.php @@ -92,6 +92,7 @@ class ShoppingOrder extends Model 'shopping_user_id', 'auth_user_id', 'member_id', + 'homeparty_id', 'country_id', 'user_shop_id', 'total', @@ -143,6 +144,11 @@ class ShoppingOrder extends Model return $this->belongsTo('App\Models\ShippingCountry','country_id'); } + public function homeparty() + { + return $this->belongsTo('App\Models\Homeparty','homeparty_id'); + } + public function user_shop() { return $this->belongsTo('App\Models\UserShop','user_shop_id'); diff --git a/app/Models/ShoppingOrderItem.php b/app/Models/ShoppingOrderItem.php index 0f6372e..370e3fd 100644 --- a/app/Models/ShoppingOrderItem.php +++ b/app/Models/ShoppingOrderItem.php @@ -57,6 +57,7 @@ class ShoppingOrderItem extends Model 'shopping_order_id', 'row_id', 'product_id', + 'homeparty_id', 'comp', 'qty', 'price', @@ -76,6 +77,11 @@ class ShoppingOrderItem extends Model return $this->belongsTo('App\Models\Product','product_id'); } + public function homeparty() + { + return $this->belongsTo('App\Models\Homeparty','homeparty_id'); + } + public function getFormattedPrice() { return formatNumber($this->attributes['price']); diff --git a/app/Models/ShoppingUser.php b/app/Models/ShoppingUser.php index da6b78f..ad6269b 100644 --- a/app/Models/ShoppingUser.php +++ b/app/Models/ShoppingUser.php @@ -160,6 +160,7 @@ class ShoppingUser extends Model 'is_for', 'is_from', 'shopping_user_id', + 'homeparty_id', 'wp_order_number', 'wp_order_date', ]; diff --git a/app/Models/UserHistory.php b/app/Models/UserHistory.php index 6019ae8..4e671f9 100644 --- a/app/Models/UserHistory.php +++ b/app/Models/UserHistory.php @@ -79,11 +79,11 @@ class UserHistory extends Model 2 => 'warning', 3 => 'danger', 4 => 'warning', - 5 => 'success', + 5 => 'warning', 6 => 'danger', 7 => 'warning', 8 => 'success', - 9 => 'success', + 9 => 'secondary', 10 => 'success', 21 => 'danger', 22 => 'danger', diff --git a/app/Services/HomepartyCart.php b/app/Services/HomepartyCart.php index 5a20e09..1adb5c7 100644 --- a/app/Services/HomepartyCart.php +++ b/app/Services/HomepartyCart.php @@ -5,6 +5,8 @@ namespace App\Services; use App\Models\Homeparty; +use App\Models\Product; +use App\Models\ShippingCountry; class HomepartyCart { @@ -26,6 +28,9 @@ class HomepartyCart public static $ek_price = 0; public static $income_price = 0; + private static $shipping_total = 0; + private static $shipping_net_total = 0; + private static $homeparty; private static $userCarts = []; @@ -34,10 +39,14 @@ class HomepartyCart public static $is_bonus = false; public static $is_bonus_coupon = false; + private static $bonus_coupon = 0; private static $bonus_value = 30; - private static $bonus_price = 0; + private static $voucher_price = 0; + public static $voucher_name = ""; + + private static $bonus_diff = 0; private static $bonus_points_diff = 0; private static $bonus_coupon_fault = 0; @@ -51,7 +60,6 @@ class HomepartyCart 500 => 35, 600 => 40, 700 => 50, - ]; public static function calculateHomeparty(Homeparty $homeparty){ @@ -62,7 +70,9 @@ class HomepartyCart } self::$userCarts[$homeparty_user->id] = new HomepartyUserCart($homeparty_user); self::addCart(self::$userCarts[$homeparty_user->id]); + } + self::caluclateShipping(); self::caluclateBonus(); self::calculateBonusHost(); } @@ -80,15 +90,16 @@ class HomepartyCart } - public static function caluclateBonus(){ + private static function caluclateBonus(){ if(self::$price >= 200){ self::$is_bonus = true; + $proportional_voucher = Product::whereIdentifier('proportional_voucher')->first(); + self::$voucher_price = $proportional_voucher->price; + self::$voucher_name = $proportional_voucher->getLang('name'); - //TODO get from PRODUCT - self::$bonus_price = 11.90; - self::$price += self::$bonus_price; - self::$price_net += 10; + self::$price += self::$voucher_price; + self::$price_net += $proportional_voucher->getPriceWith(true, false); $bonus_tmp = self::$price - self::$bonus_value; @@ -118,7 +129,7 @@ class HomepartyCart } - public static function calculateBonusHost(){ + private static function calculateBonusHost(){ if(self::$is_bonus){ $bonus_total = self::$bonus_value + self::$bonus_coupon; $user_cart = self::getUserCart(self::$user_host_id); @@ -133,11 +144,140 @@ class HomepartyCart $bonus_percent = (100/$user_cart->price*$bonus_total); self::$bonus_points_diff = round($user_cart->points/100*$bonus_percent); $user_cart->points -= self::$bonus_points_diff; - $user_cart->price -= $bonus_total; + + $user_cart->price -= $bonus_total; + $user_cart->price_net -= ($bonus_total / config('app.main_tax')); + self::$price -= $bonus_total; + self::$price_net -= ($bonus_total / config('app.main_tax')); + + } } + private static function caluclateShipping(){ + + //weight to the orders + //first host + $host_user_cart = self::getUserCart(self::$user_host_id); + $host_user_cart->shipping_weight = $host_user_cart->weight; + + foreach (self::$homeparty->homeparty_users as $homeparty_user){ + if(!$homeparty_user->is_host){ + $user_cart = self::$userCarts[$homeparty_user->id]; + if($homeparty_user->getDelivery() === 'direct'){ + $user_cart->shipping_weight += $user_cart->weight; + }else{ + $host_user_cart->shipping_weight += $user_cart->weight; + } + } + } + + self::calculateShippingPrice(); + + } + + private static function calculateShippingPrice(){ + + foreach (self::$homeparty->homeparty_users as $homeparty_user) { + $shipping = $homeparty_user->getShipping(); + $user_cart = self::$userCarts[$homeparty_user->id]; + if(!$shipping){ + return; + } + if($user_cart->shipping_weight === 0){ + $shipping_price = $shipping->shipping_prices->first(); + $shipping_price->price = 0; + $shipping_price->shipping_price_net = 0; + }else{ + //sec by weight + $shipping_price = self::shippingPriceByWeight($shipping->shipping_prices, $user_cart->shipping_weight); + + //default + if(!$shipping_price){ + $shipping_price = $shipping->shipping_prices->first(); + } + } + + if($shipping_price){ + $price = $shipping_price->price; + $user_cart->shipping_price = $price; + $user_cart->shipping_tax_rate = $shipping_price->tax_rate; + $user_cart->shipping_price_net = round($price / ((100+$shipping_price->tax_rate) / 100), 2); + $user_cart->shipping_tax = round($price / (100+$shipping_price->tax_rate) * 100, 2); + } + + //on the end, add prices for porto + $user_cart->price += $user_cart->shipping_price; + $user_cart->price_net += $user_cart->shipping_price_net; + self::$price += $user_cart->shipping_price; + self::$price_net += $user_cart->shipping_price_net; + + self::$shipping_total += $user_cart->shipping_price; + self::$shipping_net_total += $user_cart->shipping_price_net; + + } + } + + private static function shippingPriceByWeight($prices, $weight){ + foreach ($prices as $price){ + if($price->weight_from > 0 && $price->weight_to > 0){ + if($weight >= $price->weight_from && $weight <= $price->weight_to){ + return $price; + } + } + } + return false; + } + + + public static function store($identifier, $date){ + + $data = [ + 'date' => $date, + 'identifier' => $identifier, + 'points' => self::$points, + 'price' => round(self::$price, 2), + 'price_net' => round(self::$price_net, 2), + 'ek_price' => round(self::$ek_price, 2), + 'income_price' => round(self::$income_price, 2), + 'user_host_id' => self::$user_host_id, + 'is_bonus' => self::$is_bonus, + 'is_bonus_coupon' => self::$is_bonus_coupon, + 'bonus_value' => self::$bonus_value, + 'bonus_coupon' => self::$bonus_coupon, + 'bonus_total' => self::$bonus_value + self::$bonus_coupon, + 'shipping_price' => self::$shipping_total, + 'shipping_price_net' => self::$shipping_net_total, + 'bonus_points_diff' => self::$bonus_points_diff, + 'voucher_price' => self::$voucher_price, + 'voucher_name' => self::$voucher_name, + ]; + $user_data = []; + foreach (self::$homeparty->homeparty_users as $homeparty_user){ + + $user_cart = self::$userCarts[$homeparty_user->id]; + $user_data[$homeparty_user->id] = [ + 'is_host' => $homeparty_user->is_host, + 'points' => $user_cart->points, + 'price' => round($user_cart->price, 2), + 'price_net' => round($user_cart->price_net, 2), + 'ek_price' => round($user_cart->ek_price, 2), + 'income_price' => round($user_cart->income_price, 2), + 'weight' => $user_cart->weight, + 'shipping_weight' => $user_cart->shipping_weight, + 'shipping_price' => round($user_cart->shipping_price, 2), + 'shipping_tax_rate' => round($user_cart->shipping_tax_rate, 2), + 'shipping_price_net' => round($user_cart->shipping_price_net, 2), + 'shipping_tax' => $user_cart->shipping_tax, + ]; + } + $data['user_carts'] = $user_data; + self::$homeparty->order = $data; + self::$homeparty->save(); + + } + public static function getUserCartHost(){ return self::getUserCart(self::$user_host_id); } @@ -172,7 +312,7 @@ class HomepartyCart } public static function getFormattedBonusPrice() { - return formatNumber(self::$bonus_price); + return formatNumber(self::$voucher_price); } public static function getFormattedBonusStart(){ return formatNumber(self::$bonus_start); @@ -211,330 +351,7 @@ class HomepartyCart return formatNumber( self::$bonus_points_diff, 0 ); } - /* public static function getTaxRate() - { - return config('cart.tax'); - } - - public function putYardExtra($key, $value){ - $content = $this->getYContent(); - $content->put($key, $value); - $this->ysession->put($this->yinstance, $content); - } - - public function getYardExtra($key){ - $content = $this->getYContent(); - if ($content->has($key)){ - return $content->get($key); - } - return false; - } - - public function getShippingCountryName(){ - - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if($shippingCountry && $shippingCountry->country){ - return $shippingCountry->country->getLocated(); - } - return ""; - } - public function getShippingCountryCountryId() - { - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if($shippingCountry && $shippingCountry->country){ - return $shippingCountry->country->id; - } - return 1; //default DE - } - - public function getShippingCountryId() - { - return $this->shipping_country_id; - } - - - public function getYContent() - { - if (is_null($this->ysession->get($this->yinstance))) { - return new Collection([]); - } - return $this->ysession->get($this->yinstance); - } - - - public function reCalculateShippingPrice(){ - $this->calculateShippingPrice(); - } - - public function setShippingCountryWithPrice($shipping_country_id, $shipping_is_for = 'ot') - { - $this->shipping_country_id = $shipping_country_id; - $this->putYardExtra('shipping_country_id', $shipping_country_id); - - $this->shipping_is_for = $shipping_is_for; - $this->putYardExtra('shipping_is_for', $shipping_is_for); - - $this->calculateShippingPrice(); - - } - - private function calculateShippingPrice(){ - - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if(!$shippingCountry){ - return; - } - $shipping = $shippingCountry->shipping; - - if($this->weight() == 0){ - $shipping_price = $shipping->shipping_prices->first(); - $shipping_price->price = 0; - $shipping_price->price_comp = 0; - }else{ - //first by price - $shipping_price = $this->shippingPriceByTotal($shipping->shipping_prices, $this->total(2, '.', '')); - //sec by weight - if(!$shipping_price){ - $shipping_price = $this->shippingPriceByWeight($shipping->shipping_prices, $this->weight()); - } - //default - if(!$shipping_price){ - $shipping_price = $shipping->shipping_prices->first(); - } - } - if($shipping_price){ - $price = $shipping_price->price; - $this->num_comp = 0; - if($this->shipping_is_for === 'me'){ - $price = $shipping_price->price_comp; - $this->num_comp = $shipping_price->num_comp; - - } - $this->shipping_price = $price; - $this->shipping_tax_rate = $shipping_price->tax_rate; - $this->shipping_price_net = round($price / ((100+$shipping_price->tax_rate) / 100), 2); - $this->shipping_tax = round($price / (100+$shipping_price->tax_rate) * 100, 2); - - $this->putYardExtra('num_comp', $this->num_comp); - $this->putYardExtra('shipping_price', $this->shipping_price); - $this->putYardExtra('shipping_tax_rate', $this->shipping_tax_rate); - $this->putYardExtra('shipping_tax', $this->shipping_tax); - $this->putYardExtra('shipping_price_net', $this->shipping_price_net); - } - } - - private function shippingPriceByTotal($prices, $total){ - foreach ($prices as $price){ - if($price->total_from > 0 && $price->total_to > 0){ - if($total >= $price->total_from && $total <= $price->total_to){ - return $price; - } - } - } - return false; - } - private function shippingPriceByWeight($prices, $weight){ - foreach ($prices as $price){ - if($price->weight_from > 0 && $price->weight_to > 0){ - if($weight >= $price->weight_from && $weight <= $price->weight_to){ - return $price; - } - } - } - return false; - } - - - public function shipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_price, $decimals, $decimalPoint, $thousandSeperator); - } - - public function shippingNet($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_price_net, $decimals, $decimalPoint, $thousandSeperator); - } - // - private function shippingTax($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_tax, $decimals, $decimalPoint, $thousandSeperator); - - } - - - //netto - public function subtotalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $subtotal = (float) $this->shipping_price_net + $this->subtotal(2, '.', ''); - return $this->numberFormat($subtotal, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function taxWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $total = $this->totalWithShipping(2, '.', ''); - // $totalTax = (float) $this->tax(2, '.', '') + $this->shipping_tax; - $totalTax = $this->subtotalWithShipping(2, '.', ''); - return $this->numberFormat(($total - $totalTax), $decimals, $decimalPoint, $thousandSeperator); - } - - - public function totalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $total = (float) ($this->total(2, '.', '')) + $this->shipping_price; - return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function weight($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->options->weight ? ($cartItem->options->weight*$cartItem->qty) : 0); - }, 0); - - return $total; - } - - public function points() - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->options->points ? ($cartItem->options->points * $cartItem->qty) : 0); - }, 0); - - return $total; - } - - public function compCount() - { - $content = $this->getContent(); - - $count = parent::count(); - $comp_count = $content->reduce(function ($comp_count, CartItem $cartItem) { - return $cartItem->options->comp ? $comp_count + 1 : $comp_count; - }, 0); - return $count-$comp_count; - } - - public function total($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->qty * $cartItem->price); - }, 0); - - return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function tax($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - - $tax = $content->reduce(function ($tax, CartItem $cartItem) { - $priceTax = $cartItem->price / (100 + $cartItem->taxRate) * $cartItem->taxRate; - return $tax + ($cartItem->qty * $priceTax); - }, 0); - - return $this->numberFormat($tax, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function subtotal($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - - $subTotal = $content->reduce(function ($subTotal, CartItem $cartItem) { - $price_net = $cartItem->price / ((100 + $cartItem->taxRate) / 100); - return $subTotal + ($cartItem->qty * $price_net); - }, 0); - - return $this->numberFormat($subTotal, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function getCartItemByProduct($product_id, $set_price='with'){ - if($product = Product::find($product_id)) { - $image = ""; - if ($product->images->count()) { - $image = $product->images->first()->slug; - } - $price = $product->price; - if($set_price === 'with'){ - $price = $product->getPriceWith(false, true); - } - $cartItem = $this->getCartItem($product->id, $product->getLang('name'), 1, $price, ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points]); - $content = $this->getContent(); - - if ($content->has($cartItem->rowId)){ - return $content->get($cartItem->rowId); - } - return $cartItem; - } - return null; - - } - - - public function getCartItem($id, $name = null, $qty = null, $price = null, array $options = []){ - if ($id instanceof Buyable) { - $cartItem = CartItem::fromBuyable($id, $qty ?: []); - } elseif (is_array($id)) { - $cartItem = CartItem::fromArray($id); - } else { - $cartItem = CartItem::fromAttributes($id, $name, $price, $options); - } - return $cartItem; - } - - public function destroy() - { - $this->ysession->remove($this->yinstance); - parent::destroy(); - - } - - public function rowPriceNet(CartItem $row, $decimals = null, $decimalPoint = null, $thousandSeperator = null){ - $price = round($row->price / ((100 + $row->taxRate) /100), 4); - return $this->numberFormat($price, $decimals, $decimalPoint, $thousandSeperator); - } - - public function rowSubtotalNet(CartItem $row, $decimals = null, $decimalPoint = null, $thousandSeperator = null){ - $price = round($row->price / ((100 + $row->taxRate) /100), 4); - return $this->numberFormat(($price * $row->qty), $decimals, $decimalPoint, $thousandSeperator); - } - - public function getNumComp(){ - return $this->num_comp; - } - - public function getCompProductBy($comp, $product_id=false){ - foreach ($this->content() as $row) { - if($row->options->comp == $comp) { - return $row->options->product_id; - } - } - return false; - } - - public function getContentByOrder(){ - $ret = []; - $comp = []; - foreach ($this->content() as $row) { - if($row->options->comp){ - $comp[100+$row->options->comp] = $row; - }else{ - $ret[] = $row; - } - } - ksort($comp); - $ret = array_merge($ret, $comp); - return $ret; - } - - */ protected function numberFormat($value, $decimals, $decimalPoint, $thousandSeperator) { if(is_null($decimals)){ diff --git a/app/Services/HomepartyUserCart.php b/app/Services/HomepartyUserCart.php index e86d43b..659fb09 100644 --- a/app/Services/HomepartyUserCart.php +++ b/app/Services/HomepartyUserCart.php @@ -32,17 +32,34 @@ class HomepartyUserCart public $ek_price; public $income_price; + public $weight; + public $shipping_weight; + + + public $shipping_price; + public $shipping_tax_rate; + public $shipping_price_net; + public $shipping_tax; + + private $homepartyUser; public function __construct(HomepartyUser $homepartyUser) { $this->homepartyUser = $homepartyUser; + //is all total $this->points = 0; $this->price = 0; $this->price_net = 0; $this->ek_price = 0; $this->income_price = 0; + $this->weight = 0; + $this->shipping_weight = 0; + $this->shipping_price = 0; + $this->shipping_tax_rate = 0; + $this->shipping_price_net = 0; + $this->shipping_tax = 0; $this->calculateUserCart(); } @@ -54,6 +71,7 @@ class HomepartyUserCart $this->price_net += $order_item->geTotalPriceNet(); $this->ek_price += $order_item->geTotalEKPrice(); $this->income_price += $order_item->geTotalIncomePrice(); + $this->weight += ($order_item->product->weight * $order_item->qty); } } @@ -82,330 +100,12 @@ class HomepartyUserCart { return formatNumber($this->income_price); } - /* public static function getTaxRate() + + public function getFormattedShippingPrice() { - return config('cart.tax'); - } - - public function putYardExtra($key, $value){ - - $content = $this->getYContent(); - $content->put($key, $value); - $this->ysession->put($this->yinstance, $content); + return formatNumber($this->shipping_price); } - public function getYardExtra($key){ - $content = $this->getYContent(); - if ($content->has($key)){ - return $content->get($key); - } - return false; - } - - public function getShippingCountryName(){ - - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if($shippingCountry && $shippingCountry->country){ - return $shippingCountry->country->getLocated(); - } - return ""; - } - public function getShippingCountryCountryId() - { - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if($shippingCountry && $shippingCountry->country){ - return $shippingCountry->country->id; - } - return 1; //default DE - } - - public function getShippingCountryId() - { - return $this->shipping_country_id; - } - - - public function getYContent() - { - if (is_null($this->ysession->get($this->yinstance))) { - return new Collection([]); - } - return $this->ysession->get($this->yinstance); - } - - - public function reCalculateShippingPrice(){ - $this->calculateShippingPrice(); - } - - public function setShippingCountryWithPrice($shipping_country_id, $shipping_is_for = 'ot') - { - $this->shipping_country_id = $shipping_country_id; - $this->putYardExtra('shipping_country_id', $shipping_country_id); - - $this->shipping_is_for = $shipping_is_for; - $this->putYardExtra('shipping_is_for', $shipping_is_for); - - $this->calculateShippingPrice(); - - } - - private function calculateShippingPrice(){ - - $shippingCountry = ShippingCountry::find($this->shipping_country_id); - if(!$shippingCountry){ - return; - } - $shipping = $shippingCountry->shipping; - - if($this->weight() == 0){ - $shipping_price = $shipping->shipping_prices->first(); - $shipping_price->price = 0; - $shipping_price->price_comp = 0; - }else{ - //first by price - $shipping_price = $this->shippingPriceByTotal($shipping->shipping_prices, $this->total(2, '.', '')); - //sec by weight - if(!$shipping_price){ - $shipping_price = $this->shippingPriceByWeight($shipping->shipping_prices, $this->weight()); - } - //default - if(!$shipping_price){ - $shipping_price = $shipping->shipping_prices->first(); - } - } - if($shipping_price){ - $price = $shipping_price->price; - $this->num_comp = 0; - if($this->shipping_is_for === 'me'){ - $price = $shipping_price->price_comp; - $this->num_comp = $shipping_price->num_comp; - - } - $this->shipping_price = $price; - $this->shipping_tax_rate = $shipping_price->tax_rate; - $this->shipping_price_net = round($price / ((100+$shipping_price->tax_rate) / 100), 2); - $this->shipping_tax = round($price / (100+$shipping_price->tax_rate) * 100, 2); - - $this->putYardExtra('num_comp', $this->num_comp); - $this->putYardExtra('shipping_price', $this->shipping_price); - $this->putYardExtra('shipping_tax_rate', $this->shipping_tax_rate); - $this->putYardExtra('shipping_tax', $this->shipping_tax); - $this->putYardExtra('shipping_price_net', $this->shipping_price_net); - } - } - - private function shippingPriceByTotal($prices, $total){ - foreach ($prices as $price){ - if($price->total_from > 0 && $price->total_to > 0){ - if($total >= $price->total_from && $total <= $price->total_to){ - return $price; - } - } - } - return false; - } - private function shippingPriceByWeight($prices, $weight){ - foreach ($prices as $price){ - if($price->weight_from > 0 && $price->weight_to > 0){ - if($weight >= $price->weight_from && $weight <= $price->weight_to){ - return $price; - } - } - } - return false; - } - - - public function shipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_price, $decimals, $decimalPoint, $thousandSeperator); - } - - public function shippingNet($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_price_net, $decimals, $decimalPoint, $thousandSeperator); - } - // - private function shippingTax($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - return $this->numberFormat($this->shipping_tax, $decimals, $decimalPoint, $thousandSeperator); - - } - - - //netto - public function subtotalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $subtotal = (float) $this->shipping_price_net + $this->subtotal(2, '.', ''); - return $this->numberFormat($subtotal, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function taxWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $total = $this->totalWithShipping(2, '.', ''); - // $totalTax = (float) $this->tax(2, '.', '') + $this->shipping_tax; - $totalTax = $this->subtotalWithShipping(2, '.', ''); - return $this->numberFormat(($total - $totalTax), $decimals, $decimalPoint, $thousandSeperator); - } - - - public function totalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $total = (float) ($this->total(2, '.', '')) + $this->shipping_price; - return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function weight($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->options->weight ? ($cartItem->options->weight*$cartItem->qty) : 0); - }, 0); - - return $total; - } - - public function points() - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->options->points ? ($cartItem->options->points * $cartItem->qty) : 0); - }, 0); - - return $total; - } - - public function compCount() - { - $content = $this->getContent(); - - $count = parent::count(); - $comp_count = $content->reduce(function ($comp_count, CartItem $cartItem) { - return $cartItem->options->comp ? $comp_count + 1 : $comp_count; - }, 0); - return $count-$comp_count; - } - - public function total($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - $total = $content->reduce(function ($total, CartItem $cartItem) { - return $total + ($cartItem->qty * $cartItem->price); - }, 0); - - return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function tax($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - - $tax = $content->reduce(function ($tax, CartItem $cartItem) { - $priceTax = $cartItem->price / (100 + $cartItem->taxRate) * $cartItem->taxRate; - return $tax + ($cartItem->qty * $priceTax); - }, 0); - - return $this->numberFormat($tax, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function subtotal($decimals = null, $decimalPoint = null, $thousandSeperator = null) - { - $content = $this->getContent(); - - $subTotal = $content->reduce(function ($subTotal, CartItem $cartItem) { - $price_net = $cartItem->price / ((100 + $cartItem->taxRate) / 100); - return $subTotal + ($cartItem->qty * $price_net); - }, 0); - - return $this->numberFormat($subTotal, $decimals, $decimalPoint, $thousandSeperator); - } - - - public function getCartItemByProduct($product_id, $set_price='with'){ - if($product = Product::find($product_id)) { - $image = ""; - if ($product->images->count()) { - $image = $product->images->first()->slug; - } - $price = $product->price; - if($set_price === 'with'){ - $price = $product->getPriceWith(false, true); - } - $cartItem = $this->getCartItem($product->id, $product->getLang('name'), 1, $price, ['image' => $image, 'slug' => $product->slug, 'weight' => $product->weight, 'points' => $product->points]); - $content = $this->getContent(); - - if ($content->has($cartItem->rowId)){ - return $content->get($cartItem->rowId); - } - return $cartItem; - } - return null; - - } - - - public function getCartItem($id, $name = null, $qty = null, $price = null, array $options = []){ - if ($id instanceof Buyable) { - $cartItem = CartItem::fromBuyable($id, $qty ?: []); - } elseif (is_array($id)) { - $cartItem = CartItem::fromArray($id); - } else { - $cartItem = CartItem::fromAttributes($id, $name, $price, $options); - } - return $cartItem; - } - - public function destroy() - { - $this->ysession->remove($this->yinstance); - parent::destroy(); - - } - - public function rowPriceNet(CartItem $row, $decimals = null, $decimalPoint = null, $thousandSeperator = null){ - $price = round($row->price / ((100 + $row->taxRate) /100), 4); - return $this->numberFormat($price, $decimals, $decimalPoint, $thousandSeperator); - } - - public function rowSubtotalNet(CartItem $row, $decimals = null, $decimalPoint = null, $thousandSeperator = null){ - $price = round($row->price / ((100 + $row->taxRate) /100), 4); - return $this->numberFormat(($price * $row->qty), $decimals, $decimalPoint, $thousandSeperator); - } - - public function getNumComp(){ - return $this->num_comp; - } - - public function getCompProductBy($comp, $product_id=false){ - foreach ($this->content() as $row) { - if($row->options->comp == $comp) { - return $row->options->product_id; - } - } - return false; - } - - public function getContentByOrder(){ - $ret = []; - $comp = []; - foreach ($this->content() as $row) { - if($row->options->comp){ - $comp[100+$row->options->comp] = $row; - }else{ - $ret[] = $row; - } - } - ksort($comp); - $ret = array_merge($ret, $comp); - return $ret; - } - - */ protected function numberFormat($value, $decimals, $decimalPoint, $thousandSeperator) { if(is_null($decimals)){ diff --git a/app/Services/Payment.php b/app/Services/Payment.php index 5f2b613..5fb8e40 100644 --- a/app/Services/Payment.php +++ b/app/Services/Payment.php @@ -120,8 +120,14 @@ class Payment } } } + } } + if($shopping_order->homeparty){ + $shopping_order->setUserHistoryValue(['status' => 9]); + $shopping_order->homeparty->completed = 1; + $shopping_order->homeparty->save(); + } return $send_link; } diff --git a/config/app.php b/config/app.php index 2b9a0f2..40992aa 100755 --- a/config/app.php +++ b/config/app.php @@ -67,7 +67,7 @@ return [ 'default_mail' => env('APP_DEFAULT_MAIL', 'info@mivita.care'), 'info_test_mail' => env('APP_INFO_TEST_MAIL', 'devtest@mivita.care'), - + 'main_tax' => env('APP_MAIN_TAX', 1.19), /* 'url_backend' => env('APP_URL', 'http://mivita.local/'), 'url_backend' => env('APP_URL', 'http://mivita.local/'), 'url_backend' => env('APP_URL', 'http://mivita.local/'), diff --git a/database/migrations/2019_02_23_161530_create_shopping_users_table.php b/database/migrations/2019_02_23_161530_create_shopping_users_table.php index 29d1e84..740ece0 100644 --- a/database/migrations/2019_02_23_161530_create_shopping_users_table.php +++ b/database/migrations/2019_02_23_161530_create_shopping_users_table.php @@ -58,6 +58,7 @@ class CreateShoppingUsersTable extends Migration $table->boolean('subscribed')->default(false); $table->text('notice')->default(false); + $table->unsignedInteger('homeparty_id')->nullable(); $table->char('mode', 4)->nullable(); diff --git a/database/migrations/2019_02_23_163527_create_shopping_orders_table.php b/database/migrations/2019_02_23_163527_create_shopping_orders_table.php index ef31084..d3e8065 100644 --- a/database/migrations/2019_02_23_163527_create_shopping_orders_table.php +++ b/database/migrations/2019_02_23_163527_create_shopping_orders_table.php @@ -23,6 +23,7 @@ class CreateShoppingOrdersTable extends Migration $table->unsignedInteger('user_shop_id'); $table->unsignedInteger('member_id')->nullable(); + $table->unsignedInteger('homeparty_id')->nullable(); $table->unsignedTinyInteger('payment_for')->nullable(); diff --git a/database/migrations/2019_02_23_163724_create_shopping_order_items_table.php b/database/migrations/2019_02_23_163724_create_shopping_order_items_table.php index c1f409c..4cafb3a 100644 --- a/database/migrations/2019_02_23_163724_create_shopping_order_items_table.php +++ b/database/migrations/2019_02_23_163724_create_shopping_order_items_table.php @@ -19,6 +19,7 @@ class CreateShoppingOrderItemsTable extends Migration $table->unsignedInteger('shopping_order_id'); $table->string('row_id', 40)->nullable(); $table->unsignedInteger('product_id'); + $table->unsignedInteger('homeparty_id')->nullable(); $table->unsignedTinyInteger('comp')->nullable(); diff --git a/database/migrations/2020_10_15_151059_create_homeparties_table.php b/database/migrations/2020_10_15_151059_create_homeparties_table.php index 7c69c84..96a1bcd 100644 --- a/database/migrations/2020_10_15_151059_create_homeparties_table.php +++ b/database/migrations/2020_10_15_151059_create_homeparties_table.php @@ -31,6 +31,9 @@ class CreateHomepartiesTable extends Migration $table->string('token')->nullable(); $table->boolean('token_active')->default(true); + $table->text('settings')->nullable(); + $table->text('order')->nullable(); + $table->timestamps(); }); } diff --git a/database/migrations/2020_10_15_151136_create_homeparty_users_table.php b/database/migrations/2020_10_15_151136_create_homeparty_users_table.php index 3079a62..a892c1a 100644 --- a/database/migrations/2020_10_15_151136_create_homeparty_users_table.php +++ b/database/migrations/2020_10_15_151136_create_homeparty_users_table.php @@ -54,6 +54,10 @@ class CreateHomepartyUsersTable extends Migration $table->text('notice')->nullable(); $table->char('mode', 4)->nullable(); + $table->char('delivery', 6)->nullable(); + + $table->text('settings')->nullable(); + $table->timestamps(); $table->softDeletes(); diff --git a/public/js/iq-homeparty-cart.js b/public/js/iq-homeparty-cart.js index f6c43fc..d6a5967 100755 --- a/public/js/iq-homeparty-cart.js +++ b/public/js/iq-homeparty-cart.js @@ -13,6 +13,7 @@ var IqHomepartyCart = { insert_show_total_order: '#insert_show_total_order', insert_show_bonus: '#insert_show_bonus', insert_show_bonus_host: '#insert_show_bonus_host', + select_delivery_option: '.select_delivery_option', /* comp_holder: '#holder_html_view_comp_product', is_for: null, @@ -32,7 +33,6 @@ var IqHomepartyCart = { init: function () { var _self = this; _self.url = $(_self.form).attr('action'); - _self._log(_self.url); $(_self.cart_holders).each(function (key, obj){ @@ -48,7 +48,6 @@ var IqHomepartyCart = { }, setDatabase: function (oTable){ var _self = this; - _self._log($(oTable)); _self.oTable = oTable; }, reInitModal: function (){ @@ -78,7 +77,6 @@ var IqHomepartyCart = { _self.remove_product($(this), _obj) }); obj.find(_self.table_input).off('change').on('change', function(){ - _self._log($(this)); _self.update_input_table($(this), _obj); }); @@ -86,7 +84,9 @@ var IqHomepartyCart = { _self.remove_from_cart($(this), _obj); }); - + obj.find(_self.select_delivery_option).off('change').on('change', function(){ + _self.update_delivery_option($(this), _obj); + }); }, add_product: function (_obj, _holder){ @@ -133,6 +133,16 @@ var IqHomepartyCart = { action: 'removeFromCart' }).done(_self.refreshView); }, + update_delivery_option: function (_obj, _holder){ + var _self = this; + _self.performRequest({ + delivery: _obj.val(), + homeparty_id: _holder.data('homeparty-id'), + homeparty_user_id: _holder.data('homeparty-user-id'), + action: 'updateDeliveryOption' + }).done(_self.refreshView); + }, + refreshView: function (data) { var _self = IqHomepartyCart; var obj = $(_self.cart_holder+data.data.homeparty_user_id) @@ -187,98 +197,5 @@ var IqHomepartyCart = { return 100; } return number; - }, - - /* - - showInit: function (){ - var _self = this; - $(_self.btn_clear).on('click', function (){ - _self.performRequest({action: 'clearCart'}) - .done(_self.refreshDatabaseRefreshAndView) - }); - $(_self.cart_input).on('change', function(){ - _self.update_input_cart($(this)); - }); - $(_self.remove_item).on('click', function(event){ - event.preventDefault(); - _self.update_cart_database($(this).data('product-id'), 0); - }); - if(_self.is_for === 'me'){ - $('input[name^="'+_self.comp_products+'"]').on('change', function(){ - _self.update_comp_product($(this)); - }); - } - }, - update_shipping_state : function (_obj){ - var _self = this; - var id = parseInt(_obj.val()); - var is_for = _obj.data('is-for'); - _self.performRequest({shipping_country_id: id, shipping_is_for: is_for, action: 'updateShippingCountry'}) - .done(_self.refreshItemsAndView); - }, - update_input_table: function (_obj){ - var _self = this; - var qty = parseInt(_obj.val()); - qty = _self.checkNumber(qty); - _obj.val(qty); - _self.update_cart(_obj.data('product-id'), qty); - }, - update_input_cart: function (_obj){ - var _self = this; - var qty = parseInt(_obj.val()); - qty = _self.checkNumber(qty); - _obj.val(qty); - _self.update_cart_database(_obj.data('product-id'), qty); - }, - update_comp_product: function (_obj){ - var _self = this; - _self.performRequest({comp_product_id: _obj.val(), comp_num: _obj.data('comp_num'), count_comp_products: $('input[name="'+_self.count_comp_products+'"]').val(), action: 'updateCompProduct'}) - .done(_self.refreshItemsAndView); - }, - - update_cart_database: function (product_id, qty){ - var _self = this; - _self.performRequest({product_id: product_id, qty: qty, action: 'updateCart'}) - .done(_self.refreshDatabaseAndView); - }, - update_cart: function (product_id, qty){ - var _self = this; - _self.performRequest({product_id: product_id, qty: qty, action: 'updateCart'}) - .done(_self.refreshItemsAndView); - }, - refreshItemsAndView: function (data){ - var _self = IqShoppingCart; - $(_self.cart_holder).html(data.html_cart); - $(_self.comp_holder).html(data.html_comp); - _self.showInit(); - - }, - refreshDatabaseAndView: function (data) { - var _self = IqShoppingCart; - $(_self.cart_holder).html(data.html_cart); - $(_self.comp_holder).html(data.html_comp); - - var input = $(_self.table).find('input[name="product_qty_'+data.data.product_id+'"]'); - input.val(data.data.qty); - _self.showInit(); - }, - refreshDatabaseRefreshAndView : function (data){ - var _self = IqShoppingCart; - $(_self.cart_holder).html(data.html_cart); - $(_self.comp_holder).html(data.html_comp); - - _self.showInit(); - _self.oTable.draw(); - }, - checkNumber : function(number){ - if(number < 0 || isNaN(number)){ - return 0; - } - if(number >= 100){ - return 100; - } - return number; - }, - */ + } }; \ No newline at end of file diff --git a/resources/views/admin/product/form.blade.php b/resources/views/admin/product/form.blade.php index f45df33..cd49dcf 100755 --- a/resources/views/admin/product/form.blade.php +++ b/resources/views/admin/product/form.blade.php @@ -26,9 +26,9 @@
- - + {!! HTMLHelper::getCategoriesOptions($product->categories()->pluck('category_id')->toArray(), false) !!}
diff --git a/resources/views/admin/sales/_detail.blade.php b/resources/views/admin/sales/_detail.blade.php index b1ac2b8..596d881 100644 --- a/resources/views/admin/sales/_detail.blade.php +++ b/resources/views/admin/sales/_detail.blade.php @@ -177,11 +177,13 @@
-
-
+ @if(!$shopping_order->shopping_user->is_from === 'homeparty') +
+ +
@if($shopping_order->shopping_user->is_from === 'user_order') @if($shopping_order->shopping_user->is_for === 'me') @@ -256,6 +258,7 @@
@endif
+ @endif
@@ -278,6 +281,10 @@ @if($shopping_order->shopping_user->is_from === 'shopping') Kundenbestellung über Shop @endif + @if($shopping_order->shopping_user->is_from === 'homeparty') +
Beraterbestellung für eine Homeparty
+
+ @endif -
+ @if(!$shopping_order->shopping_user->is_from === 'homeparty') +
@@ -393,6 +401,105 @@
+ @else + @if($shopping_order->homeparty) + + @php($homeparty = $shopping_order->homeparty) + @if($homeparty->homeparty_host) +

Bestellung Gastgeber/in {{$homeparty->homeparty_host->billing_firstname}} {{$homeparty->homeparty_host->billing_lastname}}

+ @include('admin.sales._detail_homparty', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty->homeparty_host]) + @endif + + @if($homeparty->homeparty_guests) + @php($g_count = 1) + @foreach($homeparty->homeparty_guests as $homeparty_guest) +
+

Bestellung {!! $g_count++ !!}. Gast {{$homeparty_guest->billing_firstname}} {{$homeparty_guest->billing_lastname}}

+ @include('admin.sales._detail_homparty', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty_guest]) + @endforeach + @endif +
+ + @include('admin.sales._detail_homparty_total', ['homeparty' => $homeparty]) + + @endif + @endif

diff --git a/resources/views/admin/sales/_detail_homparty.blade.php b/resources/views/admin/sales/_detail_homparty.blade.php new file mode 100644 index 0000000..263842a --- /dev/null +++ b/resources/views/admin/sales/_detail_homparty.blade.php @@ -0,0 +1,246 @@ +@if($homeparty_guest && $homeparty_guest->homeparty_user_order_items->count() || $homeparty_guest->is_host) +
+ + + + + + + + + + + + + + + @foreach($homeparty_guest->homeparty_user_order_items as $value) + + + + + + + + + + + @endforeach + + + + @php($user_cart = $homeparty->order['user_carts'][$homeparty_guest->id]) + @php($hp_order = $homeparty->order) + + @if(!$homeparty_guest->is_host) + + + + @if($homeparty_guest->getDelivery() === 'direct') + + + + + + + @endif + + + + + + + + + @else + @if($hp_order['is_bonus']) + + + + + + + @endif + @if($hp_order['is_bonus_coupon']) + + + + + + + @endif + @if($hp_order['is_bonus']) + + + + + + + @endif + + + + + + + + + + + + + + + @endif + +
{{__('Bild')}}{{__('Produkt')}}{{__('Anzahl')}}{{__('Marge')}}{{__('EK-Preis')}}{{__('Points')}}{{__('Verdienst')}}{{__('VK-Preis')}}
+ @if(count($value->product->images)) + + @endif + + {{ $value->product->name }} +
+
Inhalt: {{ $value->product->contents }}
+
Art.-Nr.: {{ $value->product->number }}
+
+
+ {{$value->qty}} + + {{ $value->margin }}% + + {{ $value->getFormattedTotalEKPrice() }} € + + {{ $value->getFormattedTotalPoints() }} + + {{ $value->getFormattedTotalIncomePrice() }} € + + {{ $value->getFormattedTotalPrice() }} € +
+ @if($homeparty_guest->getDelivery() === 'host') + Lieferung an Gastgeber + @endif + @if($homeparty_guest->getDelivery() === 'direct') + Lieferung direkt an den Gast + @endif +
Versandkosten  {{ Util::formatNumber($user_cart['shipping_price'])}} €
Gesamt:{{Util::formatNumber($user_cart['ek_price'])}} €{{$user_cart['points']}}{{Util::formatNumber($user_cart['income_price'])}} €{{Util::formatNumber($user_cart['price'])}} €
Gutschrift Homeparty Gutschein  - {{ Util::formatNumber($hp_order['bonus_value']) }} €
Gutschrift Bonus  - {{ Util::formatNumber($hp_order['bonus_coupon']) }} €
Abzug Points durch Gutschein- {{ $hp_order['bonus_points_diff'] }}   
Versandkosten:  {{Util::formatNumber($user_cart['shipping_price'])}} €
Summen:{{Util::formatNumber($user_cart['ek_price'])}} €{{$user_cart['points']}}{{Util::formatNumber($user_cart['income_price'])}} €{{Util::formatNumber($user_cart['price'])}} €
+
+ + @if($homeparty_guest->is_host || $homeparty_guest->getDelivery() === 'direct') + +
+ +
+
+ Lieferadresse +
+ @if($homeparty_guest->same_as_billing) +
+ @if($homeparty_guest->billing_company) +
+
Firma
+ {{ $homeparty_guest->billing_company }} +
+ @endif + +
+
Anrede
+ {{ \App\Services\HTMLHelper::getSalutationLang($homeparty_guest->billing_salutation) }} +
+
+
Vorname
+ {{ $homeparty_guest->billing_firstname }} +
+
+
Nachname
+ {{ $homeparty_guest->billing_lastname }} +
+
+
+
+
Straße
+ {{ $homeparty_guest->billing_address }} +
+
+
Zusatz
+ {{ $homeparty_guest->billing_address_2 }} +
+
+
PLZ
+ {{ $homeparty_guest->billing_zipcode }} +
+
+
Stadt
+ {{ $homeparty_guest->billing_city }} +
+
+
E-Mail
+ {{ $homeparty_guest->billing_email }} +
+
+
Telefon
+ {{ $homeparty_guest->billing_phone }} +
+
+
Land
+ {{ $homeparty_guest->billing_country->getLocated() }} +
+
+ @else +
+ @if($homeparty_guest->shipping_company) +
+
Firma
+ {{ $homeparty_guest->shipping_company }} +
+ @endif + +
+
Anrede
+ {{ \App\Services\HTMLHelper::getSalutationLang($homeparty_guest->shipping_salutation) }} +
+
+
Vorname
+ {{ $homeparty_guest->shipping_firstname }} +
+
+
Nachname
+ {{ $homeparty_guest->shipping_lastname }} +
+
+
+
+
Straße
+ {{ $homeparty_guest->shipping_address }} +
+
+
Zusatz
+ {{ $homeparty_guest->shipping_address_2 }} +
+
+
PLZ
+ {{ $homeparty_guest->shipping_zipcode }} +
+
+
Stadt
+ {{ $homeparty_guest->shipping_city }} +
+
+
E-Mail
+ {{ $homeparty_guest->shipping_email }} +
+
+
Telefon
+ {{ $homeparty_guest->shipping_phone }} +
+
+
Land
+ {{ $homeparty_guest->shipping_country->getLocated() }} +
+
+ @endif +
+ @endif + +@else +

Keine Bestellung

+@endif \ No newline at end of file diff --git a/resources/views/admin/sales/_detail_homparty_total.blade.php b/resources/views/admin/sales/_detail_homparty_total.blade.php new file mode 100644 index 0000000..8a50629 --- /dev/null +++ b/resources/views/admin/sales/_detail_homparty_total.blade.php @@ -0,0 +1,58 @@ +
+ + + + + + + + + + + + + + + + @php($hp_order = $homeparty->order) + + @if($hp_order['is_bonus']) + + + + + @endif + + + + + + + + + + + + + + + + + + + + + + + + +
Gesamt{{__('EK-Preis')}}{{__('Points')}}{{__('Verdienst')}}{{__('VK-Preis')}}
+ {{ $hp_order['voucher_name'] }} + {{ Util::formatNumber($hp_order['voucher_price'])}} €
+ Gesamtsummen: + {{ Util::formatNumber($hp_order['ek_price'])}} €{{ $hp_order['points']}}{{ Util::formatNumber($hp_order['income_price'])}} €{{ Util::formatNumber($hp_order['price'])}} €
+ Summe ohne MwSt: +    {{ Util::formatNumber($hp_order['price_net'])}} €
+ Enthaltene MwSt: +    {{ Util::formatNumber($hp_order['price']-$hp_order['price_net'])}} €
+
\ No newline at end of file diff --git a/resources/views/emails/checkout.blade.php b/resources/views/emails/checkout.blade.php index 0740367..fa3b5b9 100644 --- a/resources/views/emails/checkout.blade.php +++ b/resources/views/emails/checkout.blade.php @@ -165,10 +165,35 @@ @if($shopping_order->shopping_user->is_from === 'shopping') {{__('email.checkout_mail_hl1')}} @endif + @if($shopping_order->shopping_user->is_from === 'homeparty') + {{ __('navigation.my_homeparty') }} / {{ $shopping_order->homeparty->name }} - {{ $shopping_order->homeparty->date }}
+ {{__('email.checkout_mail_hl1')}} + @endif + @if($shopping_order->shopping_user->is_from === 'homeparty') + + + @php($homeparty = $shopping_order->homeparty) + @if($homeparty->homeparty_host) +

Bestellung Gastgeber/in {{$homeparty->homeparty_host->billing_firstname}} {{$homeparty->homeparty_host->billing_lastname}}

+ @include('emails.homeparty_detail', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty->homeparty_host]) + @endif + + @if($homeparty->homeparty_guests) + @php($g_count = 1) + @foreach($homeparty->homeparty_guests as $homeparty_guest) +
+

Bestellung {!! $g_count++ !!}. Gast {{$homeparty_guest->billing_firstname}} {{$homeparty_guest->billing_lastname}}

+ @include('emails.homeparty_detail', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty_guest]) + @endforeach + @endif +
+ + @include('emails.homeparty_detail_total', ['homeparty' => $homeparty]) + @else @@ -256,6 +281,7 @@
Produkt
+ @endif diff --git a/resources/views/emails/checkout_status.blade.php b/resources/views/emails/checkout_status.blade.php index 49dea99..6aad9ea 100644 --- a/resources/views/emails/checkout_status.blade.php +++ b/resources/views/emails/checkout_status.blade.php @@ -211,10 +211,35 @@ @if($shopping_order->shopping_user->is_from === 'shopping') {{__('email.checkout_mail_hl1')}} @endif + @if($shopping_order->shopping_user->is_from === 'homeparty') + {{ __('navigation.my_homeparty') }} / {{ $shopping_order->homeparty->name }} - {{ $shopping_order->homeparty->date }}
+ {{__('email.checkout_mail_hl1')}} + @endif + @if($shopping_order->shopping_user->is_from === 'homeparty') + + + @php($homeparty = $shopping_order->homeparty) + @if($homeparty->homeparty_host) +

Bestellung Gastgeber/in {{$homeparty->homeparty_host->billing_firstname}} {{$homeparty->homeparty_host->billing_lastname}}

+ @include('emails.homeparty_detail', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty->homeparty_host]) + @endif + + @if($homeparty->homeparty_guests) + @php($g_count = 1) + @foreach($homeparty->homeparty_guests as $homeparty_guest) +
+

Bestellung {!! $g_count++ !!}. Gast {{$homeparty_guest->billing_firstname}} {{$homeparty_guest->billing_lastname}}

+ @include('emails.homeparty_detail', ['homeparty'=>$shopping_order->homeparty, 'homeparty_guest' => $homeparty_guest]) + @endforeach + @endif +
+ + @include('emails.homeparty_detail_total', ['homeparty' => $homeparty]) + @else @@ -302,6 +327,7 @@
Produkt
+ @endif diff --git a/resources/views/emails/homeparty_detail.blade.php b/resources/views/emails/homeparty_detail.blade.php new file mode 100644 index 0000000..5183198 --- /dev/null +++ b/resources/views/emails/homeparty_detail.blade.php @@ -0,0 +1,142 @@ +@if($homeparty_guest && $homeparty_guest->homeparty_user_order_items->count() || $homeparty_guest->is_host) + + + + + + + + + + @foreach($homeparty_guest->homeparty_user_order_items as $value) + + + + + + + @endforeach + + @php($user_cart = $homeparty->order['user_carts'][$homeparty_guest->id]) + @php($hp_order = $homeparty->order) + + @if(!$homeparty_guest->is_host) + + + + @if($homeparty_guest->getDelivery() === 'direct') + + + + + + @endif + + + + + + @else + @if($hp_order['is_bonus']) + + + + + + @endif + @if($hp_order['is_bonus_coupon']) + + + + + + @endif + @if($hp_order['is_bonus']) + + @endif + + + + + + + + + + @endif +
{{__('Produkt')}}{{__('Anzahl')}}{{__('VK-Preis')}}
+ {{ $value->product->name }}
+ Art.-Nr.: {{ $value->product->number }} +
+ {{$value->qty}} + + {{ $value->getFormattedTotalPrice() }} € + +
+ @if($homeparty_guest->getDelivery() === 'host') + Lieferung an Gastgeber + @endif + @if($homeparty_guest->getDelivery() === 'direct') + Lieferung direkt an den Gast + @endif +
Versandkosten{{ Util::formatNumber($user_cart['shipping_price'])}} €
Gesamt:{{Util::formatNumber($user_cart['price'])}} €
Gutschrift Homeparty Gutschein- {{ Util::formatNumber($hp_order['bonus_value']) }} €
Gutschrift Bonus- {{ Util::formatNumber($hp_order['bonus_coupon']) }} €
Versandkosten:{{Util::formatNumber($user_cart['shipping_price'])}} €
Summen:{{Util::formatNumber($user_cart['price'])}} €
+ + @if($homeparty_guest->is_host || $homeparty_guest->getDelivery() === 'direct') + + + + + +
+ + + + +
+ @if($homeparty_guest->same_as_billing) + @if($homeparty_guest->billing_company) + {{ $homeparty_guest->billing_company }}
+ @endif + + {{ $homeparty_guest->billing_firstname }} + {{ $homeparty_guest->billing_lastname }}
+
+ + {{ $homeparty_guest->billing_address }}
+ @if($homeparty_guest->billing_address_2) + {{ $homeparty_guest->billing_address_2 }}
+ @endif + + {{ $homeparty_guest->billing_zipcode }} + {{ $homeparty_guest->billing_city }}
+ {{ $homeparty_guest->billing_country->getLocated() }}
+ + @if($homeparty_guest->billing_phone) +

{{ $homeparty_guest->billing_phone }}
+ @endif + @else + @if($homeparty_guest->shipping_company) + {{ $homeparty_guest->shipping_company }}
+ @endif + + {{ $homeparty_guest->shipping_firstname }} + {{ $homeparty_guest->shipping_lastname }}
+
+ + {{ $homeparty_guest->shipping_address }}
+ @if($homeparty_guest->shipping_address_2) + {{ $homeparty_guest->shipping_address_2 }}
+ @endif + + {{ $homeparty_guest->shipping_zipcode }} + {{ $homeparty_guest->shipping_city }}
+ {{ $homeparty_guest->shipping_country->getLocated() }}
+ + @if($homeparty_guest->shipping_phone) +

{{ $homeparty_guest->shipping_phone }}
+ @endif + @endif +
+
+ @endif +@endif diff --git a/resources/views/emails/homeparty_detail_total.blade.php b/resources/views/emails/homeparty_detail_total.blade.php new file mode 100644 index 0000000..7b7e56d --- /dev/null +++ b/resources/views/emails/homeparty_detail_total.blade.php @@ -0,0 +1,38 @@ + +@php($hp_order = $homeparty->order) + + + + + + + @if($hp_order['is_bonus']) + + + + + @endif + + + + + + + + + + + + + + +
Gesamt{{__('VK-Preis')}}
+ {{ $hp_order['voucher_name'] }} + {{ Util::formatNumber($hp_order['voucher_price'])}} €
+ Gesamtsummen: + {{ Util::formatNumber($hp_order['price'])}} €
+ Summe ohne MwSt: + {{ Util::formatNumber($hp_order['price_net'])}} €
+ Enthaltene MwSt: + {{ Util::formatNumber($hp_order['price']-$hp_order['price_net'])}} €
+ diff --git a/resources/views/user/homeparty/guests.blade.php b/resources/views/user/homeparty/guests.blade.php index 6280878..01bd057 100644 --- a/resources/views/user/homeparty/guests.blade.php +++ b/resources/views/user/homeparty/guests.blade.php @@ -3,7 +3,9 @@ @section('content')

{{ __('navigation.my_homeparty') }} / {{ $homeparty->name }} - {{ $homeparty->date }}
-   Neue Gast anlegen + @if(!$homeparty->completed) +   Neue Gast anlegen + @endif

@@ -24,6 +26,8 @@ {{-- offen ... --}}
+ @if(!$homeparty->completed) +
bearbeiten
@@ -46,6 +50,7 @@
+ @endif
@@ -79,7 +84,10 @@
+ @if(!$homeparty->completed) Homparty verwalten + @endif + Bestellung zurück zur Übersicht
diff --git a/resources/views/user/homeparty/index.blade.php b/resources/views/user/homeparty/index.blade.php index 0abaefe..d025489 100644 --- a/resources/views/user/homeparty/index.blade.php +++ b/resources/views/user/homeparty/index.blade.php @@ -14,8 +14,12 @@
{{$homeparty->name}} - {{-- offen ... --}} + @if($homeparty->completed) + abgeschlossen + @endif
+ @if(!$homeparty->completed) +
+ @endif
@@ -50,14 +55,15 @@
Umsatz
-
0
+
@if(isset($homeparty->order['price'])){{Util::formatNumber($homeparty->order['price'])}}@endif
Points
-
0
+
@if(isset($homeparty->order['points'])){{$homeparty->order['points']}}@endif
+ @if(!$homeparty->completed)
@@ -69,12 +75,21 @@
+ @endif
+ @if(!$homeparty->completed) Verwalten Gäste anlegen - Bestellung + Bestellung + + @else + Gäste ansehen + Bestellung ansehen + + + @endif
diff --git a/resources/views/user/homeparty/order.blade.php b/resources/views/user/homeparty/order.blade.php index 00e6c77..82428ee 100644 --- a/resources/views/user/homeparty/order.blade.php +++ b/resources/views/user/homeparty/order.blade.php @@ -84,6 +84,10 @@ zurück + @if($userHistoryPaymentOrder && $userHistoryPaymentOrder->status > 2) +
Eine Zahlung wurde ausgeführt. Status: {{ trans('payment.status.'.$userHistoryPaymentOrder->getStatusType())}}
+ @endif + {!! Form::open(['url' => route('user_homeparty_order', [$homeparty->id]), 'class' => 'form-horizontal', 'id'=>'homeparty-order-form']) !!}
@@ -92,10 +96,12 @@
Bestellung anlegen
+ @if(!$homeparty->completed) + @endif
@@ -103,7 +109,11 @@
-
Lieferadresse Gastgeber/in
+
Lieferadresse Gastgeber/in + @if(!$homeparty->completed) + + @endif +
@include('user.homeparty._address', ['homeparty_user' => $homeparty->homeparty_host])
@@ -128,6 +138,7 @@
Bestellung Gastgeber/in {{$homeparty->homeparty_host->billing_firstname}} {{$homeparty->homeparty_host->billing_lastname}}
+ @if(!$homeparty->completed)
+ @endif
@@ -156,6 +168,7 @@
Bestellung {!! $g_count++ !!}. Gast {{$homeparty_guest->billing_firstname}} {{$homeparty_guest->billing_lastname}}
+ @if(!$homeparty->completed)
+ @endif
@@ -186,31 +200,32 @@
- {{-- TODO Berechnung des WK --}} -
@include('user.homeparty.show_total_order', ['homeparty' => $homeparty])
-
- - @if($homeparty->homeparty_host && $homeparty->homeparty_host->isAddress()) -
- -
-

- Du wirst auf unseren checkout Server weitergeletet, die Verbindung ist SSL verschlüsselt. - @else -
- Die Bestellung kann erst abgesendet werden, wenn die Lieferadresse Gastgeber/in angelegt ist. + @if(!$homeparty->completed) +
+ @if($homeparty->homeparty_host && $homeparty->homeparty_host->isAddress()) +
+
+

+ Du wirst auf unseren checkout Server weitergeletet, die Verbindung ist SSL verschlüsselt. + @else +
+ Die Bestellung kann erst abgesendet werden, wenn die Lieferadresse Gastgeber/in angelegt ist. +
+ @endif @endif
+ @if(!$homeparty->completed) Homparty verwalten + @endif zurück zur Übersicht
{!! Form::close() !!} diff --git a/resources/views/user/homeparty/show_calc_bonus_host.blade.php b/resources/views/user/homeparty/show_calc_bonus_host.blade.php index c1d0e15..71fcad9 100644 --- a/resources/views/user/homeparty/show_calc_bonus_host.blade.php +++ b/resources/views/user/homeparty/show_calc_bonus_host.blade.php @@ -27,8 +27,8 @@ Versandkosten:   -   - 0 € +   + {{$user_cart->getFormattedShippingPrice()}} € Gesamt: diff --git a/resources/views/user/homeparty/show_products_order.blade.php b/resources/views/user/homeparty/show_products_order.blade.php index fc8c5eb..241cc45 100644 --- a/resources/views/user/homeparty/show_products_order.blade.php +++ b/resources/views/user/homeparty/show_products_order.blade.php @@ -1,4 +1,4 @@ -@if($homeparty_guest && $homeparty_guest->homeparty_user_order_items->count()) +@if($homeparty_guest && $homeparty_guest->homeparty_user_order_items->count() || $homeparty_guest->is_host)
@@ -27,11 +27,14 @@
Inhalt: {{ $value->product->contents }}
Art.-Nr.: {{ $value->product->number }}
-
+ @if(!$homeparty->completed) + + @endif
+ + @if(!$homeparty_guest->isAddress()) + + @else + @endif - {{-- + @if($homeparty_guest->getDelivery() === 'direct') + - - + + - --}} + @endif + diff --git a/resources/views/user/homeparty/show_total_order.blade.php b/resources/views/user/homeparty/show_total_order.blade.php index fac0e8f..06f245b 100644 --- a/resources/views/user/homeparty/show_total_order.blade.php +++ b/resources/views/user/homeparty/show_total_order.blade.php @@ -57,13 +57,12 @@ @endif - @if(\App\Services\HomepartyCart::$is_bonus) @@ -73,7 +72,7 @@ - + diff --git a/resources/views/web/templates/checkout.blade.php b/resources/views/web/templates/checkout.blade.php index 7c6ec6f..c4c576d 100644 --- a/resources/views/web/templates/checkout.blade.php +++ b/resources/views/web/templates/checkout.blade.php @@ -146,13 +146,16 @@
+ {!! Form::open(['url' => route('checkout.checkout_card_final'), 'class' => 'row clearfix', 'id'=>'checkout_card_final']) !!} {!! Form::hidden('selected_country', '') !!} {!! Form::hidden('is_for', $shopping_user->is_for) !!} {!! Form::hidden('is_from', $shopping_user->is_from) !!} + {!! Form::hidden('homeparty_id', $shopping_user->homeparty_id) !!} - @if (\Session::has('elv-managemandate')) + + @if (\Session::has('elv-managemandate'))
@@ -626,7 +629,7 @@
@endif @@ -798,31 +801,48 @@ Zwischensumme:
+ @if($shopping_user->is_from !== 'homeparty') +
{{ Yard::instance('shopping')->shipping() }} € Versandkosten:
+ @endif @endif + @if($shopping_user->is_from !== 'homeparty')
- {{ Yard::instance('shopping')->getShippingCountryName() }} - Lieferland: -
+ {{ Yard::instance('shopping')->getShippingCountryName() }} + Lieferland: + -
-
- {{ Yard::instance('shopping')->subtotalWithShipping() }} € - Summe ohne MwSt: -
+
-
- {{ Yard::instance('shopping')->taxWithShipping() }} € - zzgl. {{-- Yard::getTaxRate() --}} MwSt: -
+
+ {{ Yard::instance('shopping')->subtotalWithShipping() }} € + Summe ohne MwSt: +
+
+ {{ Yard::instance('shopping')->taxWithShipping() }} € + zzgl. {{-- Yard::getTaxRate() --}} MwSt: +
+ @else +
+ +
+ {!! $shopping_data['shop_price_net'] !!} € + Summe ohne MwSt: +
+ +
+ {!! $shopping_data['shop_price_tax'] !!} € + zzgl. {{-- Yard::getTaxRate() --}} MwSt: +
+ @endif
diff --git a/routes/web.php b/routes/web.php index 3b5b6b7..180a4a7 100755 --- a/routes/web.php +++ b/routes/web.php @@ -266,16 +266,16 @@ Route::domain(config('app.pre_url_crm').config('app.domain').config('app.tld_car //user homeparty - Route::get('/user/homepartys', 'User\HomePartyController@index')->name('user_homepartys'); - Route::get('/user/homeparty/detail/{id?}', 'User\HomePartyController@detail')->name('user_homeparty_detail'); - Route::post('/user/homeparty/detail/{id?}', 'User\HomePartyController@store')->name('user_homeparty_detail'); - Route::get('/user/homeparty/guests/{id?}', 'User\HomePartyController@guests')->name('user_homeparty_guests'); - Route::get('/user/homeparty/guest/detail/{id?}/{gid?}', 'User\HomePartyController@guestDetail')->name('user_homeparty_guest_detail'); - Route::post('/user/homeparty/guest/detail/{id?}/{gid?}', 'User\HomePartyController@guestStore')->name('user_homeparty_guest_detail'); - Route::get('/user/homeparty/order/{id?}', 'User\HomePartyController@order')->name('user_homeparty_order'); - Route::post('/user/homeparty/order/{id?}', 'User\HomePartyController@orderStore')->name('user_homeparty_order'); - Route::get('/user/homeparty/delete/{do}/{id?}/{gid?}', 'User\HomePartyController@delete')->name('user_homeparty_delete'); - Route::get('/user/homeparty/datatable', 'User\HomePartyController@datatable')->name('user_homeparty_datatable'); + Route::get('/user/homepartys', 'User\HomepartyController@index')->name('user_homepartys'); + Route::get('/user/homeparty/detail/{id?}', 'User\HomepartyController@detail')->name('user_homeparty_detail'); + Route::post('/user/homeparty/detail/{id?}', 'User\HomepartyController@store')->name('user_homeparty_detail'); + Route::get('/user/homeparty/guests/{id?}', 'User\HomepartyController@guests')->name('user_homeparty_guests'); + Route::get('/user/homeparty/guest/detail/{id?}/{gid?}', 'User\HomepartyController@guestDetail')->name('user_homeparty_guest_detail'); + Route::post('/user/homeparty/guest/detail/{id?}/{gid?}', 'User\HomepartyController@guestStore')->name('user_homeparty_guest_detail'); + Route::get('/user/homeparty/order/{id?}', 'User\HomepartyController@order')->name('user_homeparty_order'); + Route::post('/user/homeparty/order/{id?}', 'User\HomepartyController@orderStore')->name('user_homeparty_order'); + Route::get('/user/homeparty/delete/{do}/{id?}/{gid?}', 'User\HomepartyController@delete')->name('user_homeparty_delete'); + Route::get('/user/homeparty/datatable', 'User\HomepartyController@datatable')->name('user_homeparty_datatable'); //products images Route::post('/user/shop_on_site/upload/image', 'UserShopController@uploadOnSiteImage')->name('user_shop_on_site_upload_image');
+ @if(!$homeparty->completed)
@@ -43,6 +46,9 @@
+ @else + {{$value->qty}} + @endif
{{ $value->margin }}% @@ -67,21 +73,36 @@ @php($user_cart = \App\Services\HomepartyCart::getUserCart($homeparty_guest->id)) @if(!$homeparty_guest->is_host)
+

Keine Lieferadresse angelegt

+
  - + + + @else + @if($homeparty_guest->getDelivery() === 'host') Lieferung an Gastgeber @endif + @if($homeparty_guest->getDelivery() === 'direct') Lieferung direkt an den Gast @endif + @endif  
Versandkosten12  25,00 € {{$user_cart->getFormattedShippingPrice()}} €
Gesamt: {{$user_cart->getFormattedEkPrice()}} €
- zzgl. anteiliger Bonusgutschein: + {{ \App\Services\HomepartyCart::$voucher_name }} {{ App\Services\HomepartyCart::getFormattedBonusPrice() }}€
Gesamtsummen: {{\App\Services\HomepartyCart::getFormattedEkPrice()}}{{\App\Services\HomepartyCart::getFormattedEkPrice()}} € {{\App\Services\HomepartyCart::getFormattedPoints()}} {{\App\Services\HomepartyCart::getFormattedIncomePrice()}} € {{\App\Services\HomepartyCart::getFormattedPrice()}} €