Untitled

 avatar
unknown
plain_text
5 months ago
6.2 kB
2
Indexable
public function dailyStockList(Request $request, $activeTab)
    {
        date_default_timezone_set('Africa/Lusaka');
        $organization_id = auth()->user()->organization_id;
        $RoutePlan = RoutePlan::query()
            ->with(['vehicle', 'product'])
            ->where("organization_id", $organization_id)
            ->orderBy('id', 'desc');

        if (!empty($request['cluster'])) {
            $RoutePlan->whereIn("cluster_id", $request['cluster']);
        }

        $product_types = Auth::user()->roles->whereNotNull("product_type")->pluck("product_type")->toArray();
        if (!empty($request['product'])) {
            $RoutePlan->where("product_id", $request['product']);
        } else if (isset($activeTab)) {
            $product_types = ProductCategory::where('name', $activeTab)->pluck('id')->flatten()->unique()->toArray();
        }

        if (!empty($product_types)) {
            $prodCat = ProductCategory::whereIn('parent_id', $product_types)->pluck('id')->flatten()->unique()->toArray();
            if (count($prodCat) == 0) {
                $productIds = Product::whereIn('id', $product_types)->pluck('id')->toArray();
            } else {
                $productIds = Product::whereIn('product_category_id', $prodCat)->pluck('id')->toArray();
            }
            if (!empty($productIds)) {
                $RoutePlan->whereIn("product_id", $productIds);
            }
        }

        $date = !empty($request['date']) ? $request['date'] : date("Y-m-d");
        $RoutePlan->whereDate("plan_date", $date);

        $todate = !empty($request['date']) ? $request['date'] : date("Y-m-d");
        $RoutePlan->whereDate("plan_date", $todate);

        $route_plans = $RoutePlan->get()->groupBy('vehicle_id');
        $records = [];
        $default = "-";

        foreach ($route_plans as $vehicle_id => $plans) {
            $plan = $plans->first(); // Assuming the first plan for each vehicle_id is the one you want to use
            $product = $plan->product->name;
            $product_desc = $plan->product->description;
            $RoutePlanDetails = RoutePlanDetails::with("subject")
                ->whereHas('routePlan', function ($query) use ($vehicle_id, $date) {
                    $query->where("vehicle_id", $vehicle_id);
                    $query->where("plan_date", $date);
                    $query->where("plan_date", $todate);
                })->orderBy('id', 'desc')->get();
            // dd($RoutePlanDetails);

            // Refill Quantity
            // $refill_detail = $RoutePlanDetails->where('routine_type', 'refill')->map(function ($item) {
            // return ($item->delivered_quantity === null || $item->delivered_quantity == 0.00) ? $item->quantity : $item->delivered_quantity;
            // })->sum();
            //85-3=> 82 , 82-3 =>79
            $refill_detail = $RoutePlanDetails->where('routine_type', 'refill')->map(function ($item) {
                return ($item->delivered_quantity === null || $item->delivered_quantity == 0.00) ? $item->quantity : $item->delivered_quantity;
            })->values()->all();
            // dd($refill_detail);
            $refill_sum = !empty($refill_detail) ? array_sum($refill_detail) : 0;

            // Opening Stock
            $opening_stock = $plan->inventory_at_start + $refill_sum;

            // Closing Stock
            $last_detail = $RoutePlanDetails->where('routine_type', 'delivery')->first();
            // $last_detail = $RoutePlanDetails->where('routinxe_type', 'delivery')->all();
            $orderQuantity = !empty($last_detail->delivered_quantity) && $last_detail->delivered_quantity > 0 ? $last_detail->delivered_quantity : (!empty($last_detail->quantity) ? $last_detail->quantity : 0);


            // Sold Quanity
            $sold = $RoutePlanDetails->where("routine_type", "delivery")->sum("delivered_quantity");

            $closing_stock = $opening_stock - $sold;


            // $subject = $RoutePlanDetails->where("routine_type", "refill")->pluck("subject")->first(); 
            $subject = $RoutePlanDetails->where('routine_type', 'refill')->pluck("subject")->map(function ($item) {
                return  $item->name;
            })->values()->all();
            $subject_name = !empty($subject['name']) ? $subject['name'] : "";

            $VehicleReadings = VehicleReadings::with('reference')
                ->where("vehicle_id", $vehicle_id)
                ->whereDate("created_at", $date)
                ->where("reference_type", "route-plan-details")
                ->get();

            $du1_start_total = $VehicleReadings->where("reference.subject_type", "order")->min('totalizer_du1');
            $du1_end_total = $VehicleReadings->where("reference.subject_type", "order")->max('totalizer_du1');
            $du1_total = $du1_end_total - $du1_start_total;
            $totalizer_match = $du1_total;

            $start_odometer = $VehicleReadings->where("reference.subject_type", "start")->sum("odometer");
            $end_odometer = $VehicleReadings->where("reference.subject_type", "end")->sum("odometer");
            $km_travl = $end_odometer - $start_odometer;

            $row = [
                $plan->vehicle->vehicle_no,
                $product,
                $product_desc,
                !empty($subject) ? implode(', ', $subject) : "-",
                $opening_stock,
                $closing_stock,
                $sold,
                // $refill_detail,
                !empty($refill_detail) ? implode(', ', $refill_detail) : 0,
                $totalizer_match,
                $du1_start_total,
                $du1_end_total,
                $du1_total,
                $km_travl > 0 ? $km_travl : 0,
                $start_odometer,
                $end_odometer,
            ];
            $records[] = array_combine($this->dailyStockTableColumns, array_pad($row, count($this->dailyStockTableColumns), $default));
        }

        return [
            "data" => $records,
            "filter" => $request->all()
        ];
    }
Editor is loading...
Leave a Comment