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