Merge pull request 'ranjith-dev' (#1106) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 13s
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 13s
Reviewed-on: #1106
This commit was merged in pull request #1106.
This commit is contained in:
@@ -2992,6 +2992,13 @@ class ClassCharacteristicResource extends Resource
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($record) {
|
||||||
|
Notification::make()
|
||||||
|
->title('Import Successful')
|
||||||
|
->body("{$insertedCount} records inserted successfully.")
|
||||||
|
->success();
|
||||||
|
}
|
||||||
|
|
||||||
$itemCharacteristic = ItemCharacteristic::where('plant_id', $plantId)->where('item_id', $item->id)->first();
|
$itemCharacteristic = ItemCharacteristic::where('plant_id', $plantId)->where('item_id', $item->id)->first();
|
||||||
|
|
||||||
if ($itemCharacteristic) {
|
if ($itemCharacteristic) {
|
||||||
@@ -3137,16 +3144,9 @@ class ClassCharacteristicResource extends Resource
|
|||||||
'zmm_operating_temperature' => $itemCharacteristic->zmm_operating_temperature,
|
'zmm_operating_temperature' => $itemCharacteristic->zmm_operating_temperature,
|
||||||
'zmm_axial_force' => $itemCharacteristic->zmm_axial_force,
|
'zmm_axial_force' => $itemCharacteristic->zmm_axial_force,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$updatedCount++;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($record) {
|
$updatedCount++;
|
||||||
Notification::make()
|
|
||||||
->title('Import Successful')
|
|
||||||
->body("{$insertedCount} records inserted successfully and updated zmm values success for '{$updatedCount}' records.")
|
|
||||||
->success();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -174,161 +174,161 @@ class ProductionTargetPlan extends Component
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
public function loadProductionData($year, $month, $plantId, $lineId, $category)
|
// public function loadProductionData($year, $month, $plantId, $lineId, $category)
|
||||||
{
|
// {
|
||||||
if (!$plantId || !$lineId || !$month || !$year) {
|
// if (!$plantId || !$lineId || !$month || !$year) {
|
||||||
$this->records = [];
|
// $this->records = [];
|
||||||
$this->dates = [];
|
// $this->dates = [];
|
||||||
$this->leaveDates = [];
|
// $this->leaveDates = [];
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
$dates = $this->getMonthDates($month, $year);
|
// $dates = $this->getMonthDates($month, $year);
|
||||||
$this->dates = $dates;
|
// $this->dates = $dates;
|
||||||
|
|
||||||
$plans = ProductionPlan::query()
|
// $plans = ProductionPlan::query()
|
||||||
->join('items', 'items.id', '=', 'production_plans.item_id')
|
// ->join('items', 'items.id', '=', 'production_plans.item_id')
|
||||||
->join('lines', 'lines.id', '=', 'production_plans.line_id')
|
// ->join('lines', 'lines.id', '=', 'production_plans.line_id')
|
||||||
->join('plants', 'plants.id', '=', 'production_plans.plant_id')
|
// ->join('plants', 'plants.id', '=', 'production_plans.plant_id')
|
||||||
->where('production_plans.plant_id', $plantId)
|
// ->where('production_plans.plant_id', $plantId)
|
||||||
->where('production_plans.line_id', $lineId)
|
// ->where('production_plans.line_id', $lineId)
|
||||||
->whereMonth('production_plans.created_at', $month)
|
// ->whereMonth('production_plans.created_at', $month)
|
||||||
->whereYear('production_plans.created_at', $year)
|
// ->whereYear('production_plans.created_at', $year)
|
||||||
->when($category, function ($query) use ($category) {
|
// ->when($category, function ($query) use ($category) {
|
||||||
$query->where('items.category', $category);
|
// $query->where('items.category', $category);
|
||||||
})
|
// })
|
||||||
->select(
|
// ->select(
|
||||||
'production_plans.item_id',
|
// 'production_plans.item_id',
|
||||||
'production_plans.plant_id',
|
// 'production_plans.plant_id',
|
||||||
'production_plans.line_id',
|
// 'production_plans.line_id',
|
||||||
'production_plans.plan_quantity',
|
// 'production_plans.plan_quantity',
|
||||||
'production_plans.working_days',
|
// 'production_plans.working_days',
|
||||||
'production_plans.leave_dates',
|
// 'production_plans.leave_dates',
|
||||||
'items.code as item_code',
|
// 'items.code as item_code',
|
||||||
'items.category as category',
|
// 'items.category as category',
|
||||||
'items.description as item_description',
|
// 'items.description as item_description',
|
||||||
'items.hourly_quantity as hourly_quantity',
|
// 'items.hourly_quantity as hourly_quantity',
|
||||||
'lines.name as line_name',
|
// 'lines.name as line_name',
|
||||||
// 'lines.line_capacity as line_capacity',
|
// // 'lines.line_capacity as line_capacity',
|
||||||
'plants.name as plant_name'
|
// 'plants.name as plant_name'
|
||||||
)
|
// )
|
||||||
->get();
|
// ->get();
|
||||||
|
|
||||||
$leaveDates = [];
|
// $leaveDates = [];
|
||||||
|
|
||||||
if ($plans->isNotEmpty() && $plans[0]->leave_dates) {
|
// if ($plans->isNotEmpty() && $plans[0]->leave_dates) {
|
||||||
$leaveDates = array_map('trim', explode(',', $plans[0]->leave_dates));
|
// $leaveDates = array_map('trim', explode(',', $plans[0]->leave_dates));
|
||||||
}
|
// }
|
||||||
|
|
||||||
$this->leaveDates = $leaveDates;
|
// $this->leaveDates = $leaveDates;
|
||||||
|
|
||||||
// $producedData = QualityValidation::selectRaw("
|
// // $producedData = QualityValidation::selectRaw("
|
||||||
// plant_id,
|
// // plant_id,
|
||||||
// line_id,
|
// // line_id,
|
||||||
// sticker_master_id,
|
// // sticker_master_id,
|
||||||
// DATE(created_at) as prod_date,
|
// // DATE(created_at) as prod_date,
|
||||||
// COUNT(*) as total_qty
|
// // COUNT(*) as total_qty
|
||||||
// ")
|
// // ")
|
||||||
// ->where('plant_id', $plantId)
|
// // ->where('plant_id', $plantId)
|
||||||
// ->where('line_id', $lineId)
|
// // ->where('line_id', $lineId)
|
||||||
// ->whereMonth('created_at', $month)
|
// // ->whereMonth('created_at', $month)
|
||||||
// ->whereYear('created_at', $year)
|
// // ->whereYear('created_at', $year)
|
||||||
// ->when($category, function ($query) use ($category) {
|
// // ->when($category, function ($query) use ($category) {
|
||||||
// $query->whereHas('item', function ($q) use ($category) {
|
// // $query->whereHas('item', function ($q) use ($category) {
|
||||||
// $q->where('category', $category);
|
// // $q->where('category', $category);
|
||||||
// });
|
// // });
|
||||||
// })
|
// // })
|
||||||
// ->groupBy('plant_id', 'line_id', 'sticker_master_id', DB::raw('DATE(created_at)'))
|
// // ->groupBy('plant_id', 'line_id', 'sticker_master_id', DB::raw('DATE(created_at)'))
|
||||||
// ->get()
|
// // ->get()
|
||||||
// ->groupBy(fn($row) =>
|
// // ->groupBy(fn($row) =>
|
||||||
// $row->plant_id . '_' . $row->line_id . '_' . $row->item_id
|
// // $row->plant_id . '_' . $row->line_id . '_' . $row->item_id
|
||||||
// )
|
// // )
|
||||||
// ->map(fn($group) => $group->keyBy('prod_date'));
|
// // ->map(fn($group) => $group->keyBy('prod_date'));
|
||||||
|
|
||||||
$producedData = QualityValidation::selectRaw("
|
// $producedData = QualityValidation::selectRaw("
|
||||||
quality_validations.plant_id,
|
// quality_validations.plant_id,
|
||||||
quality_validations.line_id,
|
// quality_validations.line_id,
|
||||||
quality_validations.sticker_master_id,
|
// quality_validations.sticker_master_id,
|
||||||
sticker_masters.item_id,
|
// sticker_masters.item_id,
|
||||||
DATE(quality_validations.created_at) as prod_date,
|
// DATE(quality_validations.created_at) as prod_date,
|
||||||
COUNT(*) as total_qty
|
// COUNT(*) as total_qty
|
||||||
")
|
// ")
|
||||||
->join('sticker_masters', 'sticker_masters.id', '=', 'quality_validations.sticker_master_id')
|
// ->join('sticker_masters', 'sticker_masters.id', '=', 'quality_validations.sticker_master_id')
|
||||||
->where('quality_validations.plant_id', $plantId)
|
// ->where('quality_validations.plant_id', $plantId)
|
||||||
->where('quality_validations.line_id', $lineId)
|
// ->where('quality_validations.line_id', $lineId)
|
||||||
->whereMonth('quality_validations.created_at', $month)
|
// ->whereMonth('quality_validations.created_at', $month)
|
||||||
->whereYear('quality_validations.created_at', $year)
|
// ->whereYear('quality_validations.created_at', $year)
|
||||||
->when($category, function ($query) use ($category) {
|
// ->when($category, function ($query) use ($category) {
|
||||||
$query->whereHas('item', function ($q) use ($category) {
|
// $query->whereHas('item', function ($q) use ($category) {
|
||||||
$q->where('category', $category);
|
// $q->where('category', $category);
|
||||||
});
|
// });
|
||||||
})
|
// })
|
||||||
->groupBy(
|
// ->groupBy(
|
||||||
'quality_validations.plant_id',
|
// 'quality_validations.plant_id',
|
||||||
'quality_validations.line_id',
|
// 'quality_validations.line_id',
|
||||||
'quality_validations.sticker_master_id',
|
// 'quality_validations.sticker_master_id',
|
||||||
'sticker_masters.item_id',
|
// 'sticker_masters.item_id',
|
||||||
DB::raw('DATE(quality_validations.created_at)')
|
// DB::raw('DATE(quality_validations.created_at)')
|
||||||
)
|
// )
|
||||||
->get()
|
// ->get()
|
||||||
->groupBy(fn($row) =>
|
// ->groupBy(fn($row) =>
|
||||||
$row->plant_id . '_' . $row->line_id . '_' . $row->item_id
|
// $row->plant_id . '_' . $row->line_id . '_' . $row->item_id
|
||||||
)
|
// )
|
||||||
->map(fn($group) => $group->keyBy('prod_date'));
|
// ->map(fn($group) => $group->keyBy('prod_date'));
|
||||||
|
|
||||||
|
|
||||||
$records = [];
|
// $records = [];
|
||||||
|
|
||||||
foreach ($plans as $plan) {
|
// foreach ($plans as $plan) {
|
||||||
|
|
||||||
$row = $plan->toArray();
|
// $row = $plan->toArray();
|
||||||
|
|
||||||
$remainingQty = (float) $row['plan_quantity'];
|
// $remainingQty = (float) $row['plan_quantity'];
|
||||||
$remainingDays = (int) ($row['working_days'] ?? 0);
|
// $remainingDays = (int) ($row['working_days'] ?? 0);
|
||||||
|
|
||||||
$lineCapacity = (float) ($row['line_capacity'] ?? 0);
|
// $lineCapacity = (float) ($row['line_capacity'] ?? 0);
|
||||||
$dailyHourlyQuantity = (float) ($row['hourly_quantity'] ?? 0);
|
// $dailyHourlyQuantity = (float) ($row['hourly_quantity'] ?? 0);
|
||||||
|
|
||||||
$row['category'] = $row['category'] ?? '-';
|
// $row['category'] = $row['category'] ?? '-';
|
||||||
$row['daily_hourly_quantity'] = [];
|
// $row['daily_hourly_quantity'] = [];
|
||||||
$row['daily_target_dynamic'] = [];
|
// $row['daily_target_dynamic'] = [];
|
||||||
$row['produced_quantity'] = [];
|
// $row['produced_quantity'] = [];
|
||||||
|
|
||||||
$key = $row['plant_id'].'_'.$row['line_id'].'_'.$row['item_id'];
|
// $key = $row['plant_id'].'_'.$row['line_id'].'_'.$row['item_id'];
|
||||||
|
|
||||||
foreach ($dates as $date) {
|
// foreach ($dates as $date) {
|
||||||
|
|
||||||
// Skip leave dates fast
|
// // Skip leave dates fast
|
||||||
if (isset($leaveDates) && in_array($date, $leaveDates)) {
|
// if (isset($leaveDates) && in_array($date, $leaveDates)) {
|
||||||
$row['daily_hourly_quantity'][$date] = '-';
|
// $row['daily_hourly_quantity'][$date] = '-';
|
||||||
$row['daily_target_dynamic'][$date] = '-';
|
// $row['daily_target_dynamic'][$date] = '-';
|
||||||
$row['produced_quantity'][$date] = '-';
|
// $row['produced_quantity'][$date] = '-';
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
|
|
||||||
$todayTarget = $remainingDays > 0
|
// $todayTarget = $remainingDays > 0
|
||||||
? round($remainingQty / $remainingDays, 2)
|
// ? round($remainingQty / $remainingDays, 2)
|
||||||
: 0;
|
// : 0;
|
||||||
|
|
||||||
$producedQty = $producedData[$key][$date]->total_qty ?? 0;
|
// $producedQty = $producedData[$key][$date]->total_qty ?? 0;
|
||||||
|
|
||||||
$row['daily_target_dynamic'][$date] = $todayTarget;
|
// $row['daily_target_dynamic'][$date] = $todayTarget;
|
||||||
$row['produced_quantity'][$date] = $producedQty;
|
// $row['produced_quantity'][$date] = $producedQty;
|
||||||
$row['daily_hourly_quantity'][$date] = $dailyHourlyQuantity * 22.5;
|
// $row['daily_hourly_quantity'][$date] = $dailyHourlyQuantity * 22.5;
|
||||||
|
|
||||||
// Carry forward remaining qty
|
// // Carry forward remaining qty
|
||||||
$remainingQty = max(0, $remainingQty - $producedQty);
|
// $remainingQty = max(0, $remainingQty - $producedQty);
|
||||||
|
|
||||||
if ($remainingDays > 0) {
|
// if ($remainingDays > 0) {
|
||||||
$remainingDays--;
|
// $remainingDays--;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
$records[] = $row;
|
// $records[] = $row;
|
||||||
}
|
// }
|
||||||
|
|
||||||
$this->records = $records;
|
// $this->records = $records;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// public function loadProductionDataCategory($year, $month, $plantId, $lineId, $category)
|
// public function loadProductionDataCategory($year, $month, $plantId, $lineId, $category)
|
||||||
// {
|
// {
|
||||||
@@ -446,6 +446,186 @@ class ProductionTargetPlan extends Component
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function loadProductionData($year, $month, $plantId, $lineId)
|
||||||
|
{
|
||||||
|
if (!$plantId || !$lineId || !$month || !$year) {
|
||||||
|
$this->records = [];
|
||||||
|
$this->dates = [];
|
||||||
|
$this->leaveDates = [];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dates = $this->getMonthDates($month, $year);
|
||||||
|
$this->dates = $dates;
|
||||||
|
|
||||||
|
$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',
|
||||||
|
// 'lines.line_capacity as line_capacity',
|
||||||
|
'plants.name as plant_name'
|
||||||
|
)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$leaveDates = [];
|
||||||
|
|
||||||
|
if ($plans->isNotEmpty() && $plans[0]->leave_dates) {
|
||||||
|
$leaveDates = array_map('trim', explode(',', $plans[0]->leave_dates));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->leaveDates = $leaveDates;
|
||||||
|
|
||||||
|
$producedData = QualityValidation::selectRaw("
|
||||||
|
quality_validations.plant_id,
|
||||||
|
quality_validations.line_id,
|
||||||
|
quality_validations.sticker_master_id,
|
||||||
|
sticker_masters.item_id,
|
||||||
|
DATE(quality_validations.created_at) as prod_date,
|
||||||
|
COUNT(*) as total_qty
|
||||||
|
")
|
||||||
|
->join(
|
||||||
|
'sticker_masters',
|
||||||
|
'sticker_masters.id',
|
||||||
|
'=',
|
||||||
|
'quality_validations.sticker_master_id'
|
||||||
|
)
|
||||||
|
->where('quality_validations.plant_id', $plantId)
|
||||||
|
->where('quality_validations.line_id', $lineId)
|
||||||
|
->whereMonth('quality_validations.created_at', $month)
|
||||||
|
->whereYear('quality_validations.created_at', $year)
|
||||||
|
->groupBy(
|
||||||
|
'quality_validations.plant_id',
|
||||||
|
'quality_validations.line_id',
|
||||||
|
'quality_validations.sticker_master_id',
|
||||||
|
'sticker_masters.item_id',
|
||||||
|
DB::raw('DATE(quality_validations.created_at)')
|
||||||
|
)
|
||||||
|
->get()
|
||||||
|
->groupBy(fn($row) =>
|
||||||
|
$row->plant_id . '_' . $row->line_id . '_' . $row->item_id
|
||||||
|
)
|
||||||
|
->map(fn($group) => $group->keyBy('prod_date'));
|
||||||
|
|
||||||
|
$records = [];
|
||||||
|
|
||||||
|
foreach ($plans as $plan) {
|
||||||
|
|
||||||
|
$row = $plan->toArray();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the normal daily target.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* Plan quantity = 60
|
||||||
|
* Working days = 3
|
||||||
|
*
|
||||||
|
* Normal daily target = 60 / 3 = 20
|
||||||
|
*/
|
||||||
|
$workingDays = (int) ($row['working_days'] ?? 0);
|
||||||
|
|
||||||
|
$normalDailyTarget = $workingDays > 0
|
||||||
|
? round((float) $row['plan_quantity'] / $workingDays, 2)
|
||||||
|
: 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This stores the uncompleted quantity from the previous
|
||||||
|
* working day and carries it to the next working day.
|
||||||
|
*/
|
||||||
|
$pendingQty = 0;
|
||||||
|
|
||||||
|
$lineCapacity = (float) ($row['line_capacity'] ?? 0);
|
||||||
|
$dailyHourlyQuantity = (float) ($row['hourly_quantity'] ?? 0);
|
||||||
|
|
||||||
|
$row['category'] = $row['category'] ?? '-';
|
||||||
|
$row['daily_hourly_quantity'] = [];
|
||||||
|
$row['daily_target_dynamic'] = [];
|
||||||
|
$row['produced_quantity'] = [];
|
||||||
|
|
||||||
|
$key = $row['plant_id'] . '_' . $row['line_id'] . '_' . $row['item_id'];
|
||||||
|
|
||||||
|
foreach ($dates as $date) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip leave dates.
|
||||||
|
*
|
||||||
|
* Pending quantity is NOT changed here.
|
||||||
|
* Therefore it will carry forward to the next working day.
|
||||||
|
*/
|
||||||
|
if (in_array($date, $leaveDates)) {
|
||||||
|
|
||||||
|
$row['daily_hourly_quantity'][$date] = '-';
|
||||||
|
$row['daily_target_dynamic'][$date] = '-';
|
||||||
|
$row['produced_quantity'][$date] = '-';
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Today's target:
|
||||||
|
*
|
||||||
|
* Normal daily target
|
||||||
|
* +
|
||||||
|
* Previous day's pending quantity
|
||||||
|
*/
|
||||||
|
$todayTarget = round(
|
||||||
|
$normalDailyTarget + $pendingQty,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get actual produced quantity for this item/date.
|
||||||
|
*/
|
||||||
|
$producedQty = $producedData[$key][$date]->total_qty ?? 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Store today's values.
|
||||||
|
*/
|
||||||
|
$row['daily_target_dynamic'][$date] = $todayTarget;
|
||||||
|
$row['produced_quantity'][$date] = $producedQty;
|
||||||
|
$row['daily_hourly_quantity'][$date] = $dailyHourlyQuantity * 22.5;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate today's pending quantity.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* Target = 40
|
||||||
|
* Produced = 30
|
||||||
|
*
|
||||||
|
* Pending = 10
|
||||||
|
*
|
||||||
|
* This 10 will be added to tomorrow's target.
|
||||||
|
*/
|
||||||
|
$pendingQty = max(
|
||||||
|
0,
|
||||||
|
$todayTarget - $producedQty
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$records[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->records = $records;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function exportProductionData()
|
public function exportProductionData()
|
||||||
{
|
{
|
||||||
return Excel::download(
|
return Excel::download(
|
||||||
|
|||||||
Reference in New Issue
Block a user