Card + Products

This commit is contained in:
Kevin Adametz 2018-12-12 14:33:52 +01:00
parent 5ff57a21a7
commit c129a44383
38 changed files with 4489 additions and 1789 deletions

2
.env
View file

@ -1,7 +1,7 @@
APP_NAME="mivita.care"
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:fXRSayOEVbHeLShA01AWFSzaGDrwn201yfdCigNhqTg=
APP_KEY=base64:HrWQ9AV3Zt2TU0iq1OeUUpTUaXwNUdh8xHmx7RXTif4=
APP_URL=http://mivita.local/login
LOG_CHANNEL=stack

1
.idea/mivita.care.iml generated
View file

@ -22,6 +22,7 @@
<excludeFolder url="file://$MODULE_DIR$/vendor/fideloper/proxy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fzaninotto/faker" />
<excludeFolder url="file://$MODULE_DIR$/vendor/gloudemans/shoppingcart" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />

1
.idea/php.xml generated
View file

@ -99,6 +99,7 @@
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/cocur/slugify" />
<path value="$PROJECT_DIR$/vendor/cviebrock/eloquent-sluggable" />
<path value="$PROJECT_DIR$/vendor/gloudemans/shoppingcart" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.1" />

1023
.idea/workspace.xml generated

File diff suppressed because it is too large Load diff

View file

@ -5,13 +5,14 @@ namespace PHPSTORM_META {
/**
* PhpStorm Meta file, to provide autocomplete information for PhpStorm
* Generated on 2018-11-14 17:57:01.
* Generated on 2018-11-22 15:17:36.
*
* @author Barry vd. Heuvel <barryvdh@gmail.com>
* @see https://github.com/barryvdh/laravel-ide-helper
*/
override(new \Illuminate\Contracts\Container\Container, map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -40,6 +41,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -164,6 +166,7 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::make(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -192,6 +195,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -316,6 +320,7 @@ namespace PHPSTORM_META {
]));
override(\Illuminate\Contracts\Container\Container::makeWith(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -344,6 +349,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -468,6 +474,7 @@ namespace PHPSTORM_META {
]));
override(\App::make(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -496,6 +503,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -620,6 +628,7 @@ namespace PHPSTORM_META {
]));
override(\App::makeWith(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -648,6 +657,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -772,6 +782,7 @@ namespace PHPSTORM_META {
]));
override(\app(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -800,6 +811,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,
@ -924,6 +936,7 @@ namespace PHPSTORM_META {
]));
override(\resolve(0), map([
'' => '@',
'App\Services\Yard' => \App\Services\Yard::class,
'Cviebrock\EloquentSluggable\SluggableObserver' => \Cviebrock\EloquentSluggable\SluggableObserver::class,
'Illuminate\Broadcasting\BroadcastManager' => \Illuminate\Broadcasting\BroadcastManager::class,
'Illuminate\Bus\Dispatcher' => \Illuminate\Bus\Dispatcher::class,
@ -952,6 +965,7 @@ namespace PHPSTORM_META {
'blade.compiler' => \Illuminate\View\Compilers\BladeCompiler::class,
'cache' => \Illuminate\Cache\CacheManager::class,
'cache.store' => \Illuminate\Cache\Repository::class,
'cart' => \Gloudemans\Shoppingcart\Cart::class,
'command.app.name' => \Illuminate\Foundation\Console\AppNameCommand::class,
'command.auth.make' => \Illuminate\Auth\Console\AuthMakeCommand::class,
'command.auth.resets.clear' => \Illuminate\Auth\Console\ClearResetsCommand::class,

View file

@ -3,7 +3,7 @@
/**
* A helper file for Laravel 5, to provide autocomplete information to your IDE
* Generated for Laravel 5.6.39 on 2018-11-14 17:57:01.
* Generated for Laravel 5.6.39 on 2018-11-22 15:17:35.
*
* This file should not be included in your code, only analyzed by your IDE!
*
@ -17404,6 +17404,546 @@ namespace Yajra\DataTables\Facades {
}
namespace App\Services\Facade {
/**
*
*
*/
class Yard {
/**
*
*
* @param $shipping
* @static
*/
public static function setShipping($shipping)
{
return \App\Services\Yard::setShipping($shipping);
}
/**
*
*
* @param null $decimals
* @param null $decimalPoint
* @param null $thousandSeperator
* @return string
* @static
*/
public static function shipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \App\Services\Yard::shipping($decimals, $decimalPoint, $thousandSeperator);
}
/**
*
*
* @static
*/
public static function totalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \App\Services\Yard::totalWithShipping($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the total tax of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function taxWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \App\Services\Yard::taxWithShipping($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the subtotal (total - tax) of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function subtotalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \App\Services\Yard::subtotalWithShipping($decimals, $decimalPoint, $thousandSeperator);
}
/**
*
*
* @static
*/
public static function cardCalcSubTotal($price)
{
return \App\Services\Yard::cardCalcSubTotal($price);
}
/**
* Set the current cart instance.
*
* @param string|null $instance
* @return \Gloudemans\Shoppingcart\Cart
* @static
*/
public static function instance($instance = null)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::instance($instance);
}
/**
* Get the current cart instance.
*
* @return string
* @static
*/
public static function currentInstance()
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::currentInstance();
}
/**
* Add an item to the cart.
*
* @param mixed $id
* @param mixed $name
* @param int|float $qty
* @param float $price
* @param array $options
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function add($id, $name = null, $qty = null, $price = null, $options = array())
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::add($id, $name, $qty, $price, $options);
}
/**
* Update the cart item with the given rowId.
*
* @param string $rowId
* @param mixed $qty
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function update($rowId, $qty)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::update($rowId, $qty);
}
/**
* Remove the cart item with the given rowId from the cart.
*
* @param string $rowId
* @return void
* @static
*/
public static function remove($rowId)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::remove($rowId);
}
/**
* Get a cart item from the cart by its rowId.
*
* @param string $rowId
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function get($rowId)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::get($rowId);
}
/**
* Destroy the current cart instance.
*
* @return void
* @static
*/
public static function destroy()
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::destroy();
}
/**
* Get the content of the cart.
*
* @return \Illuminate\Support\Collection
* @static
*/
public static function content()
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::content();
}
/**
* Get the number of items in the cart.
*
* @return int|float
* @static
*/
public static function count()
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::count();
}
/**
* Get the total price of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return string
* @static
*/
public static function total($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::total($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the total tax of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function tax($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::tax($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the subtotal (total - tax) of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function subtotal($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::subtotal($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Search the cart content for a cart item matching the given search closure.
*
* @param \Closure $search
* @return \Illuminate\Support\Collection
* @static
*/
public static function search($search)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
return \App\Services\Yard::search($search);
}
/**
* Associate the cart item with the given rowId with the given model.
*
* @param string $rowId
* @param mixed $model
* @return void
* @static
*/
public static function associate($rowId, $model)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::associate($rowId, $model);
}
/**
* Set the tax rate for the cart item with the given rowId.
*
* @param string $rowId
* @param int|float $taxRate
* @return void
* @static
*/
public static function setTax($rowId, $taxRate)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::setTax($rowId, $taxRate);
}
/**
* Store an the current instance of the cart.
*
* @param mixed $identifier
* @return void
* @static
*/
public static function store($identifier)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::store($identifier);
}
/**
* Restore the cart with the given identifier.
*
* @param mixed $identifier
* @return void
* @static
*/
public static function restore($identifier)
{
//Method inherited from \Gloudemans\Shoppingcart\Cart
\App\Services\Yard::restore($identifier);
}
}
}
namespace Gloudemans\Shoppingcart\Facades {
/**
*
*
*/
class Cart {
/**
* Set the current cart instance.
*
* @param string|null $instance
* @return \Gloudemans\Shoppingcart\Cart
* @static
*/
public static function instance($instance = null)
{
return \Gloudemans\Shoppingcart\Cart::instance($instance);
}
/**
* Get the current cart instance.
*
* @return string
* @static
*/
public static function currentInstance()
{
return \Gloudemans\Shoppingcart\Cart::currentInstance();
}
/**
* Add an item to the cart.
*
* @param mixed $id
* @param mixed $name
* @param int|float $qty
* @param float $price
* @param array $options
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function add($id, $name = null, $qty = null, $price = null, $options = array())
{
return \Gloudemans\Shoppingcart\Cart::add($id, $name, $qty, $price, $options);
}
/**
* Update the cart item with the given rowId.
*
* @param string $rowId
* @param mixed $qty
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function update($rowId, $qty)
{
return \Gloudemans\Shoppingcart\Cart::update($rowId, $qty);
}
/**
* Remove the cart item with the given rowId from the cart.
*
* @param string $rowId
* @return void
* @static
*/
public static function remove($rowId)
{
\Gloudemans\Shoppingcart\Cart::remove($rowId);
}
/**
* Get a cart item from the cart by its rowId.
*
* @param string $rowId
* @return \Gloudemans\Shoppingcart\CartItem
* @static
*/
public static function get($rowId)
{
return \Gloudemans\Shoppingcart\Cart::get($rowId);
}
/**
* Destroy the current cart instance.
*
* @return void
* @static
*/
public static function destroy()
{
\Gloudemans\Shoppingcart\Cart::destroy();
}
/**
* Get the content of the cart.
*
* @return \Illuminate\Support\Collection
* @static
*/
public static function content()
{
return \Gloudemans\Shoppingcart\Cart::content();
}
/**
* Get the number of items in the cart.
*
* @return int|float
* @static
*/
public static function count()
{
return \Gloudemans\Shoppingcart\Cart::count();
}
/**
* Get the total price of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return string
* @static
*/
public static function total($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \Gloudemans\Shoppingcart\Cart::total($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the total tax of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function tax($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \Gloudemans\Shoppingcart\Cart::tax($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the subtotal (total - tax) of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
* @static
*/
public static function subtotal($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return \Gloudemans\Shoppingcart\Cart::subtotal($decimals, $decimalPoint, $thousandSeperator);
}
/**
* Search the cart content for a cart item matching the given search closure.
*
* @param \Closure $search
* @return \Illuminate\Support\Collection
* @static
*/
public static function search($search)
{
return \Gloudemans\Shoppingcart\Cart::search($search);
}
/**
* Associate the cart item with the given rowId with the given model.
*
* @param string $rowId
* @param mixed $model
* @return void
* @static
*/
public static function associate($rowId, $model)
{
\Gloudemans\Shoppingcart\Cart::associate($rowId, $model);
}
/**
* Set the tax rate for the cart item with the given rowId.
*
* @param string $rowId
* @param int|float $taxRate
* @return void
* @static
*/
public static function setTax($rowId, $taxRate)
{
\Gloudemans\Shoppingcart\Cart::setTax($rowId, $taxRate);
}
/**
* Store an the current instance of the cart.
*
* @param mixed $identifier
* @return void
* @static
*/
public static function store($identifier)
{
\Gloudemans\Shoppingcart\Cart::store($identifier);
}
/**
* Restore the cart with the given identifier.
*
* @param mixed $identifier
* @return void
* @static
*/
public static function restore($identifier)
{
\Gloudemans\Shoppingcart\Cart::restore($identifier);
}
}
}
namespace Laracasts\Flash {
/**
@ -19876,6 +20416,10 @@ namespace {
class DataTables extends \Yajra\DataTables\Facades\DataTables {}
class Yard extends \App\Services\Facade\Yard {}
class Cart extends \Gloudemans\Shoppingcart\Facades\Cart {}
class Flash extends \Laracasts\Flash\Flash {}
class Html extends \Collective\Html\HtmlFacade {}

View file

@ -92,6 +92,10 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProductCategory[] $product_categories
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereSlug($value)
*/
class Category extends \Eloquent {}
}
@ -172,6 +176,9 @@ namespace App\Models{
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withoutTrashed()
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Product findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Product whereSlug($value)
*/
class Product extends \Eloquent {}
}
@ -229,6 +236,9 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereSize($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereSlug($value)
*/
class ProductImage extends \Eloquent {}
}
@ -338,6 +348,8 @@ namespace App\Models{
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereSlug($value)
*/
class Attribute extends \Eloquent {}
}

File diff suppressed because it is too large Load diff

View file

@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Http\Controllers\Api\KasController;
use App\Models\Account;
use App\Repositories\UserRepository;
use App\User;
@ -30,6 +31,23 @@ class AdminUserController extends Controller
*/
public function index()
{
$kas = new KasController();
$pra = array(
'subdomain_name' => 'test',
'domain_name' => 'mivita.care',
'subdomain_path' => '/mein.mivita.care/public/',
//'php_version' => '7.1',
//'ssl_proxy' => 'Y',
//'redirect_status' => 0
);
//add_subdomain
$req = $kas->action('get_subdomains');
//"is_active"]=> string(1) "Y" ["in_progress"
var_dump($req);
die();
$data = [
//'values' => User::where('admin', 0)->get(),
'values' => User::where('confirmation_code_remider', '!=', 2)->get(),

View file

@ -0,0 +1,89 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Input;
use \SoapClient;
class KasController extends Controller
{
// Logindaten
private $kas_user = 'w017f6e4'; // KAS-Logon
private $kas_pass = '7mMJUF4YSVWNpp39'; // KAS-Passwort
private $session_lifetime = 600; // Gültigkeit des Tokens in Sek. bis zur neuen Authentifizierung
private $session_update_lifetime = 'Y'; // bei N läuft die Session nach <$session_lifetime> Sekunden ab, bei Y verlängert sich die Session mit jeder Benutzung
private $CredentialToken = false;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->login();
}
public function action($func, $para = array()){
try
{
$Params = array(); // Parameter für die API-Funktion
$SoapRequest = new SoapClient('https://kasapi.kasserver.com/soap/wsdl/KasApi.wsdl');
$req = $SoapRequest->KasApi(json_encode(array(
'KasUser' => $this->kas_user, // KAS-User
'KasAuthType' => 'session', // Auth per Sessiontoken
'KasAuthData' => $this->CredentialToken, // Auth-Token
'KasRequestType' => $func, // API-Funktion
'KasRequestParams' => $para // Parameter an die API-Funktion
)));
if(isset($req['Response']['ReturnString']) && $req['Response']['ReturnString'] == "TRUE"){
return $req['Response']['ReturnInfo'];
}
return $req;
}
// Fehler abfangen und ausgeben
catch (SoapFault $fault)
{
trigger_error(" Fehlernummer: {$fault->faultcode},
Fehlermeldung: {$fault->faultstring},
Verursacher: {$fault->faultactor},
Details: {$fault->detail}", E_USER_ERROR);
}
}
private function login(){
try
{
$SoapLogon = new SoapClient('https://kasapi.kasserver.com/soap/wsdl/KasAuth.wsdl');
$this->CredentialToken = $SoapLogon->KasAuth(json_encode(array(
'KasUser' => $this->kas_user,
'KasAuthType' => 'sha1',
'KasPassword' => sha1($this->kas_pass),
'SessionLifeTime' => $this->session_lifetime,
'SessionUpdateLifeTime' => $this->session_update_lifetime
)));
}
// Fehler abfangen und ausgeben
catch (SoapFault $fault)
{
trigger_error("Fehlernummer: {$fault->faultcode},
Fehlermeldung: {$fault->faultstring},
Verursacher: {$fault->faultactor},
Details: {$fault->detail}", E_USER_ERROR);
}
}
}

View file

@ -0,0 +1,101 @@
<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Product;
use Yard;
use Input;
class CardController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
//Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, ['size' => 'medium']);
public function addToCardGet($id, $quantity = 1, $product_slug = false)
{
$product = Product::find($id);
if($product){
$image = "";
if($product->images->count()){
$image = $product->images->first()->slug;
}
Yard::instance('shopping')->add($product->id, $product->getLang('name'), $quantity, $product->price, ['image' => $image, 'slug' => $product_slug]);
}
return back();
}
public function addToCardPost($id)
{
$product = Product::find($id);
if($product){
$image = "";
if($product->images->count()){
$image = $product->images->first()->slug;
}
$quantity = Input::get('quantity') ? Input::get('quantity') : 1;
Yard::instance('shopping')->add($product->id, $product->getLang('name'), $quantity, $product->price, ['image' => $image, 'slug' => $product->slug]);
}
return back();
}
public function showCard(){
return view('web.templates.card');
}
public function updateCard(){
$data = Input::all();
if(isset($data['quantity'])){
foreach ($data['quantity'] as $rowId => $qty){
Yard::instance('shopping')->update($rowId, $qty);
}
}else{
$this->deleteCard();
}
return back();
}
public function checkoutCard(){
return view('web.templates.checkout');
}
public function checkoutFinalCard(){
return view('web.templates.checkout-final');
}
public function removeCard($rowId){
Yard::instance('shopping')->remove($rowId);
return back();
}
public function deleteCard(){
Yard::instance('shopping')->destroy();
return back();
}
}

View file

@ -6,8 +6,6 @@ namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Product;
use Carbon\Carbon;
use Request;
use Input;
class SiteController extends Controller
@ -31,14 +29,14 @@ class SiteController extends Controller
{
if($product_slug){
$category = Category::where('slug', $subsite)->where('active', true)->first();
$product = Product::where('slug', $product_slug)->where('active', true)->first();
if ($category && $product) {
$data = [
'subsite' => $subsite,
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(),
'product' => $product,
'p_count' => Product::where('active', true)->count(),
@ -54,7 +52,7 @@ class SiteController extends Controller
if ($category) {
$data = [
'subsite' => $subsite,
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(),
'products' => Product::whereHas('categories', function ($query) use ($category) {
$query->where('category_id', '=', $category->id);
@ -68,8 +66,8 @@ class SiteController extends Controller
}
$data = [
'subsite' => 'alle-produkte',
'categories' => Category::where('active', true)->orderBy('pos', 'DESC')->get(),
'products' => Product::where('active', true)->orderBy('pos', 'DESC')->get(),
'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(),
'products' => Product::where('active', true)->orderBy('pos', 'ASC')->get(),
'p_count' => Product::where('active', true)->count(),
];
return view('web.templates.'.$site, $data);

View file

@ -26,6 +26,8 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Attribute whereSlug($value)
*/
class Attribute extends Model
{

View file

@ -27,6 +27,10 @@ use Cviebrock\EloquentSluggable\Sluggable;
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereTransName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProductCategory[] $product_categories
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Category whereSlug($value)
*/
class Category extends Model
{

View file

@ -71,6 +71,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\Models\Product withoutTrashed()
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Product findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Product whereSlug($value)
*/
class Product extends Model
{

View file

@ -30,6 +30,9 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereSize($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereUpdatedAt($value)
* @mixin \Eloquent
* @property string|null $slug
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage findSimilarSlugs($attribute, $config, $slug)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\ProductImage whereSlug($value)
*/
class ProductImage extends Model
{

View file

@ -0,0 +1,30 @@
<?php
namespace App\Providers;
use App\Services\Yard;
use Illuminate\Support\ServiceProvider;
class YardServiceProvider extends ServiceProvider
{
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(Yard::class, function ($app) {
return new Yard($app['session'], $app['events']);
});
}
}

View file

@ -0,0 +1,19 @@
<?php
namespace App\Services\Facade;
use Illuminate\Support\Facades\Facade;
class Yard extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return \App\Services\Yard::class;
}
}

View file

@ -3,10 +3,6 @@ namespace App\Services;
use App\Models\Attribute;
use App\Models\Category;
use App\Models\Country;
use App\Models\IndustrySector;
use App\Models\Interest;
use Form;
class HTMLHelper
{
@ -138,7 +134,6 @@ class HTMLHelper
}
/* public static function getCompanyOptions($company){
$options = array(1 => __('business'), 0 => __('private'), );
$ret = "";

167
app/Services/Yard.php Normal file
View file

@ -0,0 +1,167 @@
<?php
namespace App\Services;
use \Gloudemans\Shoppingcart\Cart;
use Gloudemans\Shoppingcart\CartItem;
use Illuminate\Session\SessionManager;
use Illuminate\Contracts\Events\Dispatcher;
class Yard extends Cart
{
private $shipping = 0;
public function __construct(SessionManager $session, Dispatcher $events)
{
parent::__construct($session, $events);
}
public static function getTaxRate()
{
return config('cart.tax');
}
/**
* @param $shipping
*/
public function setShipping($shipping)
{
$this->shipping = floatval($shipping); ;
}
/**
* @param null $decimals
* @param null $decimalPoint
* @param null $thousandSeperator
* @return string
*/
public function shipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
return $this->numberFormat($this->shipping, $decimals, $decimalPoint, $thousandSeperator);
}
//
private function shippingTax($taxRate = -19){
return ($this->shipping * ($taxRate / 100));
}
private function shippingSub($taxRate){
return ($this->shipping + $this->shippingTax($taxRate));
}
public function subtotalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
$taxRate =config('cart.tax');
$total = floatval($this->total(2, '.', '')) + $this->shipping;
$totalTax = $total/ (100 + $taxRate) * $taxRate;
return $this->numberFormat(($total - $totalTax), $decimals, $decimalPoint, $thousandSeperator);
}
public function taxWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
$taxRate =config('cart.tax');
$total = floatval($this->total(2, '.', '')) + $this->shipping;
$totalTax = $total/ (100 + $taxRate) * $taxRate;
return $this->numberFormat($totalTax, $decimals, $decimalPoint, $thousandSeperator);
}
public function totalWithShipping($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
$total = floatval($this->total(2, '.', '')) + $this->shipping;
return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the total price of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return string
*/
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);
}
/**
* Get the total tax of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
*/
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);
}
/**
* Get the subtotal (total - tax) of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return float
*/
public function subtotal($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
$content = $this->getContent();
$subTotal = $content->reduce(function ($subTotal, CartItem $cartItem) {
$priceTax = $cartItem->price / (100 + $cartItem->taxRate) * $cartItem->taxRate;
return $subTotal + ($cartItem->qty * ($cartItem->price - $priceTax));
}, 0);
return $this->numberFormat($subTotal, $decimals, $decimalPoint, $thousandSeperator);
}
/**
* Get the Formated number
*
* @param $value
* @param $decimals
* @param $decimalPoint
* @param $thousandSeperator
* @return string
*/
protected function numberFormat($value, $decimals, $decimalPoint, $thousandSeperator)
{
if(is_null($decimals)){
$decimals = is_null(config('cart.format.decimals')) ? 2 : config('cart.format.decimals');
}
if(is_null($decimalPoint)){
$decimalPoint = is_null(config('cart.format.decimal_point')) ? '.' : config('cart.format.decimal_point');
}
if(is_null($thousandSeperator)){
$thousandSeperator = is_null(config('cart.format.thousand_seperator')) ? ',' : config('cart.format.thousand_seperator');
}
return number_format($value, $decimals, $decimalPoint, $thousandSeperator);
}
}

View file

@ -20,6 +20,17 @@
0 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
),
),
'gloudemans/shoppingcart' =>
array (
'providers' =>
array (
0 => 'Gloudemans\\Shoppingcart\\ShoppingcartServiceProvider',
),
'aliases' =>
array (
'Cart' => 'Gloudemans\\Shoppingcart\\Facades\\Cart',
),
),
'intervention/image' =>
array (
'providers' =>

View file

@ -26,26 +26,28 @@
22 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
23 => 'Cviebrock\\EloquentSluggable\\ServiceProvider',
24 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
25 => 'Intervention\\Image\\ImageServiceProvider',
26 => 'Jenssegers\\Date\\DateServiceProvider',
27 => 'Laracasts\\Flash\\FlashServiceProvider',
28 => 'Laravel\\Tinker\\TinkerServiceProvider',
29 => 'Collective\\Html\\HtmlServiceProvider',
30 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
31 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
32 => 'Yajra\\DataTables\\DataTablesServiceProvider',
25 => 'Gloudemans\\Shoppingcart\\ShoppingcartServiceProvider',
26 => 'Intervention\\Image\\ImageServiceProvider',
27 => 'Jenssegers\\Date\\DateServiceProvider',
28 => 'Laracasts\\Flash\\FlashServiceProvider',
29 => 'Laravel\\Tinker\\TinkerServiceProvider',
30 => 'Collective\\Html\\HtmlServiceProvider',
31 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
32 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
33 => 'Yajra\\DataTables\\DataTablesServiceProvider',
34 => 'Laravel\\Tinker\\TinkerServiceProvider',
35 => 'App\\Providers\\AppServiceProvider',
36 => 'App\\Providers\\AuthServiceProvider',
37 => 'App\\Providers\\EventServiceProvider',
38 => 'App\\Providers\\RouteServiceProvider',
39 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
40 => 'Jenssegers\\Date\\DateServiceProvider',
41 => 'Collective\\Html\\HtmlServiceProvider',
42 => 'Intervention\\Image\\ImageServiceProvider',
43 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
44 => 'Yajra\\DataTables\\DataTablesServiceProvider',
34 => 'Yajra\\DataTables\\DataTablesServiceProvider',
35 => 'Laravel\\Tinker\\TinkerServiceProvider',
36 => 'App\\Providers\\AppServiceProvider',
37 => 'App\\Providers\\AuthServiceProvider',
38 => 'App\\Providers\\EventServiceProvider',
39 => 'App\\Providers\\RouteServiceProvider',
40 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider',
41 => 'Jenssegers\\Date\\DateServiceProvider',
42 => 'Collective\\Html\\HtmlServiceProvider',
43 => 'Intervention\\Image\\ImageServiceProvider',
44 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
45 => 'Yajra\\DataTables\\DataTablesServiceProvider',
46 => 'App\\Providers\\YardServiceProvider',
),
'eager' =>
array (
@ -61,20 +63,22 @@
9 => 'Illuminate\\View\\ViewServiceProvider',
10 => 'Cviebrock\\EloquentSluggable\\ServiceProvider',
11 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
12 => 'Intervention\\Image\\ImageServiceProvider',
13 => 'Jenssegers\\Date\\DateServiceProvider',
14 => 'Laracasts\\Flash\\FlashServiceProvider',
15 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
16 => 'Yajra\\DataTables\\DataTablesServiceProvider',
12 => 'Gloudemans\\Shoppingcart\\ShoppingcartServiceProvider',
13 => 'Intervention\\Image\\ImageServiceProvider',
14 => 'Jenssegers\\Date\\DateServiceProvider',
15 => 'Laracasts\\Flash\\FlashServiceProvider',
16 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
17 => 'Yajra\\DataTables\\DataTablesServiceProvider',
18 => 'App\\Providers\\AppServiceProvider',
19 => 'App\\Providers\\AuthServiceProvider',
20 => 'App\\Providers\\EventServiceProvider',
21 => 'App\\Providers\\RouteServiceProvider',
22 => 'Jenssegers\\Date\\DateServiceProvider',
23 => 'Intervention\\Image\\ImageServiceProvider',
24 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
25 => 'Yajra\\DataTables\\DataTablesServiceProvider',
18 => 'Yajra\\DataTables\\DataTablesServiceProvider',
19 => 'App\\Providers\\AppServiceProvider',
20 => 'App\\Providers\\AuthServiceProvider',
21 => 'App\\Providers\\EventServiceProvider',
22 => 'App\\Providers\\RouteServiceProvider',
23 => 'Jenssegers\\Date\\DateServiceProvider',
24 => 'Intervention\\Image\\ImageServiceProvider',
25 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
26 => 'Yajra\\DataTables\\DataTablesServiceProvider',
27 => 'App\\Providers\\YardServiceProvider',
),
'deferred' =>
array (

View file

@ -9,6 +9,7 @@
"cviebrock/eloquent-sluggable": "^4.5",
"doctrine/dbal": "^2.8",
"fideloper/proxy": "^4.0",
"gloudemans/shoppingcart": "^2.5",
"guzzlehttp/guzzle": "6.3.3",
"intervention/image": "2.4.2",
"jenssegers/date": "^3.4",

62
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "7f8a962781fe580335d945e8225b01a5",
"content-hash": "412db16529e0d589f01459505bfbbef2",
"packages": [
{
"name": "cocur/slugify",
@ -722,6 +722,66 @@
],
"time": "2018-02-07T20:20:57+00:00"
},
{
"name": "gloudemans/shoppingcart",
"version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/Crinsane/LaravelShoppingcart.git",
"reference": "7ff157b7e1ef10d27cd2759d5151aae2cc6b1b9a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Crinsane/LaravelShoppingcart/zipball/7ff157b7e1ef10d27cd2759d5151aae2cc6b1b9a",
"reference": "7ff157b7e1ef10d27cd2759d5151aae2cc6b1b9a",
"shasum": ""
},
"require": {
"illuminate/events": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*",
"illuminate/session": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*",
"illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*"
},
"require-dev": {
"mockery/mockery": "~0.9.0",
"orchestra/testbench": "~3.1",
"phpunit/phpunit": "~5.0|~6.0|~7.0"
},
"suggest": {
"gloudemans/notify": "Simple flash notifications for Laravel"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Gloudemans\\Shoppingcart\\ShoppingcartServiceProvider"
],
"aliases": {
"Cart": "Gloudemans\\Shoppingcart\\Facades\\Cart"
}
}
},
"autoload": {
"psr-4": {
"Gloudemans\\Shoppingcart\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Rob Gloudemans",
"email": "info@robgloudemans.nl"
}
],
"description": "Laravel Shoppingcart",
"keywords": [
"laravel",
"shoppingcart"
],
"time": "2018-02-17T09:34:00+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.3.3",

View file

@ -167,6 +167,8 @@ return [
Intervention\Image\ImageServiceProvider::class,
Maatwebsite\Excel\ExcelServiceProvider::class,
Yajra\DataTables\DataTablesServiceProvider::class,
App\Providers\YardServiceProvider::class
],
@ -226,7 +228,7 @@ return [
'Util' => App\Services\Util::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
'DataTables' => Yajra\DataTables\Facades\DataTables::class,
'Yard' => App\Services\Facade\Yard::class,
],
];

67
config/cart.php Normal file
View file

@ -0,0 +1,67 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default tax rate
|--------------------------------------------------------------------------
|
| This default tax rate will be used when you make a class implement the
| Taxable interface and use the HasTax trait.
|
*/
'tax' => 19,
/*
|--------------------------------------------------------------------------
| Shoppingcart database settings
|--------------------------------------------------------------------------
|
| Here you can set the connection that the shoppingcart should use when
| storing and restoring a cart.
|
*/
'database' => [
'connection' => 'mysql',
'table' => 'shoppingcart',
],
/*
|--------------------------------------------------------------------------
| Destroy the cart on user logout
|--------------------------------------------------------------------------
|
| When this option is set to 'true' the cart will automatically
| destroy all cart instances when the user logs out.
|
*/
'destroy_on_logout' => false,
/*
|--------------------------------------------------------------------------
| Default number format
|--------------------------------------------------------------------------
|
| This defaults will be used for the formated numbers if you don't
| set them in the method call.
|
*/
'format' => [
'decimals' => 2,
'decimal_point' => ',',
'thousand_seperator' => '.'
],
];

View file

@ -81,6 +81,7 @@ return array(
'extra' => array(
'Eloquent' => array('Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'),
'Session' => array('Illuminate\Session\Store'),
'Yard' => array('App\Services\Yard'),
),
'magic' => array(

View file

@ -0,0 +1,30 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateShoppingcartTable extends Migration
{
/**
* Run the migrations.
*/
public function up()
{
Schema::create(config('cart.database.table'), function (Blueprint $table) {
$table->string('identifier');
$table->string('instance');
$table->longText('content');
$table->nullableTimestamps();
$table->primary(['identifier', 'instance']);
});
}
/**
* Reverse the migrations.
*/
public function down()
{
Schema::drop(config('cart.database.table'));
}
}

311
public/css/custom-forms-v2.css Executable file
View file

@ -0,0 +1,311 @@
/** CUSTOM FORM ELEMENTS [OPTIONAL]
This CSS file must be included after all other CSS's.
Nothing special - will only rewrite the form elements (input, textarea, select2, buttons)
to look more clean, professional.
**************************************************************** **/
/** CUSTOM : FORM ELEMENTS
*************************** **/
.btn:not(.btn-xs):not(.btn-sm):not(.btn-md):not(.btn-lg):not(.btn-xlg):not(.btn-reveal):not(.btn-3d):not(.btn-social):not(.btn-v1) {
height:auto;
padding: 14px 20px;
}
#footer .btn {
padding: 6px 12px;
}
#footer.footer-light input {
color: #121212 !important;
}
input.form-control,
select.form-control,
textarea.form-control {
height: auto;
color: #121212;
background-color: #fff;
border-color: #dee5ed;
width: 100%;
border-width:1px;
font-size: 15px;
line-height: 15px;
padding: 14px 20px;
border-radius: 3px;
margin-bottom: 15px;
outline: none;
-webkit-appearance: none;
-webkit-transition: all .300s;
-moz-transition: all .300s;
-o-transition: all .300s;
transition: all .300s;
}
form .row input.form-control,
form .row select.form-control,
form .row textarea.form-control {
margin-bottom: 0;
}
@media only screen and (max-width: 768px) { /* mobile fix */
input.form-control,
select.form-control,
textarea.form-control {
line-height: 22px;
}
}
/* label spacing fix */
form label {
margin-top:15px;
}
#topBar form label,
#header form label,
#footer form label,
form div.form-group label {
margin-top:0;
}
input.form-control:hover,
select.form-control:hover,
textarea.form-control:hover {
background-color: #fafafa !important;
}
section.dark input.form-control:hover,
section.dark select.form-control:hover,
section.dark textarea.form-control:hover {
background-color: #1c2125 !important;
}
section.dark .select2-container .select2-selection--single .select2-selection__rendered,
section.dark input.form-control,
section.dark select.form-control,
section.dark textarea.form-control {
color: #ffffff;
background-color: #272e33 ;
border-color: #272e33;
}
section.dark input::placeholder,
section.dark select::placeholder,
section.dark textarea::placeholder {
color: #a3a9b0 !important;
}
/* textarea */
textarea.form-control {
min-height:100px;
}
/* normal select */
select.form-control:not([size]):not([multiple]) {
height: 50px;
-webkit-appearance:none;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAMAAADNLv/0AAAANlBMVEUAAAD///+ZmZmfoqiaoKydo6ueo6ucpKqdo6qdoqqeoqqdo6qdoqqdo6qco6mdo6qcoqmdo6rJSltEAAAAEHRSTlMAAQVSU5Wmrbe+1NXf5f7+fUgvXAAAAC5JREFUeNodxkkCABAMBMEhiDX4/2fJ9KULLYHlhW5C3YIwvikgThOK3kcddPU9JQ4BFWtk/ScAAAAASUVORK5CYII=) no-repeat;
background-position: center right 20px;
background-color: #fff;
color:#a3a9b0;
}
section.dark select.form-control:not([size]):not([multiple]) {
background: #272e33 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAMAAADNLv/0AAAANlBMVEUAAAD///+ZmZmfoqiaoKydo6ueo6ucpKqdo6qdoqqeoqqdo6qdoqqdo6qco6mdo6qcoqmdo6rJSltEAAAAEHRSTlMAAQVSU5Wmrbe+1NXf5f7+fUgvXAAAAC5JREFUeNodxkkCABAMBMEhiDX4/2fJ9KULLYHlhW5C3YIwvikgThOK3kcddPU9JQ4BFWtk/ScAAAAASUVORK5CYII=) 15px center no-repeat;
background-position: center right 20px;
color:# c9c9c9;
}
/* SELECT2 CUSTOM */
.select2 {
position: relative;
}
.select2-container--default .select2-selection--single {
border: none;
background-color: #fff;
}
.select2-container {
width: 100% !important;
max-width: 100% !important;
font-size: 16px;
height: auto;
margin-bottom: 15px;
}
form .row .select2-container {
margin-bottom: 0;
}
@media (min-width: 64em) {
.select2-container.select2-container--open {
max-width: 393px !important;
}
}
.select2-container .select2-selection--single {
height: auto;
margin: 0;
outline: none;
}
.select2-container .select2-selection--single .select2-selection__rendered {
font-size: 16px;
max-width: 100%;
padding: 16px 20px;
border-radius: 3px;
border-style: solid;
border-width: 1px;
border-color: #dee5ed;
resize: none;
line-height: 1;
outline: none;
color: #a3a9b0;
text-align: left;
margin: 0;
height: 50px;
}
.select2-container .select2-selection--single .select2-selection__rendered:after {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAMAAADNLv/0AAAANlBMVEUAAAD///+ZmZmfoqiaoKydo6ueo6ucpKqdo6qdoqqeoqqdo6qdoqqdo6qco6mdo6qcoqmdo6rJSltEAAAAEHRSTlMAAQVSU5Wmrbe+1NXf5f7+fUgvXAAAAC5JREFUeNodxkkCABAMBMEhiDX4/2fJ9KULLYHlhW5C3YIwvikgThOK3kcddPU9JQ4BFWtk/ScAAAAASUVORK5CYII=) 0 center no-repeat;
width: 20px;
}
.select2-container .select2-results .select2-results__options {
width: 100%;
text-align: left;
font-size: 16px;
}
.select2-container .select2-results .select2-results__options .select2-results__option.select2-results__option--highlighted[aria-selected] {
background-color: #ccc;
}
section.dark .select2-container .select2-selection--single .select2-selection__rendered {
background-color: #272e33;
border-color: #272e33;
color: #a3a9b0;
}
section.dark .select2-container .select2-selection--single .select2-selection__rendered,
.select2-container .select2-selection--single .select2-selection__rendered {
-webkit-transition: all .300s;
-moz-transition: all .300s;
-o-transition: all .300s;
transition: all .300s;
}
.select2-container .select2-selection--single .select2-selection__rendered:hover {
background-color: #fafafa;
}
section.dark .select2-container .select2-selection--single .select2-selection__rendered:hover {
background-color: #1c2125;
}
section.dark .select2-container .select2-selection--single .select2-selection__rendered:focus {
border-color: #c1d120;
}
section.dark .select2-container .select2-results .select2-results__options {
border-color: #a3a9b0;
}
section.dark .select2-container .select2-results .select2-results__options .select2-results__option {
background-color: #272e33;
color: #a3a9b0;
}
section.dark .select2-container .select2-results .select2-results__options .select2-results__option.select2-results__option--highlighted[aria-selected] {
background-color: #333a3f;
}
.select2-container--default .select2-selection--single .select2-selection__arrow {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAMAAADNLv/0AAAANlBMVEUAAAD///+ZmZmfoqiaoKydo6ueo6ucpKqdo6qdoqqeoqqdo6qdoqqdo6qco6mdo6qcoqmdo6rJSltEAAAAEHRSTlMAAQVSU5Wmrbe+1NXf5f7+fUgvXAAAAC5JREFUeNodxkkCABAMBMEhiDX4/2fJ9KULLYHlhW5C3YIwvikgThOK3kcddPU9JQ4BFWtk/ScAAAAASUVORK5CYII=) 0 center no-repeat;
width: 20px;
height: 20px;
right: 12px;
top: 50%;
margin-top: -9px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow b {
display: none;
}
.select2-results__option {
padding-left: 20px;
padding-right: 20px;
}
.select2-container.select2-container--open {
max-width: 100% !important;
}
section.dark .select2-dropdown {
border: 0;
}
.select2-dropdown {
border-color: #dee5ed;
border-width:1px;
}
.select2-container--focus {
outline: 1px solid transparent;
z-index: 102;
}
/* search field */
.select2-container--default .select2-search--dropdown .select2-search__field {
padding: 6px !important;
border-radius: 0;
-webkit-border-radius: 0;
}
/* optgroup */
.select2-container--default .select2-results__group {
font-size:14px;
border-top: #eaeaea 1px solid;
padding-left: 17px;
padding-right: 17px;
}
/* FANCY FORM */
.fancy-file-upload {
height: auto;
}
.fancy-file-upload>span.button {
height: 41px;
line-height: 41px;
}
.fancy-file-upload>i {
top: 4px;
}
/* MISC */
@media only screen and (max-width: 768px) {
form .row {
margin-bottom:0 !important;
}
form .row>div {
margin-bottom:15px !important;
display: block;
}
form .row>div>.row>div:last-child {
margin-bottom: 0 !important;
}
}
/** RTL
Add .rtl class to body
*************************** **/
/* forms */
body.rtl .select2-container .select2-results .select2-results__options,
body.rtl .select2-container .select2-selection--single .select2-selection__rendered {
text-align: right !important;
}
body.rtl .select2-container--default .select2-selection--single .select2-selection__arrow {
left:15px;
}
body.rtl .select2-results__option,
body.rtl .select2-container .select2-selection--single .select2-selection__rendered {
padding-left:20px;
padding-right: 20px;
}
body.rtl input, body.rtl select, body.rtl textarea {
text-align:right !important;
}
/* normal select */
body.rtl select.form-control:not([size]):not([multiple]) {
background-position: center left 15px;
}
body.rtl section.dark select.form-control:not([size]):not([multiple]) {
background-position: center left 15px;
}

View file

@ -20,13 +20,20 @@
<link href="{{ asset('/assets/plugins/slider.revolution/css/settings.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/mystyle.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('/assets/css/custom-style.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('assets/css/custom-forms-v2.css') }}" rel="stylesheet" type="text/css" />
<style type="text/css">
.text-primary {
color:#a5d0a5 !important;
}
div.side-nav ul.list-group-bordered > li.list-group-item.active > a:hover{
color: #fff !important;
}
</style>
</head>
<body class="smoothscroll enable-animation">
@ -47,5 +54,26 @@
<script type="text/javascript" src="{{ asset('/assets/plugins/slider.revolution/js/jquery.themepunch.tools.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('/assets/plugins/slider.revolution/js/jquery.themepunch.revolution.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('/assets/js/view/demo.revolution_slider.js') }}"></script>
<script>
/** CHECKOUT
** *********************** **/
// New Account show|hide
jQuery("#accountswitch").bind("click", function() {
jQuery('#newaccount').slideToggle(200);
});
// Shipping Address show|hide
jQuery("#shipswitch").bind("click", function() {
jQuery('#shipping').slideToggle(200, function() {
// scroll down to shipping area.
if(jQuery('#shipping').is(":visible")) {
_scrollTo('#shipping', 150);
}
});
});
</script>
</body>
</html>

View file

@ -1,5 +1,43 @@
<div id="header" class="sticky clearfix">
<style>
#header li.quick-cart .quick-cart-box {
-webkit-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3);
-moz-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3);
box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3);
}
#header li.quick-cart .quick-cart-footer > span {
background-color: transparent;
}
.quick-cart-wrapper span.price {
color: #666666;
font-size: 1.1em;
}
.quick-cart-wrapper h5 {
margin-bottom: 5px;
}
#header li.quick-cart .quick-cart-footer {
padding: 10px 10px 10px 10px;
background-color: #ebebeb;
}
#header li.quick-cart .quick-cart-box {
padding-bottom: 0;
}
#header ul.nav-second-main {
margin-top: 25px;
}
@media only screen and (max-width: 992px){
#header ul.nav-second-main
{
margin-top: 0px;
}
}
#header.fixed ul.nav-second-main {
margin-top: 8px;
}
</style>
<!-- TOP NAV -->
<header id="topNav">
<div class="container">
@ -9,6 +47,60 @@
<i class="fa fa-bars"></i>
</button>
<ul class="pull-right nav nav-pills nav-second-main has-topBar">
<!-- QUICK SHOP CART -->
<li class="quick-cart">
<a href="#" style="border: 1px solid #c3c3c3; padding: 10px;">
<span style="position: relative">
<span class="badge badge-success btn-xs badge-corner">{{ Yard::instance('shopping')->count() }}</span>
<i class="fa fa-shopping-cart"></i>
</span>
&nbsp;
@if(Yard::instance('shopping')->count())
<span class="">{{ \Yard::instance('shopping')->subtotal() }} </span>
@endif
</a>
<div class="quick-cart-box" style="display: none;">
<h4>Warenkorb</h4>
<div class="quick-cart-wrapper">
@foreach(Yard::instance('shopping')->content() as $row)
<a href="{{ url('/produkte/alle-produkte/'.$row->options->slug) }}"><!-- cart item -->
@if($row->options->has('image'))
<img src="{{ route('product_image', [$row->options->image]) }}" width="50" height="66" alt="">
@else
<img src="{{ asset('/assets/images/1x1.png') }}" width="50" height="66" alt="">
@endif
<h5>{{ $row->name }}</h5>
<span class="price">{{ $row->qty }}x <strong>{{ $row->price() }} </strong></span>
</a><!-- /cart item -->
@endforeach
</div>
<!-- quick cart footer -->
<div class="quick-cart-footer clearfix">
<div class="text-left">
<strong>Zwischensumme:</strong> <strong class="pull-right">{{ Yard::instance('shopping')->subtotal() }} </strong>
<br>
<em style="font-size: 0.9em">inkl. MwSt. zzgl. Versandkosten</em>
</div>
<a href="{{ route('card_show') }}" class="btn btn-primary btn-block mt-3">zum Warenkorb</a>
</div>
</div>
</li>
</ul>
<!-- Logo -->
<a class="logo pull-left" href="{{ url('/') }}">

View file

@ -1,3 +1,4 @@
<div class="side-nav margin-bottom-60">
<div class="side-nav-head">
@ -5,14 +6,8 @@
<h4>Kategorien</h4>
</div>
<ul class="list-group list-group-bordered list-group-noicon">
<li class="list-group-item {{ Request::is('produkte/alle-produkte') ? ' active' : '' }}">
<a href="{{ url('/produkte/alle-produkte') }}">
<span class="size-11 text-muted pull-right">({{ $p_count }})</span>
Alle Produkte
</a>
</li>
<ul class="list-group list-group-bordered list-group-noicon">
@foreach($categories as $category)
<li class="list-group-item {{ Request::is('produkte/'.$category->slug.'*') ? ' active' : '' }}">

View file

@ -0,0 +1,235 @@
@extends('web.layouts.layout')
@section('content')
<section class="page-header page-header-xlg parallax parallax-3"
style="background-image:url('/assets/images/vision-min.jpg')">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
<div class="container">
</div>
</section>
<!-- /PAGE HEADER -->
<style>
div.shop-item {
margin-bottom:30px;
border: 1px solid #ddd;
}
div.shop-item > .thumbnail, .thumbnail {
border: none;
}
div.shop-item-summary {
padding: 8px;
}
div.shop-item-summary h2 a {
color: #9aa983;
font-size: 1.2em;
margin: 0 0 10px 0;
}
div.shop-item-buttons {
padding: 0 8px 10px 8px;
}
div.shop-item-buttons .btn-xs{
padding: 4px;
}
.cartContent a.remove_item {
background: transparent;
}
.cartContent .product_name {
font-size: 1.15em;
}
.cartContent .product_name > small {
line-height: 20px;
}
.cartContent .head .product_name {
min-height: auto;
padding-left: 20px;
}
@media only screen and (max-width: 1200px) {
.cartContent .yard .product_name {
padding-bottom: 0;
min-height: 60px;
width: 60%;
}
.cartContent .yard .remove_item {
clear: right;
}
.cartContent .yard .total_price {
width: auto;
padding-top: 30px;
clear: right;
}
.cartContent .yard .item .qty {
float: left;
text-align: left;
}
.cartContent .yard .item.head {
display: none;
}
}
@media only screen and (min-width: 768px) {
.cartContent .yard .total_price {
padding-top: 10px;
}
}
@media only screen and (min-width: 992px) {
.cartContent .yard .total_price {
padding-top: 30px;
}
}
@media only screen and (min-width: 1200px) {
.cartContent .yard .total_price {
padding-top: 10px;
}
}
</style>
<!-- -->
{{ Yard::instance('shopping')->setShipping(5.9) }}
<section>
<div class="container">
<h1>Warenkorb</h1>
<!-- EMPTY CART -->
<!-- <div class="panel panel-default">
<div class="panel-body">
<strong>Shopping cart is empty!</strong><br />
You have no items in your shopping cart.<br />
Click <a href="index.html">here</a> to continue shopping. <br />
<span class="label label-warning">this is just an empty cart example</span>
</div>
</div>-->
<!-- /EMPTY CART -->
<!-- CART -->
<div class="row">
<!-- LEFT -->
<div class="col-lg-9 col-sm-7">
<h3>Du hast {{ Yard::instance('shopping')->count() }} Artikel in Deinem Warenkorb</h3>
@if(Yard::instance('shopping')->content()->count())
<!-- CART -->
{!! Form::open(['url' => route('card_update'), 'class' => 'cartContent clearfix', 'id'=>'']) !!}
<!-- cart content -->
<div id="cartContent">
<div class="box-border-shadow">
<!-- cart header -->
<div class="item head clearfix">
<span class="cart_img"></span>
<span class="product_name size-15 bold">Produkt</span>
<span class="remove_item size-15 bold"></span>
<span class="total_price size-15 bold">Preis</span>
<span class="qty size-15 bold">Anzahl</span>
</div>
@foreach(Yard::instance('shopping')->content() as $row)
<div class="item yard">
<div class="cart_img pull-left width-100 padding-10 text-left">
@if($row->options->has('image'))
<img src="{{ route('product_image', [$row->options->image]) }}" width="80" alt="">
@else
<img src="{{ asset('/assets/images/1x1.png') }}" width="80" alt="">
@endif
</div>
<a href="{{ url('/produkte/alle-produkte/'.$row->options->slug) }}" class="product_name">
<span>{{ $row->name }}</span>
<small>Lieferzeit: 1-3 Werktage</small>
</a>
<a href="{{ route('card_remove', [$row->rowId]) }}" class="remove_item"><i class="fa fa-times"></i></a>
<div class="total_price"><span>{{ $row->subtotal() }} </span> </div>
<div class="qty"><input type="number" value="{{ $row->qty }}" name="quantity[{{$row->rowId}}]" maxlength="3" max="999" min="1" /> &times; {{ $row->price() }} </div>
<div class="clearfix"></div>
</div>
@endforeach
</div>
<a href="{{route('card_delete')}}" class="btn btn-default margin-top-20 margin-right-10 pull-left"><i class="glyphicon glyphicon-remove"></i> Warenkorb löschen</a>
<button type="submit" class="btn btn-primary margin-top-20 pull-right"><i class="glyphicon glyphicon-refresh"></i> Warenkorb aktualisieren</button>
<div class="clearfix"></div>
</div>
{!! Form::close() !!}
<!-- /CART -->
@endif
</div>
<!-- RIGHT -->
<div class="col-lg-3 col-sm-5">
@if(Yard::instance('shopping')->content()->count())
<h3>Warenkorb Summe</h3>
<div class="toggle-transparent toggle-bordered-full clearfix">
<div class="toggle active">
<div class="toggle-content">
<div class="clearfix mb-2">
<span class="pull-right">{{ Yard::instance('shopping')->total() }} </span>
<strong class="pull-left">Zwischensumme:</strong>
</div>
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->shipping() }} </span>
<span class="pull-left small">Versandkosten:</span>
</div>
<hr class="mt-4 mb-4">
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->subtotalWithShipping() }} </span>
<span class="pull-left small">Summe ohne MwSt:</span>
</div>
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->taxWithShipping() }} </span>
<span class="pull-left small"> zzgl. {{ Yard::getTaxRate() }} % MwSt.:</span>
</div>
<hr />
<span class="clearfix ">
<span class="pull-right size-20"><strong>{{ Yard::instance('shopping')->totalWithShipping() }} </strong></span>
<strong class="pull-left">Gesamtsumme:</strong>
</span>
<a href="{{ route('card_checkout') }}" class="btn btn-primary btn-lg btn-block size-15 mt-4"><i class="fa fa-mail-forward"></i> zur Kasse</a>
</div>
</div>
</div>
@endif
</div>
</div>
<br><br>
<hr>
<p><em class="small" style="color: #828282">Alle Preise inkl. gesetzl. Mehrwertsteuer zzgl. Versandkosten, wenn nicht anders beschrieben</em></p>
<!-- /CART -->
</div>
</section>
@endsection

