1
0
forked from poc/pds

Added module production order controller get api

This commit is contained in:
dhanabalan
2025-07-12 09:15:42 +05:30
parent 27524c4d62
commit 642053653c
2 changed files with 412 additions and 0 deletions

View File

@@ -0,0 +1,402 @@
<?php
namespace App\Http\Controllers;
use App\Models\Line;
use App\Models\Plant;
use App\Models\ProductionQuantity;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ModuleProductionOrderDataController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
// public function get_moduleProductionOrder(Request $request)
// {
// $expectedUser = env('API_AUTH_USER');
// $expectedPw = env('API_AUTH_PW');
// $header_auth = $request->header('Authorization');
// $expectedToken = $expectedUser . ':' . $expectedPw;
// if ("Bearer " . $expectedToken != $header_auth) {
// return response()->json([
// 'status_code' => 'ERROR',
// 'status_description' => 'Invalid authorization token!'
// ], 403);
// }
// $requiredHeaders = [
// 'module-name',
// 'chart-name',
// 'plant-name',
// 'line-name',
// 'production-order',
// 'filter-name',
// ];
// $missingHeaders = [];
// foreach ($requiredHeaders as $header) {
// if (empty($request->header($header))) {
// $missingHeaders[] = $header;
// }
// }
// if (!empty($missingHeaders)) {
// return response()->json([
// 'status_code' => 'ERROR',
// 'status_description' => 'Missing required headers: ' . implode(', ', $missingHeaders)
// ], 404);
// }
// $validFilters = ['Today', 'Yesterday', 'This Week', 'This Month'];
// $filterHeader = $request->header('filter-name');
// if (!in_array($filterHeader, $validFilters)) {
// return response()->json([
// 'status_code' => 'ERROR',
// 'status_description' => "Invalid filter-name value! Accepted values are: " . implode(', ', $validFilters)
// ], 404);
// }
// $plantName = $request->header('plant-name');
// $lineName = $request->header('line-name');
// $orderValue = $request->header('production-order');
// $filterName = strtolower(trim($request->header('filter-name')));
// $plant = Plant::where('name', $plantName)->first();
// if (!$plant) {
// return response()->json([
// 'status_code' => 'ERROR',
// 'status_description' => "Plant '{$plantName}' not found!"
// ], 404);
// }
// $line = Line::where('name', $lineName)->where('plant_id', $plant->id)->first();
// if (!$line) {
// return response()->json([
// 'status_code' => 'ERROR',
// 'status_description' => 'Line not found!'
// ], 404);
// }
// $lineType = $line->type;
// if ($lineType === 'FG Line')
// {
// $table = 'quality_validations';
// }
// else
// {
// $table = 'production_quantities';
// }
// // Time Range
// if ($filterName == 'yesterday') {
// $startDate = now()->subDay()->setTime(8, 0, 0);
// $endDate = now()->setTime(8, 0, 0);
// $groupBy = "EXTRACT(HOUR FROM $table.created_at)";
// } elseif ($filterName == 'this week') {
// $startDate = now()->startOfWeek()->setTime(8, 0, 0);
// $endDate = now()->endOfWeek()->addDay()->setTime(8, 0, 0);
// $groupBy = "EXTRACT(DOW FROM $table.created_at)";
// } elseif ($filterName == 'this month') {
// $startDate = now()->startOfMonth();
// $endDate = now()->endOfMonth();
// $groupBy = "FLOOR((EXTRACT(DAY FROM $table.created_at) - 1) / 7) + 1";
// } else {
// $startDate = now()->setTime(8, 0, 0);
// $endDate = now()->copy()->addDay()->setTime(8, 0, 0);
// $groupBy = "EXTRACT(HOUR FROM $table.created_at)";
// }
// $query = \DB::table($table)
// ->join('plants', "$table.plant_id", '=', 'plants.id')
// ->join('lines', "$table.line_id", '=', 'lines.id')
// ->selectRaw("$groupBy AS time_unit, count(*) AS total_quantity")
// ->whereBetween("$table.created_at", [$startDate, $endDate])
// ->where('plants.id', $plant->id)
// ->where('lines.id', $line->id)
// ->where("$table.production_order", $orderValue)
// ->groupByRaw($groupBy)
// ->orderByRaw($groupBy)
// ->pluck('total_quantity', 'time_unit')
// ->toArray();
// if ($filterName == 'this month') {
// $weeksCount = ceil($endDate->day / 7);
// $allWeeks = array_fill(1, $weeksCount, 0);
// $data = array_replace($allWeeks, $query);
// $labels = [];
// for ($i = 1; $i <= $weeksCount; $i++) {
// $weekStart = $startDate->copy()->addDays(($i - 1) * 7)->format('d M');
// $weekEnd = $startDate->copy()->addDays($i * 7 - 1)->min($endDate)->format('d M');
// $labels[] = "Week $i ($weekStart - $weekEnd)";
// }
// $orderedData = array_values($data);
// } elseif ($filterName === 'this week') {
// $labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
// $data = array_fill(0, 7, 0);
// foreach ($query as $dow => $count) {
// $data[$dow] = $count;
// }
// $orderedData = [
// $data[1] ?? 0, $data[2] ?? 0, $data[3] ?? 0,
// $data[4] ?? 0, $data[5] ?? 0, $data[6] ?? 0,
// $data[0] ?? 0,
// ];
// } else {
// $allHours = array_fill(0, 24, 0);
// $data = array_replace($allHours, $query);
// $shiftedData = [];
// foreach ($data as $hour => $count) {
// $nextHour = ($hour + 1) % 24;
// $shiftedData[$nextHour] = $count;
// }
// $shiftedKeys = array_merge(range(9, 23), range(0, 8));
// $orderedData = array_map(fn($hour) => $shiftedData[$hour] ?? 0, $shiftedKeys);
// $labels = array_map(fn ($hour) => date("g A", strtotime("$hour:00")), $shiftedKeys);
// }
// $orderedData = array_map(function ($value) {
// return ($value == 0 || is_null($value)) ? null : $value;
// }, $orderedData);
// return response()->json([
// 'status_code' => 'SUCCESS',
// 'datasets' => [
// [
// 'label' => match ($filterName) {
// 'this week' => $lineType == 'FG Line' ? "Daily Fg Production Order Count This Week" : "Daily Production Order Count This Week",
// 'this month' => $lineType == 'FG Line' ? "Weekly Fg Production Order Count This Month" : "Weekly Production Order Count This Month",
// 'yesterday' => $lineType == 'FG Line' ? "Yesterday's Hourly Fg Order Count Production" : "Yesterday's Hourly Order Count Production",
// default => $lineType == 'FG Line' ? "Today's Hourly Fg Production Order Count" : "Today's Hourly Production Order Count",
// },
// 'data' => $orderedData,
// 'borderColor' => 'rgba(75, 192, 192, 1)',
// 'backgroundColor' => 'rgba(75, 192, 192, 0.2)',
// 'fill' => false,
// 'tension' => 0.3,
// ]
// ],
// 'labels' => $labels
// ], 200);
// }
public function get_moduleProductionOrder(Request $request)
{
$expectedUser = env('API_AUTH_USER');
$expectedPw = env('API_AUTH_PW');
$header_auth = $request->header('Authorization');
$expectedToken = $expectedUser . ':' . $expectedPw;
if ("Bearer " . $expectedToken != $header_auth) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => 'Invalid authorization token!'
], 403);
}
$requiredHeaders = [
'module-name', 'chart-name', 'plant-name',
'line-name', 'production-order', 'filter-name'
];
$missingHeaders = [];
foreach ($requiredHeaders as $header) {
if (empty($request->header($header))) {
$missingHeaders[] = $header;
}
}
if (!empty($missingHeaders)) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => 'Missing required headers: ' . implode(', ', $missingHeaders)
], 404);
}
$filterHeader = $request->header('filter-name');
$validFilters = ['Today', 'Yesterday', 'This Week', 'This Month'];
if (!in_array($filterHeader, $validFilters)) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => "Invalid filter-name value! Accepted values are: " . implode(', ', $validFilters)
], 404);
}
$plantName = $request->header('plant-name');
$lineName = $request->header('line-name');
$orderVal = $request->header('production-order');
$filter = strtolower($filterHeader);
$plant = Plant::where('name', $plantName)->first();
if (!$plant) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => "Plant '{$plantName}' not found!"
], 404);
}
$line = Line::where('name', $lineName)->where('plant_id', $plant->id)->first();
if (!$line) {
return response()->json([
'status_code' => 'ERROR',
'status_description' => "Line '{$lineName}' not found!"
], 404);
}
$lineType = $line->type;
$table = ($lineType == 'FG Line') ? 'quality_validations' : 'production_quantities';
if ($filter == 'today' || $filter == 'yesterday') {
$hourlyCounts = [];
$hourStart = $filter == 'today'
? now()->setTime(8, 0, 0)
: now()->subDay()->setTime(8, 0, 0);
$hourEndFinal = $hourStart->copy()->addDay();
while ($hourStart < $hourEndFinal) {
$hourEnd = $hourStart->copy()->addHour();
$label = $hourStart->format('g:i A') . ' to ' . $hourEnd->format('g:i A');
$count = DB::table($table)
->where('plant_id', $plant->id)
->where('line_id', $line->id)
->where('production_order', $orderVal)
->whereBetween('created_at', [$hourStart, $hourEnd])
->count();
$hourlyCounts[$label] = $count;
$hourStart = $hourEnd;
}
return response()->json([
'status_code' => 'SUCCESS',
'datasets' => [
[
'label' => $filter == 'yesterday'
? "Yesterday's Hourly Production Order Count"
: "Today's Hourly Production Order Count",
'data' => $hourlyCounts
]
]
], 200);
}
// Weekly or Monthly
if ($filter == 'this week') {
$startDate = now()->startOfWeek()->setTime(8, 0, 0);
$endDate = now()->endOfWeek()->addDay()->setTime(8, 0, 0);
$groupBy = "EXTRACT(DOW FROM $table.created_at)";
} else {
$startDate = now()->startOfMonth();
$endDate = now()->endOfMonth();
$groupBy = "FLOOR((EXTRACT(DAY FROM $table.created_at) - 1) / 7) + 1";
}
$query = DB::table($table)
->where('plant_id', $plant->id)
->where('line_id', $line->id)
->where('production_order', $orderVal)
->whereBetween('created_at', [$startDate, $endDate])
->selectRaw("$groupBy as group_key, COUNT(*) as total")
->groupByRaw("group_key")
->pluck('total', 'group_key')
->toArray();
if ($filter == 'this week') {
$labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
$data = array_fill(0, 7, 0);
foreach ($query as $dow => $count) {
$data[$dow] = $count;
}
$orderedData = [
$data[1] ?? 0, $data[2] ?? 0, $data[3] ?? 0,
$data[4] ?? 0, $data[5] ?? 0, $data[6] ?? 0,
$data[0] ?? 0,
];
} else {
$weeksCount = ceil($endDate->day / 7);
$allWeeks = array_fill(1, $weeksCount, 0);
$data = array_replace($allWeeks, $query);
$labels = [];
for ($i = 1; $i <= $weeksCount; $i++) {
$weekStart = $startDate->copy()->addDays(($i - 1) * 7)->format('d M');
$weekEnd = $startDate->copy()->addDays($i * 7 - 1)->min($endDate)->format('d M');
$labels[] = "Week $i ($weekStart - $weekEnd)";
}
$orderedData = array_values($data);
}
return response()->json([
'status_code' => 'SUCCESS',
'datasets' => [
[
'label' => match ($filter) {
'this week' => $lineType == 'FG Line'
? "Daily Fg Production Order Count This Week"
: "Daily Production Order Count This Week",
'this month' => $lineType == 'FG Line'
? "Weekly Fg Production Order Count This Month"
: "Weekly Production Order Count This Month",
},
'data' => $orderedData
]
],
'labels' => $labels ?? []
], 200);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}

