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 @@