Booking migration added
This commit is contained in:
parent
ead65981dc
commit
415eac6766
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webkul\BookingProduct\Contracts;
|
||||||
|
|
||||||
|
interface Booking
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateBookingsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('bookings', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->json('slot_information')->nullable();
|
||||||
|
|
||||||
|
$table->integer('order_item_id')->unsigned()->nullable();
|
||||||
|
|
||||||
|
$table->integer('order_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('bookings');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -138,11 +138,11 @@ class DefaultSlot extends Booking
|
||||||
|
|
||||||
if ($qty && $currentTime <= $from) {
|
if ($qty && $currentTime <= $from) {
|
||||||
$slots[] = [
|
$slots[] = [
|
||||||
'from' => $from->format('h:i A'),
|
'from' => $from->format('h:i A'),
|
||||||
'to' => $to->format('h:i A'),
|
'to' => $to->format('h:i A'),
|
||||||
'timestamp' => $from->getTimestamp() . '-' . $to->getTimestamp(),
|
'timestamp' => $from->getTimestamp() . '-' . $to->getTimestamp(),
|
||||||
'qty' => $qty,
|
'qty' => $qty,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webkul\BookingProduct\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Webkul\BookingProduct\Contracts\Booking as BookingContract;
|
||||||
|
use Webkul\Sales\Models\OrderProxy;
|
||||||
|
use Webkul\Sales\Models\OrderItemProxy;
|
||||||
|
|
||||||
|
class Booking extends Model implements BookingContract
|
||||||
|
{
|
||||||
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = ['slot_information', 'order_item_id', 'order_id'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the order record associated with the order item.
|
||||||
|
*/
|
||||||
|
public function order()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(OrderProxy::modelClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the child item record associated with the order item.
|
||||||
|
*/
|
||||||
|
public function order_item()
|
||||||
|
{
|
||||||
|
return $this->hasOne(OrderItemProxy::modelClass());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webkul\BookingProduct\Models;
|
||||||
|
|
||||||
|
use Konekt\Concord\Proxies\ModelProxy;
|
||||||
|
|
||||||
|
class BookingProxy extends ModelProxy
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -13,5 +13,6 @@ class ModuleServiceProvider extends BaseModuleServiceProvider
|
||||||
\Webkul\BookingProduct\Models\BookingProductEventSlot::class,
|
\Webkul\BookingProduct\Models\BookingProductEventSlot::class,
|
||||||
\Webkul\BookingProduct\Models\BookingProductRentalSlot::class,
|
\Webkul\BookingProduct\Models\BookingProductRentalSlot::class,
|
||||||
\Webkul\BookingProduct\Models\BookingProductTableSlot::class,
|
\Webkul\BookingProduct\Models\BookingProductTableSlot::class,
|
||||||
|
\Webkul\BookingProduct\Models\Booking::class
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Webkul\BookingProduct\Repositories;
|
||||||
|
|
||||||
|
use Webkul\Core\Eloquent\Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BookingProduct Repository
|
||||||
|
*
|
||||||
|
* @author Jitendra Singh <jitendra@webkul.com>
|
||||||
|
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
|
||||||
|
*/
|
||||||
|
class BookingRepository extends Repository
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Specify Model class name
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
function model()
|
||||||
|
{
|
||||||
|
return 'Webkul\BookingProduct\Contracts\Booking';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,7 @@ use Webkul\Product\Repositories\ProductImageRepository;
|
||||||
use Webkul\Product\Helpers\ProductImage;
|
use Webkul\Product\Helpers\ProductImage;
|
||||||
use Webkul\BookingProduct\Repositories\BookingProductRepository;
|
use Webkul\BookingProduct\Repositories\BookingProductRepository;
|
||||||
use Webkul\BookingProduct\Helpers\Booking as BookingHelper;
|
use Webkul\BookingProduct\Helpers\Booking as BookingHelper;
|
||||||
use Webkul\Product\Type\AbstractType;
|
use Webkul\Product\Type\Virtual;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Booking.
|
* Class Booking.
|
||||||
|
|
@ -18,7 +18,7 @@ use Webkul\Product\Type\AbstractType;
|
||||||
* @author Jitendra Singh <jitendra@webkul.com>
|
* @author Jitendra Singh <jitendra@webkul.com>
|
||||||
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
|
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
|
||||||
*/
|
*/
|
||||||
class Booking extends AbstractType
|
class Booking extends Virtual
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* BookingProductRepository instance
|
* BookingProductRepository instance
|
||||||
|
|
@ -34,26 +34,14 @@ class Booking extends AbstractType
|
||||||
*/
|
*/
|
||||||
protected $bookingHelper;
|
protected $bookingHelper;
|
||||||
|
|
||||||
/**
|
|
||||||
* Skip attribute for virtual product type
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $skipAttributes = ['width', 'height', 'depth', 'weight'];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show quantity box
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $showQuantityBox = true;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $additionalViews = [
|
protected $additionalViews = [
|
||||||
|
'admin::catalog.products.accordians.inventories',
|
||||||
'admin::catalog.products.accordians.images',
|
'admin::catalog.products.accordians.images',
|
||||||
'admin::catalog.products.accordians.categories',
|
'admin::catalog.products.accordians.categories',
|
||||||
|
'admin::catalog.products.accordians.channels',
|
||||||
'bookingproduct::admin.catalog.products.accordians.booking',
|
'bookingproduct::admin.catalog.products.accordians.booking',
|
||||||
'admin::catalog.products.accordians.product-links'
|
'admin::catalog.products.accordians.product-links'
|
||||||
];
|
];
|
||||||
|
|
@ -97,37 +85,42 @@ class Booking extends AbstractType
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if this product type is saleable
|
* Returns additional views
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function isSaleable()
|
public function getBookingProduct($productId)
|
||||||
{
|
{
|
||||||
if (! $this->product->status)
|
static $bookingProduct;
|
||||||
return false;
|
|
||||||
|
|
||||||
|
if ($bookingProduct)
|
||||||
|
return $bookingProduct;
|
||||||
|
|
||||||
|
return $bookingProduct = $this->bookingProductRepository->findOneByField('product_id', $productId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param integer $qty
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function haveSufficientQuantity($qty)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if this product can have inventory
|
* Returns additional views
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function isStockable()
|
public function getAdditionalViews()
|
||||||
{
|
{
|
||||||
return false;
|
$bookingProduct = $this->getBookingProduct($this->product->id);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
if ($bookingProduct->type != 'default')
|
||||||
* Return true if item can be moved to cart from wishlist
|
unset($this->additionalViews[0]);
|
||||||
*
|
|
||||||
* @param CartItem $item
|
return $this->additionalViews;
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function canBeMovedFromWishlistToCart($item)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -143,7 +136,7 @@ class Booking extends AbstractType
|
||||||
|
|
||||||
$products = parent::prepareForCart($data);
|
$products = parent::prepareForCart($data);
|
||||||
|
|
||||||
$bookingProduct = $this->bookingProductRepository->findOneByField('product_id', $data['product_id']);
|
$bookingProduct = $this->getBookingProduct($data['product_id']);
|
||||||
|
|
||||||
if ($bookingProduct)
|
if ($bookingProduct)
|
||||||
$products = app($this->bookingHelper->getTypeHepler($bookingProduct->type))->addAdditionalPrices($products);
|
$products = app($this->bookingHelper->getTypeHepler($bookingProduct->type))->addAdditionalPrices($products);
|
||||||
|
|
@ -184,7 +177,7 @@ class Booking extends AbstractType
|
||||||
*/
|
*/
|
||||||
public function validateCartItem($item)
|
public function validateCartItem($item)
|
||||||
{
|
{
|
||||||
$bookingProduct = $this->bookingProductRepository->findOneByField('product_id', $item->product_id);
|
$bookingProduct = $this->getBookingProduct($item->product_id);
|
||||||
|
|
||||||
if (! $bookingProduct)
|
if (! $bookingProduct)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,6 @@ class Virtual extends AbstractType
|
||||||
*/
|
*/
|
||||||
public function haveSufficientQuantity($qty)
|
public function haveSufficientQuantity($qty)
|
||||||
{
|
{
|
||||||
return $qty <= $this->totalQuantity() ? true : false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue