['Senin','Rabu Siang','Jumat Siang'], 'Dora' => ['Rabu Sore', 'Kamis Sore'], 'Dewi' => ['Rabu Sore','Kamis Pagi','Ahad'], 'Indro' => ['Selasa Sore','Rabu Sore','Kamis Sore','Sabtu'], 'Dono' => ['Senin','Selasa','Rabu Sore','Kamis Sore','Jumat'], ]; $no_area = [ 'Dewi' => ['Jakarta Barat','noll'] ]; $area = ['Jakarta Barat','Pondok Aren','Ciputat','Pondok Labu','Kebayoran Lama']; $area_detals = ['Jakarta Barat' => ['Grogol','Tanah Abang','Thamrin City'], 'Pondok Aren' => ['Ceger','Japos','Pondok Kacang'], 'Ciputat' => ['UIN','Kasino 1','Kasino 2','ZXC'], 'Pondok Labu' => ['ATK 1','ATK 2','Tex 1','Tex 2','MMM','Gandul 1','Gandul 2'], 'Kebayoran Lama' => ['ATK 1','ATK 2','ATK 3','Tex 1','Tex 2','Tex 3','Sepatu'], ]; $tahun = 2018; $bulan = 1; //=================== ApplyHeader($tahun); $booked = []; $twice = []; $kemarin= []; $ctrKemarin = 0; while ($bulan < 13) { echo "
| Senin | Selasa | Rabu | Kamis | Jumat | Sabtu | Ahad |
|---|---|---|---|---|---|---|
| "; }; // pilih salah satu hari Sabtu $xSaturday = getRandomSaturday($bulan, $tahun); // pilih salah satu hari Ahad $xSunday = getRandomSunday($bulan, $tahun); // mulai buat daftar keliling bulan ini while (checkdate ($bulan, $tanggal, $tahun)) { $hari_ini = getDay($tanggal,$bulan,$tahun); // jika hari Senin, bikin row baru if ($hari_ini == 'Senin') { echo " | ||||||
| $tanggal | "; } else { // bikin kolom hari echo "".$hari_ini." : ".$tanggal."\n\n"; foreach ($area as &$daerah) { // dapatkan waktu do { $x = getRandomNumber(0, sizeof($slot_jadwal)-1); $slot = $slot_jadwal[$x]; $slot_hari = $hari_ini." ".$slot; } while ( in_array($slot_hari, $no_go) ); // dapatkan personil $ctr = 1; $dapat_sdm = false; do { $nomor = getRandomNumber(0, (sizeof($sdm)-1)); $nama = $sdm[$nomor]; $ctr++; // jika $ctr > 10000, berarti ada infinite loop // pecahkan dengan cara sbb : if ($ctr > 1000) { $nama = ''; // temukan orang yang belum ada di $booked[] foreach ($sdm as &$n) { //echo "nama1 ".$n."/".$slot_hari; if (!(in_array($n, $booked)) && !(AdaKonflikJadwal($n, $slot_hari, $no_schedule)) && !(in_array($daerah, $no_area["$n"])) && !(SudahKemarin($n,$daerah,$kemarin)) ) { $nama = $n; }; }; if ($nama <> '') { $booked[] = $nama; if ($nama == 'Devy') { $twice[] = $nama;}; // jika tidak ada, maka ambil dari $booked[] } elseif ($nama == '') { do { $nomor = getRandomNumber(0, (sizeof($booked)-1)); $nama = $booked[$nomor]; } while ( (in_array($nama, $twice)) && SudahKemarin($nama,$daerah,$kemarin) ); $twice[] = $nama; }; // if ($nama == '') $dapat_sdm = true; }; // if ($ctr > 10000) if ($dapat_sdm) { break;}; } while ( (AdaKonflikJadwal($nama, $slot_hari, $no_schedule)) || (in_array($nama, $booked)) || (in_array($daerah, $no_area["$nama"])) || (in_array($nama, $twice)) || SudahKemarin($nama,$daerah,$kemarin) ); $booked[] = $nama; if ($nama == 'Devy') { $twice[] = $nama;}; $kemarin[$ctrKemarin] = [$nama,$daerah]; $ctrKemarin++; // cetak nama & jadwal //echo $daerah." : ".$nama." - ".$slot."\n\n"; echo $daerah." : ".$nama." \n\n"; }; // foreach ($area as &$daerah) // tutup kolom hari echo " | ";
}; // if (($hari == 'Sabtu') || $hari == 'Ahad')
$booked = [];
$twice = [];
$tanggal++;
if ( $ctrKemarin > (sizeof($sdm)+1) ) { $ctrKemarin = 0;};
}; // while (checkdate ($bulan, $tanggal, $tahun)) {
$bulan++;
// bikin footer table bulan
echo "