99 lines
3.5 KiB
PHP
99 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Crm\Http\Controllers;
|
|
|
|
use App\Utils\ModuleUtil;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Crm\Entities\CrmCompanyOffer;
|
|
use Modules\Crm\Entities\CrmOfferCatalog;
|
|
use Modules\Crm\Utils\TelemarketingUtil;
|
|
use Yajra\DataTables\Facades\DataTables;
|
|
|
|
class OfferCatalogController extends Controller
|
|
{
|
|
protected $moduleUtil;
|
|
|
|
public function __construct(ModuleUtil $moduleUtil)
|
|
{
|
|
$this->moduleUtil = $moduleUtil;
|
|
}
|
|
|
|
protected function authorizeAccess(): void
|
|
{
|
|
$business_id = request()->session()->get('user.business_id');
|
|
TelemarketingUtil::authorizeTelemarketing($this->moduleUtil, $business_id, 'crm.telemarketing.manage_offers');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$this->authorizeAccess();
|
|
$business_id = request()->session()->get('user.business_id');
|
|
|
|
if (request()->ajax()) {
|
|
$query = CrmOfferCatalog::where('business_id', $business_id);
|
|
|
|
return Datatables::of($query)
|
|
->addColumn('action', function ($row) {
|
|
return '<button data-id="'.$row->id.'" class="btn btn-xs btn-primary edit_offer"><i class="fa fa-edit"></i></button>';
|
|
})
|
|
->editColumn('offer_type', function ($row) {
|
|
return CrmOfferCatalog::offerTypes()[$row->offer_type] ?? $row->offer_type;
|
|
})
|
|
->rawColumns(['action'])
|
|
->make(true);
|
|
}
|
|
|
|
$offerTypes = CrmOfferCatalog::offerTypes();
|
|
|
|
return view('crm::telemarketing.offers.index')->with(compact('offerTypes'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$this->authorizeAccess();
|
|
$business_id = request()->session()->get('user.business_id');
|
|
|
|
CrmOfferCatalog::create(array_merge($request->only([
|
|
'name', 'offer_type', 'description', 'min_cooperation_score', 'estimated_value',
|
|
]), [
|
|
'business_id' => $business_id,
|
|
'target_industries' => $request->input('target_industries', []),
|
|
'required_signals' => $request->input('required_signals', []),
|
|
'is_active' => $request->boolean('is_active', true),
|
|
'created_by' => auth()->id(),
|
|
]));
|
|
|
|
return response()->json(['success' => true, 'msg' => __('lang_v1.added_success')]);
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$this->authorizeAccess();
|
|
$business_id = request()->session()->get('user.business_id');
|
|
|
|
$offer = CrmOfferCatalog::where('business_id', $business_id)->findOrFail($id);
|
|
$offer->update(array_merge($request->only([
|
|
'name', 'offer_type', 'description', 'min_cooperation_score', 'estimated_value',
|
|
]), [
|
|
'target_industries' => $request->input('target_industries', []),
|
|
'required_signals' => $request->input('required_signals', []),
|
|
'is_active' => $request->boolean('is_active', true),
|
|
]));
|
|
|
|
return response()->json(['success' => true, 'msg' => __('lang_v1.updated_success')]);
|
|
}
|
|
|
|
public function companyOffers($company_id)
|
|
{
|
|
$this->authorizeAccess();
|
|
$business_id = request()->session()->get('user.business_id');
|
|
|
|
$offers = CrmCompanyOffer::whereHas('company', function ($q) use ($business_id, $company_id) {
|
|
$q->where('business_id', $business_id)->where('id', $company_id);
|
|
})->with('catalog')->get();
|
|
|
|
return view('crm::telemarketing.offers.company_offers')->with(compact('offers', 'company_id'));
|
|
}
|
|
}
|