diff --git a/app/Livewire/Datatable/Studio/Finance/ExpensesTable.php b/app/Livewire/Datatable/Studio/Finance/ExpensesTable.php index fe0be75..acb72ff 100644 --- a/app/Livewire/Datatable/Studio/Finance/ExpensesTable.php +++ b/app/Livewire/Datatable/Studio/Finance/ExpensesTable.php @@ -25,6 +25,9 @@ public function columns(): array ->format(fn ($value) => currency($value, 'Rp')) ->searchable(), + Column::make('Outlet', 'outlet.name') + ->searchable(), + Column::make('Aksi') ->label(function ($row) { $actions = ''; @@ -52,6 +55,6 @@ public function columns(): array public function builder(): Builder { - return Expense::select('id', 'description', 'amount'); + return Expense::select('expenses.id', 'description', 'amount')->with('outlet'); } } diff --git a/app/Livewire/Forms/Studio/Finance/ExpenseForm.php b/app/Livewire/Forms/Studio/Finance/ExpenseForm.php index 6957a08..0b945c2 100644 --- a/app/Livewire/Forms/Studio/Finance/ExpenseForm.php +++ b/app/Livewire/Forms/Studio/Finance/ExpenseForm.php @@ -7,6 +7,7 @@ use App\Rules\UnsignedInteger; use App\Traits\WithMediaHandler; use Illuminate\Support\Facades\DB; +use Illuminate\Validation\Rule; use Livewire\Form; class ExpenseForm extends Form @@ -19,6 +20,8 @@ class ExpenseForm extends Form public string $amount = ''; + public string $outlet_id = ''; + public array $image = []; public function rules(): array @@ -26,6 +29,7 @@ public function rules(): array return [ 'description' => ['required', 'string', 'max:100'], 'amount' => ['required', new UnsignedInteger], + 'outlet_id' => [Rule::requiredIf(auth()->user()->outlets()->count() > 1), Rule::exists('outlets', 'id')], 'image' => ['nullable', 'array'], ]; } @@ -45,6 +49,7 @@ public function setExpense(Expense $expense) $this->description = $expense->description; $this->amount = $expense->amount; + $this->outlet_id = $expense->outlet_id; $this->image = $this->mapMediaCollection($expense->getMedia('image')); } @@ -57,7 +62,8 @@ public function store() $expense = Expense::create([ 'type' => ExpenseType::OPERATIONAL, 'description' => $this->description, - 'amount' => $this->amount, + 'amount' => replaceCurrency($this->amount), + 'outlet_id' => auth()->user()->outlets()->count() > 1 ? $this->outlet_id : auth()->user()->outlets()->first()->id, ]); $this->uploadMedia($this->image, $expense, 'image'); @@ -71,7 +77,7 @@ public function update() DB::transaction(function () { $this->expense->update([ 'description' => $this->description, - 'amount' => $this->amount, + 'amount' => replaceCurrency($this->amount), ]); $this->syncMedia($this->image, $this->expense, 'image'); diff --git a/app/Livewire/Studio/Finance/Expense.php b/app/Livewire/Studio/Finance/Expense.php index 4f2c85a..ed18e23 100644 --- a/app/Livewire/Studio/Finance/Expense.php +++ b/app/Livewire/Studio/Finance/Expense.php @@ -4,6 +4,7 @@ use App\Livewire\Forms\Studio\Finance\ExpenseForm; use App\Models\Expense as ExpenseModel; +use App\Models\Outlet; use App\Traits\WithAuthorization; use App\Traits\WithCloseModal; use App\Traits\WithConfirmation; @@ -21,10 +22,21 @@ class Expense extends Component public ExpenseForm $form; + public array $outlets = []; + + public bool $userHasMultipleOutlets = false; + public string $method = 'create'; public string $modalTitle = ''; + public function mount() + { + $this->outlets = Outlet::pluck('name', 'id')->toArray(); + + $this->userHasMultipleOutlets = auth()->user()->outlets()->count() > 1; + } + #[On('modal:open')] public function openModal(string $method, string $modalTitle, ?string $id = null) { diff --git a/resources/views/livewire/studio/finance/expenses.blade.php b/resources/views/livewire/studio/finance/expenses.blade.php index ef8eb73..89d4bb6 100644 --- a/resources/views/livewire/studio/finance/expenses.blade.php +++ b/resources/views/livewire/studio/finance/expenses.blade.php @@ -26,8 +26,8 @@ Keterangan * - + @@ -42,6 +42,20 @@ + @if ($userHasMultipleOutlets) + + Outlet * + + @foreach ($outlets as $key => $value) + {{ $value }} + + @endforeach + + + + @endif +

Gambar