View file

@ -0,0 +1,119 @@
@extends('web.layouts.layout')
@section('content')
<section class="page-header page-header-xlg parallax parallax-3"
style="background-image:url('/assets/images/vision-min.jpg')">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
<div class="container">
</div>
</section>
<!-- /PAGE HEADER -->
<style>
div.shop-item {
margin-bottom:30px;
border: 1px solid #ddd;
}
div.shop-item > .thumbnail, .thumbnail {
border: none;
}
div.shop-item-summary {
padding: 8px;
}
div.shop-item-summary h2 a {
color: #9aa983;
font-size: 1.2em;
margin: 0 0 10px 0;
}
div.shop-item-buttons {
padding: 0 8px 10px 8px;
}
div.shop-item-buttons .btn-xs{
padding: 4px;
}
.cartContent a.remove_item {
background: transparent;
}
.cartContent .product_name {
font-size: 1.15em;
}
.cartContent .product_name > small {
line-height: 20px;
}
@media only screen and (max-width: 1200px) {
.cartContent .product_name {
padding-bottom: 0;
min-height: 60px;
width: 60%;
}
.cartContent .remove_item {
clear: right;
}
.cartContent .total_price {
width: auto;
padding-top: 30px;
clear: right;
}
.cartContent .item .qty {
float: left;
text-align: left;
}
.cartContent .item.head {
display: none;
}
}
@media only screen and (min-width: 768px) {
.cartContent .total_price {
padding-top: 10px;
}
}
@media only screen and (min-width: 992px) {
.cartContent .total_price {
padding-top: 30px;
}
}
@media only screen and (min-width: 1200px) {
.cartContent .total_price {
padding-top: 10px;
}
}
</style>
<!-- -->
<!-- -->
<section>
<div class="container">
<!-- CHECKOUT FINAL MESSAGE -->
<div class="panel panel-default">
<div class="panel-body">
<h3>Thank you, John Doe.</h3>
<p>
Your order has been placed. In a few moments you will receive an order confirmation email from us.<br />
If you like, you can explore more <a href="{{ url('produkte') }}"> products</a>.
</p>
<hr />
<p>
Thank you very much for choosing us,<br />
<strong> Inc.</strong>
</p>
</div>
</div>
<!-- /CHECKOUT FINAL MESSAGE -->
</div>
</section>
<!-- / -->
@endsection

