Обновлен способ вывода главного меню.
Обновлена обработка проверки на уникальность из битрикса
This commit is contained in:
parent
fc2e050ac6
commit
59bdd07bc0
@ -12,6 +12,7 @@
|
||||
use Modules\Main\Models\Company\CompanyAdmin;
|
||||
use Modules\Main\Models\Deal\Deal;
|
||||
use Modules\Main\Models\Deal\DealStatus;
|
||||
use Modules\CityManager\Models\CityManager;
|
||||
|
||||
use Livewire\Attributes\On;
|
||||
|
||||
@ -37,13 +38,21 @@ public function getDeals()
|
||||
$clients = false;
|
||||
$user = auth()->user();
|
||||
|
||||
if ($admin = CompanyAdmin::where('user_id', $user->id)->first())
|
||||
{
|
||||
$deals = Deal::whereIn('agent_id', function ($query) use ($admin)
|
||||
if($cityManager = CityManager::where('user_id', auth()->id())->first()) {
|
||||
$companies = $cityManager->city->companies->pluck('id');
|
||||
$deals = Deal::whereIn('agent_id', function ($query) use ($companies)
|
||||
{
|
||||
$query->select('id');
|
||||
$query->from('agents');
|
||||
$query->where('company_id', $admin->company_id);
|
||||
$query->whereIn('company_id', $companies);
|
||||
});
|
||||
}
|
||||
else if ($company = AdminCompanyOfUser()) {
|
||||
$deals = Deal::whereIn('agent_id', function ($query) use ($company)
|
||||
{
|
||||
$query->select('id');
|
||||
$query->from('agents');
|
||||
$query->where('company_id', $company->id);
|
||||
});
|
||||
}
|
||||
elseif ($agent = Agent::where('user_id', $user->id)->first())
|
||||
@ -53,26 +62,24 @@ public function getDeals()
|
||||
if (!$deals) {
|
||||
return Client::where('id',0);
|
||||
}
|
||||
$deals = $deals->pluck('id');
|
||||
return $deals;
|
||||
}
|
||||
|
||||
function getClients()
|
||||
{
|
||||
$deals = $this->getDeals();
|
||||
$clients = Client::join('deal_clients', 'users.id', '=', 'deal_clients.client_id')
|
||||
->whereIn('users.id', function ($query) use ($deals)
|
||||
{
|
||||
$query->select('client_id')
|
||||
->from('deal_clients')
|
||||
->whereIn('deal_id', $deals);
|
||||
->whereIn('deal_id', $deals->get()->pluck('id'));
|
||||
})
|
||||
->orderBy('deal_clients.id', 'desc')
|
||||
->with('deals');
|
||||
;
|
||||
$clients = $clients->select('users.*');
|
||||
$clients = $clients->orderBy('name');
|
||||
return $clients;
|
||||
}
|
||||
|
||||
function getClients()
|
||||
{
|
||||
$clients = $this->getDeals();
|
||||
|
||||
if ($this->status && $this->status == DealStatus::UNIQUE)
|
||||
{
|
||||
|
||||
@ -21,22 +21,20 @@ class BitrixApiController extends Controller
|
||||
public const ACTION_CONFIRM_COMPANY = 'confirm_company';
|
||||
public function index(Request $request)
|
||||
{
|
||||
if ($deal = Deal::where('confirm_token', $request->hash)->first())
|
||||
{
|
||||
switch ( $request->action )
|
||||
{
|
||||
case $this::ACTION_CONFIRM_DEAL:
|
||||
$deal = Deal::where('confirm_token', $request->token)->first();
|
||||
$this->confirmDeal($deal, $request);
|
||||
break;
|
||||
case $this::ACTION_UPDATE_CONTRACT:
|
||||
$deal = Deal::where('confirm_token', $request->token)->first();
|
||||
$this->updateContract($deal, $request);
|
||||
break;
|
||||
case $this::ACTION_CONFIRM_COMPANY:
|
||||
$this->confirmCompany($request);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -48,7 +46,7 @@ public function confirmCompany(Request $request)
|
||||
public function confirmDeal(Deal $deal, Request $request)
|
||||
{
|
||||
$agent = $deal->agent;
|
||||
if ((bool) $request->is_unique)
|
||||
if ((bool) $request->is_unique == true)
|
||||
{
|
||||
$deal->status = DealStatus::UNIQUE;
|
||||
$agent->user->notify(new UniqueContact($deal));
|
||||
|
||||
@ -13,6 +13,7 @@ class SendDeal extends BitrixSender
|
||||
public function __construct(Deal $deal)
|
||||
{
|
||||
$this->data = [
|
||||
'token' => $deal->confirm_token,
|
||||
'complexName' => $deal->complex->name
|
||||
];
|
||||
}
|
||||
|
||||
@ -20,5 +20,8 @@ protected function registerWebRoutes()
|
||||
//Set Default Controllers Namespace
|
||||
->namespace('Modules\\Bitrix\\Http\\Controllers')
|
||||
->group(app_path('Modules/Bitrix/Routes/web.php'));
|
||||
Route::middleware('api')
|
||||
->prefix('api')
|
||||
->group(base_path('Modules/Bitrix/Routes/api.php'));
|
||||
}
|
||||
}
|
||||
24
app/Modules/Bitrix/Routes/api.php
Normal file
24
app/Modules/Bitrix/Routes/api.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
use Modules\Bitrix\Http\Controllers\BitrixApiController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| API Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register API routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "api" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
|
||||
Route::middleware('auth:sanctum')->get('/user', function (Request $request)
|
||||
{
|
||||
return $request->user();
|
||||
});
|
||||
|
||||
Route::get('/action', [BitrixApiController::class, 'index']);
|
||||
@ -8,6 +8,7 @@
|
||||
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
|
||||
@ -18,23 +19,25 @@ public function mount()
|
||||
{
|
||||
|
||||
}
|
||||
/**
|
||||
* Get array of available agents ids
|
||||
* @return array
|
||||
*/
|
||||
function getSelectingAgents()
|
||||
{
|
||||
if (
|
||||
$userRole =
|
||||
UserRole::where('user_id', auth()->id())
|
||||
->where('role_id', Role::COMPANY_ADMIN)
|
||||
->count() == 1
|
||||
)
|
||||
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', $companyAdmin->company_id)->pluck('id');
|
||||
return $agentsIds = Agent::where('company_id',$company->id)->pluck('id');
|
||||
}
|
||||
else
|
||||
elseif ($agent = Agent::where('user_id', auth()->id())->first())
|
||||
{
|
||||
$agent = Agent::where('user_id', auth()->id())->first();
|
||||
return [$agent->id];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
private function getContracts()
|
||||
|
||||
@ -50,11 +50,14 @@ class="bi bi-arrow-right" viewBox="0 0 16 16">
|
||||
{{ __('contracts.status_' . $contract->status) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col col-md-6">
|
||||
<div class="fs-6 text-secondary">Дата обновления</div>
|
||||
<div class="fw-bold fs-5 text-truncate text-dark-emphasis">
|
||||
{{ $contract->updated_at->format('d.m.y H:i') }}</div>
|
||||
</div>
|
||||
@if($contract->updated_at)
|
||||
<div class="col col-md-6">
|
||||
<div class="fs-6 text-secondary">Дата обновления</div>
|
||||
<div class="fw-bold fs-5 text-truncate text-dark-emphasis">
|
||||
{{ $contract->updated_at?->format('d.m.y H:i') }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="row my-4">
|
||||
@if ($contract->square)
|
||||
@ -86,12 +89,13 @@ class="bi bi-arrow-right" viewBox="0 0 16 16">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if ($contract->status == 'SUCCESS')
|
||||
<div class="col col-md-6">
|
||||
<div class="fs-6 text-secondary">Вознаграждение</div>
|
||||
<div class="fw-bold fs-5 text-truncate text-dark-emphasis">
|
||||
{{ number_format(GetAgentPaymentForContract($contract), 2, ',', ' ') }}</div>
|
||||
</div>
|
||||
@if ($contract->status == 'SUCCESS')
|
||||
<div class="col col-md-6">
|
||||
<div class="fs-6 text-secondary">Вознаграждение</div>
|
||||
<div class="fw-bold fs-5 text-truncate text-dark-emphasis">
|
||||
{{ number_format(GetAgentPaymentForContract($contract), 2, ',', ' ') }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@ -171,8 +175,7 @@ class="bi bi-record-circle-fill align-middle" viewBox="0 0 16 16">
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="contractCommentModal" tabindex="-1" aria-labelledby="exampleModalLabel"
|
||||
aria-hidden="true">
|
||||
<form class="modal-dialog" method="post"
|
||||
action="{{ route('contract.comment', ['contract' => $contract]) }}">
|
||||
<form class="modal-dialog" method="post" action="{{ route('contract.comment', ['contract' => $contract]) }}">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Комментарий к договору</h1>
|
||||
@ -182,7 +185,8 @@ class="bi bi-record-circle-fill align-middle" viewBox="0 0 16 16">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label for="contractComment" class="form-label">Ваш комментарий</label>
|
||||
<textarea class="form-control" id="contractComment" name="comment" rows="3">{{ $contract->comment }}</textarea>
|
||||
<textarea class="form-control" id="contractComment" name="comment"
|
||||
rows="3">{{ $contract->comment }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
@ -223,10 +227,10 @@ class="bi bi-record-circle-fill align-middle" viewBox="0 0 16 16">
|
||||
|
||||
<script>
|
||||
var images = document.querySelectorAll(".zoomable-container");
|
||||
Array.prototype.forEach.call(images, function(img) {
|
||||
Array.prototype.forEach.call(images, function (img) {
|
||||
// Do stuff here
|
||||
|
||||
img.addEventListener('click', function() {
|
||||
img.addEventListener('click', function () {
|
||||
console.log(img.classList.contains('zoomed'));
|
||||
if (!img.classList.contains('zoomed')) {
|
||||
img.classList.add('zoomed');
|
||||
@ -237,4 +241,4 @@ class="bi bi-record-circle-fill align-middle" viewBox="0 0 16 16">
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
@endsection
|
||||
@ -52,7 +52,7 @@ function GetAvailableAgents()
|
||||
}
|
||||
$agents->with('company:id,name');
|
||||
$agents->with('user:id,name');
|
||||
return $agents->get()->toArray();
|
||||
return $agents->get();
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ function GetAvailableComplexes()
|
||||
}
|
||||
}
|
||||
if ($complexes) {
|
||||
return $complexes->get()->toArray();
|
||||
return $complexes->get();
|
||||
}
|
||||
return [];
|
||||
}
|
||||
@ -95,6 +95,6 @@ function GetAvailableCities()
|
||||
}
|
||||
$agents->with('company:id,name');
|
||||
$agents->with('user:id,name');
|
||||
return $agents->get()->toArray();
|
||||
return $agents->get();
|
||||
}
|
||||
}
|
||||
@ -18,6 +18,27 @@ public function create(User $user): bool
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function editAgentsTable(User $user): bool
|
||||
{
|
||||
dd(111);
|
||||
if (UserRole::where('user_id', $user->id)->where('role_id', Role::COMPANY_ADMIN)->count() == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function editClientsTable(User $user): bool
|
||||
{
|
||||
if (UserRole::where('user_id', $user->id)->where('role_id', Role::COMPANY_ADMIN)->count() == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (UserRole::where('user_id', $user->id)->where('role_id', Role::CITY_MANAGER)->count() == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function update(User $user, Company $company): bool
|
||||
{
|
||||
if (UserRole::where('user_id', $user->id)->where('role_id', Role::SUPER_ADMIN)->count() == 1)
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Modules\Main\Models\Company\Company;
|
||||
class City extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
@ -13,4 +14,9 @@ class City extends Model
|
||||
protected $fillable = [
|
||||
'name'
|
||||
];
|
||||
|
||||
public function companies()
|
||||
{
|
||||
return $this->hasMany(Company::class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,10 @@
|
||||
use Modules\Main\Models\Complex;
|
||||
use Modules\Main\Models\Agent\Agent;
|
||||
use Modules\Bitrix\Traits\Bitrixable;
|
||||
|
||||
use App\Notifications\Deal\DealCreated;
|
||||
use App\Notifications\Deal\DealUnique;
|
||||
use App\Notifications\Deal\DealNotUnique;
|
||||
class Deal extends Model
|
||||
{
|
||||
use HasFactory, Notifiable, Bitrixable;
|
||||
@ -56,10 +60,24 @@ public function contract()
|
||||
|
||||
protected static function booted(): void
|
||||
{
|
||||
static::creating(function (Deal $deal)
|
||||
{
|
||||
static::creating(function (Deal $deal) {
|
||||
$deal->confirm_token = hash('sha256', json_encode($deal->all()));
|
||||
});
|
||||
static::created(function (Deal $deal) {
|
||||
$deal->notify(new DealCreated());
|
||||
});
|
||||
static::updated(function (Deal $deal) {
|
||||
if ($deal->wasChanged('status')) {
|
||||
switch ($deal->status) {
|
||||
case DealStatus::UNIQUE:
|
||||
$deal->notify(new DealUnique());
|
||||
break;
|
||||
case DealStatus::NOT_UNIQUE:
|
||||
$deal->notify(new DealNotUnique());
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -72,6 +72,10 @@ public function hasRole($roleId)
|
||||
return false;
|
||||
}
|
||||
|
||||
public function isCompanyAdmin()
|
||||
{
|
||||
return $this->hasRole(Role::COMPANY_ADMIN);
|
||||
}
|
||||
public function isAdmin()
|
||||
{
|
||||
return $this->hasRole(Role::SUPER_ADMIN);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$items = [];
|
||||
if (in_array($roles::AGENT, $userRoles) || in_array($roles::COMPANY_ADMIN, $userRoles)) {
|
||||
if (auth()->user()->hasRole($roles::AGENT) || auth()->user()->hasRole($roles::COMPANY_ADMIN) || auth()->user()->hasRole($roles::CITY_MANAGER)) {
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'home',
|
||||
@ -8,8 +8,6 @@
|
||||
'icon' => 'columns-gap',
|
||||
'primary_on_mobile' => true,
|
||||
];
|
||||
}
|
||||
if (in_array($roles::AGENT, $userRoles) || in_array($roles::COMPANY_ADMIN, $userRoles)) {
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'clients.table',
|
||||
@ -17,7 +15,6 @@
|
||||
'icon' => 'person',
|
||||
'primary_on_mobile' => false,
|
||||
];
|
||||
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'contracts',
|
||||
@ -25,7 +22,6 @@
|
||||
'icon' => 'files-alt',
|
||||
'primary_on_mobile' => true,
|
||||
];
|
||||
|
||||
$items[] = [
|
||||
'target' => 'modal',
|
||||
'modal' => '#plan7Modal',
|
||||
@ -35,14 +31,7 @@
|
||||
];
|
||||
}
|
||||
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'posts',
|
||||
'name' => 'Новости',
|
||||
'icon' => 'layers',
|
||||
];
|
||||
|
||||
if (in_array($roles::COMPANY_ADMIN, $userRoles)) {
|
||||
if (auth()->user()->hasRole($roles::COMPANY_ADMIN) || auth()->user()->hasRole($roles::CITY_MANAGER)) {
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'company.agents.table',
|
||||
@ -51,6 +40,13 @@
|
||||
];
|
||||
}
|
||||
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'posts',
|
||||
'name' => 'Новости',
|
||||
'icon' => 'layers',
|
||||
];
|
||||
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'docs.index',
|
||||
@ -67,8 +63,7 @@
|
||||
'icon' => 'gear',
|
||||
];
|
||||
}
|
||||
|
||||
if (in_array($roles::SUPER_ADMIN, $userRoles)) {
|
||||
if (auth()->user()->hasRole($roles::SUPER_ADMIN) || auth()->user()->hasRole($roles::CITY_MANAGER)) {
|
||||
$items[] = [
|
||||
'target' => 'route',
|
||||
'route' => 'admin.index',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user