85 lines
3.1 KiB
PHP
85 lines
3.1 KiB
PHP
<?php
|
||
/**
|
||
* Этот контроллер обеспечивает прием данных со стороны битрикса.
|
||
* На входе - обязательный параметр "action"
|
||
* и токен объекта, по которому определяется, с каким объектом продолжать работу.
|
||
* Метод index проверяет action и если нашел его среди констант класса,
|
||
* направляет в соответствующий обработчик.
|
||
* Если action не найден, то возвращает false.
|
||
* Если по токену не найден объект, то возвращает false.
|
||
*/
|
||
namespace Modules\Bitrix\Http\Controllers;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
|
||
use Modules\Main\Models\Deal\Deal;
|
||
use Modules\Main\Models\Deal\DealStatus;
|
||
use App\Notifications\UniqueContact;
|
||
use App\Notifications\NotUniqueContact;
|
||
use App\Notifications\Deal\DealUnique;
|
||
use App\Notifications\Deal\DealNotUnique;
|
||
|
||
use Modules\Bitrix\Models\BitrixId;
|
||
|
||
use Illuminate\Support\Facades\Log;
|
||
|
||
class BitrixApiController extends Controller
|
||
{
|
||
public const ACTION_CONFIRM_DEAL = 'confirm_deal';
|
||
public const ACTION_UPDATE_CONTRACT = 'update_contract';
|
||
public const ACTION_CONFIRM_COMPANY = 'confirm_company';
|
||
public function index(Request $request): bool
|
||
{
|
||
if (!$bxId = BitrixId::where('token', $request->token)->first()) {
|
||
return false;
|
||
};
|
||
$object = $bxId->bitrixable;
|
||
switch ($request->action) {
|
||
case $this::ACTION_CONFIRM_DEAL:
|
||
return $this->confirmDeal($object, $request);
|
||
break;
|
||
case $this::ACTION_UPDATE_CONTRACT:
|
||
return $this->updateContract($object, $request);
|
||
break;
|
||
case $this::ACTION_CONFIRM_COMPANY:
|
||
return $this->confirmCompany($request, $object);
|
||
break;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public function confirmCompany(Request $request, $company)
|
||
{
|
||
$confirmer = new ConfirmCompanyController;
|
||
return $confirmer($request, $company);
|
||
}
|
||
public function confirmDeal(Deal $deal, Request $request)
|
||
{
|
||
$agent = $deal->agent;
|
||
$request->is_unique = json_decode($request->is_unique, true);//т.к. приходит в строке
|
||
if ($request->is_unique == true) {
|
||
$deal->status = DealStatus::UNIQUE;
|
||
if ($request->has('unique_until')) {
|
||
$deal->unique_until = $request->unique_until;
|
||
}
|
||
$agent->user->notify(new UniqueContact($deal));
|
||
} else {
|
||
$deal->status = DealStatus::NOT_UNIQUE;
|
||
$agent->user->notify(new NotUniqueContact($deal));
|
||
}
|
||
if (!$agent->bitrixId()) {
|
||
$agent->setBitrixId($request->agent_id);
|
||
}
|
||
$deal->save();
|
||
return true;
|
||
}
|
||
|
||
public function updateContract(Deal $deal, Request $request)
|
||
{
|
||
//print_r($request->all());die();
|
||
$contract = new ContractUpdateController;
|
||
return $contract($deal, $request);
|
||
}
|
||
}
|