|
@@ -2,8 +2,6 @@
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
-use App\Helpers\DateHelper;
|
|
|
|
|
-use App\Helpers\DBHelper;
|
|
|
|
|
use App\Http\Requests\Order\StoreOrderRequest;
|
|
use App\Http\Requests\Order\StoreOrderRequest;
|
|
|
use App\Models\Brigadier;
|
|
use App\Models\Brigadier;
|
|
|
use App\Models\Dictionary\Area;
|
|
use App\Models\Dictionary\Area;
|
|
@@ -11,10 +9,8 @@ use App\Models\Dictionary\District;
|
|
|
use App\Models\ObjectType;
|
|
use App\Models\ObjectType;
|
|
|
use App\Models\Order;
|
|
use App\Models\Order;
|
|
|
use App\Models\OrderStatus;
|
|
use App\Models\OrderStatus;
|
|
|
-use App\Models\Product;
|
|
|
|
|
use App\Models\User;
|
|
use App\Models\User;
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Request;
|
|
|
-use Illuminate\Support\Str;
|
|
|
|
|
|
|
|
|
|
class OrderController extends Controller
|
|
class OrderController extends Controller
|
|
|
{
|
|
{
|
|
@@ -37,7 +33,14 @@ class OrderController extends Controller
|
|
|
'order_status_id' => 'Статус',
|
|
'order_status_id' => 'Статус',
|
|
|
'tg_group_name' => 'Имя группы в ТГ',
|
|
'tg_group_name' => 'Имя группы в ТГ',
|
|
|
'tg_group_link' => 'Ссылка на группу в ТГ',
|
|
'tg_group_link' => 'Ссылка на группу в ТГ',
|
|
|
- ]
|
|
|
|
|
|
|
+ ],
|
|
|
|
|
+ 'searchFields' => [
|
|
|
|
|
+ 'comment',
|
|
|
|
|
+ 'object_address',
|
|
|
|
|
+ 'tg_group_name',
|
|
|
|
|
+ 'tg_group_link',
|
|
|
|
|
+ 'contract_number',
|
|
|
|
|
+ ],
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
public function __construct()
|
|
public function __construct()
|
|
@@ -56,98 +59,18 @@ class OrderController extends Controller
|
|
|
*/
|
|
*/
|
|
|
public function index(Request $request)
|
|
public function index(Request $request)
|
|
|
{
|
|
{
|
|
|
- $this->data['searchFields'] = [
|
|
|
|
|
- 'comment',
|
|
|
|
|
- 'object_address',
|
|
|
|
|
- 'tg_group_name',
|
|
|
|
|
- 'tg_group_link',
|
|
|
|
|
- 'contract_number',
|
|
|
|
|
- ];
|
|
|
|
|
-
|
|
|
|
|
- $filters = [
|
|
|
|
|
- 'user_id' => [
|
|
|
|
|
- 'title' => 'Менеджер',
|
|
|
|
|
- 'values' => DBHelper::getFilters('user_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- 'district_id' => [
|
|
|
|
|
- 'title' => 'Округ',
|
|
|
|
|
- 'values' => DBHelper::getFilters('district_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- 'area_id' => [
|
|
|
|
|
- 'title' => 'Район',
|
|
|
|
|
- 'values' => DBHelper::getFilters('area_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- 'object_type_id' => [
|
|
|
|
|
- 'title' => 'Тип объекта',
|
|
|
|
|
- 'values' => DBHelper::getFilters('object_type_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- 'brigadier_id' => [
|
|
|
|
|
- 'title' => 'Бригадир',
|
|
|
|
|
- 'values' => DBHelper::getFilters('brigadier_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- 'order_status_id' => [
|
|
|
|
|
- 'title' => 'Статус',
|
|
|
|
|
- 'values' => DBHelper::getFilters('order_status_id', Order::class),
|
|
|
|
|
- ],
|
|
|
|
|
- ];
|
|
|
|
|
- $ranges = [];
|
|
|
|
|
- $dates = [];
|
|
|
|
|
-
|
|
|
|
|
|
|
+ $model = new Order;
|
|
|
// fill filters
|
|
// fill filters
|
|
|
- $this->data['filters'] = $filters;
|
|
|
|
|
- $this->data['dates'] = $dates;
|
|
|
|
|
- $this->data['ranges'] = $ranges;
|
|
|
|
|
-
|
|
|
|
|
- $q = Order::query();
|
|
|
|
|
-
|
|
|
|
|
- // accept filters
|
|
|
|
|
- if(!empty($request->filters) && is_array($request->filters)) {
|
|
|
|
|
- foreach ($request->filters as $filterName => $filterValue) {
|
|
|
|
|
- if(!$filterValue) continue;
|
|
|
|
|
-
|
|
|
|
|
- if(Str::contains($filterName, 'price')) {
|
|
|
|
|
- $filterValue = $filterValue * 100;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(Str::endsWith($filterName, '_from')) {
|
|
|
|
|
- if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
|
|
|
|
|
- $filterValue .= ' 00:00:00';
|
|
|
|
|
- }
|
|
|
|
|
- $q->where(Str::replace('_from', '', $filterName), '>=', $filterValue);
|
|
|
|
|
- } elseif(Str::endsWith($filterName, '_to')) {
|
|
|
|
|
- if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
|
|
|
|
|
- $filterValue .= ' 23:59:59';
|
|
|
|
|
- }
|
|
|
|
|
- $q->where(Str::replace('_to', '', $filterName), '<=', $filterValue);
|
|
|
|
|
- } else {
|
|
|
|
|
- $q->where($filterName, '=', $filterValue);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $this->createFilters($model, 'user_id', 'district_id', 'area_id', 'object_type_id', 'brigadier_id', 'order_status_id');
|
|
|
|
|
+ $this->createDateFilters($model, 'contract_date', 'installation_date');
|
|
|
|
|
+ $this->data['ranges'] = [];
|
|
|
|
|
|
|
|
- // accept search
|
|
|
|
|
- if(!empty($request->s)) {
|
|
|
|
|
- $s = $request->s;
|
|
|
|
|
- $searchFields = $this->data['searchFields'];
|
|
|
|
|
- $q->where(function ($query) use ($searchFields, $s) {
|
|
|
|
|
- foreach ($searchFields as $searchField) {
|
|
|
|
|
- $query->orWhere($searchField, 'LIKE', '%' . $s . '%');
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- // ------- setup sort and order --------------------------------------------------------------------------------
|
|
|
|
|
- $this->data['sortBy'] = (!empty($request->sortBy))
|
|
|
|
|
- ? Str::replace('_txt', '', $request->sortBy) // remove '_txt' fields modifier
|
|
|
|
|
- : Order::DEFAULT_SORT_BY;
|
|
|
|
|
-
|
|
|
|
|
- // check for sortBy is valid field
|
|
|
|
|
- $p = new Order();
|
|
|
|
|
- if(!in_array($this->data['sortBy'], array_merge(['id', 'created_at'], $p->getFillable()))) {
|
|
|
|
|
- $this->data['sortBy'] = Order::DEFAULT_SORT_BY;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $q = $model::query();
|
|
|
|
|
+
|
|
|
|
|
+ $this->acceptFilters($q, $request);
|
|
|
|
|
+ $this->acceptSearch($q, $request);
|
|
|
|
|
+ $this->setSortAndOrderBy($model, $request);
|
|
|
|
|
|
|
|
- // set order
|
|
|
|
|
- $this->data['orderBy'] = (!empty($request->order)) ? 'desc' : 'asc';
|
|
|
|
|
$q->orderBy($this->data['sortBy'], $this->data['orderBy']);
|
|
$q->orderBy($this->data['sortBy'], $this->data['orderBy']);
|
|
|
$this->data['orders'] = $q->paginate()->withQueryString();
|
|
$this->data['orders'] = $q->paginate()->withQueryString();
|
|
|
|
|
|