using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.Core.MessageBroker.Contract.MobileNotification; using Kreta.Core.MessageBroker.Contract.MobileNotification.Enum; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.Enums.ManualEnums; using Kreta.Job.Tasks.Entities; using Kreta.Job.Tasks.Helpers.Utility; using Kreta.MessageBroker.Client.MobileNotification; using Kreta.Resources; using Newtonsoft.Json; using Serilog; using Serilog.Core.Enrichers; namespace Kreta.Job.Tasks.Helpers.Notification { internal static class HazifeladatNotificationHelper { internal static void SendHazifeladatNotification(string connectionString) { var logger = Log.ForContext(new PropertyEnricher[] { new PropertyEnricher("LoggerId", Guid.NewGuid()) }); try { logger.Information("SendHazifeladatNotification:Start"); Dal.ServiceSystemConnection.Run(connectionString, dalHandler => { IDKT_FeladatDal dktFeladatDal = dalHandler.DKT_FeladatDal(); DataSet hazifeladatok = dktFeladatDal.GetAllSchemaHazifeladatNotification(); logger.Information("GetAllSchemaHazifeladatNotification"); var hazifeladatList = new List(); foreach (DataRow row in hazifeladatok.Tables[0].Rows) { if (int.TryParse(row["ID"] == DBNull.Value ? string.Empty : row["ID"].ToString(), out int hazifeladatId)) { hazifeladatList.Add(new IdWithData(hazifeladatId, row)); } } if (hazifeladatList.Count > 0) { dktFeladatDal.SetHazifeladatAsKikuldott(hazifeladatList.Select(x => x.Id).Distinct().ToList()); logger.Information("SetHazifeladatAsKikuldott"); var mobileNotificationMessages = new List(); hazifeladatList.ForEach(item => ProcessHazifeladatNotification(item.Data, item.Id, mobileNotificationMessages)); logger.Information($"ProcessHazifeladatNotification count: {mobileNotificationMessages.Count}"); if (mobileNotificationMessages.Count > 0) { MobileNotificationMessageHelper.PostStudentNotification(mobileNotificationMessages.ToArray()); logger.Information($"Hazifeladat PostStudentNotification"); } } }); logger.Information("SendHazifeladatNotification:End"); } catch (Exception ex) { logger.Fatal(ex, ex.GetType().FullName); } } private static void ProcessHazifeladatNotification(DataRow row, int hazifeladatId, List mobileNotificationMessages) { if (int.TryParse(row["TanuloId"] == DBNull.Value ? string.Empty : row["TanuloId"].ToString(), out int tanuloId)) { Guid.TryParse(row["IdpUniqueId"] == DBNull.Value ? string.Empty : row["IdpUniqueId"].ToString(), out Guid idpUniqueId); string instituteCode = row["IntezmenyAzonosito"] == DBNull.Value ? string.Empty : row["IntezmenyAzonosito"].ToString(); string tanuloNev = row["TanuloNev"] == DBNull.Value ? string.Empty : row["TanuloNev"].ToString(); string tantargyNev = row["TantargyNev"] == DBNull.Value ? string.Empty : row["TantargyNev"].ToString(); int feladatTipusId = Convert.ToInt32(row["FeladatTipusId"]); int? xeropanBundleId = row["XeropanBundleId"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["XeropanBundleId"]); DateTime feladatDatum = Convert.ToDateTime(row["Datum"]); string hetNapja = Extensions.GetHetnapja(feladatDatum, Convert.ToInt32(row["TanevId"]), instituteCode); int? oraSzam = row["OraSzam"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["OraSzam"]); string idopont = oraSzam.HasValue ? $"{hetNapja} {oraSzam}. óra időpontra" : $"{hetNapja}i napra"; var dataObject = new { FeladatTipusId = feladatTipusId, FeladatDatum = feladatDatum.ToIso8601UtcString() }; // Azért szükséges ez a rész, mert ha egy napot a tanév rendjében tanítási napnak jelölök, akkor utána az órát // beteszi a t_orarendiora táblába ugyan azokkal az adatokkal csak más id-val hetirend-el érvényesség kezdetével végével, // ez viszont valid működés és az is, hogy lehet tenni tanítási napot mondjuk nem hétvégére, ennek kiküszöbölésére, hogy ne küldjön duplán push-t került ide ez a módosítás. if (!mobileNotificationMessages.Any(m => m.ItemId == hazifeladatId && m.UserId == tanuloId) && (feladatTipusId != (int)FeladatTipusEnum.NyelviFeladat || feladatTipusId == (int)FeladatTipusEnum.NyelviFeladat && xeropanBundleId.HasValue)) { mobileNotificationMessages.Add(MobileNotificationMessageHelper.CreateMessage( instituteCode, tanuloId, MobileNotificationMessageType.Homework, hazifeladatId, string.Format(NotificationResource.HaziFeladatNotificationMessage, tanuloNev, tantargyNev, feladatDatum.ToString("yyyy.MM.dd."), idopont), NotificationResource.HaziFeladatTitle, data: JsonConvert.SerializeObject(dataObject))); } } } } }