diff --git a/sge-backend/src/main/resources/application.properties b/sge-backend/src/main/resources/application.properties index c5132b2..6becd41 100644 --- a/sge-backend/src/main/resources/application.properties +++ b/sge-backend/src/main/resources/application.properties @@ -27,4 +27,7 @@ spring.rabbitmq.template.retry.enabled=true spring.rabbitmq.template.retry.max-attempts=3 spring.rabbitmq.template.retry.initial-interval=1000ms -logging.level.org.springframework.amqp=DEBUG \ No newline at end of file +logging.level.org.springframework.amqp=DEBUG +spring.jpa.show-sql=true +logging.level.org.hibernate.SQL=DEBUG +logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE \ No newline at end of file diff --git a/sge-frontend/src/locales/en/translation.json b/sge-frontend/src/locales/en/translation.json index b24d45f..a0438dd 100644 --- a/sge-frontend/src/locales/en/translation.json +++ b/sge-frontend/src/locales/en/translation.json @@ -67,7 +67,11 @@ "Common": { "save": "Save", - "cancel": "Cancel" + "cancel": "Cancel", + "yes": "Yes", + "no": "No", + "areYouSure": "Are you sure?", + "cantRevert": "This action cannot be undone!" }, "DataInput": { diff --git a/sge-frontend/src/locales/tr/translation.json b/sge-frontend/src/locales/tr/translation.json index a85ed5d..ad3676d 100644 --- a/sge-frontend/src/locales/tr/translation.json +++ b/sge-frontend/src/locales/tr/translation.json @@ -1,311 +1,315 @@ -{ - "Actions": "Aksiyonlar", - "Active": "Aktif", - "ByName": "İsme Göre", - "CreatedTime": "Oluşturulma Zamanı", - "Description": " Açıklaması", - "Filter": "Filtrele", - "Management": "Yönetim", - "Passive": "Pasif", - "Show": "Göster", - "Status": "Durum", - "Time": "Zaman ", - - "Activities": { - "activity": "Aktivite ", - "activities": "Aktiviteler ", - "type": "Log Tipi", - "message": "Log Mesajı" - }, - - "Areas": { - "addArea": "Alan Ekle", - "area": "Alan ", - "areas": "Alanlar ", - "areaName": "Alan Adı ", - "city": "Şehir ", - "cities": "Şehirler ", - "cityName": "Şehir Adı ", - "country": "Ülke ", - "countries": "Ülkeler ", - "countryName": "Ülke Adı ", - "countryCode": "Ülke Kodu ", - "district": "İlçe ", - "districts": "İlçeler", - "districtName": "İlçe Adı", - "neighborhood": "Mahalle ", - "neighborhoods": "Mahalleler ", - "neighborhoodName": "Mahalle Adı", - "addNeighborhood": "Mahalle Ekle", - "latitude": "Enlem", - "longitude": "Boylam" - }, - - "Auth": { - "authorized": "Devam etmek için yetkilendirilmiş kullanıcı bilgilerinizi giriniz.", - "didUForgotPassword": "Şifrenizi mi unuttunuz?", - "logout": "Çıkış Yap", - "logoutMessage": " Çıkış yaptınız. Yönlendiriliyorsunuz...", - "login": "Giriş Yap", - "loginMessage": " Giriş başarılı yönlendiriliyorsunuz...", - "password": "Şifre ", - "welcome": "Hoşgeldiniz", - "incorrectForm": "Kullanıcı bilgileri hatalıdır. Lütfen tekrar deneyiniz." - }, - - "Cruds": { - "add": " Ekle", - "cancel": " İptal", - "delete": "Sil", - "edit": "Düzenle", - "reactive": "Aktif Et", - "save": "Kaydet", - "saving": "Kaydediliyor..", - "update": "Güncelle" - }, - - "Common": { - "save": "Kaydet", - "cancel": " İptal" - }, - - "DataInput": { - "area": "Bölge ", - "report": "Rapor ", - "reports": "Raw Data", - "data": "Veri ", - "datas": "Veriler ", - "dataInput": "Veri Girişi", - "year": "Yıl", - "month": "Ay", - "consumptionAmount": "Tüketim Miktarı", - "consumptionUnit": "Tüketim Birimi", - "gpcReference": "GPC Referans", - "total": "Toplam ", - "save": "Veriyi Kaydet", - "update": "Veriyi Güncelle", - "showDeleted": "Silinen Raporları Göster", - "result": "Sonuç", - "directToAllDatas": "Tüm Verileri Gör", - "addNewData": "Yeni Veri Ekle", - "failUploadExcel": "Dosya yüklenirken hata oluştu!" - }, - - "Graphics": { - "graphics": "Raporlar", - "reports": "Raporlar" - }, - - "EmissionSources": { - "dataSet": "Veri Seti", - "emissionSource": "Emisyon Kaynağı ", - "emissionSources": "Emisyon Kaynakları ", - "emissionSourceName": "Emisyon Kaynağı Adı", - "addEmissionSource": "Emisyon Kaynağı Ekle", - "existingEmissionName": "Bu isimde bir emisyon kaynağı mevcuttur!", - "sector": "Veri Sektörü ", - "sectors": "Veri Sektörleri ", - "subSector": "Sektör Alt Birimi ", - "subSectors": "Sektör Alt Birimleri ", - "subUnit": "Faaliyet Alt Birimi ", - "subUnits": "Faaliyet Alt Birimleri ", - "emissionScopes": "Emisyon Kapsamı ", - "emissionFactors": "Emisyon Faktörleri ", - "showDeletedEmissionSource": "Silinen Emisyon Kaynaklarını Göster" - }, - - "Map": { - "map": "Harita", - "goBack": "Geri dön", - "reference": "Referans", - "title": "Harita" - }, - - "Months": { - "1": "Ocak", - "2": "Şubat", - "3": "Mart", - "4": "Nisan", - "5": "Mayıs", - "6": "Haziran", - "7": "Temmuz", - "8": "Ağustos", - "9": "Eylül", - "10": "Ekim", - "11": "Kasım", - "12": "Aralık", - "null": "Yıl Geneli", - "0": "Yıl Geneli" - }, - - "Notifications": { - "content": "İçerik ", - "notification": "Bildirim ", - "notifications": "Bildirimler ", - "showAll": "Tüm Bildirimleri Göster", - "title": "Başlık ", - "notificationType": "Bildirim Tipi " - }, - - "Organizations": { - "organization": "Organizasyon ", - "organizations": "Organizasyonlar", - "organizationName": "Organizasyon Adı", - "parentOrganization": "Bağlı Olduğu Organizasyon", - "childOrganization": "Alt Organizasyonu", - "addOrganization": "Organizasyon Ekle", - "existingName": "Bu isimde bir organizasyon mevcuttur!.", - "showDeletedOrganizations": "Silinen Organizasyonları Göster" - }, - - "PasswordLabel": { - "passwordLabel": "Şifre", - "confirmPassword": "Şifre Tekrar", - "oldPassword": "Eski Şifre", - "newPassword": "Yeni Şifre", - "newConfirmPassword": "Yeni Şifre Tekrar", - "verificationCode": "Doğrulama Kodu", - "cannotbeleftblank": " Boş Bırakılamaz ", - "passwordNotSame": "Şifreler aynı değil", - "passwordValidation": "Şifre 6-20 karakter uzunluğunda, en az 1 sayı, 1 büyük harf ve 1 küçük harf içermelidir!", - - "forgotPassword": "Şifremi Unuttum", - "enterEmail": "Geçerli bir email giriniz.", - "send": "Gönder", - "redirectToReset": "Şifre sıfırlama ekranına yönlendiriliyorsunuz..", - - "resetPassword": "Şifre Sıfırlama", - "resend": "Doğrulama Kodunu Tekrar Gönder", - "invalidVerificationCode": "Geçersiz doğrulama kodu!", - "redirectToLogin": "Giriş ekranına yönlendiriliyorsunuz.." - }, - - "Roles": { - "role": "Rol ", - "roles": "Roller", - "roleName": "Rol Adı", - "addRole": "Rol Ekle", - "permissions": "Yetkiler", - "existingRole": "Bu rol zaten mevcuttur." - }, - - "Survey": { - "addAnswer": "Cevap Ekle", - "addSurvey": "Anket Ekle", - "addQuestion": "Soru Ekle", - "answer": "Cevap ", - "answers": "Cevaplar", - "survey": "Anket", - "surveys": "Anketler ", - "surveyName": "Anket Adı", - "question": "Soru ", - "questions": "Sorular", - "tag": "Etiket", - "value": "Değer" - }, - - "Contact": { - "contact": "İletişim", - "contactInfo": "İletişim Bilgileri", - "contactEmail": "E-posta Adresi", - "contactPhoneNumber": "Telefon Numarası", - "contactAddress": "Adres" - }, - "MailSettings": { - "mailSettings": "E-posta Ayarları", - "editMailInfo": "E-posta Bilgilerini Düzenle", - "hostName": "Sunucu Adı", - "smtpPort": "SMTP Portu", - "emailAddress": "E-posta Adresi", - "emailPassword": "E-posta Şifresi", - "leaveBlankNote": "(Mevcut şifreyi korumak için boş bırakın)", - "mainMail": "Ana e-posta yapılandırması olarak ayarla", - "saveSettings": "Ayarları Kaydet", - "notConfigured": "E-posta yapılandırılmamış", - "noMailsRegistered": "Kayıtlı e-posta bulunamadı" - }, - - "Timer": { - "continue": "Devam Et ", - "expire": "Oturum süreniz dolmak üzeredir.." - }, - - "Users": { - "user": "Kullanıcı ", - "users": "Kullanıcılar ", - "userName": "Kullanıcı Adı ", - "addUser": "Kullanıcı Ekle", - "existingEmail": "Bu e-mail zaten mevcuttur.", - "existingPhoneNumber": "Bu telefon numarası zaten mevcuttur.", - "showDeletedUsers": "Silinen Kullanıcıları Göster" - }, - - "UserProfile": { - "myProfile": "Profilim", - "firstName": "Ad", - "lastName": "Soyad", - "phoneNumber": "Telefon Numarası", - "avatar": "Profil Fotoğrafı", - "status": "Durum", - "changePassword": "Şifre Değiştir", - "communicationPreferences": "İletişim Tercihleri", - "updateAvatar": "Profil Resmini Güncelle" - }, - - "Warnings": { - "addedFail": " Eklenirken hata meydana geldi, lütfen tekrar deneyiniz.", - "addedSuccessfully": " Başarıyla Eklendi!", - - "updatedSuccessfully": " Başarıyla Güncellendi!", - "updatedFail": " Güncellenirken hata meydana geldi, lütfen tekrar deneyiniz.", - - "deletedSuccessfully": " Başarıyla Silindi!", - "deletedFail": " Silinirken hata meydana geldi, lütfen tekrar deneyiniz.", - - "genericUpdateFailed": "Güncelleme başarısız oldu. Lütfen tekrar deneyiniz.", - "notFound": "Bulunamadı", - "notUndone": "Bu işlem geri alınamaz!", - "required": "Tüm Alanlar Zorunludur!", - "sureForDelete": " Silmek İstediğinize Emin Misiniz?", - "uniqueName": " Benzersiz bir isim veriniz! " - }, - - "UserActivities": { - "title": "Kullanıcı Aktiviteleri" - }, - "SystemActivities": { - "title": "Sistem Aktiviteleri" - }, - - "DataCenter": { - "title": "Veri Merkezleri", - "create": "Veri Merkezi Ekle", - "name": "İsim", - "namePlaceholder": "Veri merkezi ismini girin", - "externalId": "Harici ID", - "externalIdPlaceholder": "Harici ID girin", - "number": "Numara", - "numberPlaceholder": "Numara girin", - "url": "URL", - "urlPlaceholder": "URL girin", - "createSuccess": "Veri merkezi başarıyla oluşturuldu", - "deleteSuccess": "Veri merkezi başarıyla silindi", - "searchPlaceholder": "Veri merkezlerinde ara..." - }, - - "DataCenters": { - "title": "Veri Merkezleri", - "create": "Veri Merkezi Ekle", - "name": "İsim", - "namePlaceholder": "Veri merkezi ismini girin", - "externalId": "Harici ID", - "externalIdPlaceholder": "Harici ID girin", - "number": "Numara", - "numberPlaceholder": "Numara girin", - "url": "URL", - "urlPlaceholder": "URL girin", - "createSuccess": "Veri merkezi başarıyla oluşturuldu", - "deleteSuccess": "Veri merkezi başarıyla silindi", - "searchPlaceholder": "Veri merkezlerinde ara..." - } -} +{ + "Actions": "Aksiyonlar", + "Active": "Aktif", + "ByName": "İsme Göre", + "CreatedTime": "Oluşturulma Zamanı", + "Description": " Açıklaması", + "Filter": "Filtrele", + "Management": "Yönetim", + "Passive": "Pasif", + "Show": "Göster", + "Status": "Durum", + "Time": "Zaman ", + + "Activities": { + "activity": "Aktivite ", + "activities": "Aktiviteler ", + "type": "Log Tipi", + "message": "Log Mesajı" + }, + + "Areas": { + "addArea": "Alan Ekle", + "area": "Alan ", + "areas": "Alanlar ", + "areaName": "Alan Adı ", + "city": "Şehir ", + "cities": "Şehirler ", + "cityName": "Şehir Adı ", + "country": "Ülke ", + "countries": "Ülkeler ", + "countryName": "Ülke Adı ", + "countryCode": "Ülke Kodu ", + "district": "İlçe ", + "districts": "İlçeler", + "districtName": "İlçe Adı", + "neighborhood": "Mahalle ", + "neighborhoods": "Mahalleler ", + "neighborhoodName": "Mahalle Adı", + "addNeighborhood": "Mahalle Ekle", + "latitude": "Enlem", + "longitude": "Boylam" + }, + + "Auth": { + "authorized": "Devam etmek için yetkilendirilmiş kullanıcı bilgilerinizi giriniz.", + "didUForgotPassword": "Şifrenizi mi unuttunuz?", + "logout": "Çıkış Yap", + "logoutMessage": " Çıkış yaptınız. Yönlendiriliyorsunuz...", + "login": "Giriş Yap", + "loginMessage": " Giriş başarılı yönlendiriliyorsunuz...", + "password": "Şifre ", + "welcome": "Hoşgeldiniz", + "incorrectForm": "Kullanıcı bilgileri hatalıdır. Lütfen tekrar deneyiniz." + }, + + "Cruds": { + "add": " Ekle", + "cancel": " İptal", + "delete": "Sil", + "edit": "Düzenle", + "reactive": "Aktif Et", + "save": "Kaydet", + "saving": "Kaydediliyor..", + "update": "Güncelle" + }, + + "Common": { + "save": "Kaydet", + "cancel": "İptal", + "yes": "Evet", + "no": "Hayır", + "areYouSure": "Emin misiniz?", + "cantRevert": "Bu işlem geri alınamaz!" + }, + + "DataInput": { + "area": "Bölge ", + "report": "Rapor ", + "reports": "Raw Data", + "data": "Veri ", + "datas": "Veriler ", + "dataInput": "Veri Girişi", + "year": "Yıl", + "month": "Ay", + "consumptionAmount": "Tüketim Miktarı", + "consumptionUnit": "Tüketim Birimi", + "gpcReference": "GPC Referans", + "total": "Toplam ", + "save": "Veriyi Kaydet", + "update": "Veriyi Güncelle", + "showDeleted": "Silinen Raporları Göster", + "result": "Sonuç", + "directToAllDatas": "Tüm Verileri Gör", + "addNewData": "Yeni Veri Ekle", + "failUploadExcel": "Dosya yüklenirken hata oluştu!" + }, + + "Graphics": { + "graphics": "Raporlar", + "reports": "Raporlar" + }, + + "EmissionSources": { + "dataSet": "Veri Seti", + "emissionSource": "Emisyon Kaynağı ", + "emissionSources": "Emisyon Kaynakları ", + "emissionSourceName": "Emisyon Kaynağı Adı", + "addEmissionSource": "Emisyon Kaynağı Ekle", + "existingEmissionName": "Bu isimde bir emisyon kaynağı mevcuttur!", + "sector": "Veri Sektörü ", + "sectors": "Veri Sektörleri ", + "subSector": "Sektör Alt Birimi ", + "subSectors": "Sektör Alt Birimleri ", + "subUnit": "Faaliyet Alt Birimi ", + "subUnits": "Faaliyet Alt Birimleri ", + "emissionScopes": "Emisyon Kapsamı ", + "emissionFactors": "Emisyon Faktörleri ", + "showDeletedEmissionSource": "Silinen Emisyon Kaynaklarını Göster" + }, + + "Map": { + "map": "Harita", + "goBack": "Geri dön", + "reference": "Referans", + "title": "Harita" + }, + + "Months": { + "1": "Ocak", + "2": "Şubat", + "3": "Mart", + "4": "Nisan", + "5": "Mayıs", + "6": "Haziran", + "7": "Temmuz", + "8": "Ağustos", + "9": "Eylül", + "10": "Ekim", + "11": "Kasım", + "12": "Aralık", + "null": "Yıl Geneli", + "0": "Yıl Geneli" + }, + + "Notifications": { + "content": "İçerik ", + "notification": "Bildirim ", + "notifications": "Bildirimler ", + "showAll": "Tüm Bildirimleri Göster", + "title": "Başlık ", + "notificationType": "Bildirim Tipi " + }, + + "Organizations": { + "organization": "Organizasyon ", + "organizations": "Organizasyonlar", + "organizationName": "Organizasyon Adı", + "parentOrganization": "Bağlı Olduğu Organizasyon", + "childOrganization": "Alt Organizasyonu", + "addOrganization": "Organizasyon Ekle", + "existingName": "Bu isimde bir organizasyon mevcuttur!.", + "showDeletedOrganizations": "Silinen Organizasyonları Göster" + }, + + "PasswordLabel": { + "passwordLabel": "Şifre", + "confirmPassword": "Şifre Tekrar", + "oldPassword": "Eski Şifre", + "newPassword": "Yeni Şifre", + "newConfirmPassword": "Yeni Şifre Tekrar", + "verificationCode": "Doğrulama Kodu", + "cannotbeleftblank": " Boş Bırakılamaz ", + "passwordNotSame": "Şifreler aynı değil", + "passwordValidation": "Şifre 6-20 karakter uzunluğunda, en az 1 sayı, 1 büyük harf ve 1 küçük harf içermelidir!", + + "forgotPassword": "Şifremi Unuttum", + "enterEmail": "Geçerli bir email giriniz.", + "send": "Gönder", + "redirectToReset": "Şifre sıfırlama ekranına yönlendiriliyorsunuz..", + + "resetPassword": "Şifre Sıfırlama", + "resend": "Doğrulama Kodunu Tekrar Gönder", + "invalidVerificationCode": "Geçersiz doğrulama kodu!", + "redirectToLogin": "Giriş ekranına yönlendiriliyorsunuz.." + }, + + "Roles": { + "role": "Rol ", + "roles": "Roller", + "roleName": "Rol Adı", + "addRole": "Rol Ekle", + "permissions": "Yetkiler", + "existingRole": "Bu rol zaten mevcuttur." + }, + + "Survey": { + "addAnswer": "Cevap Ekle", + "addSurvey": "Anket Ekle", + "addQuestion": "Soru Ekle", + "answer": "Cevap ", + "answers": "Cevaplar", + "survey": "Anket", + "surveys": "Anketler ", + "surveyName": "Anket Adı", + "question": "Soru ", + "questions": "Sorular", + "tag": "Etiket", + "value": "Değer" + }, + + "Contact": { + "contact": "İletişim", + "contactInfo": "İletişim Bilgileri", + "contactEmail": "E-posta Adresi", + "contactPhoneNumber": "Telefon Numarası", + "contactAddress": "Adres" + }, + "MailSettings": { + "mailSettings": "E-posta Ayarları", + "editMailInfo": "E-posta Bilgilerini Düzenle", + "hostName": "Sunucu Adı", + "smtpPort": "SMTP Portu", + "emailAddress": "E-posta Adresi", + "emailPassword": "E-posta Şifresi", + "leaveBlankNote": "(Mevcut şifreyi korumak için boş bırakın)", + "mainMail": "Ana e-posta yapılandırması olarak ayarla", + "saveSettings": "Ayarları Kaydet", + "notConfigured": "E-posta yapılandırılmamış", + "noMailsRegistered": "Kayıtlı e-posta bulunamadı" + }, + + "Timer": { + "continue": "Devam Et ", + "expire": "Oturum süreniz dolmak üzeredir.." + }, + + "Users": { + "user": "Kullanıcı ", + "users": "Kullanıcılar ", + "userName": "Kullanıcı Adı ", + "addUser": "Kullanıcı Ekle", + "existingEmail": "Bu e-mail zaten mevcuttur.", + "existingPhoneNumber": "Bu telefon numarası zaten mevcuttur.", + "showDeletedUsers": "Silinen Kullanıcıları Göster" + }, + + "UserProfile": { + "myProfile": "Profilim", + "firstName": "Ad", + "lastName": "Soyad", + "phoneNumber": "Telefon Numarası", + "avatar": "Profil Fotoğrafı", + "status": "Durum", + "changePassword": "Şifre Değiştir", + "communicationPreferences": "İletişim Tercihleri", + "updateAvatar": "Profil Resmini Güncelle" + }, + + "Warnings": { + "addedFail": " Eklenirken hata meydana geldi, lütfen tekrar deneyiniz.", + "addedSuccessfully": " Başarıyla Eklendi!", + + "updatedSuccessfully": " Başarıyla Güncellendi!", + "updatedFail": " Güncellenirken hata meydana geldi, lütfen tekrar deneyiniz.", + + "deletedSuccessfully": " Başarıyla Silindi!", + "deletedFail": " Silinirken hata meydana geldi, lütfen tekrar deneyiniz.", + + "genericUpdateFailed": "Güncelleme başarısız oldu. Lütfen tekrar deneyiniz.", + "notFound": "Bulunamadı", + "notUndone": "Bu işlem geri alınamaz!", + "required": "Tüm Alanlar Zorunludur!", + "sureForDelete": " Silmek İstediğinize Emin Misiniz?", + "uniqueName": " Benzersiz bir isim veriniz! " + }, + + "UserActivities": { + "title": "Kullanıcı Aktiviteleri" + }, + "SystemActivities": { + "title": "Sistem Aktiviteleri" + }, + + "DataCenter": { + "title": "Veri Merkezleri", + "create": "Veri Merkezi Ekle", + "name": "İsim", + "namePlaceholder": "Veri merkezi ismini girin", + "externalId": "Harici ID", + "externalIdPlaceholder": "Harici ID girin", + "number": "Numara", + "numberPlaceholder": "Numara girin", + "url": "URL", + "urlPlaceholder": "URL girin", + "createSuccess": "Veri merkezi başarıyla oluşturuldu", + "deleteSuccess": "Veri merkezi başarıyla silindi", + "searchPlaceholder": "Veri merkezlerinde ara..." + }, + + "DataCenters": { + "title": "Veri Merkezleri", + "create": "Veri Merkezi Ekle", + "name": "İsim", + "namePlaceholder": "Veri merkezi ismini girin", + "externalId": "Harici ID", + "externalIdPlaceholder": "Harici ID girin", + "number": "Numara", + "numberPlaceholder": "Numara girin", + "url": "URL", + "urlPlaceholder": "URL girin", + "createSuccess": "Veri merkezi başarıyla oluşturuldu", + "deleteSuccess": "Veri merkezi başarıyla silindi", + "searchPlaceholder": "Veri merkezlerinde ara..." + } +} diff --git a/sge-frontend/src/views/DataCenterManagement.js b/sge-frontend/src/views/DataCenterManagement.js index d77f7df..620e25d 100644 --- a/sge-frontend/src/views/DataCenterManagement.js +++ b/sge-frontend/src/views/DataCenterManagement.js @@ -122,7 +122,10 @@ const DataCenterManagement = () => { const [mapPosition, setMapPosition] = useState(null); - const dataCenterStore = useSelector((state) => state.dataCenter); + const dataCenterStore = useSelector((state) => { + console.log('DataCenter Store:', state.dataCenter); + return state.dataCenter; + }); const emissionScopeStore = useSelector((state) => state.emissionScope); const datasStore = useSelector((state) => state.datas); const emissionSourceStore = useSelector((state) => state.emissionSources); @@ -179,8 +182,9 @@ const DataCenterManagement = () => { }, { name: t("Actions"), - allowOverflow: false, - maxWidth: "150px", + allowOverflow: true, + width: "150px", + center: true, cell: (row) => { return (
@@ -189,7 +193,7 @@ const DataCenterManagement = () => { - {permissionCheck("datacenter_update") && ( + {permissionCheck("data_center_update") && ( { {t("Cruds.edit")} )} - {permissionCheck("datacenter_delete") && ( + {permissionCheck("data_center_delete") && ( { }, [selectedDataCenter.areaId, areasStore?.areas]); const handleEditDataCenter = (row) => { + console.log('Editing data center:', row); setEditingDataCenter(row); setSelectedDataCenter({ name: row.dataCenter, - externalId: row.externalId, - number: row.number, - address: row.address, - areaId: row.area?.id, - cityId: null, // City is a string in the backend, not an object + externalId: row.externalId?.toString(), + number: row.number?.toString(), + address: row.address || "", + areaId: row.area?.id || null, + cityId: null, latitude: row.latitude, longitude: row.longitude, - ayposURL: row.ayposURL, + ayposURL: row.ayposURL || "", city: row.city || "", - emissionScopeId: row.emissionScope?.id, - sectorId: row.sector?.id, - subSectorId: row.subSector?.id, - emissionSourceId: row.emissionSource?.id, - consuptionUnitId: row.consuptionUnit?.id, - activitySubUnitId: row.activitySubUnit?.id + emissionScopeId: row.emissionScope?.id || null, + sectorId: row.sector?.id || null, + subSectorId: row.subSector?.id || null, + emissionSourceId: row.emissionSource?.id || null, + consuptionUnitId: row.consuptionUnit?.id || null, + activitySubUnitId: row.activitySubUnit?.id || null }); // Set the selected sector and sub sector for cascading dropdowns @@ -409,34 +414,62 @@ const DataCenterManagement = () => { const validateForm = () => { const errors = []; - // Required fields - if (!selectedDataCenter.name) { + // Required fields validation + if (!selectedDataCenter.name?.trim()) { errors.push(t("DataCenter.nameRequired")); } - if (!selectedDataCenter.externalId) { + if (!selectedDataCenter.externalId?.trim()) { errors.push(t("DataCenter.externalIdRequired")); } if (!selectedDataCenter.sectorId) { errors.push(t("DataCenter.sectorRequired")); } - // Validate external ID is a number - if (selectedDataCenter.externalId && isNaN(parseInt(selectedDataCenter.externalId))) { - errors.push(t("DataCenter.externalIdMustBeNumber")); + // Number validations + try { + if (selectedDataCenter.externalId) { + const externalId = parseInt(selectedDataCenter.externalId); + if (isNaN(externalId) || externalId < 0) { + errors.push(t("DataCenter.externalIdMustBePositiveNumber")); + } + } + if (selectedDataCenter.number) { + const number = parseInt(selectedDataCenter.number); + if (isNaN(number) || number < 1) { + errors.push(t("DataCenter.numberMustBePositive")); + } + } + } catch (e) { + errors.push(t("DataCenter.invalidNumberFormat")); } - // Validate coordinates if either is provided - if ((selectedDataCenter.latitude && !selectedDataCenter.longitude) || - (!selectedDataCenter.latitude && selectedDataCenter.longitude)) { - errors.push(t("DataCenter.bothCoordinatesRequired")); + // Coordinate validations + if (selectedDataCenter.latitude || selectedDataCenter.longitude) { + try { + const lat = parseFloat(selectedDataCenter.latitude); + const lng = parseFloat(selectedDataCenter.longitude); + + if (isNaN(lat) || lat < -90 || lat > 90) { + errors.push(t("DataCenter.invalidLatitude")); + } + if (isNaN(lng) || lng < -180 || lng > 180) { + errors.push(t("DataCenter.invalidLongitude")); + } + } catch (e) { + errors.push(t("DataCenter.invalidCoordinates")); + } } - // Validate area and city are selected together - if (selectedDataCenter.areaId && !selectedDataCenter.cityId) { - errors.push(t("DataCenter.cityRequired")); + // URL validation + if (selectedDataCenter.ayposURL?.trim()) { + try { + new URL(selectedDataCenter.ayposURL); + } catch (e) { + errors.push(t("DataCenter.invalidURL")); + } } - // Validate sector hierarchy + // Relationship validations if (selectedDataCenter.subSectorId && !selectedDataCenter.sectorId) { errors.push(t("DataCenter.sectorRequired")); } @@ -446,6 +479,9 @@ const DataCenterManagement = () => { if (selectedDataCenter.consuptionUnitId && !selectedDataCenter.emissionSourceId) { errors.push(t("DataCenter.emissionSourceRequired")); } + if (selectedDataCenter.activitySubUnitId && !selectedDataCenter.subSectorId) { + errors.push(t("DataCenter.subSectorRequiredForActivity")); + } return errors; }; @@ -460,11 +496,16 @@ const DataCenterManagement = () => { } try { - // Ensure number is set for new data centers + // Format data according to GraphQL input type const dataToSubmit = { - ...selectedDataCenter, - number: selectedDataCenter.number || 1, // Default to 1 if not set - city: selectedDataCenter.city, // Add city to the payload + dataCenter: selectedDataCenter.name, + externalId: parseInt(selectedDataCenter.externalId), + number: parseInt(selectedDataCenter.number || "1"), + address: selectedDataCenter.address, + areaId: selectedDataCenter.areaId, + latitude: selectedDataCenter.latitude ? parseFloat(selectedDataCenter.latitude) : null, + longitude: selectedDataCenter.longitude ? parseFloat(selectedDataCenter.longitude) : null, + ayposURL: selectedDataCenter.ayposURL, emissionScopeId: selectedDataCenter.emissionScopeId, sectorId: selectedDataCenter.sectorId, subSectorId: selectedDataCenter.subSectorId, @@ -482,6 +523,9 @@ const DataCenterManagement = () => { await dispatch(createDataCenter(dataToSubmit)); enqueueSnackbar(t("DataCenter.createSuccess"), { variant: "success" }); } + + // Refresh the data centers list + await dispatch(getDataCenters()); handleCloseModal(); } catch (error) { @@ -1035,7 +1079,9 @@ const DataCenterManagement = () => { sortIcon={} paginationDefaultPage={currentPage} paginationComponent={CustomPagination} - data={dataCenterStore.dataCenters} + data={dataCenterStore?.dataCenters || []} + progressPending={dataCenterStore?.loading} + progressComponent={
Loading...
} noDataComponent={
{t("Common.noDataAvailable")} diff --git a/sge-frontend/src/views/DataSet/MainDataTables.js b/sge-frontend/src/views/DataSet/MainDataTables.js index 41863c7..88c7b11 100644 --- a/sge-frontend/src/views/DataSet/MainDataTables.js +++ b/sge-frontend/src/views/DataSet/MainDataTables.js @@ -3,7 +3,7 @@ import { MaterialReactTable } from "material-react-table"; import { useDispatch, useSelector } from "react-redux"; import { useTranslation } from "react-i18next"; import { Card, CardHeader, CardTitle, Alert } from "reactstrap"; -import { getMainDataTablesWithPaginate } from "../../redux/actions/mainDataTables/index"; +import { getVMEmissionSummary } from "../../redux/actions/mainDataTables/index"; import { editNumbers } from "../../components/edit-numbers"; function MainDataTables() { @@ -16,7 +16,7 @@ function MainDataTables() { const fetchData = async () => { try { setLoading(true); - await dispatch(getMainDataTablesWithPaginate()); + await dispatch(getVMEmissionSummary()); } catch (err) { console.error('Error in MainDataTables:', err); setError(err.message); @@ -35,74 +35,21 @@ function MainDataTables() { const [loading, setLoading] = useState(true); const columns = [ - { - header: t("ID"), - accessorKey: "id", - Cell: ({ cell }) => {cell.getValue() || "-"}, - }, - { - header: t("Year"), - accessorKey: "year", - Cell: ({ cell }) => {cell.getValue() || "-"}, - }, - { - header: t("Sector"), - accessorKey: "sector", - Cell: ({ cell, row }) => {row.original?.sector?.tag || "-"}, - }, - { - header: t("Sub Sector"), - accessorKey: "subSector", - Cell: ({ cell, row }) => {row.original?.subSector?.tag || "-"}, - }, - { - header: t("Activity Sub Unit"), - accessorKey: "activitySubUnit", - Cell: ({ cell, row }) => {row.original?.activitySubUnit?.tag || "-"}, - }, - { - header: t("Emission Source"), - accessorKey: "emissionSource", - Cell: ({ cell, row }) => {row.original?.emissionSource?.tag || "-"}, - }, - { - header: t("Emission Scope"), - accessorKey: "emissionScope", - Cell: ({ cell, row }) => {row.original?.emissionScope?.tag || "-"}, - }, - { - header: t("Total Emission"), - accessorKey: "totalEmission", - Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"}, - }, - { - header: "CO2", - accessorKey: "co2", - Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"}, - }, - { - header: "CH4", - accessorKey: "ch4", - Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"}, - }, - { - header: "N2O", - accessorKey: "n2o", - Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"}, - }, - { - header: t("Created Date"), - accessorKey: "createdDate", - Cell: ({ cell }) => ( - - {cell.getValue() ? new Date(cell.getValue()).toLocaleString() : "-"} - - ), - sortable: true, - }, + { header: t("VM ID"), accessorKey: "vmId", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: t("VM Name"), accessorKey: "vmName", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: t("VM Power"), accessorKey: "vmPower", Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"} }, + { header: t("VM Status"), accessorKey: "vmStatus", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: t("Total Emission"), accessorKey: "totalEmission", Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"} }, + { header: t("Created Date"), accessorKey: "createdDate", Cell: ({ cell }) => ({cell.getValue() ? new Date(cell.getValue()).toLocaleString() : "-"}), sortable: true }, + { header: t("Physical Machine"), accessorKey: "physicalMachine", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: t("Project"), accessorKey: "project", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: t("Data Center"), accessorKey: "dataCenter", Cell: ({ cell }) => {cell.getValue() || "-"} }, + { header: "CO2", accessorKey: "co2", Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"} }, + { header: "CH4", accessorKey: "ch4", Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"} }, + { header: "N2O", accessorKey: "n2o", Cell: ({ cell }) => {editNumbers(cell.getValue()) || "-"} }, ]; - const tableData = mainDataTablesStore?.mainDataTablesWithPaginate?.content || []; + const tableData = mainDataTablesStore?.vmEmissionSummary || []; console.log('VM Emission data:', tableData); if (error) { @@ -140,7 +87,7 @@ function MainDataTables() { pageIndex: 0 }, sorting: [ - { id: 'dataCenter', desc: false } + { id: 'createdDate', desc: true } ], density: 'compact' }}