View File

@@ -5,8 +5,10 @@ use App\Http\Controllers\ModuleChartController;
use App\Http\Controllers\ModuleController; use App\Http\Controllers\ModuleController;
use App\Http\Controllers\ModuleFilterController; use App\Http\Controllers\ModuleFilterController;
use App\Http\Controllers\ModuleFilterDataController; use App\Http\Controllers\ModuleFilterDataController;
use App\Http\Controllers\ModuleInvoiceDataController;
use App\Http\Controllers\ModulePlantController; use App\Http\Controllers\ModulePlantController;
use App\Http\Controllers\ModulePlantLineController; use App\Http\Controllers\ModulePlantLineController;
use App\Http\Controllers\ModuleProductionOrderDataController;
use App\Http\Controllers\ObdController; use App\Http\Controllers\ObdController;
use App\Http\Controllers\PalletController; use App\Http\Controllers\PalletController;
use App\Http\Controllers\PlantController; use App\Http\Controllers\PlantController;
@@ -68,6 +70,8 @@ Route::get('laser/item/get-master-data', [StickerMasterController::class, 'get_m
Route::get('/download-qr-pdf/{palletNo}', [PalletController::class, 'downloadQrPdf'])->name('download-qr-pdf'); Route::get('/download-qr-pdf/{palletNo}', [PalletController::class, 'downloadQrPdf'])->name('download-qr-pdf');
//Production Dashboard Controller
Route::get('get/module-name/data', [ModuleController::class, 'get_module']); Route::get('get/module-name/data', [ModuleController::class, 'get_module']);
Route::get('get/modulechart-name/data', [ModuleChartController::class, 'get_moduleChart']); Route::get('get/modulechart-name/data', [ModuleChartController::class, 'get_moduleChart']);
@@ -80,3 +84,9 @@ Route::get('get/module-line-filter-name/data', [ModuleFilterController::class, '
Route::get('get/module-filter-value/data', [ModuleFilterDataController::class, 'get_moduleFilterData']); Route::get('get/module-filter-value/data', [ModuleFilterDataController::class, 'get_moduleFilterData']);
Route::get('get/module-production-order/data', [ModuleProductionOrderDataController::class, 'get_moduleProductionOrder']);
//Invoice Dashboard Controller
Route::get('get/module-invoice-type/data', [ModuleInvoiceDataController::class, 'get_invoiceData']);