transactionUtil = $transactionUtil; $this->moduleUtil = $moduleUtil; } public function getSellList(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, ['customer', 'both']))) { abort(403, 'Unauthorized action.'); } $shipping_statuses = $this->transactionUtil->shipping_statuses(); $payment_types = $this->transactionUtil->payment_types(null, true); $with = []; if ($request->ajax()) { $sells = $this->transactionUtil->getListSells($business_id); $sells->where('contacts.id', auth()->user()->crm_contact_id); if (! empty($request->start_date) && ! empty($request->end_date)) { $start = $request->start_date; $end = $request->end_date; $sells->whereDate('transactions.transaction_date', '>=', $start) ->whereDate('transactions.transaction_date', '<=', $end); } if (! empty($request->input('payment_status')) && $request->input('payment_status') != 'overdue') { $sells->where('transactions.payment_status', $request->input('payment_status')); } elseif ($request->input('payment_status') == 'overdue') { $sells->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())"); } $sells->groupBy('transactions.id'); return Datatables::of($sells) ->addColumn( 'action', function ($row) { $html = '
'; return $html; } ) ->removeColumn('id') ->editColumn( 'final_total', '{{$final_total}}' ) ->editColumn( 'tax_amount', '{{$tax_amount}}' ) ->editColumn( 'total_paid', '{{$total_paid}}' ) ->editColumn( 'total_before_tax', '{{$total_before_tax}}' ) ->editColumn( 'discount_amount', function ($row) { $discount = ! empty($row->discount_amount) ? $row->discount_amount : 0; if (! empty($discount) && $row->discount_type == 'percentage') { $discount = $row->total_before_tax * ($discount / 100); } return ''.$discount.''; } ) ->editColumn('transaction_date', '@format_datetime($transaction_date)') ->editColumn( 'payment_status', function ($row) { $payment_status = Transaction::getPaymentStatus($row); if ($payment_status == 'partial') { $bg = 'bg-aqua'; } elseif ($payment_status == 'due') { $bg = 'bg-yellow'; } elseif ($payment_status == 'paid') { $bg = 'bg-light-green'; } elseif ($payment_status == 'overdue' || $payment_status == 'partial-overdue') { $bg = 'bg-red'; } $html = ''.__('lang_v1.'.$payment_status).' '; return $html; } ) ->editColumn( 'types_of_service_name', '{{$types_of_service_name}}' ) ->addColumn('total_remaining', function ($row) { $total_remaining = $row->final_total - $row->total_paid; $total_remaining_html = ''.$total_remaining.''; return $total_remaining_html; }) ->addColumn('return_due', function ($row) { $return_due_html = ''; if (! empty($row->return_exists)) { $return_due = $row->amount_return - $row->return_paid; $return_due_html .= ''.$return_due.''; } return $return_due_html; }) ->editColumn('invoice_no', function ($row) { $invoice_no = $row->invoice_no; if (! empty($row->woocommerce_order_id)) { $invoice_no .= ' '; } if (! empty($row->return_exists)) { $invoice_no .= '  '; } if (! empty($row->is_recurring)) { $invoice_no .= '  '; } if (! empty($row->recur_parent_id)) { $invoice_no .= '  '; } return $invoice_no; }) ->editColumn('shipping_status', function ($row) use ($shipping_statuses) { $status_color = ! empty($this->shipping_status_colors[$row->shipping_status]) ? $this->shipping_status_colors[$row->shipping_status] : 'bg-gray'; $status = ! empty($row->shipping_status) ? ''.$shipping_statuses[$row->shipping_status].'' : ''; return $status; }) ->addColumn('payment_methods', function ($row) use ($payment_types) { $methods = array_unique($row->payment_lines->pluck('method')->toArray()); $count = count($methods); $payment_method = ''; if ($count == 1) { $payment_method = $payment_types[$methods[0]]; } elseif ($count > 1) { $payment_method = __('lang_v1.checkout_multi_pay'); } $html = ! empty($payment_method) ? ''.$payment_method.'' : ''; return $html; }) ->setRowAttr([ 'data-href' => function ($row) { return action([\App\Http\Controllers\SellController::class, 'show'], [$row->id]); }, ]) ->rawColumns(['final_total', 'action', 'total_paid', 'total_remaining', 'payment_status', 'invoice_no', 'discount_amount', 'tax_amount', 'total_before_tax', 'shipping_status', 'types_of_service_name', 'payment_methods', 'return_due']) ->make(true); } return view('crm::sell.index'); } }