dbfdg can('manage journal entry')) { $journalEntries = JournalEntry::where('created_by', '=', \Auth::user()->creatorId())->get(); return view('journalEntry.index', compact('journalEntries')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function create() { if (\Auth::user()->can('create journal entry')) { $chartAccounts = ChartOfAccount::select(\DB::raw('CONCAT(chart_of_accounts.code, " - ", chart_of_accounts.name) AS code_name,chart_of_accounts.id, chart_of_accounts.code, chart_of_accounts.parent')) ->where('parent', '=', 0) ->where('created_by', \Auth::user()->creatorId())->get() ->toarray(); $subAccounts = ChartOfAccount::select(\DB::raw('CONCAT(chart_of_accounts.code, " - ", chart_of_accounts.name) AS code_name , chart_of_accounts.id, chart_of_accounts.code , chart_of_account_parents.account')); $subAccounts->leftjoin('chart_of_account_parents', 'chart_of_accounts.parent', 'chart_of_account_parents.id'); $subAccounts->where('chart_of_accounts.parent', '!=', 0); $subAccounts->where('chart_of_accounts.created_by', \Auth::user()->creatorId()); $subAccounts = $subAccounts->get()->toArray(); $journalId = $this->journalNumber(); return view('journalEntry.create', compact('chartAccounts', 'subAccounts', 'journalId')); } else { return response()->json(['error' => __('Permission denied.')], 401); } } public function store(Request $request) { if (\Auth::user()->can('create invoice')) { $validator = \Validator::make( $request->all(), [ 'date' => 'required', 'accounts' => 'required', ] ); if ($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $accounts = $request->accounts; $totalDebit = 0; $totalCredit = 0; for ($i = 0; $i < count($accounts); $i++) { $debit = isset($accounts[$i]['debit']) ? $accounts[$i]['debit'] : 0; $credit = isset($accounts[$i]['credit']) ? $accounts[$i]['credit'] : 0; $totalDebit += $debit; $totalCredit += $credit; } // $totalDebit += $debit; if ($totalCredit != $totalDebit) { return redirect()->back()->with('error', __('Debit and Credit must be Equal.')); } $journal = new JournalEntry(); $journal->journal_id = $this->journalNumber(); $journal->date = $request->date; $journal->reference = $request->reference; $journal->description = $request->description; $journal->created_by = \Auth::user()->creatorId(); $journal->save(); for ($i = 0; $i < count($accounts); $i++) { $journalItem = new JournalItem(); $journalItem->journal = $journal->id; $journalItem->account = $accounts[$i]['account']; $journalItem->description = $accounts[$i]['description']; $journalItem->debit = isset($accounts[$i]['debit']) ? $accounts[$i]['debit'] : 0; $journalItem->credit = isset($accounts[$i]['credit']) ? $accounts[$i]['credit'] : 0; $journalItem->save(); $bankAccounts = BankAccount::where('chart_account_id', '=', $accounts[$i]['account'])->get(); if (!empty($bankAccounts)) { foreach ($bankAccounts as $bankAccount) { $old_balance = $bankAccount->opening_balance; if ($journalItem->debit > 0) { $new_balance = $old_balance - $journalItem->debit; } if ($journalItem->credit > 0) { $new_balance = $old_balance + $journalItem->credit; } if (isset($new_balance)) { $bankAccount->opening_balance = $new_balance; $bankAccount->save(); } } } if (isset($accounts[$i]['debit'])) { $data = [ 'account_id' => $accounts[$i]['account'], 'transaction_type' => 'Debit', 'transaction_amount' => $accounts[$i]['debit'], 'reference' => 'Journal', 'reference_id' => $journal->id, 'reference_sub_id' => $journalItem->id, 'date' => $journal->date, ]; } else { $data = [ 'account_id' => $accounts[$i]['account'], 'transaction_type' => 'Credit', 'transaction_amount' => $accounts[$i]['credit'], 'reference' => 'Journal', 'reference_id' => $journal->id, 'reference_sub_id' => $journalItem->id, 'date' => $journal->date, ]; } Utility::addTransactionLines($data , 'create'); } return redirect()->route('journal-entry.index')->with('success', __('Journal entry successfully created.')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function show(JournalEntry $journalEntry) { if (\Auth::user()->can('show journal entry')) { if ($journalEntry->created_by == \Auth::user()->creatorId()) { $accounts = $journalEntry->accounts; $settings = Utility::settings(); return view('journalEntry.view', compact('journalEntry', 'accounts', 'settings')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function edit(JournalEntry $journalEntry) { if (\Auth::user()->can('edit journal entry')) { $chartAccounts = ChartOfAccount::select(\DB::raw('CONCAT(chart_of_accounts.code, " - ", chart_of_accounts.name) AS code_name,chart_of_accounts.id, chart_of_accounts.code, chart_of_accounts.parent')) ->where('parent', '=', 0) ->where('created_by', \Auth::user()->creatorId())->get() ->toarray(); $subAccounts = ChartOfAccount::select(\DB::raw('CONCAT(chart_of_accounts.code, " - ", chart_of_accounts.name) AS code_name , chart_of_accounts.id, chart_of_accounts.code , chart_of_account_parents.account')); $subAccounts->leftjoin('chart_of_account_parents', 'chart_of_accounts.parent', 'chart_of_account_parents.id'); $subAccounts->where('chart_of_accounts.parent', '!=', 0); $subAccounts->where('chart_of_accounts.created_by', \Auth::user()->creatorId()); $subAccounts = $subAccounts->get()->toArray(); return view('journalEntry.edit', compact('chartAccounts', 'journalEntry' , 'subAccounts')); } else { return response()->json(['error' => __('Permission denied.')], 401); } } public function update(Request $request, JournalEntry $journalEntry) { if (\Auth::user()->can('edit journal entry')) { if ($journalEntry->created_by == \Auth::user()->creatorId()) { $validator = \Validator::make( $request->all(), [ 'date' => 'required', 'accounts' => 'required', ] ); if ($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $accounts = $request->accounts; $totalDebit = 0; $totalCredit = 0; for ($i = 0; $i < count($accounts); $i++) { $debit = isset($accounts[$i]['debit']) ? $accounts[$i]['debit'] : 0; $credit = isset($accounts[$i]['credit']) ? $accounts[$i]['credit'] : 0; $totalDebit += $debit; $totalCredit += $credit; } if ($totalCredit != $totalDebit) { return redirect()->back()->with('error', __('Debit and Credit must be Equal.')); } $journalEntry->date = $request->date; $journalEntry->reference = $request->reference; $journalEntry->description = $request->description; $journalEntry->created_by = \Auth::user()->creatorId(); $journalEntry->save(); for ($i = 0; $i < count($accounts); $i++) { $journalItem = JournalItem::find($accounts[$i]['id']); if ($journalItem == null) { $journalItem = new JournalItem(); $journalItem->journal = $journalEntry->id; } if (isset($accounts[$i]['account'])) { $journalItem->account = $accounts[$i]['account']; } $journalItem->description = $accounts[$i]['description']; $journalItem->debit = isset($accounts[$i]['debit']) ? $accounts[$i]['debit'] : 0; $journalItem->credit = isset($accounts[$i]['credit']) ? $accounts[$i]['credit'] : 0; $journalItem->save(); $bankAccounts = BankAccount::where('chart_account_id', '=', $accounts[$i]['account'])->get(); if (!empty($bankAccounts)) { foreach ($bankAccounts as $bankAccount) { $old_balance = $bankAccount->opening_balance; if ($journalItem->debit > 0) { $new_balance = $old_balance - $journalItem->debit; } if ($journalItem->credit > 0) { $new_balance = $old_balance + $journalItem->credit; } if (isset($new_balance)) { $bankAccount->opening_balance = $new_balance; $bankAccount->save(); } } } if (isset($accounts[$i]['debit'])) { $data = [ 'account_id' => $accounts[$i]['account'], 'transaction_type' => 'Debit', 'transaction_amount' => $accounts[$i]['debit'], 'reference' => 'Journal', 'reference_id' => $journalEntry->id, 'reference_sub_id' => $journalItem->id, 'date' => $journalEntry->date, ]; } else { $data = [ 'account_id' => $accounts[$i]['account'], 'transaction_type' => 'Credit', 'transaction_amount' => $accounts[$i]['credit'], 'reference' => 'Journal', 'reference_id' => $journalEntry->id, 'reference_sub_id' => $journalItem->id, 'date' => $journalEntry->date, ]; } Utility::addTransactionLines($data , 'edit'); } return redirect()->route('journal-entry.index')->with('success', __('Journal entry successfully updated.')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function destroy(JournalEntry $journalEntry) { if (\Auth::user()->can('delete journal entry')) { if ($journalEntry->created_by == \Auth::user()->creatorId()) { $journalEntry->delete(); JournalItem::where('journal', '=', $journalEntry->id)->delete(); TransactionLines::where('reference_id', $journalEntry->id)->where('reference', 'Journal')->delete(); return redirect()->route('journal-entry.index')->with('success', __('Journal entry successfully deleted.')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function journalNumber() { $latest = JournalEntry::where('created_by', '=', \Auth::user()->creatorId())->latest()->first(); if (!$latest) { return 1; } return $latest->journal_id + 1; } public function accountDestroy(Request $request) { if (\Auth::user()->can('delete journal entry')) { JournalItem::where('id', '=', $request->id)->delete(); return redirect()->back()->with('success', __('Journal entry account successfully deleted.')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function journalDestroy($item_id) { if (\Auth::user()->can('delete journal entry')) { $journal = JournalItem::find($item_id); $journal->delete(); return redirect()->back()->with('success', __('Journal account successfully deleted.')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } }