lk.zachem.info/app/Modules/Contracts/Http/Livewire/ContractsTableLivewire.php
developer 59bdd07bc0 Обновлен способ вывода главного меню.
Обновлена обработка проверки на уникальность из битрикса
2025-12-09 09:11:33 +08:00

104 lines
2.8 KiB
PHP

<?php
namespace Modules\Contracts\Http\Livewire;
use Livewire\Component;
use Modules\Main\Models\Agent\Agent;
use Modules\Contracts\Models\Contract;
use Modules\Contracts\Models\ContractStatus;
use Modules\User\Models\UserRole;
use Modules\User\Models\Role;
use Modules\CityManager\Models\CityManager;
use Modules\Main\Models\Company\CompanyAdmin;
class ContractsTableLivewire extends Component
{
public $mode = false;
public $filter = [];
public function mount()
{
}
/**
* Get array of available agents ids
* @return array
*/
function getSelectingAgents()
{
if($cityManager = CityManager::where('user_id', auth()->id())->first()) {
return $agentsIds = Agent::whereIn('company_id',$cityManager->city->companies->pluck('id'))->pluck('id');
}
elseif ($company = AdminCompanyOfUser())
{
$companyAdmin = CompanyAdmin::where('user_id', auth()->id())->first();
return $agentsIds = Agent::where('company_id',$company->id)->pluck('id');
}
elseif ($agent = Agent::where('user_id', auth()->id())->first())
{
return [$agent->id];
}
return [];
}
private function getContracts()
{
$contracts = Contract::whereHas('deal', function ($dealSubQuery)
{
$dealSubQuery->with('deals')
->whereIn('agent_id', $this->getSelectingAgents());
});
$this->appendMode($contracts);
$this->appendFilter($contracts);
return $contracts->get();
}
public function render()
{
return view('contracts::livewire.table.index', [
'contracts' => $this->getContracts(),
'statuses' => ContractStatus::class
]);
}
/* ДАЛЕЕ - методы для применения всяких фильтров */
private function appendMode(&$query)
{
if ($this->mode == 'active')
{
$query->whereIn('status', [
ContractStatus::NEW ,
ContractStatus::RESERVATION,
ContractStatus::SUCCESS,
]);
}
if ($this->mode == 'successed')
{
$query->whereIn('status', [
ContractStatus::SUCCESS,
ContractStatus::TREATY
]);
}
if ($this->mode == 'declined')
{
$query->whereIn('status', [
ContractStatus::DECLINE
]);
}
}
private function appendFilter(&$query)
{
foreach ($this->filter as $fKey => $fValue)
{
if (is_array($fValue))
{
$query->whereIn($fKey, $fValue);
}
else
{
$query->where($fKey, $fValue);
}
}
}
}