Ejemplo n.º 1
0
        public async Task <bool> SendNotificationForSuppliers(int notificationCodeId, List <string> crsList, MainNotificationTemplateModel mainNotificationTemplateModel, Dictionary <string, Dictionary <int, string> > dynamicParameterList = null)
        {
            string output = JsonConvert.SerializeObject(mainNotificationTemplateModel);
            MainNotificationTemplateModel mainView = JsonConvert.DeserializeObject <MainNotificationTemplateModel>(output);
            List <CRNotificationModel>    crs      = new List <CRNotificationModel>();

            if (crsList.Any())
            {
                var idmContacts = await _idmProxy.GetContactOfficersByCR(crsList);

                crs = idmContacts.Items.AsEnumerable().Select(x => new CRNotificationModel
                {
                    CR     = x.supplierNumber,
                    Mobile = x.mobile,
                    Email  = x.email
                }).ToList();
            }
            var userNotificationSettings = await _iNotificationQuerie.GetNotificationSettingByCrAndOperationCode(crs.Select(x => x.CR).ToList(), notificationCodeId);

            if (userNotificationSettings.Count == 0)
            {
                return(true);
            }
            var  entityKey             = TempletKey(mainView.EntityValue, mainView.EntityType);
            bool IsNullEmailFirstArrgs = string.IsNullOrEmpty(Convert.ToString(mainView.Args.BodyEmailArgs[0]));
            bool IsNullSmsmFirstArrgs  = string.IsNullOrEmpty(Convert.ToString(mainView.Args.SMSArgs[0]));
            NotificationEmail email;
            NotificationSMS   sms;
            NotificationPanel panel;

            foreach (var setting in userNotificationSettings)
            {
                if (IsNullEmailFirstArrgs)
                {
                    mainView.Args.BodyEmailArgs[0] = setting.Supplier.SelectedCrName;
                }
                if (IsNullSmsmFirstArrgs)
                {
                    mainView.Args.SMSArgs[0] = setting.Supplier.SelectedCrName;
                }
                if (dynamicParameterList != null)
                {
                    foreach (var newValue in dynamicParameterList[setting.Cr])
                    {
                        mainView.Args.BodyEmailArgs[newValue.Key] = newValue.Value;
                    }
                }
                NotificationDataModel template = await BuildNotificationTemplate(userNotificationSettings.FirstOrDefault().IsArabic, userNotificationSettings.FirstOrDefault().NotificationCodeId, mainView.Args);

                var ContactOfficer = crs.Where(a => a.CR == setting.Cr).ToList();
                foreach (var currentCR in ContactOfficer)
                {
                    if (setting.Email)
                    {
                        email = new NotificationEmail(setting.Cr, currentCR.Email, template.Email.Title, template.Email.Body, setting.Id, mainView.Link, entityKey);
                        await _notifayCommands.AddNotifayWithOutSave(email);
                    }
                    if (setting.Sms)
                    {
                        sms = new NotificationSMS(setting.Cr, currentCR.Mobile, template.SMS.Body, setting.Id, mainView.Link, entityKey);
                        await _notifayCommands.AddNotifayWithOutSave(sms);
                    }
                }
                panel = new NotificationPanel(setting.Cr, template.PanelMessage, template.PanelMessage, setting.Id, mainView.Link, mainView.BranchId, mainView.CommitteeId, entityKey);
                await _notifayCommands.AddNotifayWithOutSave(panel);
            }
            if (userNotificationSettings.Count > 0)
            {
                await _notifayCommands.SaveChangesAsync();
            }
            return(true);
        }