contracts created

This commit is contained in:
Thekindbull 2025-03-20 10:32:29 +08:00
parent 1a3136e9f0
commit 9fa55fed78
29 changed files with 716 additions and 227 deletions

View File

@ -0,0 +1,68 @@
<?php
namespace App\Http\Controllers\Bitrix;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Deal\Deal;
use App\Models\Deal\DealStatus;
use Illuminate\Support\Facades\Log;
class ClientsApiController extends Controller
{
public const ACTION_CONFIRM = 'confirm';
public const ACTION_UPDATE_CONTRACT = 'contract';
public function index(Request $request)
{
if ($deal = Deal::where('confirm_token', $request->hash)->first())
{
switch ( $request->action )
{
case $this::ACTION_CONFIRM:
$this->confirm($deal, $request);
break;
case $this::ACTION_UPDATE_CONTRACT:
$this->updateContract($deal, $request);
break;
}
return true;
}
return false;
}
public function confirm(Deal $deal, Request $request)
{
if ((bool) $request->is_unique)
{
$deal->status = DealStatus::UNIQUE;
}
else
{
$deal->status = DealStatus::NOT_UNIQUE;
}
Log::build([
'driver' => 'single',
'path' => storage_path('logs/bitrix.log'),
])->error(
json_encode(
[
'is_unique' => $request->is_unique,
'deal' => $deal->id,
'status' => $deal->status
]
)
);
$deal->save();
return $deal->id;
}
public function update_contract(Deal $deal, Request $request)
{
$contract = new ContractApiController;
$contract($deal, $request);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Bitrix;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Deal\Deal;
use App\Models\Deal\Contract;
use App\Models\Deal\ContractStatus;
use App\Models\Agent\Agent;
class ContractApiController
{
public function __invoke(Deal $deal, Request $request)
{
Contract::updateOrCreate(
['deal_id' => $deal->id],
[
'status' => ContractStatus::NEW ,
'comment' => $request->comment,
'price' => $request->price,
'reward' => $request->reward,
'square' => $request->square,
'floor' => $request->floor
]
);
return true;
}
}

View File

@ -34,6 +34,7 @@ public function __invoke(Request $request)
]);
$user->setForcedPassword();
}
CompanyAdmin::where('user_id', $user->id)->delete();//удаляю, если уже была админская учетка
CompanyAdmin::create([
'user_id' => $user->id,
'company_id' => $company->id

View File

@ -1,5 +1,5 @@
<?php
//DEPRICATED
namespace App\Http\Controllers;
use Illuminate\Http\Request;

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Deal;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Deal\Deal;
use App\Models\Deal\Contract;
use App\Models\Deal\ContractStatus;
use App\Models\Agent\Agent;
class ContractController extends Controller
{
public function index(Contract $contract)
{
return view(
'clients.contract.index',
[
'contract' => $contract
]
);
}
public function getAllDealsInCompany(Request $request)
{
$user = auth()->user();
}
}

View File

@ -177,7 +177,7 @@ public function sendToBitrix(Deal $deal)
'BROKER_PHONE' => $agent->user->phone,
'BROKER_INN' => $agent->company->inn,
'OBJECT_NAME' => Complex::find($this->client['complexId'])->name,
'CALLBACK_URL' => route('deal.confirm', ['hash' => $this->client['confirmToken']]),
'CALLBACK_URL' => route('api.client', ['hash' => $this->client['confirmToken']]),
];
$sender = new SendClient($deal->id, $data);
$response = $sender->send();

27
app/Livewire/MainMenu.php Normal file
View File

@ -0,0 +1,27 @@
<?php
namespace App\Livewire;
use Livewire\Component;
use App\Models\User\UserRole;
use App\Models\User\Role;
class MainMenu extends Component
{
public $userId;
public function mount()
{
$this->userId = auth()->user()->id;
}
public function render()
{
return view('livewire.main-menu', [
'userRoles' => UserRole::where('user_id', $this->userId)->pluck('role_id')->toArray(),
'roles' => Role::class
]);
}
}

View File

@ -9,6 +9,8 @@
use App\Models\Company\Company;
use App\Models\User;
use App\Models\User\UserRole;
use App\Models\User\Role;
use App\Models\Deal\Deal;
class Agent extends Model
@ -34,4 +36,32 @@ public function deals()
{
return $this->hasMany(Deal::class);
}
protected static function booted(): void
{
static::created(function (Agent $agent)
{
UserRole::create([
'user_id' => $agent->user_id,
'role_id' => Role::AGENT
]);
});
static::updated(function (Agent $agent)
{
if ($agent->trashed())
{
UserRole::where([
'user_id' => $agent->user_id,
'role_id' => Role::AGENT
])->delete();
}
else
{
UserRole::create([
'user_id' => $agent->user_id,
'role_id' => Role::AGENT
]);
}
});
}
}

View File

@ -26,7 +26,7 @@ class SendClient
public function __construct($id, $data)
{
$this->ID = $id;
$this->ID = env('BITRIX_CODE_PREFIX', '') . $id;
$data = array_change_key_case($data, CASE_UPPER);
$finalData = [];
$refl = new \ReflectionClass(__CLASS__);

View File

@ -5,6 +5,9 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User\UserRole;
use App\Models\User\Role;
class CompanyAdmin extends Model
{
use HasFactory;
@ -13,4 +16,22 @@ class CompanyAdmin extends Model
'company_id'
];
protected static function booted(): void
{
static::created(function (CompanyAdmin $admin)
{
UserRole::create([
'user_id' => $admin->user_id,
'role_id' => Role::COMPANY_ADMIN
]);
});
static::deleted(function (CompanyAdmin $admin)
{
UserRole::where([
'user_id' => $admin->user_id,
'role_id' => Role::COMPANY_ADMIN
])->delete();
});
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace App\Models\Deal;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Contract extends Model
{
use HasFactory;
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
protected $table = 'client_contract';
protected $fillable = [
'deal_id',
'status',
'comment',
'price',
'reward',
'square',
'floor'
];
public function deal()
{
return $this->belongsTo(Deal::class, 'deal_id');
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models\Deal;
enum ContractStatus
{
case NEW;
case TREATY;
case RESERVATION;
case SUCCESS;
case DECLINE;
}

View File

@ -5,6 +5,9 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User\UserRole;
use App\Models\User\Role;
class Deal extends Model
{
use HasFactory;
@ -28,4 +31,28 @@ public function agent()
{
return $this->belongsTo(\App\Models\Agent\Agent::class, 'agent_id');
}
public function contract()
{
return $this->hasOne(Contract::class, 'deal_id');
}
protected static function booted(): void
{
static::created(function (Deal $deal)
{
UserRole::create([
'user_id' => $deal->client_id,
'role_id' => Role::CLIENT
]);
});
static::deleted(function (Deal $deal)
{
UserRole::where([
'user_id' => $deal->client_id,
'role_id' => Role::CLIENT
])->delete();
});
}
}

17
app/Models/User/Role.php Normal file
View File

@ -0,0 +1,17 @@
<?php
namespace App\Models\User;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
use HasFactory;
public const SUPER_ADMIN = '1';
public const COMPANY_ADMIN = '2';
public const AGENT = '3';
public const CLIENT = '4';
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Models\User;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User;
use App\Models\User\Role;
class UserRole extends Model
{
use HasFactory;
protected $fillable = [
'user_id',
'role_id',
];
}

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('roles', function (Blueprint $table)
{
$table->id();
$table->string('name');
$table->timestamps();
});
DB::table('roles')->insert([
['id' => 1, 'name' => 'Super admin'],
['id' => 2, 'name' => 'Company admin'],
['id' => 3, 'name' => 'Agent'],
['id' => 4, 'name' => 'Client'],
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('roles');
}
};

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('user_roles', function (Blueprint $table)
{
$table->id();
$table->foreignId('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreignId(column: 'role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('user_roles');
}
};

View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('client_contract', function (Blueprint $table)
{
$table->id();
$table->foreignId('deal_id')->references('id')->on('deals')->onDelete('cascade');
$table->enum('status', ['NEW', 'DECLINE', 'TREATY', 'SUCCESS', 'RESERVATION'])->default('NEW');
$table->string('comment')->nullable();
$table->float('price')->nullable();
$table->float('reward')->nullable();
$table->float('square')->nullable();
$table->integer('floor')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('client_contract');
}
};

View File

@ -29,5 +29,6 @@
"Phone": "Номер телефона",
"Email": "Электронная почта",
"SelfEmployer name": "ФИО полностью",
"SoleProperty name": "ФИО полностью"
"SoleProperty name": "ФИО полностью",
"contract status new": "Новый"
}

View File

@ -0,0 +1,110 @@
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-12 col-lg-8">
<!--Имя и контакты-->
<div class="row py-5">
<div class="col-12 col-lg-4">
<div class="fs-6 text-secondary">ФИО</div>
<div class="fw-bold fs-5 text-truncate">{{ $contract->deal->user->name }}</div>
</div>
<div class="col-12 col-lg-3">
<div class="fs-6 text-secondary">Email</div>
<div class="fw-bold fs-5 text-truncate">{{ $contract->deal->user->email }}</div>
</div>
<div class="col-12 col-lg-3">
<div class="fs-6 text-secondary">Телефон</div>
<div class="fw-bold fs-5 text-truncate">{{ $contract->deal->user->phone }}</div>
</div>
<div class="d-none d-lg-block col-2 text-end">
<a href="" class="btn border-1 border-secondary-subtle text-secondary rounded-4 p-3">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
class="bi bi-arrow-right" viewBox="0 0 16 16">
<path fill-rule="evenodd"
d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8" />
</svg>
</a>
</div>
</div>
<!--Город-->
<div class="row bg-white py-3">
<div class="col-9">
<div class="fs-5 fw-bold my-2">{{ $contract->deal->complex->city->name }}</div>
<div class="fs-5 fw-bold text-secondary my-2">Не выбрано</div>
</div>
<div class="col-3 text-end">
<a href="" class="btn border-1 border-secondary-subtle text-secondary rounded-4 p-3">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
class="bi bi-trash3" viewBox="0 0 16 16">
<path
d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5M11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47M8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5" />
</svg>
</a>
<a href="" class="btn border-1 border-secondary-subtle text-secondary rounded-4 p-3">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
class="bi bi-pen" viewBox="0 0 16 16">
<path
d="m13.498.795.149-.149a1.207 1.207 0 1 1 1.707 1.708l-.149.148a1.5 1.5 0 0 1-.059 2.059L4.854 14.854a.5.5 0 0 1-.233.131l-4 1a.5.5 0 0 1-.606-.606l1-4a.5.5 0 0 1 .131-.232l9.642-9.642a.5.5 0 0 0-.642.056L6.854 4.854a.5.5 0 1 1-.708-.708L9.44.854A1.5 1.5 0 0 1 11.5.796a1.5 1.5 0 0 1 1.998-.001m-.644.766a.5.5 0 0 0-.707 0L1.95 11.756l-.764 3.057 3.057-.764L14.44 3.854a.5.5 0 0 0 0-.708z" />
</svg>
</a>
</div>
</div>
<!--Основная часть-->
<div class="row">
<div class="col col-lg-8">
<div class="row my-4">
<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 status ' . strtolower($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->created_at->format('d.m.y H:i') }}</div>
</div>
</div>
<div class="row my-4">
<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->square }}</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->floor }}</div>
</div>
</div>
<div class="row my-4">
<div class="col">
<div class="fs-6 text-secondary">Комментарий к договору</div>
<div class="fw-bold fs-5 text-truncate text-dark-emphasis">{{ $contract->comment }}</div>
</div>
</div>
</div>
<div class="col col-lg-4 p-3">
<div class="rounded-4 h-100 w-100" style="background-color:#ebeef5"></div>
</div>
</div>
</div>
<div class="col-12 col-lg-4 py-3 text-dark" style="background-color:#eef5fb">
<div class="fw-bold fs-5 mb-3">История договора</div>
@for ($i = 0; $i <= 4; $i++)
<div class="d-flex flex-row mb-3">
<div class="pe-2">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="currentColor"
class="bi bi-record-circle-fill align-middle" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6" />
</svg>
</div>
<div class="">
<div class="text-secondary">05.03.25</div>
<div class="fw-bold text-dark-emphasis">Запланирована встреча с клиентом</div>
</div>
</div>
@endfor
</div>
</div>
@endsection

