|
|
@@ -3,11 +3,14 @@
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
use App\Helpers\Price;
|
|
|
+use App\Models\Dictionary\District;
|
|
|
use App\Models\ObjectType;
|
|
|
use App\Models\Order;
|
|
|
use App\Models\OrderStatus;
|
|
|
use App\Models\Product;
|
|
|
use App\Models\ProductSKU;
|
|
|
+use App\Models\Reclamation;
|
|
|
+use App\Models\ReclamationStatus;
|
|
|
use App\Models\User;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Str;
|
|
|
@@ -29,7 +32,8 @@ class ReportController extends Controller
|
|
|
$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['managers'] = $managers ?? [];
|
|
|
+ $this->data['doneMafsManager'] = $this->data['notDoneMafsManager'] = [];
|
|
|
|
|
|
|
|
|
// всего заказов, выполнено заказов
|
|
|
@@ -48,8 +52,8 @@ class ReportController extends Controller
|
|
|
$query->whereIn('order_status_id', $mountStatuses);
|
|
|
})->count();
|
|
|
|
|
|
- // общая сумма
|
|
|
- $this->data['totalSum'] = Price::format(
|
|
|
+ // общая сумма mount
|
|
|
+ $this->data['totalMountSum'] = Price::format(
|
|
|
ProductSKU::query()->
|
|
|
whereHas('order', function ($query) use ($mountStatuses) {
|
|
|
$query->whereIn('order_status_id', $mountStatuses);
|
|
|
@@ -121,12 +125,194 @@ class ReportController extends Controller
|
|
|
->whereNotIn('order_status_id', $mountStatuses);
|
|
|
})->count();
|
|
|
|
|
|
+ }
|
|
|
|
|
|
+ // рекламации
|
|
|
+ $this->data['totalReclamations'] = Reclamation::query()->count();
|
|
|
+ $this->data['reclamationStatuses'] = ReclamationStatus::query()->get()->pluck('name', 'id')->toArray();
|
|
|
+ foreach ($this->data['reclamationStatuses'] as $reclamationStatusId => $reclamationStatus) {
|
|
|
+ $this->data['reclamations'][$reclamationStatus] = Reclamation::query()->where('status_id', '=', $reclamationStatusId)->count();
|
|
|
}
|
|
|
+ $this->data['reclamationMafs'] = $this->data['reclamationDetails'] = [];
|
|
|
+ foreach (Reclamation::all() as $reclamation) {
|
|
|
+ foreach ($reclamation->skus as $sku) {
|
|
|
+ $a = $sku->product->article;
|
|
|
+ if(isset($this->data['reclamationMafs'][$a])){
|
|
|
+ $this->data['reclamationMafs'][$a]++;
|
|
|
+ } else {
|
|
|
+ $this->data['reclamationMafs'][$a] = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ foreach ($reclamation->details as $detail) {
|
|
|
+ $a = $detail->name;
|
|
|
+ if(isset($this->data['reclamationDetails'][$a])){
|
|
|
+ $this->data['reclamationDetails'][$a] += $detail->quantity;
|
|
|
+ } else {
|
|
|
+ $this->data['reclamationDetails'][$a] = $detail->quantity;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
+ // svod
|
|
|
+ $orderStatuses = OrderStatus::query()->get()->pluck('name', 'id')->toArray();
|
|
|
+ foreach ($orderStatuses as $orderStatusId => $orderStatus) {
|
|
|
+ $this->data['orderStatuses'][$orderStatus] = Order::query()->where('order_status_id', '=', $orderStatusId)->count();
|
|
|
+ $this->data['orderMafStatuses'][$orderStatus] = ProductSKU::query()->
|
|
|
+ whereHas('order', function ($query) use ($orderStatusId) {
|
|
|
+ $query->where('order_status_id', $orderStatusId);
|
|
|
+ })->count();
|
|
|
+ }
|
|
|
+ // общая сумма
|
|
|
+ $this->data['totalSum'] = Price::format(
|
|
|
+ ProductSKU::query()
|
|
|
+ ->withSum('product', 'total_price')
|
|
|
+ ->get()
|
|
|
+ ->sum('product_sum_total_price')
|
|
|
+ );
|
|
|
+ // общая сумма done
|
|
|
+ $this->data['totalDoneSum'] = Price::format(
|
|
|
+ ProductSKU::query()->
|
|
|
+ whereHas('order', function ($query) use ($doneStatuses) {
|
|
|
+ $query->whereIn('order_status_id', $doneStatuses);
|
|
|
+ })
|
|
|
+ ->withSum('product', 'total_price')
|
|
|
+ ->get()
|
|
|
+ ->sum('product_sum_total_price')
|
|
|
+ );
|
|
|
+
|
|
|
+ $districts = District::query()->get()->pluck('shortname', 'id')->toArray();
|
|
|
+ foreach ($districts as $districtId => $district) {
|
|
|
+
|
|
|
+ $totalOrders = $this->getOrderCount($districtId);
|
|
|
+ $totalMafs = $this->getMafCount($districtId);
|
|
|
+ $readyOrders = $this->getOrderCount($districtId, 4);
|
|
|
+ $readyMafs = $this->getMafCount($districtId, 4);
|
|
|
+ $mountOrders = $this->getOrderCount($districtId, 5);
|
|
|
+ $mountMafs = $this->getMafCount($districtId, 5);
|
|
|
+ $readyDoneOrders = $this->getOrderCount($districtId, 7);
|
|
|
+ $readyDoneMafs = $this->getMafCount($districtId, 7);
|
|
|
+ $doneOrders = $this->getOrderCount($districtId, $doneStatuses);
|
|
|
+ $doneMafs = $this->getMafCount($districtId, $doneStatuses);
|
|
|
+ $statusOstOrders = $totalOrders - $mountOrders - $readyDoneOrders - $doneOrders;
|
|
|
+ $statusOstMafs = $totalMafs - $mountMafs - $readyDoneMafs - $doneMafs;
|
|
|
+
|
|
|
+ $totalYardOrders = $this->getOrderCount($districtId, null, 1);
|
|
|
+ $totalYardMafs = $this->getMafCount($districtId, null, 1);
|
|
|
+ $mountYardOrders = $this->getOrderCount($districtId, $mountStatuses, 1);
|
|
|
+ $mountYardMafs = $this->getMafCount($districtId, $mountStatuses, 1);
|
|
|
+ $ostYardOrders = $totalYardOrders - $mountYardOrders;
|
|
|
+ $ostYardMafs = $totalYardMafs - $mountYardMafs;
|
|
|
+
|
|
|
+ $totalEduOrders = $this->getOrderCount($districtId, null, 2);
|
|
|
+ $totalEduMafs = $this->getMafCount($districtId, null, 2);
|
|
|
+ $mountEduOrders = $this->getOrderCount($districtId, $mountStatuses, 2);
|
|
|
+ $mountEduMafs = $this->getMafCount($districtId, $mountStatuses, 2);
|
|
|
+ $ostEduOrders = $totalYardOrders - $mountYardOrders;
|
|
|
+ $ostEduMafs = $totalYardMafs - $mountYardMafs;
|
|
|
+
|
|
|
+ $totalZnakOrders = $this->getOrderCount($districtId, null, 3);
|
|
|
+ $totalZnakMafs = $this->getMafCount($districtId, null, 3);
|
|
|
+ $mountZnakOrders = $this->getOrderCount($districtId, $mountStatuses, 3);
|
|
|
+ $mountZnakMafs = $this->getMafCount($districtId, $mountStatuses, 3);
|
|
|
+ $ostZnakOrders = $totalYardOrders - $mountYardOrders;
|
|
|
+ $ostZnakMafs = $totalYardMafs - $mountYardMafs;
|
|
|
+
|
|
|
+
|
|
|
+ $this->data['byDistrict'][$district] = [
|
|
|
+ 'name' => $district,
|
|
|
+ 'totalSum' => $this->getDistrictSum($districtId),
|
|
|
+ 'doneSum' => $this->getDistrictSum($districtId, $doneStatuses),
|
|
|
+ 'totalOrders' => $totalOrders,
|
|
|
+ 'totalMafs' => $totalMafs,
|
|
|
+ 'readyOrders' => $readyOrders,
|
|
|
+ 'readyMafs' => $readyMafs,
|
|
|
+ 'mountOrders' => $mountOrders,
|
|
|
+ 'mountMafs' => $mountMafs,
|
|
|
+ 'readyDoneOrders' => $readyDoneOrders,
|
|
|
+ 'readyDoneMafs' => $readyDoneMafs,
|
|
|
+ 'doneOrders' => $doneOrders,
|
|
|
+ 'doneMafs' => $doneMafs,
|
|
|
+ 'statusOstOrders' => $statusOstOrders,
|
|
|
+ 'statusOstMafs' => $statusOstMafs,
|
|
|
+
|
|
|
+ 'totalYardOrders' => $totalYardOrders,
|
|
|
+ 'totalYardMafs' => $totalYardMafs,
|
|
|
+ 'mountYardOrders' => $mountYardOrders,
|
|
|
+ 'mountYardMafs' => $mountYardMafs,
|
|
|
+ 'ostYardOrders' => $ostYardOrders,
|
|
|
+ 'ostYardMafs' => $ostYardMafs,
|
|
|
+ 'totalEduOrders' => $totalEduOrders,
|
|
|
+ 'totalEduMafs' => $totalEduMafs,
|
|
|
+ 'mountEduOrders' => $mountEduOrders,
|
|
|
+ 'mountEduMafs' => $mountEduMafs,
|
|
|
+ 'ostEduOrders' => $ostEduOrders,
|
|
|
+ 'ostEduMafs' => $ostEduMafs,
|
|
|
+ 'totalZnakOrders' => $totalZnakOrders,
|
|
|
+ 'totalZnakMafs' => $totalZnakMafs,
|
|
|
+ 'mountZnakOrders' => $mountZnakOrders,
|
|
|
+ 'mountZnakMafs' => $mountZnakMafs,
|
|
|
+ 'ostZnakOrders' => $ostZnakOrders,
|
|
|
+ 'ostZnakMafs' => $ostZnakMafs,
|
|
|
+ ];
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
return view('reports.index', $this->data);
|
|
|
}
|
|
|
+
|
|
|
+ private function getOrderCount($districtId, $status = null, $type = null)
|
|
|
+ {
|
|
|
+ $q = Order::query()->where('district_id', '=', $districtId);
|
|
|
+
|
|
|
+ if($status) {
|
|
|
+ if(!is_array($status)) $status = [$status];
|
|
|
+ $q->whereIn('order_status_id', $status);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($type) {
|
|
|
+ if(!is_array($type)) $type = [$type];
|
|
|
+ $q->whereIn('object_type_id', $type);
|
|
|
+ }
|
|
|
+ return $q->count();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getMafCount($districtId, $status = null, $type = null)
|
|
|
+ {
|
|
|
+ return ProductSKU::query()->
|
|
|
+ whereHas('order', function ($query) use ($districtId, $status, $type) {
|
|
|
+ $query->where('district_id', '=', $districtId);
|
|
|
+
|
|
|
+ if($status) {
|
|
|
+ if(!is_array($status)) $status = [$status];
|
|
|
+ $query->whereIn('order_status_id', $status);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($type) {
|
|
|
+ if(!is_array($type)) $type = [$type];
|
|
|
+ $query->whereIn('object_type_id', $type);
|
|
|
+ }
|
|
|
+ })->count();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getDistrictSum($districtId, $done = false)
|
|
|
+ {
|
|
|
+ return Price::format(
|
|
|
+ ProductSKU::query()->
|
|
|
+ whereHas('order', function ($query) use ($done, $districtId) {
|
|
|
+ $query->where('district_id', $districtId);
|
|
|
+ if($done){
|
|
|
+ $query->whereIn('order_status_id', $done);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ->withSum('product', 'total_price')
|
|
|
+ ->get()
|
|
|
+ ->sum('product_sum_total_price')
|
|
|
+ );
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
}
|