136 lines
3.7 KiB
PHP
136 lines
3.7 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Models\Testing;
|
||
use App\Models\Brand;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\DB;
|
||
|
||
class TestingController extends Controller
|
||
{
|
||
public function index(Request $request)
|
||
{
|
||
// Ambil semua brand dari tabel brands untuk dropdown
|
||
$brands = Brand::all();
|
||
|
||
// Ambil brand yang dipilih dari query parameter (default ke ID pertama)
|
||
$brand = $request->input('brand', $brands->first()->id ?? 1);
|
||
|
||
// Ambil data testing sesuai brand
|
||
$testings = Testing::where('brands', $brand)->orderBy('no')->get();
|
||
|
||
// Cek apakah ada data testing sama sekali
|
||
$hasData = $testings->isNotEmpty();
|
||
|
||
return view('testing', compact('testings', 'brand', 'brands', 'hasData'));
|
||
}
|
||
|
||
// public function generate(Request $request)
|
||
// {
|
||
// // Mengambil data dari tabel samples
|
||
// DB::insert("
|
||
// INSERT INTO testing (no, data_1, data_2, data_3, target, brands)
|
||
// SELECT
|
||
// ROW_NUMBER() OVER (PARTITION BY s4.brand ORDER BY s4.id) AS no,
|
||
// s1.data AS data_1, -- minggu -3 sebelum target
|
||
// s2.data AS data_2, -- minggu -2 sebelum target
|
||
// s3.data AS data_3, -- minggu -1 sebelum target
|
||
// s4.data AS target, -- target minggu sekarang
|
||
// s4.brand AS brands
|
||
// FROM samples s4
|
||
// JOIN samples s3 ON s3.id = s4.id - 1
|
||
// JOIN samples s2 ON s2.id = s4.id - 2
|
||
// JOIN samples s1 ON s1.id = s4.id - 3
|
||
// WHERE s4.brand BETWEEN 1 AND 11
|
||
// AND s3.brand = s4.brand
|
||
// AND s2.brand = s4.brand
|
||
// AND s1.brand = s4.brand
|
||
// AND s4.bulan BETWEEN 9 AND 12
|
||
// ORDER BY s4.brand, s4.id;
|
||
// ");
|
||
// return redirect()->route('testing.index')->with('success', 'Data Testing berhasil diambil.');
|
||
// }
|
||
|
||
public function reset()
|
||
{
|
||
DB::table('testing')->truncate();
|
||
|
||
return redirect()->route('testing.index')->with('success', 'Data Testing berhasil direset.');
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
public function generate(Request $request)
|
||
{
|
||
$startMonth = session('startMonth'); // Ambil bulan mulai dari session
|
||
if (!$startMonth) {
|
||
return redirect()->route('testing.index')->with('error', 'Start month tidak ditemukan di session.');
|
||
}
|
||
|
||
// Hitung bulan untuk testing: 4 bulan setelah training (bulan ke 9–12 dari startMonth)
|
||
$validMonths = [];
|
||
for ($i = 8; $i < 12; $i++) {
|
||
$month = ($startMonth + $i - 1) % 12 + 1;
|
||
$validMonths[] = $month;
|
||
}
|
||
|
||
// Ambil brand_id aktif
|
||
$brands = DB::table('products')
|
||
->where('status', 'aktif')
|
||
->distinct()
|
||
->pluck('brand_id')
|
||
->toArray();
|
||
|
||
if (empty($brands)) {
|
||
return redirect()->route('testing.index')->with('error', 'Tidak ada brand aktif ditemukan.');
|
||
}
|
||
|
||
// Insert data testing
|
||
DB::insert("
|
||
INSERT INTO testing (no, data_1, data_2, data_3, target, brands)
|
||
SELECT
|
||
ROW_NUMBER() OVER (PARTITION BY s4.brand ORDER BY s4.id) AS no,
|
||
s1.data AS data_1, -- minggu -3 sebelum target
|
||
s2.data AS data_2, -- minggu -2 sebelum target
|
||
s3.data AS data_3, -- minggu -1 sebelum target
|
||
s4.data AS target, -- target minggu sekarang
|
||
s4.brand AS brands
|
||
FROM samples s4
|
||
JOIN samples s3 ON s3.id = s4.id - 1
|
||
JOIN samples s2 ON s2.id = s4.id - 2
|
||
JOIN samples s1 ON s1.id = s4.id - 3
|
||
WHERE
|
||
s4.brand IN (" . implode(',', $brands) . ")
|
||
AND s3.brand = s4.brand
|
||
AND s2.brand = s4.brand
|
||
AND s1.brand = s4.brand
|
||
AND s4.bulan IN (" . implode(',', $validMonths) . ")
|
||
ORDER BY s4.brand, s4.id
|
||
");
|
||
|
||
return redirect()->route('testing.index')->with('success', 'Data Testing berhasil diambil.');
|
||
}
|
||
|
||
}
|