diff --git a/handlers/dev/md.doctor.handlers.go b/handlers/dev/md.doctor.handlers.go index fed7efa..6d4ade2 100644 --- a/handlers/dev/md.doctor.handlers.go +++ b/handlers/dev/md.doctor.handlers.go @@ -15,6 +15,7 @@ import ( "runtime" "strconv" "strings" + "time" dev_mddoctorview "cpone/views/dev/mddoctor" @@ -50,6 +51,32 @@ type MdDoctorHandler struct { MdDoctorServices MdDoctorServices } +// calculate age +func daysInMonth(year int, month time.Month) int { + return time.Date(year, month+1, 0, 0, 0, 0, 0, time.UTC).Day() +} + +func CalculateAge(birthDate, currentDate time.Time) (years, months, days int) { + years = currentDate.Year() - birthDate.Year() + months = int(currentDate.Month() - birthDate.Month()) + days = currentDate.Day() - birthDate.Day() + + // Adjust if birth date is later in the year than current date + if days < 0 { + // Calculate days in the previous month + lastMonth := currentDate.AddDate(0, -1, 0) + days += daysInMonth(lastMonth.Year(), lastMonth.Month()) + months-- + } + + if months < 0 { + months += 12 + years-- + } + + return years, months, days +} + // GET FOTO PROFILE DOCTOR func (lh *MdDoctorHandler) GetFotoProfile(c echo.Context) error { // Mengambil nama file dari parameter URL @@ -3883,6 +3910,18 @@ func (lh *MdDoctorHandler) HandleOpenEditForm(c echo.Context) error { Code: dataDoctorList.M_DoctorReligionCode, }) + birthDate, err := time.Parse("2006-01-02", dataDoctorList.M_DoctorDOB) + if err != nil { + return fmt.Errorf("Error convert %v", err) + } + + currentDate, err := time.Parse("2006-01-02", dataTglNow) + if err != nil { + return fmt.Errorf("Error convert %v", err) + } + + tahun, bulan, hari := CalculateAge(birthDate, currentDate) + newForm := dev_mddoctorview.BodyFormDoctor( // doctor id models.CustomTextFieldv2Prm{ @@ -3909,7 +3948,7 @@ func (lh *MdDoctorHandler) HandleOpenEditForm(c echo.Context) error { Placeholder: "Tanggal Lahir Edit", Type: "hidden", ID: "doctortgllahiredit", - Value: dataDoctorList.M_DoctorDOB, + // Value: dataDoctorList.M_DoctorDOB, // Value: "2021-01-01", }, // sapaan @@ -3999,7 +4038,7 @@ func (lh *MdDoctorHandler) HandleOpenEditForm(c echo.Context) error { Placeholder: "Tahun", Type: "text", ID: "doctorimbuhantahun", - // Value: "", + Value: strconv.Itoa(tahun) + " Tahun", }, // bulan models.CustomTextFieldv2Prm{ @@ -4008,6 +4047,7 @@ func (lh *MdDoctorHandler) HandleOpenEditForm(c echo.Context) error { Placeholder: "Bulan", Type: "text", ID: "doctorimbuhanbulan", + Value: strconv.Itoa(bulan) + " Bulan", }, // hari models.CustomTextFieldv2Prm{ @@ -4016,6 +4056,7 @@ func (lh *MdDoctorHandler) HandleOpenEditForm(c echo.Context) error { Placeholder: "Hari", Type: "text", ID: "doctorimbuhanhari", + Value: strconv.Itoa(hari) + " Hari", }, // pendidikan terakhir models.CustomDropdownv1Prm{ diff --git a/views/dev/mddoctor/mddoctor.templ b/views/dev/mddoctor/mddoctor.templ index 36e4772..ee2a0cc 100644 --- a/views/dev/mddoctor/mddoctor.templ +++ b/views/dev/mddoctor/mddoctor.templ @@ -307,6 +307,136 @@ templ JsMdDoctor() { onLoadingEnd(); } }); + + document.addEventListener('htmx:afterSwap', function(event) { + // Reinitialize selectpicker after HTMX content swap + $('.selectpicker').selectpicker('refresh'); + }); + + htmx.onLoad(function(content) { + const dobElement = document.querySelectorAll("input[name='doctorimbuhantanggallahir']"); + const dayElement = document.querySelectorAll("input[name='doctorimbuhanhari']"); + const monthElement = document.querySelectorAll("input[name='doctorimbuhanbulan']"); + const yearElement = document.querySelectorAll("input[name='doctorimbuhantahun']"); + + function setElementsReadonly(elements) { + elements.forEach(element => { + element.readOnly = true; + }); + } + + setElementsReadonly(dayElement); + setElementsReadonly(monthElement); + setElementsReadonly(yearElement); + + for(var i = 0; i < dobElement.length; i++) { + dobElement[i].addEventListener("change", (event) => { + try { + todate= new Date(); + + + var age= [], fromdate= new Date(event.target.value), + y= [todate.getFullYear(), fromdate.getFullYear()], + ydiff= y[0]-y[1], + m= [todate.getMonth(), fromdate.getMonth()], + mdiff= m[0]-m[1], + d= [todate.getDate(), fromdate.getDate()], + ddiff= d[0]-d[1]; + + if(mdiff < 0 || (mdiff=== 0 && ddiff<0))--ydiff; + if(mdiff<0) mdiff+= 12; + if(ddiff<0){ + fromdate.setMonth(m[1]+1, 0); + ddiff= fromdate.getDate()-d[1]+d[0]; + --mdiff; + } + if(ydiff> 0) age.push(ydiff+ ' year'+(ydiff> 1? 's ':' ')); + if(mdiff> 0) age.push(mdiff+ ' month'+(mdiff> 1? 's':'')); + if(ddiff> 0) age.push(ddiff+ ' day'+(ddiff> 1? 's':'')); + if(age.length>1) age.splice(age.length-1,0,' and '); + for (var t = 0; t < yearElement.length; ++t) { + yearElement[t].value = ydiff; + } + for (var m = 0; m < monthElement.length; ++m) { + monthElement[m].value = mdiff; + + } + for (var d = 0; d < dayElement.length; ++d) { + dayElement[d].value = ddiff; + + } + } catch (error) { + console.error(error); + + } + }, false); + } + function tentukanTanggalLahir(umurTahun, umurBulan, umurHari) { + // Memecah tanggal sekarang menjadi tahun, bulan, dan hari + var tanggalSekarang = new Date().toISOString().slice(0, 10) + console.log("tanggal sekarang"); + console.log(tanggalSekarang); + const [tahunSekarang, bulanSekarang, hariSekarang] = tanggalSekarang.split('-').map(Number); + + + // Mengurangi umur dari tanggal sekarang + let tahunLahir = tahunSekarang - umurTahun; + let bulanLahir = bulanSekarang - umurBulan; + let hariLahir = hariSekarang - umurHari; + + // Jika hari negatif, kurangi satu bulan dan tambahkan jumlah hari dari bulan sebelumnya + if (hariLahir < 0) { + bulanLahir--; + + // Mendapatkan jumlah hari dalam bulan sebelumnya + const bulanSebelumnya = bulanSekarang - 1 < 1 ? 12 : bulanSekarang - 1; + const tahunSebelumnya = bulanSebelumnya === 12 ? tahunSekarang - 1 : tahunSekarang; + hariLahir += new Date(tahunSebelumnya, bulanSebelumnya, 0).getDate(); + } + + // Jika bulan negatif, kurangi satu tahun dan tambahkan 12 bulan + if (bulanLahir < 0) { + tahunLahir--; + bulanLahir += 12; + } + + // Mengembalikan tanggal lahir dalam format YYYY-MM-DD + return `${tahunLahir}-${String(bulanLahir).padStart(2, '0')}-${String(hariLahir).padStart(2, '0')}`; + } + + dayElement[0].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[0].value, monthElement[0].value, dayElement[0].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[0].value = tgll + " Hari" + }); + monthElement[0].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[0].value, monthElement[0].value, dayElement[0].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[0].value = tgll + " Bulan" + + }); + yearElement[0].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[0].value, monthElement[0].value, dayElement[0].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[0].value = tgll + " Tahun" + }); + dayElement[1].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[1].value, monthElement[1].value, dayElement[1].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[1].value = tgll + " Hari" + }); + monthElement[1].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[1].value, monthElement[1].value, dayElement[1].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[1].value = tgll + " Bulan" + + }); + yearElement[1].addEventListener("change", (event) => { + const tgll = tentukanTanggalLahir(yearElement[1].value, monthElement[1].value, dayElement[1].value); + console.log(`Tanggal Lahir: ${tgll}`); + dobElement[1].value = tgll + " Tahun" + }); + }); } diff --git a/views/dev/mddoctor/mddoctor_templ.go b/views/dev/mddoctor/mddoctor_templ.go index 4e9017f..a1e3d59 100644 --- a/views/dev/mddoctor/mddoctor_templ.go +++ b/views/dev/mddoctor/mddoctor_templ.go @@ -748,7 +748,7 @@ func JsMdDoctor() templ.Component { templ_7745c5c3_Var33 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/views/dev/mddoctor/mddoctorformmodal.templ b/views/dev/mddoctor/mddoctorformmodal.templ index 59f068a..2ac5370 100644 --- a/views/dev/mddoctor/mddoctorformmodal.templ +++ b/views/dev/mddoctor/mddoctorformmodal.templ @@ -321,94 +321,6 @@ templ BodyFormDoctor( - } script JsHideModalDoctor(modalID string) { diff --git a/views/dev/mddoctor/mddoctorformmodal_templ.go b/views/dev/mddoctor/mddoctorformmodal_templ.go index 802b934..3abef89 100644 --- a/views/dev/mddoctor/mddoctorformmodal_templ.go +++ b/views/dev/mddoctor/mddoctorformmodal_templ.go @@ -500,7 +500,7 @@ func BodyFormDoctor( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -580,7 +580,7 @@ func ActionFormDoctor(LinkClose string, targetClose string, hxSwapClose string, var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(LinkClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 438, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 350, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { @@ -593,7 +593,7 @@ func ActionFormDoctor(LinkClose string, targetClose string, hxSwapClose string, var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(targetClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 439, Col: 26} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 351, Col: 26} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { @@ -606,7 +606,7 @@ func ActionFormDoctor(LinkClose string, targetClose string, hxSwapClose string, var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwapClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 440, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 352, Col: 24} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { @@ -647,7 +647,7 @@ func BtnCloseFormDoctor(LinkClose string, targetClose string, hxSwapClose string var templ_7745c5c3_Var18 string templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(LinkClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 461, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 373, Col: 21} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { @@ -660,7 +660,7 @@ func BtnCloseFormDoctor(LinkClose string, targetClose string, hxSwapClose string var templ_7745c5c3_Var19 string templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(targetClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 462, Col: 25} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 374, Col: 25} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) if templ_7745c5c3_Err != nil { @@ -673,7 +673,7 @@ func BtnCloseFormDoctor(LinkClose string, targetClose string, hxSwapClose string var templ_7745c5c3_Var20 string templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwapClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 463, Col: 23} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 375, Col: 23} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20)) if templ_7745c5c3_Err != nil { @@ -728,7 +728,7 @@ func DeleteConfirmationBodyDoctor(inputId models.CustomTextFieldv2Prm, var templ_7745c5c3_Var23 string templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(componentID) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 480, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 392, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23)) if templ_7745c5c3_Err != nil { @@ -750,7 +750,7 @@ func DeleteConfirmationBodyDoctor(inputId models.CustomTextFieldv2Prm, var templ_7745c5c3_Var25 string templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(message) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 481, Col: 14} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 393, Col: 14} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) if templ_7745c5c3_Err != nil { @@ -768,7 +768,7 @@ func DeleteConfirmationBodyDoctor(inputId models.CustomTextFieldv2Prm, var templ_7745c5c3_Var26 string templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(v) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 486, Col: 68} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 398, Col: 68} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26)) if templ_7745c5c3_Err != nil { @@ -791,7 +791,7 @@ func DeleteConfirmationBodyDoctor(inputId models.CustomTextFieldv2Prm, var templ_7745c5c3_Var27 string templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(v) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 492, Col: 10} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 404, Col: 10} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27)) if templ_7745c5c3_Err != nil { @@ -858,7 +858,7 @@ func ActionFormDoctorDelete(LinkClose string, targetClose string, hxSwapClose st var templ_7745c5c3_Var30 string templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(LinkClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 506, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 418, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) if templ_7745c5c3_Err != nil { @@ -871,7 +871,7 @@ func ActionFormDoctorDelete(LinkClose string, targetClose string, hxSwapClose st var templ_7745c5c3_Var31 string templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(targetClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 507, Col: 26} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 419, Col: 26} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31)) if templ_7745c5c3_Err != nil { @@ -884,7 +884,7 @@ func ActionFormDoctorDelete(LinkClose string, targetClose string, hxSwapClose st var templ_7745c5c3_Var32 string templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwapClose) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 508, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mddoctor\mddoctorformmodal.templ`, Line: 420, Col: 24} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32)) if templ_7745c5c3_Err != nil {