diff --git a/app/Expense.php b/app/Expense.php index b7627a34..085345f7 100644 --- a/app/Expense.php +++ b/app/Expense.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; use Crater\ExpenseCategory; +use Crater\User; use Carbon\Carbon; use Illuminate\Support\Facades\DB; @@ -16,6 +17,7 @@ class Expense extends Model implements HasMedia 'expense_category_id', 'amount', 'company_id', + 'user_id', 'expense_date', 'notes', 'attachment_receipt' @@ -32,6 +34,11 @@ class Expense extends Model implements HasMedia return $this->belongsTo(ExpenseCategory::class, 'expense_category_id'); } + public function user() + { + return $this->belongsTo(User::class); + } + public function getFormattedExpenseDateAttribute($value) { $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); @@ -81,6 +88,11 @@ class Expense extends Model implements HasMedia return $query->where('expenses.expense_category_id', $categoryId); } + public function scopeWhereUser($query, $user_id) + { + return $query->where('expenses.user_id', $user_id); + } + public function scopeApplyFilters($query, array $filters) { $filters = collect($filters); @@ -89,6 +101,10 @@ class Expense extends Model implements HasMedia $query->whereCategory($filters->get('expense_category_id')); } + if ($filters->get('user_id')) { + $query->whereUser($filters->get('user_id')); + } + if ($filters->get('from_date') && $filters->get('to_date')) { $start = Carbon::createFromFormat('d/m/Y', $filters->get('from_date')); $end = Carbon::createFromFormat('d/m/Y', $filters->get('to_date')); diff --git a/app/Http/Controllers/ExpensesController.php b/app/Http/Controllers/ExpensesController.php index 90b4c1dc..5f48a958 100644 --- a/app/Http/Controllers/ExpensesController.php +++ b/app/Http/Controllers/ExpensesController.php @@ -24,9 +24,11 @@ class ExpensesController extends Controller $limit = $request->has('limit') ? $request->limit : 10; $expenses = Expense::with('category') + ->join('users', 'users.id', '=', 'expenses.user_id') ->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id') ->applyFilters($request->only([ 'expense_category_id', + 'user_id', 'search', 'from_date', 'to_date', @@ -34,7 +36,7 @@ class ExpensesController extends Controller 'orderBy' ])) ->whereCompany($request->header('company')) - ->select('expenses.*', 'expense_categories.name') + ->select('expenses.*', 'expense_categories.name', 'users.name as user_name') ->paginate($limit); return response()->json([ @@ -76,6 +78,11 @@ class ExpensesController extends Controller $expense = new Expense(); $expense->notes = $request->notes; $expense->expense_category_id = $request->expense_category_id; + + if ($request->has('user_id') && $request->user_id != null) { + $expense->user_id = $request->user_id; + } + $expense->amount = $request->amount; $expense->company_id = $request->header('company'); $expense->expense_date = $expense_date; @@ -138,6 +145,11 @@ class ExpensesController extends Controller $expense->notes = $request->notes; $expense->expense_category_id = $request->expense_category_id; $expense->amount = $request->amount; + + if ($request->has('user_id') && $request->user_id != null) { + $expense->user_id = $request->user_id; + } + $expense->expense_date = $expense_date; $expense->save(); diff --git a/app/User.php b/app/User.php index 2879593e..c3d93b45 100644 --- a/app/User.php +++ b/app/User.php @@ -9,6 +9,7 @@ use carbon\carbon; use Crater\MemberLoan; use Crater\Address; use Crater\Payment; +use Crater\Expense; use Crater\Company; use Crater\Notifications\MailResetPasswordNotification; use Spatie\MediaLibrary\HasMedia\HasMedia; @@ -105,6 +106,11 @@ class User extends Authenticatable implements HasMedia return $this->hasMany(Address::class); } + public function expenses() + { + return $this->hasMany(Expense::class); + } + public function billingAddress() { return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE); diff --git a/database/migrations/2018_11_02_133956_create_expenses_table.php b/database/migrations/2018_11_02_133956_create_expenses_table.php index 25912644..a0e745a5 100644 --- a/database/migrations/2018_11_02_133956_create_expenses_table.php +++ b/database/migrations/2018_11_02_133956_create_expenses_table.php @@ -23,6 +23,8 @@ class CreateExpensesTable extends Migration $table->foreign('expense_category_id')->references('id')->on('expense_categories')->onDelete('cascade'); $table->integer('company_id')->unsigned()->nullable(); $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade'); + $table->integer('user_id')->unsigned()->nullable(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->timestamps(); }); }