util = $util;
$this->moduleUtil = $moduleUtil;
$this->accountingUtil = $accountingUtil;
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.view_journal'))) {
abort(403, 'Unauthorized action.');
}
if (request()->ajax()) {
$journal = AccountingAccTransMapping::where('accounting_acc_trans_mappings.business_id', $business_id)
->join('users as u', 'accounting_acc_trans_mappings.created_by', 'u.id')
->where('type', 'journal_entry')
->select(['accounting_acc_trans_mappings.id', 'ref_no', 'operation_date', 'note',
DB::raw("CONCAT(COALESCE(u.surname, ''),' ',COALESCE(u.first_name, ''),' ',COALESCE(u.last_name,'')) as added_by"),
]);
if (! empty(request()->start_date) && ! empty(request()->end_date)) {
$start = request()->start_date;
$end = request()->end_date;
$journal->whereDate('accounting_acc_trans_mappings.operation_date', '>=', $start)
->whereDate('accounting_acc_trans_mappings.operation_date', '<=', $end);
}
return Datatables::of($journal)
->addColumn(
'action', function ($row) {
$html = '
';
return $html;
})
->editColumn('operation_date', function ($row) {
return $this->util->format_date($row->operation_date, true);
})
->rawColumns(['action'])
->make(true);
}
return view('accounting::journal_entry.index');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.add_journal'))) {
abort(403, 'Unauthorized action.');
}
return view('accounting::journal_entry.create');
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.add_journal'))) {
abort(403, 'Unauthorized action.');
}
try {
DB::beginTransaction();
$user_id = request()->session()->get('user.id');
$account_ids = $request->get('account_id');
$credits = $request->get('credit');
$debits = $request->get('debit');
$journal_date = $request->get('journal_date');
$accounting_settings = $this->accountingUtil->getAccountingSettings($business_id);
$ref_no = $request->get('ref_no');
$ref_count = $this->util->setAndGetReferenceCount('journal_entry');
if (empty($ref_no)) {
$prefix = ! empty($accounting_settings['journal_entry_prefix']) ?
$accounting_settings['journal_entry_prefix'] : '';
//Generate reference number
$ref_no = $this->util->generateReferenceNumber('journal_entry', $ref_count, $business_id, $prefix);
}
$acc_trans_mapping = new AccountingAccTransMapping();
$acc_trans_mapping->business_id = $business_id;
$acc_trans_mapping->ref_no = $ref_no;
$acc_trans_mapping->note = $request->get('note');
$acc_trans_mapping->type = 'journal_entry';
$acc_trans_mapping->created_by = $user_id;
$acc_trans_mapping->operation_date = $this->util->uf_date($journal_date, true);
$acc_trans_mapping->save();
//save details in account trnsactions table
foreach ($account_ids as $index => $account_id) {
if (! empty($account_id)) {
$transaction_row = [];
$transaction_row['accounting_account_id'] = $account_id;
if (! empty($credits[$index])) {
$transaction_row['amount'] = $credits[$index];
$transaction_row['type'] = 'credit';
}
if (! empty($debits[$index])) {
$transaction_row['amount'] = $debits[$index];
$transaction_row['type'] = 'debit';
}
$transaction_row['created_by'] = $user_id;
$transaction_row['operation_date'] = $this->util->uf_date($journal_date, true);
$transaction_row['sub_type'] = 'journal_entry';
$transaction_row['acc_trans_mapping_id'] = $acc_trans_mapping->id;
$accounts_transactions = new AccountingAccountsTransaction();
$accounts_transactions->fill($transaction_row);
$accounts_transactions->save();
}
}
DB::commit();
$output = ['success' => 1,
'msg' => __('lang_v1.added_success'),
];
} catch (\Exception $e) {
DB::rollBack();
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
$output = ['success' => 0,
'msg' => __('messages.something_went_wrong'),
];
}
return redirect()->route('journal-entry.index')->with('status', $output);
}
/**
* Show the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.view_journal'))) {
abort(403, 'Unauthorized action.');
}
return view('accounting::journal_entry.show');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.edit_journal'))) {
abort(403, 'Unauthorized action.');
}
$journal = AccountingAccTransMapping::where('business_id', $business_id)
->where('type', 'journal_entry')
->where('id', $id)
->firstOrFail();
$accounts_transactions = AccountingAccountsTransaction::with('account')
->where('acc_trans_mapping_id', $id)
->get()->toArray();
return view('accounting::journal_entry.edit')
->with(compact('journal', 'accounts_transactions'));
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.edit_journal'))) {
abort(403, 'Unauthorized action.');
}
try {
DB::beginTransaction();
$user_id = request()->session()->get('user.id');
$account_ids = $request->get('account_id');
$accounts_transactions_id = $request->get('accounts_transactions_id');
$credits = $request->get('credit');
$debits = $request->get('debit');
$journal_date = $request->get('journal_date');
$acc_trans_mapping = AccountingAccTransMapping::where('business_id', $business_id)
->where('type', 'journal_entry')
->where('id', $id)
->firstOrFail();
$acc_trans_mapping->note = $request->get('note');
$acc_trans_mapping->operation_date = $this->util->uf_date($journal_date, true);
$acc_trans_mapping->update();
//save details in account trnsactions table
foreach ($account_ids as $index => $account_id) {
if (! empty($account_id)) {
$transaction_row = [];
$transaction_row['accounting_account_id'] = $account_id;
if (! empty($credits[$index])) {
$transaction_row['amount'] = $credits[$index];
$transaction_row['type'] = 'credit';
}
if (! empty($debits[$index])) {
$transaction_row['amount'] = $debits[$index];
$transaction_row['type'] = 'debit';
}
$transaction_row['created_by'] = $user_id;
$transaction_row['operation_date'] = $this->util->uf_date($journal_date, true);
$transaction_row['sub_type'] = 'journal_entry';
$transaction_row['acc_trans_mapping_id'] = $acc_trans_mapping->id;
if (! empty($accounts_transactions_id[$index])) {
$accounts_transactions = AccountingAccountsTransaction::find($accounts_transactions_id[$index]);
$accounts_transactions->fill($transaction_row);
$accounts_transactions->update();
} else {
$accounts_transactions = new AccountingAccountsTransaction();
$accounts_transactions->fill($transaction_row);
$accounts_transactions->save();
}
} elseif (! empty($accounts_transactions_id[$index])) {
AccountingAccountsTransaction::delete($accounts_transactions_id[$index]);
}
}
$output = ['success' => 1,
'msg' => __('lang_v1.updated_success'),
];
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
print_r($e->getMessage());
exit;
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
$output = ['success' => 0,
'msg' => __('messages.something_went_wrong'),
];
}
return redirect()->route('journal-entry.index')->with('status', $output);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
$business_id = request()->session()->get('user.business_id');
if (! (auth()->user()->can('superadmin') ||
$this->moduleUtil->hasThePermissionInSubscription($business_id, 'accounting_module')) ||
! (auth()->user()->can('accounting.delete_journal'))) {
abort(403, 'Unauthorized action.');
}
$user_id = request()->session()->get('user.id');
$acc_trans_mapping = AccountingAccTransMapping::where('id', $id)
->where('business_id', $business_id)->firstOrFail();
if (! empty($acc_trans_mapping)) {
$acc_trans_mapping->delete();
AccountingAccountsTransaction::where('acc_trans_mapping_id', $id)->delete();
}
return ['success' => 1,
'msg' => __('lang_v1.deleted_success'),
];
}
}