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');
}
}