| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- namespace App\Http\Controllers;
- use App\Helpers\Price;
- use App\Models\ObjectType;
- use App\Models\Order;
- use App\Models\OrderStatus;
- use App\Models\Product;
- use App\Models\ProductSKU;
- use App\Models\User;
- use Illuminate\Http\Request;
- use Illuminate\Support\Str;
- class ReportController extends Controller
- {
- protected array $data = [
- 'active' => 'reports',
- 'title' => 'Отчёты',
- 'id' => 'reports',
- ];
- public function index()
- {
- $mountStatuses = [5, 7, 8, 9, 10];
- $doneStatuses = [9, 10];
- $objectTypes = ObjectType::query()->get()->pluck('name', 'id')->toArray();
- $this->data['objectTypes'] = $objectTypes;
- $user_ids = Order::query()->distinct()->get('user_id')->pluck('user_id')->toArray();
- $managers = User::query()->whereIn('id', $user_ids)->get()->pluck('name', 'id')->toArray();
- $this->data['managers'] = $managers;
- // всего заказов, выполнено заказов
- $this->data['totalOrders'] = Order::all()->count();
- $this->data['doneOrders'] = Order::query()->whereIn('order_status_id', $doneStatuses)->count();
- $this->data['mountOrders'] = Order::query()->whereIn('order_status_id', $mountStatuses)->count();
- // всего маф / завершено маф / установлено маф
- $this->data['totalMafs'] = ProductSKU::all()->count();
- $this->data['doneMafs'] = ProductSKU::query()->
- whereHas('order', function ($query) use ($doneStatuses) {
- $query->whereIn('order_status_id', $doneStatuses);
- })->count();
- $this->data['mountMafs'] = ProductSKU::query()->
- whereHas('order', function ($query) use ($mountStatuses){
- $query->whereIn('order_status_id', $mountStatuses);
- })->count();
- // общая сумма
- $this->data['totalSum'] = Price::format(
- ProductSKU::query()->
- whereHas('order', function ($query) use ($mountStatuses) {
- $query->whereIn('order_status_id', $mountStatuses);
- })
- ->withSum('product', 'total_price')
- ->get()
- ->sum('product_sum_total_price')
- );
- // done by managers
- foreach ($managers as $userId => $userName) {
- $this->data['totalOrderManager'] = Order::where('user_id', $userId)->count();
- $this->data['totalMafsManager'][$userId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($userId) {
- $query->where('user_id', '=', $userId);
- })->count();
- $this->data['doneOrdersManager'][$userId] = Order::query()
- ->where('user_id', '=', $userId)
- ->whereIn('order_status_id', $doneStatuses)
- ->count();
- $this->data['doneMafsManager'][$userId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($userId, $doneStatuses) {
- $query->where('user_id', '=', $userId)
- ->whereIn('order_status_id', $doneStatuses);
- })->count();
- $this->data['notDoneOrdersManager'][$userId] = Order::query()
- ->where('user_id', '=', $userId)
- ->whereNotIn('order_status_id', $doneStatuses)
- ->count();
- $this->data['notDoneMafsManager'][$userId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($userId, $doneStatuses) {
- $query->where('user_id', '=', $userId)
- ->whereNotIn('order_status_id', $doneStatuses);
- })->count();
- }
- // total mount by types
- foreach ($objectTypes as $objectTypeId => $objectType) {
- // total by types
- $this->data['totalOrdersType'][$objectTypeId] = Order::where('object_type_id', '=', $objectTypeId)->count();
- $this->data['totalMafsType'][$objectTypeId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($objectTypeId) {
- $query->where('object_type_id', '=', $objectTypeId);
- })->count();
- // со статусами: в монтаже, готова к сдаче, не сдана замечания, сдана замечания, сдана - зеленый цвет
- $this->data['mountOrdersType'][$objectTypeId] = Order::query()
- ->where('object_type_id', '=', $objectTypeId)
- ->whereIn('order_status_id', $mountStatuses)
- ->count();
- $this->data['mountMafsType'][$objectTypeId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($objectTypeId, $mountStatuses) {
- $query->where('object_type_id', '=', $objectTypeId)
- ->whereIn('order_status_id', $mountStatuses);
- })->count();
- // остальные - не готовы
- $this->data['notMountOrdersType'][$objectTypeId] = Order::query()
- ->where('object_type_id', '=', $objectTypeId)
- ->whereNotIn('order_status_id', $mountStatuses)
- ->count();
- $this->data['notMountMafsType'][$objectTypeId] = ProductSKU::query()->
- whereHas('order', function ($query) use ($objectTypeId, $mountStatuses) {
- $query->where('object_type_id', '=', $objectTypeId)
- ->whereNotIn('order_status_id', $mountStatuses);
- })->count();
- }
- return view('reports.index', $this->data);
- }
- }
|