/** * auto generate nik * * 1. get organisationcode * 2. get join date * 3. get last nik order number * @param model of employee * @return $nik */ public function generateNIK($employee) { //1. get organisationcode $code = $employee->organisation->code; //2. get join date $work = Work::personid($employee)->notchartid(0)->orderby('start', 'desc')->first(); if ($work) { $join_year = $work->start; } else { $join_year = Carbon::now(); } $nik = $code . $join_year->format('y') . '.'; //3. get last nik order number $last_nik = Employee::selectraw('max(uniqid)')->where('uniqid', 'like', $nik . '%')->organisationid($employee->organisation_id)->first(); if ($last_nik) { $number = 1 + (int) substr($last_nik['uniqid'], 6); } else { $number = 1; } return $nik . str_pad($number, 3, "0", STR_PAD_LEFT); }