2929use App \Models \Pengelola ;
3030use App \Models \TataNaskah ;
3131use App \Models \Template ;
32+ use App \Models \UangPersediaan ;
3233use App \Models \UnitKerja ;
3334use App \Models \User ;
3435use App \Models \WhatsappGroup ;
36+ use DateTime ;
3537use Illuminate \Support \Carbon ;
3638use Illuminate \Support \Facades \Auth ;
3739use Illuminate \Support \Facades \Cache ;
@@ -64,6 +66,15 @@ class Helper
6466 'Lainnya ' => 'Lainnya ' ,
6567 ];
6668
69+ const JENIS_UP = [
70+ 'GTUP NIHIL ' ,
71+ 'GUP NIHIL ' ,
72+ 'GUP KKP ' ,
73+ 'TUP ' ,
74+ 'GUP ' ,
75+ 'UP ' ,
76+ ];
77+
6778 const AKUN_PERJALANAN = [
6879 '524111 ' ,
6980 '524113 ' ,
@@ -76,12 +87,6 @@ class Helper
7687 'kkp ' => 'KKP ' ,
7788 ];
7889
79- const JENIS_UANG_PERSEDIAAN = [
80- 'gup ' => 'GUP ' ,
81- 'kkp ' => 'KKP ' ,
82- ];
83-
84-
8590 const JENIS_KEGIATAN = [
8691 'Libur ' => 'Libur ' ,
8792 'Deadline ' => 'Deadline ' ,
@@ -1972,6 +1977,42 @@ public static function getLatestTataNaskahId($tanggal)
19721977 return optional (TataNaskah::cache ()->get ('all ' )->where ('tanggal ' , '<= ' , $ tanggal )->sortByDesc ('tanggal ' )->first ())->id ;
19731978 }
19741979
1980+ public static function getLatestUangPersediaan ($ tahun , array $ jenis )
1981+ {
1982+ $ dipa = Dipa::cache ()
1983+ ->get ('all ' )
1984+ ->where ('tahun ' , $ tahun )
1985+ ->first ();
1986+ $ dipaId = optional ($ dipa )->id ;
1987+
1988+ $ latestUp = UangPersediaan::where ('dipa_id ' , $ dipaId )
1989+ ->whereIn ('jenis ' , $ jenis )
1990+ ->whereNowOrPast ('tanggal ' )
1991+ ->latest ('tanggal ' )
1992+ ->first ();
1993+
1994+ return $ latestUp ;
1995+ }
1996+
1997+ public static function getLatestUp ($ tahun )
1998+ {
1999+ return self ::getLatestUangPersediaan ($ tahun , ['UP ' ]);
2000+ }
2001+
2002+ public static function getLatestGup ($ tahun )
2003+ {
2004+ $ gup = self ::getLatestUangPersediaan ($ tahun , ['GUP ' ]);
2005+
2006+ return $ gup ?? self ::getLatestUp ($ tahun );
2007+ }
2008+
2009+ public static function getLatestTup ($ tahun )
2010+ {
2011+ $ tup = self ::getLatestUangPersediaan ($ tahun , ['TUP ' , 'GTUP NIHIL ' ]);
2012+
2013+ return $ tup === 'GTUP NIHIL ' ? null : $ tup ;
2014+ }
2015+
19752016 /**
19762017 * Get the latest Harga Satuan ID based on the given date.
19772018 *
@@ -2300,7 +2341,7 @@ public static function setOptionBarangPersediaan()
23002341 public static function sendReminder ($ reminder , $ method = 'auto ' )
23012342 {
23022343 $ kegiatan = $ reminder ->daftarKegiatan ;
2303- $ hari = floor (($ method === 'auto ' ? $ reminder ->tanggal : now ())->diffInDays ($ kegiatan ->awal ));
2344+ $ hari = floor (($ method === 'auto ' ? $ reminder ->tanggal : now ())->diffInDays ($ kegiatan ->awal , true ));
23042345 $ pesan = strtr ($ kegiatan ->pesan , [
23052346 '{judul} ' => $ hari > 0 ? '[Reminder Deadline (H- ' .$ hari .')] ' : '[Reminder Deadline] ' ,
23062347 '{tanggal} ' => self ::terbilangTanggal ($ kegiatan ->awal ),
@@ -2343,4 +2384,71 @@ public static function version(): string
23432384 return $ version ;
23442385 });
23452386 }
2387+
2388+ public static function hitungPeriodeGup ($ tanggalGup ): array
2389+ {
2390+ if (isset ($ tanggalGup )) {
2391+ $ date = $ tanggalGup ;
2392+
2393+ $ bulan = (int ) $ date ->format ('m ' );
2394+ $ tahun = (int ) $ date ->format ('Y ' );
2395+ $ hari = (int ) $ date ->format ('d ' );
2396+
2397+ $ daysInCurrentMonth = cal_days_in_month (CAL_GREGORIAN , $ bulan , $ tahun );
2398+
2399+ // Cari bulan berikutnya
2400+ $ nextMonth = $ bulan + 1 ;
2401+ $ nextYear = $ tahun ;
2402+ if ($ nextMonth > 12 ) {
2403+ $ nextMonth = 1 ;
2404+ $ nextYear ++;
2405+ }
2406+ $ daysInNextMonth = cal_days_in_month (CAL_GREGORIAN , $ nextMonth , $ nextYear );
2407+
2408+ if ($ hari == $ daysInCurrentMonth ) {
2409+ // Jika tanggal terakhir bulan → pakai tanggal terakhir bulan berikutnya
2410+ $ endDate = new DateTime ("$ nextYear- $ nextMonth- $ daysInNextMonth " );
2411+ $ days = $ daysInNextMonth ;
2412+ } else {
2413+ // Jika bukan tanggal terakhir → pakai tanggal sama di bulan berikutnya
2414+ // Hati-hati jika bulan berikutnya tidak punya tanggal tsb (misalnya 30 Feb)
2415+ $ endDay = min ($ hari , $ daysInNextMonth );
2416+ $ endDate = new DateTime ("$ nextYear- $ nextMonth- $ endDay " );
2417+ $ days = $ daysInCurrentMonth ;
2418+ }
2419+
2420+ return [
2421+ 'awal ' => Carbon::instance ($ date ),
2422+ 'akhir ' => Carbon::instance ($ endDate ),
2423+ 'hari ' => $ days ,
2424+ ];
2425+
2426+ }
2427+
2428+ return [
2429+ 'awal ' => '- ' ,
2430+ 'akhir ' => '- ' ,
2431+ 'hari ' => 0 ,
2432+ ];
2433+
2434+ }
2435+
2436+ public static function setReminderForUangPersediaan ($ jenis , $ tanggal )
2437+ {
2438+
2439+ $ kegiatan = new DaftarKegiatan ;
2440+ $ kegiatan ->jenis = 'Deadline ' ;
2441+ $ kegiatan ->kegiatan = $ jenis === 'gup ' ? 'SPM Penggantian UP (GUP) ' : 'SPM Pertanggungjawaban TUP (GTUP) ' ;
2442+ $ kegiatan ->awal = $ tanggal ;
2443+ $ kegiatan ->akhir = $ tanggal ;
2444+ $ kegiatan ->wa_group_id = [['id ' => '6287814885714-1605499798@g.us ' ]];
2445+ $ kegiatan ->pesan = "*{judul}* \n\nDeadline : {tanggal} \nPerihal : {kegiatan} \nPenanggung jawab: *{pj}* \n\nMohon untuk segera membuat " .($ jenis === 'gup ' ? 'SPM Penggantian UP (GUP) ' : 'SPM Pertanggungjawaban TUP (GTUP) ' )." sebelum tanggal ({tanggal}). \ndengan memperhatikan jumlah minimum yang telah ditentukan. \n\nTerimakasih ✨✨ " ;
2446+ $ kegiatan ->waktu_reminder = [
2447+ ['hari ' => 3 , 'referensi_waktu ' => 'HK ' , 'waktu_kirim ' => '08:00:00 ' ],
2448+ ['hari ' => 1 , 'referensi_waktu ' => 'HK ' , 'waktu_kirim ' => '08:00:00 ' ],
2449+ ];
2450+ $ kegiatan ->daftar_kegiatanable_id = 1 ;
2451+ $ kegiatan ->daftar_kegiatanable_type = 'App \\Models \\UnitKerja ' ;
2452+ $ kegiatan ->save ();
2453+ }
23462454}
0 commit comments