добавлено редактирование вознаграждений в админку
This commit is contained in:
parent
f6828a0fa7
commit
d2ceee50f5
@ -15,10 +15,13 @@
|
|||||||
|
|
||||||
use App\Notifications\AgentCreated;
|
use App\Notifications\AgentCreated;
|
||||||
|
|
||||||
|
use Modules\Payment\Traits\Paymentable;
|
||||||
|
|
||||||
class Agent extends Model
|
class Agent extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
use Paymentable;
|
||||||
public const STATUS_ACTIVE = "ACTIVE";
|
public const STATUS_ACTIVE = "ACTIVE";
|
||||||
public const STATUS_DISMISSED = "DISMISSED";
|
public const STATUS_DISMISSED = "DISMISSED";
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
|||||||
@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Modules\Payment\Traits\Paymentable;
|
||||||
class Company extends Model
|
class Company extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
use Paymentable;
|
||||||
const STATUS_NEW = 'new';
|
const STATUS_NEW = 'new';
|
||||||
const STATUS_ACCEPTED = 'accepted';
|
const STATUS_ACCEPTED = 'accepted';
|
||||||
const STATUS_DECLINED = 'declined';
|
const STATUS_DECLINED = 'declined';
|
||||||
@ -29,4 +29,4 @@ class Company extends Model
|
|||||||
'details' => 'array',
|
'details' => 'array',
|
||||||
'type' => CompanyType::class
|
'type' => CompanyType::class
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,19 +8,12 @@
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
use App\Models\Company\Company;
|
|
||||||
use App\Models\Complex;
|
|
||||||
|
|
||||||
use App\Models\Agent\Agent;
|
|
||||||
|
|
||||||
class AdminPaymentsController extends Controller
|
class AdminPaymentsController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
return view('admin::payments.index', [
|
return view('admin::payments.index');
|
||||||
'companies' => Company::orderBy('name')->get(),
|
|
||||||
'complexes' => Complex::orderBy('name')->get(),
|
|
||||||
'agents' => Agent::all()
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
80
app/Modules/Admin/Http/Livewire/Payments.php
Normal file
80
app/Modules/Admin/Http/Livewire/Payments.php
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Admin\Http\Livewire;
|
||||||
|
|
||||||
|
use Livewire\Component;
|
||||||
|
use App\Models\Company\Company;
|
||||||
|
use App\Models\Complex;
|
||||||
|
use App\Models\Agent\Agent;
|
||||||
|
class Payments extends Component
|
||||||
|
{
|
||||||
|
public $value;
|
||||||
|
public $companyId;
|
||||||
|
public function mount()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCompany(Company $company)
|
||||||
|
{
|
||||||
|
$this->companyId = $company->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function back()
|
||||||
|
{
|
||||||
|
$this->companyId = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPaymentValueForCompany(Company $company, Complex $complex)
|
||||||
|
{
|
||||||
|
$company->setPayment($complex, $this->value);
|
||||||
|
$this->value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unsetPaymentForCompany(Company $company, Complex $complex)
|
||||||
|
{
|
||||||
|
$company->unsetPayment($complex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPaymentValueForAgent(Agent $agent, Complex $complex)
|
||||||
|
{
|
||||||
|
$agent->setPayment($complex, $this->value);
|
||||||
|
$this->value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPaymentAsParentForAgent(Agent $agent, Complex $complex)
|
||||||
|
{
|
||||||
|
$agent->setAsParentPayment($complex);
|
||||||
|
$this->value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unsetPaymentForAgent(Agent $agent, Complex $complex)
|
||||||
|
{
|
||||||
|
$agent->unsetPayment($complex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
if ($this->companyId)
|
||||||
|
{
|
||||||
|
return view('admin::payments.agents', [
|
||||||
|
'company' => Company::find($this->companyId),
|
||||||
|
'complexes' => Complex::orderBy('name')->get(),
|
||||||
|
'agents' => Agent::where('company_id', $this->companyId)->
|
||||||
|
with([
|
||||||
|
'user' => function ($query)
|
||||||
|
{
|
||||||
|
$query->orderBy('name', 'desc');
|
||||||
|
}
|
||||||
|
])->get()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return view('admin::payments.companies', [
|
||||||
|
'companies' => Company::orderBy('name')->get(),
|
||||||
|
'complexes' => Complex::orderBy('name')->get(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -63,6 +63,8 @@ protected function registerLivewire()
|
|||||||
{
|
{
|
||||||
Livewire::component('admin.menu', \Modules\Admin\Http\Livewire\AdminMenu::class);
|
Livewire::component('admin.menu', \Modules\Admin\Http\Livewire\AdminMenu::class);
|
||||||
Livewire::component('admin.posts', \Modules\Admin\Http\Livewire\Posts::class);
|
Livewire::component('admin.posts', \Modules\Admin\Http\Livewire\Posts::class);
|
||||||
|
Livewire::component('admin.payments', \Modules\Admin\Http\Livewire\Payments::class);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function registerComponent()
|
protected function registerComponent()
|
||||||
|
|||||||
124
app/Modules/Admin/Views/payments/agents.blade.php
Normal file
124
app/Modules/Admin/Views/payments/agents.blade.php
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<div>
|
||||||
|
<button wire:click="back" class="btn border-0 icon-link icon-link-hover fs-5 mb-3 text-decoration-none text-primary"
|
||||||
|
style="--bs-icon-link-transform: translate3d(-.125rem, 0, 0);" href="#">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-left"
|
||||||
|
viewBox="0 0 16 16">
|
||||||
|
<path fill-rule="evenodd"
|
||||||
|
d="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0" />
|
||||||
|
</svg>
|
||||||
|
{{ $company->name }}
|
||||||
|
</button>
|
||||||
|
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 py-3">
|
||||||
|
<table class="table m-0">
|
||||||
|
<thead>
|
||||||
|
<tr scope="col">
|
||||||
|
<th>Агент</th>
|
||||||
|
@foreach ($complexes as $complex)
|
||||||
|
<th>
|
||||||
|
{{ $complex->name }}
|
||||||
|
<div>
|
||||||
|
@php($compPayment = $company->getPaymentable($complex))
|
||||||
|
<span class="badge bg-secondary">
|
||||||
|
@if ($compPayment->value === null)
|
||||||
|
Не установлено
|
||||||
|
@elseif($compPayment->value == -1)
|
||||||
|
Наследовать
|
||||||
|
@else
|
||||||
|
{{ $compPayment->value }} %
|
||||||
|
@endif
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
@endforeach
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class=" ">
|
||||||
|
@foreach ($agents as $agent)
|
||||||
|
<tr scope="row">
|
||||||
|
<td class="align-middle">
|
||||||
|
{{ $agent->user->name }}
|
||||||
|
</td>
|
||||||
|
@foreach ($complexes as $complex)
|
||||||
|
@php($paymentable = $agent->getPaymentable($complex))
|
||||||
|
<td>
|
||||||
|
@if ($paymentable->value == null)
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light btn-sm" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
Не установлено
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForAgent({{ $agent->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="setPaymentAsParentForAgent({{ $agent->id }}, {{ $complex->id }})">Наследовать</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@elseif($paymentable->value == -1)
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light btn-sm" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
Наследовать
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForAgent({{ $agent->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="unsetPaymentForAgent({{ $agent->id }}, {{ $complex->id }})">Без
|
||||||
|
вознаграждения</button></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
{{ $paymentable->value }} %
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения"
|
||||||
|
value="{{ $paymentable->value }}" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForAgent({{ $agent->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><a class="dropdown-item disabled" href="#">Наследовать</a></li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="unsetPaymentForAgent({{ $agent->id }}, {{ $complex->id }})">Без
|
||||||
|
вознаграждения</button>
|
||||||
|
</li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="setPaymentAsParentForAgent({{ $agent->id }}, {{ $complex->id }})">Наследовать</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
@endforeach
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
97
app/Modules/Admin/Views/payments/companies.blade.php
Normal file
97
app/Modules/Admin/Views/payments/companies.blade.php
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 py-3">
|
||||||
|
<table class="table m-0">
|
||||||
|
<thead>
|
||||||
|
<tr scope="col">
|
||||||
|
<th>Компания</th>
|
||||||
|
@foreach ($complexes as $complex)
|
||||||
|
<th>{{ $complex->name }}
|
||||||
|
</th>
|
||||||
|
@endforeach
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class=" ">
|
||||||
|
@foreach ($companies as $company)
|
||||||
|
<tr scope="row">
|
||||||
|
<td class="align-middle">
|
||||||
|
{{ $company->name }}
|
||||||
|
</td>
|
||||||
|
@foreach ($complexes as $complex)
|
||||||
|
@php($paymentable = $company->getPaymentable($complex))
|
||||||
|
<td>
|
||||||
|
@if ($paymentable->value == null)
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light btn-sm" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
Не установлено
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForCompany({{ $company->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@elseif($paymentable->value == -1)
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light btn-sm" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
Наследовать
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForCompany({{ $company->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="unsetPaymentForCompany({{ $company->id }}, {{ $complex->id }})">Без
|
||||||
|
вознаграждения</button></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-light" type="button" data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false">
|
||||||
|
{{ $paymentable->value }} %
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item" href="#">
|
||||||
|
<input class="form-control form-control-sm" type="text"
|
||||||
|
placeholder="Процент вознаграждения"
|
||||||
|
value="{{ $paymentable->value }}" wire:model = "value"
|
||||||
|
wire:keydown.enter="setPaymentValueForCompany({{ $company->id }}, {{ $complex->id }})">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<hr class="dropdown-divider">
|
||||||
|
</li>
|
||||||
|
<li><button class="dropdown-item"
|
||||||
|
wire:click="unsetPaymentForCompany({{ $company->id }}, {{ $complex->id }})">Без
|
||||||
|
вознаграждения</button>
|
||||||
|
</li>
|
||||||
|
<!--<li><a class="dropdown-item" href="#">Something else here</a></li>-->
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
@endforeach
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-light" wire:click="setCompany({{ $company->id }})">
|
||||||
|
<i class="bi bi-chevron-right"></i>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
@ -1,31 +1,5 @@
|
|||||||
@php($title = 'Вознаграждения')
|
@php($title = 'Вознаграждения')
|
||||||
@extends('layouts.admin')
|
@extends('layouts.admin')
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 py-3">
|
@livewire('admin.payments')
|
||||||
<table class="table m-0">
|
|
||||||
<thead>
|
|
||||||
<tr scope="col">
|
|
||||||
<th>Компания</th>
|
|
||||||
@foreach ($complexes as $complex)
|
|
||||||
<th>{{ $complex->name }}
|
|
||||||
<div><a href="#" class="" style="text-decoration-style: dotted;">0 %</a>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
@endforeach
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class=" ">
|
|
||||||
@foreach ($companies as $company)
|
|
||||||
<tr scope="row">
|
|
||||||
<td class="align-middle">
|
|
||||||
{{ $company->name }}
|
|
||||||
</td>
|
|
||||||
@foreach ($complexes as $complex)
|
|
||||||
<td><a href="#" class="" style="text-decoration-style: dotted;">Наследовать</a></td>
|
|
||||||
@endforeach
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
5
app/Modules/Payment/Config/config.php
Normal file
5
app/Modules/Payment/Config/config.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
];
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?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('payments', function (Blueprint $table)
|
||||||
|
{
|
||||||
|
$table->id();
|
||||||
|
$table->string('paymentable_type');
|
||||||
|
$table->integer('paymentable_id');
|
||||||
|
$table->foreignId('complex_id')->references('id')->on('complexes')->onDelete('cascade');
|
||||||
|
$table->integer('value')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('payments');
|
||||||
|
}
|
||||||
|
};
|
||||||
17
app/Modules/Payment/Http/Controllers/PaymentController.php
Normal file
17
app/Modules/Payment/Http/Controllers/PaymentController.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Payment\Http\Controllers;
|
||||||
|
|
||||||
|
use Modules\Payment\Models\Payment;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class PaymentController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return view('payment::index');
|
||||||
|
}
|
||||||
|
}
|
||||||
17
app/Modules/Payment/Models/Payment.php
Normal file
17
app/Modules/Payment/Models/Payment.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Payment\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Payment extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
protected $fillable = [
|
||||||
|
'paymentable_type',
|
||||||
|
'paymentable_id',
|
||||||
|
'complex_id',
|
||||||
|
'value'
|
||||||
|
];
|
||||||
|
}
|
||||||
68
app/Modules/Payment/Providers/ModuleServiceProvider.php
Normal file
68
app/Modules/Payment/Providers/ModuleServiceProvider.php
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Payment\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\Blade;
|
||||||
|
use Livewire\Livewire;
|
||||||
|
|
||||||
|
class ModuleServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
protected String $moduleName = 'Payment';
|
||||||
|
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
$this->app->register(RouteServiceProvider::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
$this->registerViews();
|
||||||
|
$this->registerLivewireViews();
|
||||||
|
$this->registerMigrations();
|
||||||
|
$this->registerConfig();
|
||||||
|
$this->registerComponent();
|
||||||
|
$this->registerLivewire();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerViews()
|
||||||
|
{
|
||||||
|
$moduleViewsPath = __DIR__.'/../Views';
|
||||||
|
$this->loadViewsFrom(
|
||||||
|
$moduleViewsPath, strtolower($this->moduleName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerLivewireViews()
|
||||||
|
{
|
||||||
|
$moduleViewsPath = __DIR__.'/../Views/livewire';
|
||||||
|
$this->loadViewsFrom(
|
||||||
|
$moduleViewsPath, strtolower($this->moduleName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerMigrations()
|
||||||
|
{
|
||||||
|
$this->loadMigrationsFrom(
|
||||||
|
app_path('Modules/'.$this->moduleName.'/Database/Migrations')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerConfig()
|
||||||
|
{
|
||||||
|
$path = app_path('Modules/'.$this->moduleName.'/Config/config.php');
|
||||||
|
$this->mergeConfigFrom(
|
||||||
|
$path, strtolower($this->moduleName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerLivewire()
|
||||||
|
{
|
||||||
|
//Livewire::component('<name>', \Modules\<NAME>\Http\Livewire\<NAME>::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerComponent()
|
||||||
|
{
|
||||||
|
//Blade::component('<name>', \Modules\<NAME>\Http\Components\<NAME>::class);
|
||||||
|
}
|
||||||
|
}
|
||||||
24
app/Modules/Payment/Providers/RouteServiceProvider.php
Normal file
24
app/Modules/Payment/Providers/RouteServiceProvider.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Payment\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
|
class RouteServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
public function map()
|
||||||
|
{
|
||||||
|
$this->registerWebRoutes();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function registerWebRoutes()
|
||||||
|
{
|
||||||
|
//Add Web Routes with web Guard
|
||||||
|
Route::middleware('web')
|
||||||
|
//Set Default Controllers Namespace
|
||||||
|
->namespace('Modules\\Payment\\Http\\Controllers')
|
||||||
|
->group(app_path('Modules/Payment/Routes/web.php'));
|
||||||
|
}
|
||||||
|
}
|
||||||
13
app/Modules/Payment/Routes/web.php
Normal file
13
app/Modules/Payment/Routes/web.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use Modules\Payment\Http\Controllers\PaymentController;
|
||||||
|
|
||||||
|
Route::middleware(['auth'])->group(function() {
|
||||||
|
|
||||||
|
Route::get('/payment', [PaymentController::class, 'index']);
|
||||||
|
|
||||||
|
Route::middleware(['hasAccess'])->group(function() {
|
||||||
|
/** Routes that need to be protected - Маршруты которые нужно защитить */
|
||||||
|
});
|
||||||
|
});
|
||||||
98
app/Modules/Payment/Traits/Paymentable.php
Normal file
98
app/Modules/Payment/Traits/Paymentable.php
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Payment\Traits;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Modules\Payment\Models\Payment;
|
||||||
|
use App\Models\Complex;
|
||||||
|
trait Paymentable
|
||||||
|
{
|
||||||
|
private $defaultValue = null; // -1 || null
|
||||||
|
protected static function boot()
|
||||||
|
{
|
||||||
|
parent::boot();
|
||||||
|
|
||||||
|
static::created(function ($item)
|
||||||
|
{
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
static::deleted(function ($item)
|
||||||
|
{
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getClassName()
|
||||||
|
{
|
||||||
|
$reflect = new \ReflectionClass($this);
|
||||||
|
return $reflect->getShortName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPaymentable(Complex $complex)
|
||||||
|
{
|
||||||
|
$paymentable = Payment::where('paymentable_type', $this->getClassName())
|
||||||
|
->where('paymentable_id', $this->id)
|
||||||
|
->where('complex_id', $complex->id);
|
||||||
|
switch ( $paymentable->count() )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return Payment::create([
|
||||||
|
'paymentable_type' => $this->getClassName(),
|
||||||
|
'paymentable_id' => $this->id,
|
||||||
|
'complex_id' => $complex->id,
|
||||||
|
'value' => ($this->getClassName() == 'Company') ? null : ($this->defaultValue == -1 ? $this->setAsParentPayment($complex) : null)
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
return $paymentable->first();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort(404);
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPayment(Complex $complex, $value)
|
||||||
|
{
|
||||||
|
$paymentable = $this->getPaymentable($complex);
|
||||||
|
if ($value >= 0 && $value <= 100)
|
||||||
|
{
|
||||||
|
$paymentable->update([
|
||||||
|
'value' => $value //-1 значит, что значение наследуется от родительского
|
||||||
|
]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAsParentPayment(Complex $complex)
|
||||||
|
{
|
||||||
|
$value = -1;
|
||||||
|
if ($this->getClassName() == 'Agent')
|
||||||
|
{
|
||||||
|
$company = $this->company;
|
||||||
|
$companyPayment = $company->getPaymentable($complex);
|
||||||
|
if ($companyPayment->value === null || $companyPayment->value == -1)
|
||||||
|
{
|
||||||
|
$value = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$paymentable = $this->getPaymentable($complex);
|
||||||
|
$paymentable->update([
|
||||||
|
'value' => $value //-1 значит, что значение наследуется от родительского
|
||||||
|
]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unsetPayment(Complex $complex)
|
||||||
|
{
|
||||||
|
$paymentable = $this->getPaymentable($complex);
|
||||||
|
$paymentable->update([
|
||||||
|
'value' => null
|
||||||
|
]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
4
app/Modules/Payment/Views/index.blade.php
Normal file
4
app/Modules/Payment/Views/index.blade.php
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
@section('content')
|
||||||
|
<h1> Example views </h1>
|
||||||
|
@endsection
|
||||||
@ -5,3 +5,6 @@ $body-bg: #f8fafc;
|
|||||||
$font-family-sans-serif: 'Nunito', sans-serif;
|
$font-family-sans-serif: 'Nunito', sans-serif;
|
||||||
$font-size-base: 0.9rem;
|
$font-size-base: 0.9rem;
|
||||||
$line-height-base: 1.6;
|
$line-height-base: 1.6;
|
||||||
|
|
||||||
|
//colors
|
||||||
|
$primary: #e6662a;
|
||||||
Loading…
Reference in New Issue
Block a user