This commit is contained in:
ludo
2024-03-03 22:52:00 +01:00
parent 44391e817c
commit e4e2126ada
18 changed files with 465 additions and 353 deletions

View File

@@ -17,9 +17,19 @@ class CustomerAddressesDataTable extends DataTable
public function query(CustomerAddress $model) public function query(CustomerAddress $model)
{ {
$model = self::filterByCustomer($model);
return $this->buildQuery($model); return $this->buildQuery($model);
} }
public static function filterByCustomer($model, $customerId = false)
{
$customerId = $customerId ? $customerId : self::isFilteredByField('customer_id');
return $customerId ? $model->byCustomer($customerId) : $model;
}
protected function getColumns() protected function getColumns()
{ {
return [ return [

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Admin\Core\Mail;
use App\Datatables\Admin\Core\Mail\MailLogsDataTable;
use App\Repositories\Core\Mail\MailLogs;
class MailLogController extends Controller
{
public function __construct()
{
// $this->middleware('ability:admin');
}
public function index(MailLogsDataTable $dataTable)
{
return $dataTable->render('admin.Core.Mail.MailLog.index', $data ?? []);
}
public function show($id)
{
$data['message'] = MailLogs::getParsed($id);
return view('admin.Core.Mail.MailLog.modal', $data);
}
}

View File

@@ -10,7 +10,7 @@ class CustomerAddressController extends Controller
{ {
public function index(CustomerAddressesDataTable $dataTable) public function index(CustomerAddressesDataTable $dataTable)
{ {
return $dataTable->render('Admin.Shop.Customers.list'); return $dataTable->render('Admin.Shop.CustomerAddresses.list');
} }
public function create() public function create()

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Admin\Shop;
use App\Http\Controllers\Controller;
use App\Repositories\Shop\Dashboards;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
$data = $request->all();
$data = Dashboards::getStats($data);
dump($data);
return view('Admin.Shop.Dashboard.index', $data);
}
}

View File

@@ -0,0 +1,75 @@
<?php
namespace App\Http\Controllers\Admin\Shop;
use App\Datatables\Shop\PriceListValuesDataTable;
use App\Http\Controllers\Controller;
use App\Repositories\Shop\Packages;
use App\Repositories\Shop\PriceListValueCategories;
use App\Repositories\Shop\PriceListValues;
use App\Repositories\Shop\Taxes;
use App\Repositories\Shop\Unities;
use Illuminate\Http\Request;
class PriceListValueController extends Controller
{
public function index(PriceListValuesDataTable $dataTable)
{
$data['categories'] = PriceListValueCategories::getOptions();
return $dataTable->render('Admin.Shop.PriceListValues.list', $data);
}
public function create()
{
$data['unities'] = Unities::getOptions();
$data['taxes_options'] = Taxes::getOptions();
$data['categories'] = PriceListValueCategories::getOptions();
return view('Admin.Shop.PriceListValues.create', $data);
}
public function edit($id)
{
$data['generic'] = PriceListValues::getFull($id)->toArray();
$data['packages'] = Packages::getSelectByFamily($data['generic']['category']['article_family_id']);
$data['unities'] = ($data['packages']['id'] ?? false) ? Unities::getSelectByPackage($data['packages']['id']) : [];
$data['taxes_options'] = Taxes::getOptions();
$data['categories'] = PriceListValueCategories::getOptions();
return view('Admin.Shop.PriceListValues.edit', $data);
}
public function store(Request $request)
{
$ret = PriceListValues::store($request->all());
return redirect()->route('Admin.Shop.PriceListValues.index');
}
public function show($id)
{
$data = PriceListValues::get($id);
return view('Admin.Shop.PriceListValues.view', $data);
}
public function destroy($id)
{
return PriceListValues::destroy($id);
}
public function getPrice($id)
{
$data['generic'] = PriceListValues::getFull($id);
return view('Admin.Shop.PriceListValues.partials.table-prices', $data);
}
public function addPrice($index)
{
$data['index'] = $index;
return view('Admin.Shop.PriceListValues.partials.row_price', $data);
}
}

View File

@@ -3,24 +3,35 @@
namespace App\Http\Controllers\Shop\Auth; namespace App\Http\Controllers\Shop\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\Shop\RegisterCustomer;
use App\Repositories\Shop\CustomerAddresses; use App\Repositories\Shop\CustomerAddresses;
use App\Repositories\Shop\Customers; use App\Repositories\Shop\Customers;
use Illuminate\Foundation\Auth\EmailVerificationRequest; use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Sebastienheyd\Boilerplate\Rules\Password;
class RegisterController extends Controller class RegisterController extends Controller
{ {
protected $redirectTo; protected $redirectTo;
public function showRegistrationForm() public function showRegistrationForm(Request $request)
{ {
return view('Shop.auth.register'); return view('Shop.auth.register', ['customer' => $request->old()]);
} }
public function register(Request $request) public function register(RegisterCustomer $request)
{ {
$validatedData = $request->validateWithBag('Errors', [
'last_name' => 'required|max:255',
'first_name' => 'required|max:255',
'email' => 'required|email|max:255|unique:shop_customers,email,NULL,id,deleted_at,NULL',
'password' => ['required', 'confirmed', new Password()],
]);
$user = $this->create($request->all()); $user = $this->create($request->all());
$this->guard()->login($user); $this->guard()->login($user);
@@ -34,7 +45,7 @@ class RegisterController extends Controller
return $request->wantsJson() return $request->wantsJson()
? new JsonResponse([], 201) ? new JsonResponse([], 201)
: redirect($this->redirectPath()); : redirect('home');
} }
public function emailVerify() public function emailVerify()

View File

@@ -10,7 +10,6 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use LangleyFoxall\LaravelNISTPasswordRules\PasswordRules;
use Laratrust\Traits\LaratrustUserTrait; use Laratrust\Traits\LaratrustUserTrait;
class Users class Users
@@ -113,32 +112,6 @@ class Users
return $user ? $user->hasRole($role) : false; return $user ? $user->hasRole($role) : false;
} }
public static function hasPermission($permission, $user = false)
{
if (self::isAdmin()) {
return true;
}
$user = $user ? $user : self::getUser();
$permissions = self::getPermissions($user);
return $user ? self::checkPermission($permissions, $permission) : false;
}
public static function checkPermission($permissions, $permission)
{
if (! strpos($permission, '*')) {
return in_array($permission, $permissions);
}
$permission = str_replace('*', '', $permission);
foreach ($permissions as $item) {
if (stripos($item, $permission) !== false) {
return true;
}
}
return false;
}
public static function getRoles($user = false) public static function getRoles($user = false)
{ {
$user = $user ? $user : self::getUser(); $user = $user ? $user : self::getUser();
@@ -146,33 +119,6 @@ class Users
return $user ? $user->roles->pluck('name')->toArray() : false; return $user ? $user->roles->pluck('name')->toArray() : false;
} }
public static function getRolesToEdit()
{
return Roles::getListByRights();
}
public static function getPermissions($user = false)
{
$user = $user ? $user : self::getUser();
return $user ? $user->allPermissions()->pluck('name')->toArray() : false;
}
public static function getByTeam($id)
{
return User::byTeam($id)->get();
}
public static function getByUniqueTeam($id)
{
return User::byTeam($id)->byUniqueTeam()->get();
}
public static function destroyByUniqueTeam($id)
{
return User::byTeam($id)->byUniqueTeam()->delete();
}
public static function getAvatar($user_id) public static function getAvatar($user_id)
{ {
$avatar = self::get($user_id)->avatar; $avatar = self::get($user_id)->avatar;
@@ -224,11 +170,6 @@ class Users
return User::find($id)->update(['password' => $password]); return User::find($id)->update(['password' => $password]);
} }
public static function validate($username, $field = 'current_password')
{
return PasswordRules::changePassword($username, $field);
}
public static function getModel() public static function getModel()
{ {
return User::query(); return User::query();

View File

@@ -1,6 +1,11 @@
@component('components.card') <x-card>
@include('components.datatable', [ @include('components.datatable', [
'route' => route('Admin.Shop.CustomerAddresses.index'), 'route' => route('Admin.Shop.CustomerAddresses.index'),
'model' => 'customer_addresses', 'model' => 'customer_addresses',
'with_print' => false,
'with_filters' => false,
]) ])
@endcomponent <x-layout.modal title="Filtres" id="modal-customer_addresses-filters">
@include('Admin.Shop.CustomerAddresses.partials.filters', ['model' => 'customer_addresses'])
</x-layout.modal>
</x-card>

View File

@@ -0,0 +1,3 @@
<form id="{{ $model }}-filters">
<input type="text" name="customer_id" value="{{ $customer['id'] ?? false }}">
</form>

View File

@@ -1,8 +1,7 @@
f{{ Form::open(['route' => 'Admin.Shop.Customers.store', 'id' => 'customer-form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $customer['id'] ?? false }}">
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
{{ Form::open(['route' => 'Admin.Shop.Customers.store', 'id' => 'customer-form', 'autocomplete' => 'off']) }}
<input type="hidden" name="id" value="{{ $customer['id'] ?? false }}">
<x-card> <x-card>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-6"> <div class="col-6">
@@ -113,13 +112,13 @@ f{{ Form::open(['route' => 'Admin.Shop.Customers.store', 'id' => 'customer-form'
</div> </div>
</x-card> </x-card>
</div> </div>
</form>
<div class="col-6"> <div class="col-6">
<x-layout.box-collapse title='Adresses' id='form-customer-address'> <x-layout.box-collapse title='Adresses' id='form-customer-address'>
@include('Admin.Shop.CustomerAddresses.list', ['dataTable' => $customer_addresses]) @include('Admin.Shop.CustomerAddresses.list', ['dataTable' => $customer_addresses])
</x-layout.box-collapse> </x-layout.box-collapse>
</div> </div>
</div> </div>
</form>
<x-save /> <x-save />

View File

@@ -10,6 +10,7 @@
'route' => route('Admin.Shop.Customers.index'), 'route' => route('Admin.Shop.Customers.index'),
'model' => 'customers', 'model' => 'customers',
'with_filters' => true, 'with_filters' => true,
'with_print' => false,
]) ])
<x-layout.modal title="Filtres" id="modal-customers-filters"> <x-layout.modal title="Filtres" id="modal-customers-filters">
@include('Admin.Shop.Customers.partials.filters', ['model' => 'customers']) @include('Admin.Shop.Customers.partials.filters', ['model' => 'customers'])

View File

@@ -1,9 +1,20 @@
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
@include('components.form.input', [ @include('components.form.input', [
'name' => 'first_name', 'name' => 'first_name',
'value' => $customer['first_name'] ?? '', 'value' => $customer['first_name'] ?? '',
'label' => 'Prénom', 'label' => 'Prénom',
'required' => true,
]) ])
</div> </div>
<div class="col-6"> <div class="col-6">
@@ -11,6 +22,7 @@
'name' => 'last_name', 'name' => 'last_name',
'value' => $customer['last_name'] ?? '', 'value' => $customer['last_name'] ?? '',
'label' => 'Nom', 'label' => 'Nom',
'required' => true,
]) ])
</div> </div>
</div> </div>

View File

@@ -8,15 +8,23 @@
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
<label>Mot de passe</label> <label>Mot de passe *</label>
{{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }} {{ Form::password('password', [
'class' => 'form-control',
'placeholder' => __('boilerplate::auth.fields.password'),
'required',
]) }}
{!! $errors->first('password', '<p class="text-danger"><strong>:message</strong></p>') !!} {!! $errors->first('password', '<p class="text-danger"><strong>:message</strong></p>') !!}
</div> </div>
</div> </div>
<div class="col-6"> <div class="col-6">
<label>Confirmation du mot de passe</label> <label>Confirmation du mot de passe *</label>
<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}">
{{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }} {{ Form::password('password_confirmation', [
'class' => 'form-control',
'placeholder' => __('boilerplate::auth.fields.password_confirm'),
'required',
]) }}
{!! $errors->first('password_confirmation', '<p class="text-danger"><strong>:message</strong></p>') !!} {!! $errors->first('password_confirmation', '<p class="text-danger"><strong>:message</strong></p>') !!}
</div> </div>
</div> </div>
@@ -36,7 +44,7 @@
<div class="col-12"> <div class="col-12">
@include('Shop.Customers.partials.address', [ @include('Shop.Customers.partials.address', [
'label' => 'Adresse de livraison', 'label' => 'Adresse de livraison',
'prefix' => 'delivery_' 'prefix' => 'delivery_',
]) ])
</div> </div>
</div> </div>

View File

@@ -20,7 +20,12 @@
@if (isset($left_buttons)) @if (isset($left_buttons))
@foreach ($left_buttons as $button) @foreach ($left_buttons as $button)
@include('components.form.button', ['class' => $button['class'] ?? null, 'icon' => $button['icon'] ?? null, 'txt' => $button['txt'] ?? null, 'id' => $button['id'] ?? null ]) @include('components.form.button', [
'class' => $button['class'] ?? null,
'icon' => $button['icon'] ?? null,
'txt' => $button['txt'] ?? null,
'id' => $button['id'] ?? null,
])
@endforeach @endforeach
@endif @endif

View File

@@ -11,7 +11,12 @@
<div class="col-lg-2 col-md-1 col-6 text-right"> <div class="col-lg-2 col-md-1 col-6 text-right">
@if (isset($right_buttons)) @if (isset($right_buttons))
@foreach ($right_buttons as $button) @foreach ($right_buttons as $button)
@include('components.form.button', ['class' => $button['class'] ?? null, 'icon' => $button['icon'] ?? null, 'txt' => $button['txt'] ?? null, 'id' => $button['id'] ?? null ]) @include('components.form.button', [
'class' => $button['class'] ?? null,
'icon' => $button['icon'] ?? null,
'txt' => $button['txt'] ?? null,
'id' => $button['id'] ?? null,
])
@endforeach @endforeach
@endif @endif
@@ -19,7 +24,7 @@
{!! $right_content !!} {!! $right_content !!}
@endif @endif
@if (!(isset($with_add) && (!$with_add))) @if (!(isset($with_add) && !$with_add))
@include('components.datatables.buttons.add') @include('components.datatables.buttons.add')
@endif @endif
</div> </div>

View File

@@ -1,12 +1,10 @@
<script> <script>
$('#{{ $model }}-table').on('draw.dt', function() { $('#{{ $model }}-table').on('draw.dt', function() {
var table = getDatatable("{{ $model }}"); var table = getDatatable("{{ $model }}");
$('#{{ $model }}-table .btn-edit').off('click').click(function(e) { $('#{{ $model }}-table .btn-edit').off('click').click(function(e) {
e.preventDefault(); e.preventDefault();
// var id = table.row(this).id();
var id = $(this).data('id'); var id = $(this).data('id');
@if (isset($edit_callback)) @if (isset($edit_callback))
{{ $edit_callback }} {{ $edit_callback }}
@@ -18,7 +16,6 @@
$('#{{ $model }}-table .btn-show').off('click').click(function(e) { $('#{{ $model }}-table .btn-show').off('click').click(function(e) {
e.preventDefault(); e.preventDefault();
// var id = table.row(this).id();
var id = $(this).data('id'); var id = $(this).data('id');
@if (isset($show_callback)) @if (isset($show_callback))
{{ $show_callback }} {{ $show_callback }}
@@ -30,7 +27,6 @@
$('#{{ $model }}-table .btn-del').off('click').click(function(e) { $('#{{ $model }}-table .btn-del').off('click').click(function(e) {
e.preventDefault(); e.preventDefault();
// var id = table.row(this).id();
var id = $(this).data('id'); var id = $(this).data('id');
bootbox.confirm("{{ __('fg.confirmdelete') }}", function(result) { bootbox.confirm("{{ __('fg.confirmdelete') }}", function(result) {
@@ -39,9 +35,10 @@
$.ajax({ $.ajax({
url: '{{ $route }}' + '/destroy/' + id, url: '{{ $route }}' + '/destroy/' + id,
method: 'delete', method: 'delete',
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'}, headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function() { success: function() {
// line.remove();
@if (isset($delete_callback)) @if (isset($delete_callback))
{{ $delete_callback }} {{ $delete_callback }}
@else @else
@@ -56,23 +53,5 @@
{{ $callback ?? '' }} {{ $callback ?? '' }}
var state = table.state.loaded(); var state = table.state.loaded();
// console.log('state');
// console.log(state);
if ( state ) {
/*
table.columns().eq( 0 ).each( function ( colIdx ) {
var colSearch = state.columns[colIdx].search;
if ( colSearch.search ) {
$('.search-input-text').eq(colIdx).val( colSearch.search );
}
}); });
*/
}
});
// datatablesHelper.getDatatableLength('{{ $model }}', 34);
</script> </script>

View File

@@ -1,14 +1,18 @@
@include('components.form.label') @include('components.form.label')
@if (($disabled ?? false) || ($readonly ?? false)) @if (($disabled ?? false) || ($readonly ?? false))
@include('components.form.input', ['type' => 'hidden', 'label' => false, 'disabled' => false, 'readonly' => false]) @include('components.form.input', [
'type' => 'hidden',
'label' => false,
'disabled' => false,
'readonly' => false,
])
@endif @endif
<input type="{{ $type ?? 'text'}}" name="{{ $name }}" id="{{ $id_name ?? str_slug($name,'-') }}" class="form-control {{ $class ?? ''}}" value="{{ $value ?? null}}" <input type="{{ $type ?? 'text' }}" name="{{ $name }}" id="{{ $id_name ?? str_slug($name, '-') }}"
@if ($required ?? false) required @endif class="form-control {{ $class ?? '' }}" value="{{ $value ?? (old($name) ?? '') }}"
@if ($disabled ?? false) disabled @endif @if ($required ?? false) required @endif @if ($disabled ?? false) disabled @endif
@if ($readonly ?? false) readonly @endif @if ($readonly ?? false) readonly @endif @if ($autofocus ?? false) autofocus @endif
@if ($autofocus ?? false) autofocus @endif
@if ($size ?? false) size="{{ $size }}" @endif @if ($size ?? false) size="{{ $size }}" @endif
@if ($autocomplete ?? false) autocomplete="{{ $autocomplete }}" @endif @if ($autocomplete ?? false) autocomplete="{{ $autocomplete }}" @endif
@if ($minlength ?? false) minlength={{ $minlength }} @endif @if ($minlength ?? false) minlength={{ $minlength }} @endif
@@ -17,5 +21,10 @@
@if ($mask ?? false) data-inputmask="'mask': '{{ $mask }}'" @endif @if ($mask ?? false) data-inputmask="'mask': '{{ $mask }}'" @endif
@if ($pattern ?? false) pattern="{{ $pattern }}" @endif @if ($pattern ?? false) pattern="{{ $pattern }}" @endif
@if ($placeholder ?? false) placeholder="{{ $placeholder }}" @endif @if ($placeholder ?? false) placeholder="{{ $placeholder }}" @endif
@if ($step ?? false) step="{{ $step }}" @endif @if ($step ?? false) step="{{ $step }}" @endif {!! $meta ?? '' !!}>
{!! $meta ?? '' !!} >
@error($name)
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror

View File

@@ -117,7 +117,6 @@
return !data ? '' : typeof data === 'string' ? removeAccents(data.replace(/<.*?>/g, '')) : data; return !data ? '' : typeof data === 'string' ? removeAccents(data.replace(/<.*?>/g, '')) : data;
}; };
}); });
</script> </script>
@endpush @endpush