View File

@ -1,3 +1,5 @@
<livewire:mainMenu />
<!--
<ul class="nav flex flex-md-column ">
<li class="nav-item text-center m-2">
<a href="{{ route('home') }}" class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active"
@ -40,3 +42,4 @@ class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" ar
</li>
</ul>
-->

View File

@ -7,9 +7,9 @@
<tbody class="">
@foreach ($deals as $deal)
<tr>
<td>
<!--<td>
<img src="../../images/icons/user.png" class="img-fluid align-middle" style="height: 50px;">
</td>
</td>-->
<td class="fw-semibold fs-5 align-middle">
{{ $deal->user->name }}
@if ($deal->status == $statuses::MODERATION)
@ -30,7 +30,7 @@
<td class="align-middle">
{{ $deal->complex->city->name }}
</td>
<td class="align-middle">
<td class="align-middle text-end d-none">
<a href="#" class="btn">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
fill="currentColor" class="bi bi-three-dots-vertical" viewBox="0 0 16 16">
@ -39,6 +39,21 @@
</svg>
</a>
</td>
@if ($deal->contract)
<td class="align-middle text-center bg-white">
<a href="{{ route('contract', ['contract' => $deal->contract]) }}" class="btn">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
fill="currentColor" class="bi bi-arrow-right" viewBox="0 0 16 16">
<path fill-rule="evenodd"
d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8" />
</svg>
</a>
</td>
@else
<td></td>
@endif
@endif
</tr>
@endforeach

View File

@ -10,12 +10,12 @@
<small>Добавить клиента</small>
</div>
<div class="row">
<div class="col">
<div class="col-12 col-xl-6">
<div class="form-floating mb-3">
<input wire:model.live="client.firstName" id="client.firstName" type="text"
class="form-control rounded-4 @error('client.firstName') is-invalid @enderror"
name="client.firstName" required autocomplete="client.firstName" placeholder="Имя">
<label for="firstName">Имя</label>
<label for="client.firstName">Имя</label>
@error('client.firstName')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
@ -23,12 +23,12 @@ class="form-control rounded-4 @error('client.firstName') is-invalid @enderror"
@enderror
</div>
</div>
<div class="col">
<div class="col-12 col-xl-6">
<div class="form-floating mb-3">
<input wire:model.live="client.secondName" id="client.secondName" type="text"
class="form-control rounded-4 @error('client.secondName') is-invalid @enderror"
name="client.secondName" required autocomplete="client.secondName" placeholder="Фамилия">
<label for="secondName">Фамилия</label>
<label for="client.secondName">Фамилия</label>
@error('client.secondName')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
@ -39,7 +39,7 @@ class="form-control rounded-4 @error('client.secondName') is-invalid @enderror"
</div>
</div>
<div class="row">
<div class="col">
<div class="col-12 col-xl-6">
<div class="form-floating mb-3">
<input wire:model.live="client.phone" id="client.phone" type="tel"
class="form-control rounded-4 @error('client.phone') is-invalid @enderror"
@ -52,7 +52,7 @@ class="form-control rounded-4 @error('client.phone') is-invalid @enderror"
@enderror
</div>
</div>
<div class="col">
<div class="col-12 col-xl-6">
<div class="form-floating mb-3">
<input wire:model.live="client.city" disabled id="client.city" type="text"
class="form-control rounded-4 @error('client.city') is-invalid @enderror" name="client.city"
@ -85,11 +85,10 @@ class="form-select rounded-4 @error('client.complexId') is-invalid @enderror" id
@enderror
</div>
@if($adminAccount)
@if ($adminAccount)
<div class="form-floating mb-3">
<select wire:model.live="agent"
class="form-select rounded-4 @error('agent') is-invalid @enderror" id="agent"
name="agent" aria-label="Агент">
<select wire:model.live="agent" class="form-select rounded-4 @error('agent') is-invalid @enderror"
id="agent" name="agent" aria-label="Агент">
<option selected></option>
@foreach ($agents as $agent)
<option value="{{ $agent->id }}">
@ -137,8 +136,7 @@ class="bi bi-check-circle-fill" viewBox="0 0 16 16">
<div class="text-center fs-5 ">Мы проверим его уникальность и направим Вам информацию в личном
кабинете</div>
<div class="text-center mt-3">
<button wire:click="resetData"
class="btn active border-white border-3 rounded">Продолжить</button>
<button wire:click="resetData" class="btn active border-white border-3 rounded">Продолжить</button>
</div>
@endif
@ -156,17 +154,15 @@ class="bi bi-emoji-astonished" viewBox="0 0 16 16">
<div class="text-center fs-5 ">Кажется, возникла проблема на нашей стороне, мы уже ее решаем.
Попробуйте зайти сюда позже.</div>
<div class="text-center my-3">
<button wire:click="back"
class="btn btn-lg active border-2 rounded">Повторить</button>
<button wire:click="back" class="btn btn-lg active border-2 rounded">Повторить</button>
</div>
@endif
</div>
@script
<script>
function checkPhoneFormat()
{
alert(1);return;
<script>
function checkPhoneFormat() {
alert(1);
return;
var digits = phone.replace(/^8/, '7').replace(/[^\d]+/, '');
if (digits.length < 11) {
return phone;
@ -187,6 +183,6 @@ function checkPhoneFormat()
digits.replace(/^(\d)(\d+)(\d\d\d)(\d\d)(\d\d)$/, '+$1 $2 $3$4$5') :
digits.replace(/^(\d)(\d+)(\d\d\d)(\d\d)(\d\d)$/, '+$1$2 $3$4$5');
}
</script>
</script>
@endscript
</div>

View File

@ -0,0 +1,57 @@
<div>
<ul class="nav flex flex-md-column ">
@if (in_array($roles::AGENT, $userRoles))
<li class="nav-item text-center m-2">
<a href="{{ route('home') }}"
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" aria-current="page">
<i class="bi bi-columns-gap"></i> <span class="d-none d-lg-inline text-truncate">Главная</span>
</a>
</li>
@endif
@if (in_array($roles::AGENT, $userRoles) || in_array($roles::COMPANY_ADMIN, $userRoles))
<li class="nav-item text-center m-2">
<a href="{{ route('clients.table') }}"
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" aria-current="page">
<i class="bi bi-person"></i> <span class="d-none d-lg-inline">Клиенты</span>
</a>
</li>
@endif
@if (in_array($roles::AGENT, $userRoles) || in_array($roles::COMPANY_ADMIN, $userRoles))
<li class="nav-item text-center m-2">
<a href="/projects" class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active"
aria-current="page">
<i class="bi bi-book"></i> <span class="d-none d-lg-inline">Проекты</span>
</a>
</li>
@endif
<li class="nav-item text-center m-2">
<a href="/news" class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active"
aria-current="page">
<i class="bi bi-layers"></i> <span class="d-none d-lg-inline">Новости</span>
</a>
</li>
@if (in_array($roles::COMPANY_ADMIN, $userRoles))
<li class="nav-item text-center m-2">
<a href="{{ route('company.agents.table') }}"
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" aria-current="page">
<i class="bi bi-people"></i> <span class="d-none d-lg-inline">Агенты</span>
</a>
</li>
@endif
@if (in_array($roles::COMPANY_ADMIN, $userRoles))
<li class="nav-item text-center m-2">
<a href="{{ route('company.details') }}"
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4 active" aria-current="page">
<i class="bi bi-gear"></i> <span class="d-none d-lg-inline">Настройки</span>
</a>
</li>
@endif
</ul>
</div>

View File

@ -14,7 +14,7 @@
</style>
<div class="container">
<div>
<div class="d-flex mb-3">
<div class="d-lg-flex mb-3">
<div class="p-2 border rounded-3 border-1 p-1 bg-white">
<input type="radio" class="btn-check" name="options-base" id="option5" autocomplete="off" checked>
<label class="btn p-2 fs-5" for="option5">Все</label>
@ -28,7 +28,7 @@
<input type="radio" class="btn-check" name="options-base" id="option7" autocomplete="off">
<label class="btn p-2 fs-5" for="option7">Ипотека</label>
</div>
<div class="ms-auto p-2 hstack gap-2">
<div class="ms-auto py-2 hstack gap-2">
<select class="form-select form-select-lg bg-white" aria-label="Large select example">
<option selected>Город: любой</option>
<option value="1">Иркутск</option>
@ -48,8 +48,8 @@
<div>
@for ($i = 0; $i <= 3; $i++)
<div class="d-flex">
<div class="card flex-fill me-2 border-0 p-2 m-2 bg-white" style="">
<div class="d-lg-flex">
<div class="card flex-fill border-0 p-2 m-2 bg-white" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="rounded" alt="...">
@ -66,7 +66,7 @@ class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill
<p class="card-text text-secondary">10 августа 2024 г.</p>
</div>
</div>
<div class="card flex-fill me-2 border-0 p-2 m-2 bg-white" style="">
<div class="card flex-fill border-0 p-2 m-2 bg-white" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="rounded" alt="...">
@ -83,7 +83,7 @@ class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill
<p class="card-text text-secondary">10 августа 2024 г.</p>
</div>
</div>
<div class="card flex-fill me-2 border-0 p-2 m-2 bg-white" style="">
<div class="card flex-fill border-0 p-2 m-2 bg-white" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="rounded" alt="...">

View File

@ -14,8 +14,8 @@
</style>
<div class="container">
<div>
<div class="d-flex mb-3">
<div class="p-2 border rounded-3 border-1 p-1 bg-white">
<div class="d-lg-flex">
<div class="p-2 border rounded-3 border-1 bg-white ">
<input type="radio" class="btn-check" name="options-base" id="option5" autocomplete="off" checked>
<label class="btn p-2 fs-5" for="option5">Все</label>
@ -25,7 +25,7 @@
<input type="radio" class="btn-check" name="options-base" id="option7" autocomplete="off">
<label class="btn p-2 fs-5" for="option7">Приобретенные</label>
</div>
<div class="ms-auto p-2 hstack gap-2">
<div class="ms-auto py-2 hstack gap-2">
<select class="form-select form-select-lg bg-white" aria-label="Large select example">
<option selected>Город: любой</option>
<option value="1">Иркутск</option>
@ -40,13 +40,14 @@
</select>
</div>
</div>
<div class="d-flex mb-3">
<div class="d-none d-lg-flex my-3">
<div class="me-2">
<div class="fw-bold fs-6 text-secondary">
Комнатность
</div>
<div class="border rounded-3 bg-white p-1">
<input type="radio" class="btn-check" name="options-base1" id="option10" autocomplete="off" checked>
<input type="radio" class="btn-check" name="options-base1" id="option10" autocomplete="off"
checked>
<label class="btn p-2 fs-5" for="option10">Студия</label>
<div class="vr"></div>
<input type="radio" class="btn-check" name="options-base1" id="option11" autocomplete="off">
@ -82,7 +83,8 @@
Срок заселения
</div>
<div class="border rounded-3 bg-white p-1">
<input type="radio" class="btn-check" name="options-base2" id="option20" autocomplete="off" checked>
<input type="radio" class="btn-check" name="options-base2" id="option20" autocomplete="off"
checked>
<label class="btn p-2 fs-5" for="option20">Сдан</label>
<div class="vr"></div>
<input type="radio" class="btn-check" name="options-base2" id="option21" autocomplete="off">
@ -101,7 +103,8 @@
&nbsp;
</div>
<div class="border rounded-3 bg-white p-1">
<input type="radio" class="btn-check" name="options-base3" id="option30" autocomplete="off" checked>
<input type="radio" class="btn-check" name="options-base3" id="option30" autocomplete="off"
checked>
<label class="btn p-2 fs-5" for="option30">
<i class="bi bi-grid-fill"></i>
</label>
@ -115,183 +118,73 @@
</div>
<div>
<div class="d-flex">
<div class="card flex-fill me-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
@for ($i = 0; $i <= 3; $i++)
<div class="d-lg-flex">
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill mx-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill ms-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span
class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
</div>
<div class="d-flex mt-3">
<div class="card flex-fill me-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill mx-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill ms-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
</div>
<div class="d-flex mt-3">
<div class="card flex-fill me-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill mx-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill ms-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
<div class="position-absolute bottom-0 start-0 m-3">
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Новые
корпуса</span>
<span class="badge bg-light text-dark border-secondary bg-opacity-75 fs-6 rounded-pill">Ипотека
5%</span>
</div>
</div>
<div class="card-body">
<h5 class="d-flex card-title fw-bold">
<span class="">Пионер</span>
<span class="ms-auto fw-bold fs-6" style="color:#e6662a">от 4,5 млн. Р</span>
</h5>
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
</div>
@endfor
</div>
</div>
@endsection
@endsection

View File

@ -33,7 +33,7 @@ class="list-group-item list-group-item-action p-3 bg-white rounded border border
</div>
</div>
<div class="col-12 col-lg-6">
<div class="px-5 py-3 bg-primary border rounded-3 mx-auto d-flex align-items-center"
<div class="p-2 px-sm-5 py-sm-3 bg-primary border rounded-3 mx-auto d-flex align-items-center"
style="min-height:30em;">
<livewire:createClientForm />
</div>
@ -45,8 +45,8 @@ class="list-group-item list-group-item-action p-3 bg-white rounded border border
<div class="fs-5 fw-bold">Новости</div>
<div class="ms-auto p-2">Смотреть все</div>
</div>
<div class="d-flex">
<div class="flex-fill card mb-3 placeholder-glow me-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="d-lg-flex">
<div class="flex-fill card mb-3 placeholder-glow m-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="row g-0 h-100">
<div class="col-md-6">
<div class="card-body">
@ -58,14 +58,14 @@ class="badge bg-body-secondary text-dark border-secondary bg-opacity-75 fs-6 rou
</div>
</div>
<div class="col-md-6 bg-secondary bg-opacity-50 rounded-end"
style="background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
style="height:200px;background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
<a href="#" class="btn btn-light btn-lg rounded-4 position-absolute bottom-0 end-0 m-3">
<i class="bi bi-arrow-right"></i>
</a>
</div>
</div>
</div>
<div class="flex-fill card mb-3 placeholder-glow mx-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="flex-fill card mb-3 placeholder-glow m-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="row g-0 h-100">
<div class="col-md-6">
<div class="card-body">
@ -77,14 +77,14 @@ class="badge bg-body-secondary text-dark border-secondary bg-opacity-75 fs-6 rou
</div>
</div>
<div class="col-md-6 bg-secondary bg-opacity-50 rounded-end"
style="background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
style="height:200px;background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
<a href="#" class="btn btn-light btn-lg rounded-4 position-absolute bottom-0 end-0 m-3">
<i class="bi bi-arrow-right"></i>
</a>
</div>
</div>
</div>
<div class="flex-fill card mb-3 placeholder-glow ms-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="flex-fill card mb-3 placeholder-glow m-2 bg-white" style="min-height:200px; max-width: 540px;">
<div class="row g-0 h-100">
<div class="col-md-6">
<div class="card-body">
@ -96,7 +96,7 @@ class="badge bg-body-secondary text-dark border-secondary bg-opacity-75 fs-6 rou
</div>
</div>
<div class="col-md-6 bg-secondary bg-opacity-50 rounded-end"
style="background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
style="height:200px;background-image:url('https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg')">
<a href="#" class="btn btn-light btn-lg rounded-4 position-absolute bottom-0 end-0 m-3">
<i class="bi bi-arrow-right"></i>
</a>
@ -110,8 +110,8 @@ class="badge bg-body-secondary text-dark border-secondary bg-opacity-75 fs-6 rou
<div class="fs-5 fw-bold">Избранное</div>
<div class="ms-auto p-2">Смотреть все</div>
</div>
<div class="d-flex">
<div class="card flex-fill me-2" style="">
<div class="d-lg-flex">
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
@ -130,7 +130,7 @@ class="" alt="...">
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill mx-2" style="">
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">
@ -149,7 +149,7 @@ class="" alt="...">
<p class="card-text">Иркутск, ул. 4-я Совесткая, 11</p>
</div>
</div>
<div class="card flex-fill ms-2" style="">
<div class="card flex-fill m-2" style="">
<div class="card-img-top ratio ratio-16x9">
<img src="https://img3.sibdom.ru/images/photo_crop_282_212/houses/photo_main/97/97be/97be2371dd0bba9c4605c3ea6f06e213.jpg"
class="" alt="...">

View File

@ -5,6 +5,7 @@
use App\Http\Controllers\ConfirmClientFromBitrix;
use App\Http\Controllers\Company\ConfirmCompanyController;
use App\Http\Controllers\Bitrix\ClientsApiController;
/*
|--------------------------------------------------------------------------
@ -17,9 +18,13 @@
|
*/
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
Route::middleware('auth:sanctum')->get('/user', function (Request $request)
{
return $request->user();
});
});
Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm');
Route::post('/company/status/update', ConfirmCompanyController::class)->name('company.status.update');
Route::post('/client', [ClientsApiController::class, 'index'])->name('api.client');
//Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm');
//Route::post('/client/{$deal}/contract', CoController::class)->name('company.status.update');
Route::post('/company/status/update', ConfirmCompanyController::class)->name('company.status.update');

View File

@ -39,6 +39,7 @@
{
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/clients/table', [App\Http\Controllers\ClientsTableController::class, 'index'])->name('clients.table');
Route::get('/contract/{contract}', [App\Http\Controllers\Deal\ContractController::class, 'index'])->name('contract');
Route::get('/company/details/', [App\Http\Controllers\Company\DetailsController::class, 'index'])->name('company.details');
Route::post('/company/{company}/details/', [App\Http\Controllers\Company\DetailsController::class, 'store'])->name('company.details.store');
Route::get('/agents/table', [App\Http\Controllers\Company\AgentsTableController::class, 'index'])->name('company.agents.table');