MIF_E31222707/Modules/Purchase/Http/Livewire/PurchaseList.php

92 lines
2.8 KiB
PHP

<?php
namespace Modules\Purchase\Http\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use Modules\Purchase\Entities\Purchase;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class PurchaseList extends Component
{
use WithPagination;
public $search = '';
public $dateFrom = '';
public $dateTo = '';
public $supplier_id = '';
public $payment_status = '';
public $perPage = 10;
protected $queryString = [
'search' => ['except' => ''],
'dateFrom' => ['except' => ''],
'dateTo' => ['except' => ''],
'supplier_id' => ['except' => ''],
'payment_status' => ['except' => ''],
];
public function updatingSearch()
{
$this->resetPage();
}
public function deletePurchase($id)
{
$purchase = Purchase::findOrFail($id);
if ($purchase->payment_status === 'Paid') {
session()->flash('error', 'Cannot delete a paid purchase.');
return;
}
try {
DB::beginTransaction();
// Delete related records
$purchase->purchaseDetails()->delete();
$purchase->purchasePayments()->delete();
// Delete the purchase
$purchase->delete();
DB::commit();
session()->flash('message', 'Purchase deleted successfully.');
} catch (\Exception $e) {
DB::rollBack();
session()->flash('error', 'Error deleting purchase: ' . $e->getMessage());
}
}
public function render()
{
$purchases = Purchase::query()
->when($this->search, function ($query) {
$query->where('reference_no', 'like', '%' . $this->search . '%')
->orWhereHas('supplier', function ($q) {
$q->where('name', 'like', '%' . $this->search . '%');
});
})
->when($this->dateFrom, function ($query) {
$query->whereDate('date', '>=', $this->dateFrom);
})
->when($this->dateTo, function ($query) {
$query->whereDate('date', '<=', $this->dateTo);
})
->when($this->supplier_id, function ($query) {
$query->where('supplier_id', $this->supplier_id);
})
->when($this->payment_status, function ($query) {
$query->where('payment_status', $this->payment_status);
})
->where('branch_id', session('active_branch'))
->latest()
->paginate($this->perPage);
return view('purchase::livewire.purchase-list', [
'purchases' => $purchases,
'suppliers' => \Modules\People\Entities\Supplier::all()
]);
}
}