File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Discounts/DiscountController.php
<?php
namespace App\Discounts;
use DB;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Arr;
use Illuminate\View\View;
use Komma\KMS\Core\Attributes\Models\Traits\HasThumbnailInterface;
use Komma\KMS\Core\Entities\DisplayNameInterface;
use Komma\KMS\Core\SectionController;
class DiscountController extends SectionController
{
protected string $slug = "discounts";
protected string $classModelName = Discount::class;
protected ?string $forTranslationModelName = DiscountTranslation::class;
private DiscountService $discountService;
private DiscountConditionService $discountConditionService;
private DiscountActionService $actionService;
/**
* Constructor
* @param DiscountSection $transferSection
*/
public function __construct()
{
if(app()->runningInConsole()) return;
$section = new DiscountSection($this->slug);
$this->discountConditionService = new DiscountConditionService();
$this->actionService = new DiscountActionService();
$this->discountService = new DiscountService();
parent::__construct($section);
}
protected function render(Model $model = null)
{
return $this->makeView();
}
protected function makeView(): View
{
$thumbnail = '';
if(is_a($this->forModelInstance, HasThumbnailInterface::class)) {
$thumbnail = $this->forModelInstance->getThumbnail();
};
if(is_a($this->forModelInstance, DisplayNameInterface::class)) {
$displayName = $this->forModelInstance->getDisplayName();
} else {
$displayName = $this->section->getSectionNewModel();
}
$siteSlug = !$this->siteService->getCurrentSite()->exists ? null : $this->siteService->getCurrentSite()->slug;
return view('KMS::discounts/index', [
'currentModel' => $this->forModelInstance,
'thumbnail' => $thumbnail,
'displayName' => $displayName,
'modelClassName' => $this->classModelName,
'slug' => $this->slug,
'siteSlug' => $siteSlug,
]);
}
public function conditionDataByType(Request $request) {
if(!$request->ajax()) abort(Response::HTTP_BAD_REQUEST, 'Only ajax calls are allowed');
return $this->discountConditionService->dataByType();
}
public function actionDataByType(Request $request) {
if(!$request->ajax()) abort(Response::HTTP_BAD_REQUEST, 'Only ajax calls are allowed');
return $this->actionService->dataByType();
}
public function discountableProps(Request $request, $discountable) {
$discountPropertyService = new DiscountPropertyService();
$discountable = intval($discountable, 10);
switch ($discountable) {
case DiscountableTypes::ShoppingCartItem:
return $discountPropertyService->discountablePropertiesForShoppingCartItem();
case DiscountableTypes::ShoppingCart:
return $discountPropertyService->discountablePropertiesForShoppingCart();
}
return null;
}
public function index()
{
if(!request()->ajax()) return parent::index();
return $this->discountService->baseQuery()->get();
}
public function updateSortOrder(Request $request)
{
$sortOrderData = $request->get('sortOrderData');
return $this->discountService->updateSortOrder($sortOrderData);
}
public function saveFromJsonArray(Request $request)
{
$data = Arr::wrap($request->all());
$result = collect();
DB::transaction(function() use ($data, &$result) {
foreach ($data as $index => $discountData) {
$result->push($this->discountService->saveFromJsonArray($discountData));
}
});
return $result;
}
public function weatherInfo() {
return $this->discountService->weatherInfo();
}
}