View file

@ -0,0 +1,420 @@
@extends('web.layouts.layout')
@section('content')
<section class="page-header page-header-xlg parallax parallax-3"
style="background-image:url('/assets/images/vision-min.jpg')">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
<div class="container">
</div>
</section>
<!-- /PAGE HEADER -->
<style>
div.shop-item {
margin-bottom:30px;
border: 1px solid #ddd;
}
div.shop-item > .thumbnail, .thumbnail {
border: none;
}
div.shop-item-summary {
padding: 8px;
}
div.shop-item-summary h2 a {
color: #9aa983;
font-size: 1.2em;
margin: 0 0 10px 0;
}
div.shop-item-buttons {
padding: 0 8px 10px 8px;
}
div.shop-item-buttons .btn-xs{
padding: 4px;
}
.cartContent a.remove_item {
background: transparent;
}
.cartContent .product_name {
font-size: 1.15em;
}
.cartContent .product_name > small {
line-height: 20px;
}
@media only screen and (max-width: 1200px) {
.cartContent .product_name {
padding-bottom: 0;
min-height: 60px;
width: 60%;
}
.cartContent .remove_item {
clear: right;
}
.cartContent .total_price {
width: auto;
padding-top: 30px;
clear: right;
}
.cartContent .item .qty {
float: left;
text-align: left;
}
.cartContent .item.head {
display: none;
}
}
@media only screen and (min-width: 768px) {
.cartContent .total_price {
padding-top: 10px;
}
}
@media only screen and (min-width: 992px) {
.cartContent .total_price {
padding-top: 30px;
}
}
@media only screen and (min-width: 1200px) {
.cartContent .total_price {
padding-top: 10px;
}
}
</style>
<!-- -->
{{ Yard::instance('shopping')->setShipping(5.9) }}
<!-- CART -->
<!-- CHECKOUT -->
<section>
<div class="container">
{{--
<!-- NOT LOGGED IN -->
<!-- <div class="mb-30 box-border-shadow p-20">
<strong>You are not logged in!</strong>
Please, <a href="pack-megashop-sign-in.html">login</a> or <a href="javascript:;" onclick="jQuery('#accountswitch').trigger('click'); _scrollTo('#newaccount', 200);">create an account</a> for later use.
</div>
-->
<!-- /NOT LOGGED IN -->
--}}
<!-- CHECKOUT -->
<div class="">
{!! Form::open(['url' => route('card_checkout_final'), 'class' => 'row clearfix', 'id'=>'']) !!}
<div class="col-lg-7 col-sm-7">
<!-- BILLING -->
<fieldset class="mb-0 box-border-shadow p-20">
<h4>Rechnung &amp; Versand</h4>
<hr />
<div class="row">
<div class="col-md-12 col-sm-12">
<label class="mt-0 fs-14 fw-400" for="billing_company">Firma</label>
<input id="billing_company" name="billing[company]" type="text" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_firstname">Vorname*</label>
<input id="billing_firstname" name="billing[firstname]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_lastname">Nachname *</label>
<input id="billing_lastname" name="billing[lastname]" type="text" class="form-control required" />
</div>
</div>
<div class="row">
<div class="col-lg-12">
<label class="mt-0 fs-14 fw-400" for="billing_address1">Straße Nr. *</label>
<input id="billing_address1" name="billing[address][]" type="text" class="form-control required" placeholder="" />
<!--<input id="billing_address2" name="billing[address][]" type="text" class="form-control margin-top-10" placeholder="Address 2" />-->
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_zipcode">PLZ *</label>
<input id="billing_zipcode" name="billing[zipcode]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_city">Stadt *</label>
<input id="billing_city" name="billing[city]" type="text" class="form-control required" />
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<label class="mt-0 fs-14 fw-400" for="billing_state">Land *</label>
<select id="billing_state" name="billing[state]" class="form-control pointer selectpicker required">
<option value="">Select...</option>
<option value="1">...</option>
<option value="2">...</option>
<option value="">..............</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_phone">Telefon *</label>
<input id="billing_phone" name="billing[phone]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="billing_fax">Fax</label>
<input id="billing_fax" name="billing[fax]" type="text" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<label class="mt-0 fs-14 fw-400" for="billing_email">Email *</label>
<input id="billing_email" name="billing[email]" type="text" class="form-control required" />
</div>
</div>
<div class="row">
<div class="col-lg-12 nomargin clearfix">
<label class="mt-0 fs-14 fw-400 checkbox pull-left"><!-- see assets/js/view/demo.shop.js - CHECKOUT section -->
<input id="shipswitch" name="shipping[same_as_billing]" type="checkbox" value="1" checked="checked" />
<i></i> <span class="weight-300">Versand an die gleiche Adresse</span>
</label>
</div>
</div>
</fieldset>
<!-- /BILLING -->
<!-- SHIPPING -->
<fieldset id="shipping" class="softhide mt-40">
<div class="box-border-shadow p-20">
<h4>Versand Adresse</h4>
<hr />
<div class="row">
<div class="col-md-12 col-sm-12">
<label class="mt-0 fs-14 fw-400" for="shipping_company">Firma</label>
<input id="shipping_company" name="shipping[company]" type="text" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_firstname">Vorname*</label>
<input id="shipping_firstname" name="shipping[firstname]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_lastname">Nachname *</label>
<input id="shipping_lastname" name="shipping[lastname]" type="text" class="form-control required" />
</div>
</div>
<div class="row">
<div class="col-lg-12">
<label class="mt-0 fs-14 fw-400" for="shipping_address1">Straße Nr. *</label>
<input id="shipping_address1" name="shipping[address][]" type="text" class="form-control required" placeholder="" />
<!--<input id="shipping_address2" name="shipping[address][]" type="text" class="form-control margin-top-10" placeholder="Address 2" />-->
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_zipcode">PLZ *</label>
<input id="shipping_zipcode" name="shipping[zipcode]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_city">Stadt *</label>
<input id="shipping_city" name="shipping[city]" type="text" class="form-control required" />
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<label class="mt-0 fs-14 fw-400" for="shipping_state">Land *</label>
<select id="shipping_state" name="shipping[state]" class="form-control pointer selectpicker required">
<option value="">Select...</option>
<option value="1">...</option>
<option value="2">...</option>
<option value="">..............</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_phone">Telefon *</label>
<input id="shipping_phone" name="shipping[phone]" type="text" class="form-control required" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="shipping_fax">Fax</label>
<input id="shipping_fax" name="shipping[fax]" type="text" class="form-control" />
</div>
</div>
</div>
</fieldset>
<!-- /SHIPPING -->
</div>
<div class="col-lg-5 col-sm-5">
<!-- PAYMENT METHOD -->
<fieldset class="box-border-shadow p-20">
<h4>Zahlungsart</h4>
<hr>
<div class="toggle-transparent toggle-bordered-full clearfix">
<div class="toggle active">
<div class="toggle-content">
<div class="row nomargin-bottom">
<div class="col-lg-12 nomargin clearfix">
<label class="mt-0 fs-14 fw-400 radio pull-left nomargin-top">
<input id="payment_check" name="payment[method]" type="radio" value="1" checked="checked" />
<i></i> <span class="weight-300">Paypal</span>
</label>
</div>
<div class="col-lg-12 nomargin clearfix">
<label class="mt-0 fs-14 fw-400 radio pull-left">
<input id="payment_card" name="payment[method]" type="radio" value="2" />
<i></i> <span class="weight-300">Kredit Karte</span>
</label>
</div>
</div>
</div>
</div>
</div>
</fieldset>
<!-- /PAYMENT METHOD -->
<!-- TOTAL / PLACE ORDER -->
<div class="toggle-transparent toggle-bordered-full clearfix">
<div class="toggle active">
<div class="toggle-content">
<div class="clearfix mb-2">
<span class="pull-right">{{ Yard::instance('shopping')->total() }} </span>
<strong class="pull-left">Zwischensumme:</strong>
</div>
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->shipping() }} </span>
<span class="pull-left small">Versandkosten:</span>
</div>
<hr class="mt-4 mb-4">
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->subtotalWithShipping() }} </span>
<span class="pull-left small">Summe ohne MwSt:</span>
</div>
<div class="clearfix mb-2">
<span class="pull-right small">{{ Yard::instance('shopping')->taxWithShipping() }} </span>
<span class="pull-left small"> zzgl. {{ Yard::getTaxRate() }} % MwSt.:</span>
</div>
<hr />
<span class="clearfix ">
<span class="pull-right size-20"><strong>{{ Yard::instance('shopping')->totalWithShipping() }} </strong></span>
<strong class="pull-left">Gesamtsumme:</strong>
</span>
<button class="btn btn-primary btn-lg btn-block size-15 mt-4"><i class="fa fa-mail-forward"></i> Bestellung absenden</button>
</div>
</div>
</div>
<!-- /TOTAL / PLACE ORDER -->
{{--
<!-- CREATE ACCOUNT -->
<div class="toggle-transparent toggle-bordered-full margin-top-30 clearfix">
<div class="toggle active">
<div class="toggle-content">
<div class="clearfix">
<label class="mt-0 fs-14 fw-400 checkbox pull-left">
<input id="accountswitch" name="create-account[yes]" type="checkbox" value="1" />
<i></i> <span class="weight-300">Create an account for later use</span>
</label>
</div>
<!-- CREATE ACCOUNT FORM -->
<div id="newaccount" class="margin-top-10 margin-bottom-30 softhide">
<div class="row nomargin-bottom">
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="account:password">Password *</label>
<input id="account:password" name="account[password]" type="password" class="form-control" />
</div>
<div class="col-md-6 col-sm-6">
<label class="mt-0 fs-14 fw-400" for="account:password2">Confirm Password *</label>
<input id="account:password2" name="account[password2]" type="password" class="form-control" />
</div>
</div>
<small class="text-warning">NOTE: Email address will be used to login</small>
</div>
<!-- /CREATE ACCOUNT FORM -->
</div>
</div>
</div>
<!-- /CREATE ACCOUNT -->
--}}
{!! Form::close() !!}
</div>
<!-- /CHECKOUT -->
</div>
</section>
<!-- /CHECKOUT -->
<!-- /CART -->
@endsection

View file

@ -2,6 +2,27 @@
@section('content')
<style>
div.shop-item-price > span {
padding: 0;
}
hr {
margin-top: 10px;
margin-bottom: 10px;
}
p {
margin-bottom: 15px;
}
.qty input {
padding: 3px;
margin: 0;
border: #ccc 1px solid;
width: 60px;
margin-right: 3px;
text-align: center;
font-size: 16px;
}
</style>
<section class="page-header page-header-xlg parallax parallax-3"
style="background-image:url('/assets/images/vision-min.jpg')">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
@ -81,32 +102,45 @@
<!-- ITEM DESC -->
<div class="col-lg-6 col-sm-6">
<br>
<!--<div class="pull-right">
<a class="btn btn-default add-wishlist" href="#" data-item-id="1" data-toggle="tooltip" title="" data-original-title="Add To Wishlist"><i class="fa fa-heart nopadding"></i></a>
</div>-->
<h1 class="small-h1">{{ $product->getLang('name') }}</h1>
{!! $product->getLang('copy') !!}
<hr/>
<div class="shop-item-price text-right">
{{ $product->getFormattedPrice() }} <br>
<span style="font-size: 0.7em; color:#999; font-weight: 400;"><em>inkl. 19% MwSt. zzgl. Versandkosten</em></span>
</div>
<hr>
<div class="shop-item-price text-right">
{!! Form::open(['url' => route('card_add_post', [$product->id]), 'class' => 'mb-0', 'id'=>'']) !!}
<div class="qty float-left">
<input type="number" value="1" name="quantity" maxlength="3" max="999" min="1"><br>
</div>
<button class="btn btn-primary">In den Warenkorb</button><br>
<span style="font-size: 0.7em; color:#999; font-weight: 400;"><em>Lieferzeit: 1-3 Werktage</em></span>
{!! Form::close() !!}
</div>
<hr>
<div class="shop-item-price text-right">
<span class="pull-left"><strong>Inhalt:</strong></span>
<span style="font-size: 0.8em">{{ $product->content }}</span>
<span style="font-size: 0.8em">{{ $product->contents }}</span>
</div>
<hr>
<div class="shop-item-price text-left">
<span class=""><strong>Art.-Nr.:</strong> {{ $product->number }}</span>
</div>
<hr>
<hr/>
<div class="shop-item-price text-right">
<span class="pull-left"><strong>Art.-Nr.:</strong> {{ $product->number }}</span>
{{ $product->getFormattedPrice() }}
<hr/>
<button class="btn btn-primary pull-right ">In den Warenkorb</button>
<br>
<hr/>
<small class="text-muted">
<img src="/assets/images/{{ $product->icons }}" alt=""
class="img-responsive">
</small>
<hr/>
</div>
<!-- /ITEM DESC -->
@ -154,8 +188,6 @@
</div>
<!-- /RIGHT COLUMNS -->
</div>
</div>
</section>

View file

@ -11,7 +11,29 @@
</section>
<!-- /PAGE HEADER -->
<style>
div.shop-item {
margin-bottom:30px;
border: 1px solid #ddd;
}
div.shop-item > .thumbnail, .thumbnail {
border: none;
}
div.shop-item-summary {
padding: 8px;
}
div.shop-item-summary h2 a {
color: #9aa983;
font-size: 1.2em;
margin: 0 0 10px 0;
}
div.shop-item-buttons {
padding: 0 8px 10px 8px;
}
div.shop-item-buttons .btn-xs{
padding: 4px;
}
</style>
<!-- -->
<section>
<div class="container">
@ -32,33 +54,64 @@
<div class="thumbnail">
<!-- product image(s) -->
<a class="shop-item-image"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<a class="shop-item-image" href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
@php ($set = 'first')
@foreach($product->images as $image)
@if($set == 'hover')
<img class="img-responsive" src="{{ route('product_image', [$image->slug]) }}" alt="shop {{ $set }} image"/>
<img class="img-responsive" src="{{ route('product_image', [$image->slug]) }}" alt="{{ $product->getLang('name') }}"/>
@php($set = 'done')
@endif
@if($set == 'first')
<img class="img-responsive" src="{{ route('product_image', [$image->slug]) }}" alt="shop {{ $set }} image"/>
<img class="img-responsive" src="{{ route('product_image', [$image->slug]) }}" alt="{{ $product->getLang('name') }}"/>
@php($set = 'hover')
@endif
@endforeach
</a>
<!-- /product image(s) -->
<!-- hover buttons -->
<!-- <div class="shop-option-over">
<a class="btn btn-default add-wishlist" href="#" data-item-id="4" data-toggle="tooltip" title="" data-original-title="Auf die Wunschliste"><i class="fa fa-heart nopadding"></i></a>
</div>
<!-- /hover buttons -->
<!-- product more info -->
<!-- <div class="shop-item-info">
<span class="label label-success">NEW</span>
</div>
-->
<!-- /product more info -->
</div>
<div class="shop-item-summary text-center">
<div class="shop-item-summary text-center ">
<h2 class=""><a href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a></h2>
<!-- rating -->
<div class="shop-item-rating-line">
<div class="rating rating-5 size-13"><!-- rating-0 ... rating-5 --></div>
</div>
<!-- /rating -->
<!-- price -->
<div class="shop-item-price">
{{ $product->getFormattedPrice() }}
</div>
<!-- /price -->
</div>
<!-- buttons -->
<div class="shop-item-buttons text-center">
<a class="btn btn-default"
href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">{{ $product->getLang('name') }}</a>
<div class="shop-item-buttons text-left">
<a href="{{ route('card_add_get', [$product->id, 1, $product->slug]) }}" data-quantity="1" data-product_id="{{ $product->id }}" aria-label="{{ $product->getLang('name') }} zu deinem Warenkorb hinzufügen" class="btn btn-primary btn-xs" rel="nofollow">
<i class="fa fa-cart-plus"></i> In den Warenkorb
</a>
<a class="float-right btn btn-primary btn-xs" href="{{ url('/produkte/'.$subsite.'/'.$product->slug) }}">
<i class="fa fa-list"></i> Details
</a>
</div>
<!-- /buttons -->
</div>
</li>
@ -80,5 +133,4 @@
</div>
</section>
<!-- / -->
@endsection

