From b8958c9eb6df5f1e7a8e8ca10702585e913cc2e6 Mon Sep 17 00:00:00 2001 From: Jay Makwana Date: Tue, 17 Mar 2020 19:20:42 +0530 Subject: [PATCH 1/5] add customer in expense --- app/Http/Controllers/ExpensesController.php | 14 ++++++++--- resources/assets/js/views/expenses/Create.vue | 25 ++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/ExpensesController.php b/app/Http/Controllers/ExpensesController.php index b2f15b502..90b4c1dcb 100644 --- a/app/Http/Controllers/ExpensesController.php +++ b/app/Http/Controllers/ExpensesController.php @@ -53,9 +53,13 @@ public function index(Request $request) public function create(Request $request) { $categories = ExpenseCategory::whereCompany($request->header('company'))->get(); + $customers = User::customer() + ->whereCompany($request->header('company')) + ->get(); return response()->json([ - 'categories' => $categories + 'categories' => $categories, + 'customers' => $customers ]); } @@ -107,7 +111,9 @@ public function show(Expense $expense) public function edit(Request $request,$id) { $categories = ExpenseCategory::whereCompany($request->header('company'))->get(); - $customers = User::where('role', 'customer')->whereCompany($request->header('company'))->get(); + $customers = User::customer() + ->whereCompany($request->header('company')) + ->get(); $expense = Expense::with('category')->where('id', $id)->first(); return response()->json([ @@ -205,7 +211,7 @@ public function uploadReceipts(Request $request, $id) * Retrive details of an expense receipt from storage. * @param int $id * @return \Illuminate\Http\JsonResponse - */ + */ public function showReceipt($id) { $expense = Expense::find($id); @@ -239,7 +245,7 @@ public function showReceipt($id) * @param int $id * @param strig $hash * @return \Symfony\Component\HttpFoundation\BinaryFileResponse | \Illuminate\Http\JsonResponse - */ + */ public function downloadReceipt($id, $hash) { $company = Company::where('unique_hash', $hash)->first(); diff --git a/resources/assets/js/views/expenses/Create.vue b/resources/assets/js/views/expenses/Create.vue index 1acdecc7c..6eadb5a4f 100644 --- a/resources/assets/js/views/expenses/Create.vue +++ b/resources/assets/js/views/expenses/Create.vue @@ -102,6 +102,19 @@ {{ $t('validation.price_minvalue') }} +
+ * + +
Date: Tue, 17 Mar 2020 19:38:59 +0530 Subject: [PATCH 2/5] add languages --- resources/assets/js/plugins/ar.json | 1 + resources/assets/js/plugins/de.json | 1 + resources/assets/js/plugins/en.json | 1 + resources/assets/js/plugins/es.json | 1 + resources/assets/js/plugins/fr.json | 1 + resources/assets/js/plugins/pt-br.json | 1 + resources/assets/js/views/expenses/Create.vue | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/resources/assets/js/plugins/ar.json b/resources/assets/js/plugins/ar.json index 67b81f35d..c87df61b3 100644 --- a/resources/assets/js/plugins/ar.json +++ b/resources/assets/js/plugins/ar.json @@ -412,6 +412,7 @@ "title": "النفقات", "expenses_list": "قائمة النفقات", "expense_title": "Title", + "customer": "العميل", "contact": "تواصل", "category": "الفئة", "from_date": "من تاريخ", diff --git a/resources/assets/js/plugins/de.json b/resources/assets/js/plugins/de.json index 2779e0fe9..969350d65 100644 --- a/resources/assets/js/plugins/de.json +++ b/resources/assets/js/plugins/de.json @@ -215,6 +215,7 @@ "title": "Titel" }, "category": "Kategorie", + "customer": "Kunden", "category_id": "Kategorie-Id", "confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.", "contact": "Kontakt", diff --git a/resources/assets/js/plugins/en.json b/resources/assets/js/plugins/en.json index 47d7b22f2..4e6ef582f 100644 --- a/resources/assets/js/plugins/en.json +++ b/resources/assets/js/plugins/en.json @@ -427,6 +427,7 @@ "title": "Expenses", "expenses_list": "Expenses List", "expense_title": "Title", + "customer": "Customer", "contact": "Contact", "category": "Category", "from_date": "From Date", diff --git a/resources/assets/js/plugins/es.json b/resources/assets/js/plugins/es.json index 208f79c2d..7082bd1b2 100644 --- a/resources/assets/js/plugins/es.json +++ b/resources/assets/js/plugins/es.json @@ -412,6 +412,7 @@ "expenses_list": "Lista de gastos", "expense_title": "Título", "contact": "Contacto", + "customer": "Cliente", "category": "Categoría", "from_date": "Desde la fecha", "to_date": "Hasta la fecha", diff --git a/resources/assets/js/plugins/fr.json b/resources/assets/js/plugins/fr.json index a54448503..49a0b4e72 100644 --- a/resources/assets/js/plugins/fr.json +++ b/resources/assets/js/plugins/fr.json @@ -410,6 +410,7 @@ "expenses_list": "Liste des dépenses", "expense_title": "Titre", "contact": "Contact", + "customer": "Client Client", "category": "Catégorie", "from_date": "A partir de la date", "to_date": "À ce jour", diff --git a/resources/assets/js/plugins/pt-br.json b/resources/assets/js/plugins/pt-br.json index cc97d497e..7d12081d1 100644 --- a/resources/assets/js/plugins/pt-br.json +++ b/resources/assets/js/plugins/pt-br.json @@ -414,6 +414,7 @@ "expense_title": "Título", "contact": "Contato", "category": "Categoria", + "customer": "Cliente", "from_date": "A partir da Data", "to_date": "Até a Data", "expense_date": "Data", diff --git a/resources/assets/js/views/expenses/Create.vue b/resources/assets/js/views/expenses/Create.vue index 6eadb5a4f..47c34d41c 100644 --- a/resources/assets/js/views/expenses/Create.vue +++ b/resources/assets/js/views/expenses/Create.vue @@ -103,7 +103,7 @@
- * + Date: Wed, 18 Mar 2020 17:19:09 +0530 Subject: [PATCH 3/5] add customer filter on index --- app/Http/Controllers/ExpensesController.php | 5 ++++ resources/assets/js/plugins/ar.json | 1 + resources/assets/js/plugins/de.json | 1 + resources/assets/js/plugins/en.json | 1 + resources/assets/js/plugins/es.json | 1 + resources/assets/js/plugins/fr.json | 1 + resources/assets/js/views/expenses/Index.vue | 27 ++++++++++++++++---- 7 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/ExpensesController.php b/app/Http/Controllers/ExpensesController.php index 90b4c1dcb..7cf4dd2b8 100644 --- a/app/Http/Controllers/ExpensesController.php +++ b/app/Http/Controllers/ExpensesController.php @@ -37,8 +37,13 @@ public function index(Request $request) ->select('expenses.*', 'expense_categories.name') ->paginate($limit); + $customers = User::customer() + ->whereCompany($request->header('company')) + ->get(); + return response()->json([ 'expenses' => $expenses, + 'customers' => $customers, 'currency' => Currency::findOrFail( CompanySetting::getSetting('currency', $request->header('company')) ) diff --git a/resources/assets/js/plugins/ar.json b/resources/assets/js/plugins/ar.json index c87df61b3..fa7846990 100644 --- a/resources/assets/js/plugins/ar.json +++ b/resources/assets/js/plugins/ar.json @@ -412,6 +412,7 @@ "title": "النفقات", "expenses_list": "قائمة النفقات", "expense_title": "Title", + "select_a_customer": "حدد عميلاً", "customer": "العميل", "contact": "تواصل", "category": "الفئة", diff --git a/resources/assets/js/plugins/de.json b/resources/assets/js/plugins/de.json index 969350d65..a7e00b8d1 100644 --- a/resources/assets/js/plugins/de.json +++ b/resources/assets/js/plugins/de.json @@ -201,6 +201,7 @@ "action": "Aktion", "add_expense": "Aufwendung hinzufügen", "add_new_expense": "Neue Aufwendung hinzufügen", + "select_a_customer": "Wählen Sie einen Kunden aus", "amount": "Summe", "categories": { "actions": "Aktionen", diff --git a/resources/assets/js/plugins/en.json b/resources/assets/js/plugins/en.json index 4e6ef582f..430ca4b18 100644 --- a/resources/assets/js/plugins/en.json +++ b/resources/assets/js/plugins/en.json @@ -426,6 +426,7 @@ "expenses": { "title": "Expenses", "expenses_list": "Expenses List", + "select_a_customer": "Select a customer", "expense_title": "Title", "customer": "Customer", "contact": "Contact", diff --git a/resources/assets/js/plugins/es.json b/resources/assets/js/plugins/es.json index 7082bd1b2..4d571df18 100644 --- a/resources/assets/js/plugins/es.json +++ b/resources/assets/js/plugins/es.json @@ -413,6 +413,7 @@ "expense_title": "Título", "contact": "Contacto", "customer": "Cliente", + "select_a_customer": "Selecciona un cliente", "category": "Categoría", "from_date": "Desde la fecha", "to_date": "Hasta la fecha", diff --git a/resources/assets/js/plugins/fr.json b/resources/assets/js/plugins/fr.json index 49a0b4e72..689a1537f 100644 --- a/resources/assets/js/plugins/fr.json +++ b/resources/assets/js/plugins/fr.json @@ -411,6 +411,7 @@ "expense_title": "Titre", "contact": "Contact", "customer": "Client Client", + "select_a_customer": "Sélectionnez un client", "category": "Catégorie", "from_date": "A partir de la date", "to_date": "À ce jour", diff --git a/resources/assets/js/views/expenses/Index.vue b/resources/assets/js/views/expenses/Index.vue index d8790ecd8..98f98e4d6 100644 --- a/resources/assets/js/views/expenses/Index.vue +++ b/resources/assets/js/views/expenses/Index.vue @@ -43,7 +43,19 @@
-
+
+ + +
+
-
+
-
+
{ From bc99ad63a67e767a2d89196603c4058b5038fc21 Mon Sep 17 00:00:00 2001 From: jayvirsinh_gohil Date: Wed, 18 Mar 2020 17:40:03 +0530 Subject: [PATCH 4/5] add user to expense --- app/Expense.php | 16 ++++++++++++++++ app/Http/Controllers/ExpensesController.php | 14 +++++++++++++- app/User.php | 6 ++++++ .../2018_11_02_133956_create_expenses_table.php | 2 ++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/app/Expense.php b/app/Expense.php index b7627a347..085345f79 100644 --- a/app/Expense.php +++ b/app/Expense.php @@ -5,6 +5,7 @@ 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 @@ public function category() 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 @@ public function scopeWhereCategory($query, $categoryId) 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 @@ public function scopeApplyFilters($query, array $filters) $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 90b4c1dcb..5f48a958d 100644 --- a/app/Http/Controllers/ExpensesController.php +++ b/app/Http/Controllers/ExpensesController.php @@ -24,9 +24,11 @@ public function index(Request $request) $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 @@ public function index(Request $request) '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 @@ public function store(ExpenseRequest $request) $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 @@ public function update(ExpenseRequest $request, Expense $expense) $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 2879593ee..c3d93b454 100644 --- a/app/User.php +++ b/app/User.php @@ -9,6 +9,7 @@ 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 @@ public function addresses() 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 259126446..a0e745a58 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 @@ public function up() $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(); }); } From 82d85af6727db5a228406e3794d272954345486f Mon Sep 17 00:00:00 2001 From: Jay Makwana Date: Wed, 18 Mar 2020 18:21:53 +0530 Subject: [PATCH 5/5] refactor and merge backend --- app/Http/Controllers/ExpensesController.php | 14 +++----------- resources/assets/js/views/expenses/Create.vue | 3 +++ resources/assets/js/views/expenses/Index.vue | 5 +++++ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/ExpensesController.php b/app/Http/Controllers/ExpensesController.php index 1ce866644..9b0d97d57 100644 --- a/app/Http/Controllers/ExpensesController.php +++ b/app/Http/Controllers/ExpensesController.php @@ -24,7 +24,7 @@ public function index(Request $request) $limit = $request->has('limit') ? $request->limit : 10; $expenses = Expense::with('category') - ->join('users', 'users.id', '=', 'expenses.user_id') + ->leftJoin('users', 'users.id', '=', 'expenses.user_id') ->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id') ->applyFilters($request->only([ 'expense_category_id', @@ -83,11 +83,7 @@ public function store(ExpenseRequest $request) $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->user_id = $request->user_id; $expense->amount = $request->amount; $expense->company_id = $request->header('company'); $expense->expense_date = $expense_date; @@ -150,11 +146,7 @@ public function update(ExpenseRequest $request, Expense $expense) $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->user_id = $request->user_id; $expense->expense_date = $expense_date; $expense->save(); diff --git a/resources/assets/js/views/expenses/Create.vue b/resources/assets/js/views/expenses/Create.vue index 47c34d41c..9a26df11e 100644 --- a/resources/assets/js/views/expenses/Create.vue +++ b/resources/assets/js/views/expenses/Create.vue @@ -322,6 +322,9 @@ export default { this.formData.expense_date = moment(this.formData.expense_date).toString() this.formData.amount = (response.data.expense.amount) this.fileSendUrl = `/api/expenses/${this.$route.params.id}` + if (response.data.expense.user_id) { + this.customer = this.customerList.find(customer => customer.id === response.data.expense.user_id) + } } }, async sendData () { diff --git a/resources/assets/js/views/expenses/Index.vue b/resources/assets/js/views/expenses/Index.vue index 98f98e4d6..c39f06591 100644 --- a/resources/assets/js/views/expenses/Index.vue +++ b/resources/assets/js/views/expenses/Index.vue @@ -173,6 +173,11 @@ sort-as="name" show="category.name" /> +