productUtil = $productUtil; $this->transactionUtil = $transactionUtil; $this->moduleUtil = $moduleUtil; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function getPurchaseList(Request $request) { $business_id = request()->session()->get('user.business_id'); $contact_type = Contact::where('business_id', $business_id) ->find(auth()->user()->crm_contact_id) ->type; if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'crm_module') && in_array($contact_type, ['supplier', 'both']))) { abort(403, 'Unauthorized action.'); } if ($request->ajax()) { $purchases = $this->transactionUtil->getListPurchases($business_id); //filter by payment status if (! empty($request->input('payment_status')) && $request->input('payment_status') != 'overdue') { $purchases->where('transactions.payment_status', $request->input('payment_status')); } elseif ($request->input('payment_status') == 'overdue') { $purchases->whereIn('transactions.payment_status', ['due', 'partial']) ->whereNotNull('transactions.pay_term_number') ->whereNotNull('transactions.pay_term_type') ->whereRaw("IF(transactions.pay_term_type='days', DATE_ADD(transactions.transaction_date, INTERVAL transactions.pay_term_number DAY) < CURDATE(), DATE_ADD(transactions.transaction_date, INTERVAL transactions.pay_term_number MONTH) < CURDATE())"); } //filter by purchase status if (! empty($request->status)) { $purchases->where('transactions.status', $request->status); } //filter by date if (! empty($request->start_date) && ! empty($request->end_date)) { $start = $request->start_date; $end = $request->end_date; $purchases->whereDate('transactions.transaction_date', '>=', $start) ->whereDate('transactions.transaction_date', '<=', $end); } //get purchase of logged in supplier/customer $purchases->where('contacts.id', auth()->user()->crm_contact_id); return Datatables::of($purchases) ->addColumn('action', function ($row) { $html = '