View file

@ -15,12 +15,38 @@
Route::domain('mivita.local')->group(function () {
Route::get('/', 'Web\SiteController@index')->name('/');
Route::get('/', 'Web\SiteController@index')->name('/');
Route::get('product/image/{slug}', function($slug = null)
{
$image = \App\Models\ProductImage::where('slug', $slug)->first();
$path = storage_path('app/public').'/images/product'.'/'.$image->product_id.'/'.$image->filename;
if (file_exists($path)) {
return Response::file($path);
}
})->name('product_image');
Route::get('/card/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('card_add_get');
Route::post('/card/add/{id}', 'Web\CardController@addToCardPost')->name('card_add_post');
Route::get('/card/show', 'Web\CardController@showCard')->name('card_show');
Route::get('/card/checkout', 'Web\CardController@checkoutCard')->name('card_checkout');
Route::post('/card/checkout_final', 'Web\CardController@checkoutFinalCard')->name('card_checkout_final');
Route::post('/card/update', 'Web\CardController@updateCard')->name('card_update');
Route::get('/card/remove/{rowId}', 'Web\CardController@removeCard')->name('card_remove');
Route::get('/card/delete', 'Web\CardController@deleteCard')->name('card_delete');
Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('site');
});
/* ROUTING FOR CRM / CMS*/
@ -189,14 +215,7 @@ Route::get('/user/update_email_confirm/{token}', 'UpdateEmailController@activate
Route::get('product/image/{slug}', function($slug = null)
{
$image = \App\Models\ProductImage::where('slug', $slug)->first();
$path = storage_path('app/public').'/images/product'.'/'.$image->product_id.'/'.$image->filename;
if (file_exists($path)) {
return Response::file($path);
}
})->name('product_image');
/*Route::get('storage/{what}/{path}/{id}/{file_name}', function($what = null, $path = null, $id = null, $file_name = null)
{