84 lines
3.4 KiB
PHP
84 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\IndustrialEngineering\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\IndustrialEngineering\Http\Controllers\Concerns\AuthorizesIndustrialEngineering;
|
|
use Modules\IndustrialEngineering\Models\CpqConfiguration;
|
|
use Modules\IndustrialEngineering\Models\CpqOptionGroup;
|
|
use Modules\IndustrialEngineering\Models\ProductPlatform;
|
|
use Modules\IndustrialEngineering\Services\CpqService;
|
|
|
|
class CpqController extends Controller
|
|
{
|
|
use AuthorizesIndustrialEngineering;
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$this->authorizeIe('ie.cpq.view');
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$configurations = CpqConfiguration::forBusiness($business_id)->with(['contact', 'productPlatform'])->latest('id')->paginate(20);
|
|
|
|
return view('industrialengineering::cpq.index', compact('configurations'));
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
$this->authorizeIe('ie.cpq.create');
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$platforms = ProductPlatform::forBusiness($business_id)->pluck('name', 'id');
|
|
|
|
return view('industrialengineering::cpq.create', compact('platforms'));
|
|
}
|
|
|
|
public function configure($platformId, Request $request, CpqService $cpq)
|
|
{
|
|
$this->authorizeIe('ie.cpq.create');
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$configurator = $cpq->getConfigurator($business_id, (int) $platformId);
|
|
$platform = ProductPlatform::forBusiness($business_id)->findOrFail($platformId);
|
|
|
|
return view('industrialengineering::cpq.configure', compact('configurator', 'platform'));
|
|
}
|
|
|
|
public function store(Request $request, CpqService $cpq)
|
|
{
|
|
$this->authorizeIe('ie.cpq.create');
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'product_platform_id' => 'nullable|integer',
|
|
'contact_id' => 'nullable|integer',
|
|
'base_bom_id' => 'nullable|integer',
|
|
'selected_options' => 'nullable|array',
|
|
]);
|
|
|
|
$selected = $cpq->applyRules($validated['selected_options'] ?? [], $business_id);
|
|
$validated['selected_options'] = $selected;
|
|
$config = $cpq->buildConfiguration($business_id, $validated);
|
|
|
|
return redirect()->action([self::class, 'show'], $config->id)
|
|
->with('status', ['success' => 1, 'msg' => __('industrialengineering::lang.cpq_created')]);
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$this->authorizeIe('ie.cpq.view');
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$configuration = CpqConfiguration::forBusiness($business_id)->with(['contact', 'productPlatform'])->findOrFail($id);
|
|
|
|
return view('industrialengineering::cpq.show', compact('configuration'));
|
|
}
|
|
|
|
public function quote($id, CpqService $cpq)
|
|
{
|
|
$this->authorizeIe('ie.cpq.create');
|
|
$business_id = request()->session()->get('user.business_id');
|
|
$configuration = CpqConfiguration::forBusiness($business_id)->findOrFail($id);
|
|
$configuration->update(['status' => 'quoted']);
|
|
|
|
return redirect()->back()->with('status', ['success' => 1, 'msg' => __('industrialengineering::lang.cpq_quoted')]);
|
|
}
|
|
}
|