Updated Misc class to use relationships + cache
Updated Misc class to use relationships + cache
This commit is contained in:
parent
3d87c645dc
commit
356bd368a4
|
@ -14,10 +14,7 @@ class MiscController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$misc = DB::table('misc_services as d')
|
$misc = Misc::allMisc();
|
||||||
->join('pricings as pr', 'd.id', '=', 'pr.service_id')
|
|
||||||
->get(['d.*', 'pr.*']);
|
|
||||||
|
|
||||||
return view('misc.index', compact(['misc']));
|
return view('misc.index', compact(['misc']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,12 +25,8 @@ class MiscController extends Controller
|
||||||
|
|
||||||
public function show(Misc $misc)
|
public function show(Misc $misc)
|
||||||
{
|
{
|
||||||
$service_extras = DB::table('misc_services as m')
|
$misc_data = Misc::misc($misc->id)[0];
|
||||||
->join('pricings as p', 'm.id', '=', 'p.service_id')
|
return view('misc.show', compact(['misc_data']));
|
||||||
->where('m.id', '=', $misc->id)
|
|
||||||
->get(['m.*', 'p.*']);
|
|
||||||
|
|
||||||
return view('misc.show', compact(['misc', 'service_extras']));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
|
@ -45,20 +38,19 @@ class MiscController extends Controller
|
||||||
'next_due_date' => 'required|date'
|
'next_due_date' => 'required|date'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$ms_id = Str::random(8);
|
$misc_id = Str::random(8);
|
||||||
|
|
||||||
$pricing = new Pricing();
|
$pricing = new Pricing();
|
||||||
|
|
||||||
$as_usd = $pricing->convertToUSD($request->price, $request->currency);
|
$as_usd = $pricing->convertToUSD($request->price, $request->currency);
|
||||||
|
$pricing->insertPricing(5, $misc_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
|
||||||
$pricing->insertPricing(5, $ms_id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
|
|
||||||
|
|
||||||
Misc::create([
|
Misc::create([
|
||||||
'id' => $ms_id,
|
'id' => $misc_id,
|
||||||
'name' => $request->name,
|
'name' => $request->name,
|
||||||
'owned_since' => $request->owned_since
|
'owned_since' => $request->owned_since
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Cache::forget("all_misc");
|
||||||
Home::homePageCacheForget();
|
Home::homePageCacheForget();
|
||||||
|
|
||||||
return redirect()->route('misc.index')
|
return redirect()->route('misc.index')
|
||||||
|
@ -67,12 +59,8 @@ class MiscController extends Controller
|
||||||
|
|
||||||
public function edit(Misc $misc)
|
public function edit(Misc $misc)
|
||||||
{
|
{
|
||||||
$misc = DB::table('misc_services as s')
|
$misc_data = Misc::misc($misc->id)[0];
|
||||||
->join('pricings as p', 's.id', '=', 'p.service_id')
|
return view('misc.edit', compact('misc_data'));
|
||||||
->where('s.id', '=', $misc->id)
|
|
||||||
->get(['s.*', 'p.*']);
|
|
||||||
|
|
||||||
return view('misc.edit', compact('misc'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(Request $request, Misc $misc)
|
public function update(Request $request, Misc $misc)
|
||||||
|
@ -91,11 +79,11 @@ class MiscController extends Controller
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$pricing = new Pricing();
|
$pricing = new Pricing();
|
||||||
|
|
||||||
$as_usd = $pricing->convertToUSD($request->price, $request->currency);
|
$as_usd = $pricing->convertToUSD($request->price, $request->currency);
|
||||||
|
|
||||||
$pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
|
$pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $as_usd, $request->next_due_date);
|
||||||
|
|
||||||
|
Cache::forget("all_misc");
|
||||||
|
Cache::forget("misc.{$misc->id}");
|
||||||
Home::homePageCacheForget();
|
Home::homePageCacheForget();
|
||||||
|
|
||||||
return redirect()->route('misc.index')
|
return redirect()->route('misc.index')
|
||||||
|
@ -105,12 +93,13 @@ class MiscController extends Controller
|
||||||
public function destroy(Misc $misc)
|
public function destroy(Misc $misc)
|
||||||
{
|
{
|
||||||
$items = Misc::find($misc->id);
|
$items = Misc::find($misc->id);
|
||||||
|
|
||||||
$items->delete();
|
$items->delete();
|
||||||
|
|
||||||
$p = new Pricing();
|
$p = new Pricing();
|
||||||
$p->deletePricing($misc->id);
|
$p->deletePricing($misc->id);
|
||||||
|
|
||||||
|
Cache::forget("all_misc");
|
||||||
|
Cache::forget("misc.{$misc->id}");
|
||||||
Home::homePageCacheForget();
|
Home::homePageCacheForget();
|
||||||
|
|
||||||
return redirect()->route('misc.index')
|
return redirect()->route('misc.index')
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
class Misc extends Model
|
class Misc extends Model
|
||||||
{
|
{
|
||||||
|
@ -14,4 +15,25 @@ class Misc extends Model
|
||||||
protected $table = 'misc_services';
|
protected $table = 'misc_services';
|
||||||
|
|
||||||
protected $fillable = ['id', 'name', 'owned_since'];
|
protected $fillable = ['id', 'name', 'owned_since'];
|
||||||
|
|
||||||
|
public static function allMisc()
|
||||||
|
{//All misc and relationships (no using joins)
|
||||||
|
return Cache::remember("all_misc", now()->addMonth(1), function () {
|
||||||
|
return Misc::with(['price'])->get();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function misc(string $misc_id)
|
||||||
|
{//Single misc and relationships (no using joins)
|
||||||
|
return Cache::remember("misc.$misc_id", now()->addMonth(1), function () use ($misc_id) {
|
||||||
|
return Misc::where('id', $misc_id)
|
||||||
|
->with(['price'])->get();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function price()
|
||||||
|
{
|
||||||
|
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
@section('title') {{$misc[0]->name}} {{'edit'}} @endsection
|
@section('title') {{$misc_data->name}} {{'edit'}} @endsection
|
||||||
<x-app-layout>
|
<x-app-layout>
|
||||||
<x-slot name="header">
|
<x-slot name="header">
|
||||||
Edit {{ $misc[0]->name }}
|
Edit {{ $misc_data->name }}
|
||||||
</x-slot>
|
</x-slot>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<x-card class="shadow mt-3">
|
<x-card class="shadow mt-3">
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
Go back
|
Go back
|
||||||
</x-back-button>
|
</x-back-button>
|
||||||
<x-errors-alert></x-errors-alert>
|
<x-errors-alert></x-errors-alert>
|
||||||
<form action="{{ route('misc.update', $misc[0]->service_id) }}" method="POST">
|
<form action="{{ route('misc.update', $misc_data->id) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
<div class="input-group-prepend"><span class="input-group-text">Name</span></div>
|
<div class="input-group-prepend"><span class="input-group-text">Name</span></div>
|
||||||
<input type="text"
|
<input type="text"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="name" required maxlength="255" value="{{$misc[0]->name}}">
|
name="name" required maxlength="255" value="{{$misc_data->name}}">
|
||||||
@error('name') <span class="text-red-500">{{ $message }}
|
@error('name') <span class="text-red-500">{{ $message }}
|
||||||
</span>@enderror
|
</span>@enderror
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,17 +30,17 @@
|
||||||
<x-slot name="title">Price</x-slot>
|
<x-slot name="title">Price</x-slot>
|
||||||
<x-slot name="name">price</x-slot>
|
<x-slot name="name">price</x-slot>
|
||||||
<x-slot name="step">0.01</x-slot>
|
<x-slot name="step">0.01</x-slot>
|
||||||
<x-slot name="value">{{ $misc[0]->price }}</x-slot>
|
<x-slot name="value">{{ $misc_data->price->price }}</x-slot>
|
||||||
</x-number-input>
|
</x-number-input>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 mb-3">
|
<div class="col-md-3 mb-3">
|
||||||
<x-term-select>
|
<x-term-select>
|
||||||
<x-slot name="current">{{$misc[0]->term}}</x-slot>
|
<x-slot name="current">{{$misc_data->price->term}}</x-slot>
|
||||||
</x-term-select>
|
</x-term-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 mb-3">
|
<div class="col-md-2 mb-3">
|
||||||
<x-currency-select>
|
<x-currency-select>
|
||||||
<x-slot name="current">{{$misc[0]->currency}}</x-slot>
|
<x-slot name="current">{{$misc_data->price->currency}}</x-slot>
|
||||||
</x-currency-select>
|
</x-currency-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,20 +49,20 @@
|
||||||
<x-date-input>
|
<x-date-input>
|
||||||
<x-slot name="title">Owned since</x-slot>
|
<x-slot name="title">Owned since</x-slot>
|
||||||
<x-slot name="name">owned_since</x-slot>
|
<x-slot name="name">owned_since</x-slot>
|
||||||
<x-slot name="value">{{$misc[0]->owned_since }}</x-slot>
|
<x-slot name="value">{{$misc_data->owned_since }}</x-slot>
|
||||||
</x-date-input>
|
</x-date-input>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-4 mb-3">
|
<div class="col-12 col-md-4 mb-3">
|
||||||
<x-date-input>
|
<x-date-input>
|
||||||
<x-slot name="title">Next due date</x-slot>
|
<x-slot name="title">Next due date</x-slot>
|
||||||
<x-slot name="name">next_due_date</x-slot>
|
<x-slot name="name">next_due_date</x-slot>
|
||||||
<x-slot name="value">{{$misc[0]->next_due_date}}</x-slot>
|
<x-slot name="value">{{$misc_data->price->next_due_date}}</x-slot>
|
||||||
</x-date-input>
|
</x-date-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check mt-2">
|
<div class="form-check mt-2">
|
||||||
<input class="form-check-input" name="is_active" type="checkbox"
|
<input class="form-check-input" name="is_active" type="checkbox"
|
||||||
value="1" {{ ($misc[0]->active === 1) ? 'checked' : '' }}>
|
value="1" {{ ($misc_data->active === 1) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label">
|
<label class="form-check-label">
|
||||||
I still have this service
|
I still have this service
|
||||||
</label>
|
</label>
|
||||||
|
|
|
@ -36,23 +36,23 @@
|
||||||
{{ date_format(new DateTime($m->owned_since), 'jS F Y') }}
|
{{ date_format(new DateTime($m->owned_since), 'jS F Y') }}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td class="text-nowrap">{{ now()->diffInDays($m->next_due_date) }}
|
<td class="text-nowrap">{{ now()->diffInDays($m->price->next_due_date) }}
|
||||||
<small>days</small></td>
|
<small>days</small></td>
|
||||||
<td class="text-nowrap">{{$m->price}} {{$m->currency}}
|
<td class="text-nowrap">{{$m->price->price}} {{$m->price->currency}}
|
||||||
<small>{{\App\Process::paymentTermIntToString($m->term)}}</small></td>
|
<small>{{\App\Process::paymentTermIntToString($m->price->term)}}</small></td>
|
||||||
<td class="text-nowrap">
|
<td class="text-nowrap">
|
||||||
<form action="{{ route('misc.destroy', $m->service_id) }}" method="POST">
|
<form action="{{ route('misc.destroy', $m->id) }}" method="POST">
|
||||||
<a href="{{ route('misc.edit', $m->service_id) }}"
|
<a href="{{ route('misc.edit', $m->id) }}"
|
||||||
class="text-body mx-1">
|
class="text-body mx-1">
|
||||||
<i class="fas fa-pen" title="edit"></i></a>
|
<i class="fas fa-pen" title="edit"></i></a>
|
||||||
<a href="{{ route('misc.show', $m->service_id) }}"
|
<a href="{{ route('misc.show', $m->id) }}"
|
||||||
class="text-body mx-1">
|
class="text-body mx-1">
|
||||||
<i class="fas fa-eye" title="view"></i>
|
<i class="fas fa-eye" title="view"></i>
|
||||||
</a>
|
</a>
|
||||||
@csrf
|
@csrf
|
||||||
@method('DELETE')
|
@method('DELETE')
|
||||||
<i class="fas fa-trash text-danger ms-3" @click="modalForm"
|
<i class="fas fa-trash text-danger ms-3" @click="modalForm"
|
||||||
id="btn-{{$m->name}}" title="{{$m->service_id}}"></i>
|
id="btn-{{$m->name}}" title="{{$m->id}}"></i>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@section('title') {{ $service_extras[0]->name }} {{'service'}} @endsection
|
@section('title') {{ $misc_data->name }} {{'service'}} @endsection
|
||||||
<x-app-layout>
|
<x-app-layout>
|
||||||
<x-slot name="header">
|
<x-slot name="header">
|
||||||
{{ __('Misc details') }}
|
{{ __('Misc details') }}
|
||||||
|
@ -7,11 +7,11 @@
|
||||||
<x-card class="shadow mt-3">
|
<x-card class="shadow mt-3">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-md-6 mb-2">
|
<div class="col-12 col-md-6 mb-2">
|
||||||
<h2>{{ $service_extras[0]->name}}</h2>
|
<h2>{{ $misc_data->name}}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-6 text-md-end">
|
<div class="col-12 col-md-6 text-md-end">
|
||||||
<h6 class="text-muted pe-lg-4">{{ $service_extras[0]->service_id }}</h6>
|
<h6 class="text-muted pe-lg-4">{{ $misc_data->id }}</h6>
|
||||||
@if($service_extras[0]->active !== 1)
|
@if($misc_data->active !== 1)
|
||||||
<h6 class="text-danger pe-lg-4">not active</h6>
|
<h6 class="text-danger pe-lg-4">not active</h6>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
@ -23,41 +23,41 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Service</td>
|
<td class="px-2 py-2 font-bold text-muted">Service</td>
|
||||||
<td>{{ $service_extras[0]->name }}</td>
|
<td>{{ $misc_data->name }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Price</td>
|
<td class="px-2 py-2 font-bold text-muted">Price</td>
|
||||||
<td>{{ $service_extras[0]->price }} {{ $service_extras[0]->currency }}
|
<td>{{ $misc_data->price->price }} {{ $misc_data->price->currency }}
|
||||||
<small>{{\App\Process::paymentTermIntToString($service_extras[0]->term)}}</small>
|
<small>{{\App\Process::paymentTermIntToString($misc_data->price->term)}}</small>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Owned since</td>
|
<td class="px-2 py-2 font-bold text-muted">Owned since</td>
|
||||||
<td>
|
<td>
|
||||||
@if(!is_null($service_extras[0]->owned_since))
|
@if(!is_null($misc_data->owned_since))
|
||||||
{{ date_format(new DateTime($service_extras[0]->owned_since), 'jS F Y') }}
|
{{ date_format(new DateTime($misc_data->owned_since), 'jS F Y') }}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Next due date</td>
|
<td class="px-2 py-2 font-bold text-muted">Next due date</td>
|
||||||
<td>{{Carbon\Carbon::parse($service_extras[0]->next_due_date)->diffForHumans()}}
|
<td>{{Carbon\Carbon::parse($misc_data->price->next_due_date)->diffForHumans()}}
|
||||||
({{Carbon\Carbon::parse($service_extras[0]->next_due_date)->format('d/m/Y')}})
|
({{Carbon\Carbon::parse($misc_data->price->next_due_date)->format('d/m/Y')}})
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Inserted</td>
|
<td class="px-2 py-2 font-bold text-muted">Inserted</td>
|
||||||
<td>
|
<td>
|
||||||
@if(!is_null($service_extras[0]->created_at))
|
@if(!is_null($misc_data->created_at))
|
||||||
{{ date_format(new DateTime($service_extras[0]->created_at), 'jS M y g:i a') }}
|
{{ date_format(new DateTime($misc_data->created_at), 'jS M y g:i a') }}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="px-2 py-2 font-bold text-muted">Updated</td>
|
<td class="px-2 py-2 font-bold text-muted">Updated</td>
|
||||||
<td>
|
<td>
|
||||||
@if(!is_null($service_extras[0]->updated_at))
|
@if(!is_null($misc_data->updated_at))
|
||||||
{{ date_format(new DateTime($service_extras[0]->updated_at), 'jS M y g:i a') }}
|
{{ date_format(new DateTime($misc_data->updated_at), 'jS M y g:i a') }}
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
class="btn btn-success btn-sm mx-2">
|
class="btn btn-success btn-sm mx-2">
|
||||||
Go back
|
Go back
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('misc.edit', $service_extras[0]->service_id) }}"
|
<a href="{{ route('misc.edit', $misc_data->id) }}"
|
||||||
class="btn btn-primary btn-sm mx-2">
|
class="btn btn-primary btn-sm mx-2">
|
||||||
Edit
|
Edit
|
||||||
</a>
|
</a>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user