This commit is contained in:
sas.fajri
2025-05-05 08:22:54 +07:00
parent 21335675fa
commit 42d2712338

View File

@@ -765,4 +765,229 @@ Sistem ini memungkinkan:
4. Pemantauan progress analisis secara real-time
5. Pelaporan yang komprehensif untuk pelanggan
### Manajemen Penjadwalan Sampling
#### 1. Struktur Database untuk Penjadwalan
```sql
-- Tabel untuk jadwal sampling
CREATE TABLE sampling_schedules (
schedule_id SERIAL PRIMARY KEY,
date DATE,
time_slot VARCHAR(20), -- 'PAGI', 'SIANG', 'SORE'
status VARCHAR(50), -- 'AVAILABLE', 'BOOKED', 'COMPLETED'
created_at TIMESTAMP,
updated_at TIMESTAMP
);
-- Tabel untuk detail booking jadwal
CREATE TABLE sampling_bookings (
booking_id SERIAL PRIMARY KEY,
schedule_id INT,
request_id INT, -- Link ke service_requests
customer_id INT,
project_name VARCHAR(200),
location TEXT,
sampling_type VARCHAR(50),
assigned_team_id INT,
status VARCHAR(50), -- 'SCHEDULED', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED'
notes TEXT,
created_at TIMESTAMP,
updated_at TIMESTAMP
);
-- Tabel untuk tim sampling
CREATE TABLE sampling_teams (
team_id SERIAL PRIMARY KEY,
team_name VARCHAR(100),
team_leader_id INT,
vehicle_id INT,
status VARCHAR(50) -- 'AVAILABLE', 'ASSIGNED', 'ON_DUTY'
);
-- Tabel untuk anggota tim
CREATE TABLE team_members (
team_id INT,
staff_id INT,
role VARCHAR(50), -- 'LEADER', 'SAMPLER', 'ASSISTANT'
PRIMARY KEY (team_id, staff_id)
);
```
#### 2. API Endpoint untuk Cek Ketersediaan Jadwal
```php
// Endpoint: GET /api/sampling-schedules
public function getAvailableSchedules(Request $request) {
$startDate = $request->input('start_date', date('Y-m-d'));
$endDate = $request->input('end_date', date('Y-m-d', strtotime('+7 days')));
return DB::table('sampling_schedules')
->whereBetween('date', [$startDate, $endDate])
->where('status', 'AVAILABLE')
->orderBy('date', 'asc')
->orderBy('time_slot', 'asc')
->get();
}
// Endpoint: GET /api/sampling-schedules/{date}
public function getDayScheduleDetail($date) {
return DB::table('sampling_schedules as s')
->leftJoin('sampling_bookings as b', 's.schedule_id', '=', 'b.schedule_id')
->leftJoin('sampling_teams as t', 'b.assigned_team_id', '=', 't.team_id')
->where('s.date', $date)
->select([
's.*',
'b.project_name',
'b.location',
'b.sampling_type',
't.team_name',
DB::raw('(SELECT GROUP_CONCAT(CONCAT(staff.name, " (", tm.role, ")"))
FROM team_members tm
JOIN staff ON tm.staff_id = staff.id
WHERE tm.team_id = t.team_id) as team_members')
])
->get();
}
```
#### 3. Tampilan Kalender Jadwal Sampling
```text
KALENDER JADWAL SAMPLING
Periode: Februari 2025
=====================================
SENIN SELASA RABU KAMIS JUMAT
Week 1 [PENUH] [KOSONG] [PENUH] [KOSONG] [PENUH]
5 order ------- 3 order ------- 2 order
Week 2 [KOSONG] [PENUH] [PENUH] [PENUH] [KOSONG]
------- 2 order 4 order 1 order -------
[...]
Keterangan Status:
🟢 KOSONG : Semua time slot tersedia
🟡 SEBAGIAN: Beberapa time slot terisi
🔴 PENUH : Semua time slot terisi
```
#### 4. Detail Jadwal Harian
```text
DETAIL JADWAL SAMPLING
Tanggal: 20 Februari 2025
=====================================
TIME SLOT: PAGI (07:00 - 10:00)
Status : BOOKED
Project : Monitoring Kualitas Air Sungai Citarum
Customer : Dinas Lingkungan Hidup Kota
PIC Customer : Siti Aminah (08765432100)
Location : 5 titik sepanjang Sungai Citarum
Tim Bertugas : Team A
- Ahmad Ramadhan (Leader)
- Budi Santoso (Sampler)
- Citra Dewi (Assistant)
Kendaraan : B 1234 CD (Mobil Lab)
Notes : Sampling multi-titik, perlu cool box extra
TIME SLOT: SIANG (11:00 - 14:00)
Status : BOOKED
Project : Pemantauan Limbah Industri
Customer : PT. Tekstil Nusantara
PIC Customer : Deni Wijaya (08567890123)
Location : Outlet IPAL
Tim Bertugas : Team B
- Eko Prasetyo (Leader)
- Fajar Nugroho (Sampler)
Notes : Sampling rutin triwulan
TIME SLOT: SORE (15:00 - 17:00)
Status : AVAILABLE
Notes : Time slot masih tersedia
```
#### 5. Notifikasi Konflik Jadwal
```text
⚠️ PERINGATAN KONFLIK JADWAL ⚠️
Tanggal: 20 Februari 2025
Time Slot: PAGI (07:00 - 10:00)
Permintaan Baru:
- Customer: PT. Industri Kimia
- Lokasi: Kawasan Industri Pulogadung
- Jenis: Sampling Air Limbah
- Estimasi Durasi: 2 jam
Jadwal Yang Sudah Ada:
- Project: Monitoring Kualitas Air Sungai Citarum
- Tim: Team A (Sudah di-assign)
- Durasi: 3 jam
Rekomendasi:
1. Jadwalkan di time slot SORE (15:00 - 17:00)
2. Atau pilih tanggal alternatif: 21 atau 23 Februari 2025
```
#### 6. Laporan Utilisasi Tim Sampling
```text
LAPORAN UTILISASI TIM SAMPLING
Periode: Februari 2025
=====================================
TEAM A (Ahmad Ramadhan)
Total Assignment : 15 sampling
Completed : 12 sampling
Cancelled : 1 sampling
Pending : 2 sampling
Utilization Rate : 85%
TEAM B (Eko Prasetyo)
Total Assignment : 12 sampling
Completed : 10 sampling
Cancelled : 0 sampling
Pending : 2 sampling
Utilization Rate : 80%
[... other teams ...]
RINGKASAN:
- Total Tim Available : 4 tim
- Average Utilization : 82%
- Peak Days : Senin & Rabu
- Quiet Days : Jumat
- Overtime Assignments : 2 kasus
```
#### 7. Alur Proses Penjadwalan
```mermaid
sequenceDiagram
actor Admin as Admin Lab
participant Calendar as Kalender
participant Team as Tim Sampling
participant Customer as Pelanggan
Admin->>Calendar: Cek slot tersedia
Calendar-->>Admin: Tampilkan available slots
Admin->>Team: Cek ketersediaan tim
Team-->>Admin: Konfirmasi tim available
Admin->>Customer: Usulkan jadwal
Customer->>Admin: Konfirmasi jadwal
Admin->>Calendar: Book slot
Admin->>Team: Assign tim
Calendar-->>Team: Kirim notifikasi assignment
Team-->>Customer: Konfirmasi final jadwal
```
Sistem penjadwalan ini memungkinkan:
1. Pengecekan ketersediaan slot waktu secara real-time
2. Manajemen tim sampling yang efisien
3. Pencegahan konflik jadwal
4. Tracking utilisasi tim
5. Pelaporan kinerja tim sampling
6. Notifikasi otomatis untuk semua pihak terkait
[... continue with existing content ...]