'loadProductionData', 'loadDataCategory' => 'loadProductionCategoryData' ]; public function loadProductionData($date, $plantId, $lineId) { $this->dates = []; $this->leaveDates = []; $this->nonPlannedRecords = []; $this->nonPlannedCount = 0; $this->nonPlannedQuantity = 0; if (!$plantId || !$lineId || !$date) { return; } $selectedDate = Carbon::parse($date); $date = $selectedDate->toDateString(); $month = $selectedDate->month; $year = $selectedDate->year; $startDate = Carbon::parse($date)->setTime(8, 0, 0); $endDate = $startDate->copy()->addDay(); $plans = ProductionPlan::query() ->join('items', 'items.id', '=', 'production_plans.item_id') ->join('lines', 'lines.id', '=', 'production_plans.line_id') ->join('plants', 'plants.id', '=', 'production_plans.plant_id') ->where('production_plans.plant_id', $plantId) ->where('production_plans.line_id', $lineId) ->whereMonth('production_plans.created_at', $month) ->whereYear('production_plans.created_at', $year) ->select( 'production_plans.item_id', 'production_plans.plant_id', 'production_plans.line_id', 'production_plans.plan_quantity', 'production_plans.working_days', 'production_plans.leave_dates', 'items.code as item_code', 'items.category as category', 'items.description as item_description', 'items.hourly_quantity as hourly_quantity', 'lines.name as line_name', 'plants.name as plant_name' ) ->get(); $plannedItemIds = $plans ->pluck('item_id') ->filter(fn ($id) => $id != null) ->unique() ->values(); $leaveDates = []; if ($plans->isNotEmpty() && $plans->first()->leave_dates) { $leaveDates = array_map( 'trim', explode(',', $plans->first()->leave_dates) ); } $this->leaveDates = $leaveDates; $nonPlannedQuery = QualityValidation::query() ->join( 'sticker_masters', 'sticker_masters.id', '=', 'quality_validations.sticker_master_id' ) ->join( 'items', 'items.id', '=', 'sticker_masters.item_id' ) ->where('quality_validations.plant_id', $plantId) ->where('quality_validations.line_id', $lineId) ->where('quality_validations.created_at', '>=', $startDate) ->where('quality_validations.created_at', '<', $endDate); if ($plannedItemIds->isNotEmpty()) { $nonPlannedQuery->whereNotIn( 'sticker_masters.item_id', $plannedItemIds ); } $nonPlannedData = $nonPlannedQuery ->selectRaw(" sticker_masters.item_id, items.code as item_code, items.description as item_description, items.category as item_category, COUNT(*) as total_qty ") ->groupBy( 'sticker_masters.item_id', 'items.code', 'items.description', 'items.category' ) ->get(); $this->nonPlannedRecords = $nonPlannedData->toArray(); $this->nonPlannedCount = $nonPlannedData->count(); $this->nonPlannedQuantity = (int) $nonPlannedData->sum('total_qty'); } public function loadProductionCategoryData($date, $plantId, $lineId, $category) { $this->dates = []; $this->leaveDates = []; $this->nonPlannedRecords = []; $this->nonPlannedCount = 0; $this->nonPlannedQuantity = 0; if (!$plantId || !$lineId || !$date) { return; } $selectedDate = Carbon::parse($date); $date = $selectedDate->toDateString(); $month = $selectedDate->month; $year = $selectedDate->year; $startDate = Carbon::parse($date)->setTime(8, 0, 0); $endDate = $startDate->copy()->addDay(); $plans = ProductionPlan::query() ->join('items', 'items.id', '=', 'production_plans.item_id') ->join('lines', 'lines.id', '=', 'production_plans.line_id') ->join('plants', 'plants.id', '=', 'production_plans.plant_id') ->where('production_plans.plant_id', $plantId) ->where('production_plans.line_id', $lineId) ->where('items.category', $category) ->whereMonth('production_plans.created_at', $month) ->whereYear('production_plans.created_at', $year) ->select( 'production_plans.item_id', 'production_plans.plant_id', 'production_plans.line_id', 'production_plans.plan_quantity', 'production_plans.working_days', 'production_plans.leave_dates', 'items.code as item_code', 'items.category as category', 'items.description as item_description', 'items.hourly_quantity as hourly_quantity', 'lines.name as line_name', 'plants.name as plant_name' ) ->get(); $plannedItemIds = $plans ->pluck('item_id') ->filter(fn ($id) => $id != null) ->unique() ->values(); $leaveDates = []; if ($plans->isNotEmpty() && $plans->first()->leave_dates) { $leaveDates = array_map( 'trim', explode(',', $plans->first()->leave_dates) ); } $this->leaveDates = $leaveDates; $nonPlannedQuery = QualityValidation::query() ->join( 'sticker_masters', 'sticker_masters.id', '=', 'quality_validations.sticker_master_id' ) ->join( 'items', 'items.id', '=', 'sticker_masters.item_id' ) ->where('quality_validations.plant_id', $plantId) ->where('quality_validations.line_id', $lineId) ->where('items.category', $category) ->where('quality_validations.created_at', '>=', $startDate) ->where('quality_validations.created_at', '<', $endDate); if ($plannedItemIds->isNotEmpty()) { $nonPlannedQuery->whereNotIn( 'sticker_masters.item_id', $plannedItemIds ); } $nonPlannedData = $nonPlannedQuery ->selectRaw(" sticker_masters.item_id, items.code as item_code, items.description as item_description, items.category as item_category, COUNT(*) as total_qty ") ->groupBy( 'sticker_masters.item_id', 'items.code', 'items.description', 'items.category' ) ->get(); $this->nonPlannedRecords = $nonPlannedData->toArray(); $this->nonPlannedCount = $nonPlannedData->count(); $this->nonPlannedQuantity = (int) $nonPlannedData->sum('total_qty'); } public function render() { // return view('livewire.production-non-planned'); return view('livewire.production-non-planned', [ 'records' => $this->records, 'monthlyRecords' => $this->monthlyRecords, 'monthlyActualRecords' => $this->monthlyActualQuantity, 'monthlyEfficiency' => $this->efficiency, 'dates' => $this->dates, ]); } }