376 lines
No EOL
18 KiB
PHP
376 lines
No EOL
18 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use Yard;
|
|
use App\Services\Util;
|
|
use App\Models\ShoppingUser;
|
|
use App\Models\Homeparty;
|
|
use App\Models\ShoppingCollectOrder;
|
|
use App\Models\PaymentMethod;
|
|
use App\Models\ShoppingOrder;
|
|
use Illuminate\Session\SessionManager;
|
|
use App\Models\ShoppingOrderItem;
|
|
use Illuminate\Support\Collection;
|
|
|
|
|
|
class CheckoutRepository extends BaseRepository {
|
|
|
|
private $session;
|
|
private $instance;
|
|
|
|
|
|
public function __construct(SessionManager $session)
|
|
{
|
|
$this->session = $session;
|
|
$this->instance = sprintf('%s.%s', 'cart', 'payments');
|
|
}
|
|
|
|
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('shopping')->total(2, '.', ''); //ek_price
|
|
$data = [
|
|
'shopping_user_id' => $shopping_user->id,
|
|
'auth_user_id' => $shopping_user->auth_user_id,
|
|
'country_id' => Yard::instance('shopping')->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('shopping')->totalWithShipping(2, '.', ''),
|
|
'points' => $homeparty->order['points'] - $homeparty->order['bonus_points_diff'],
|
|
'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('shopping')->total(2, '.', ''); //ek_price
|
|
$data = [
|
|
'shopping_user_id' => $shopping_user->id,
|
|
'auth_user_id' => $shopping_user->auth_user_id,
|
|
'country_id' => Yard::instance('shopping')->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,
|
|
'total_shipping' => Yard::instance('shopping')->totalWithShipping(2, '.', ''),
|
|
'points' => $ShoppingCollectOrder->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(),
|
|
'language' => \App::getLocale(),
|
|
'user_shop_id' => $user_shop->id,
|
|
'payment_for' => $shopping_user->getOrderPaymentFor(),
|
|
'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(),
|
|
'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('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) {
|
|
$price_net = Yard::instance('shopping')->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('shopping')->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){
|
|
// $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;
|
|
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->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('shopping')->getShippingCountryCountryId();
|
|
$shopping_user->shipping_phone = isset($data['shipping_phone']) ? $data['shipping_phone'] : '';
|
|
|
|
}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;
|
|
}
|
|
|
|
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()
|
|
{
|
|
$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);
|
|
}
|
|
} |