Esempio n. 1
0
        public async Task <IHttpActionResult> GroupMessages(GroupMessageSectionModel groupMessageSectionModel)
        {
            var sender = SecurityPrincipal.Current;
            await _communicationsService.SendSectionGroupMessage(groupMessageSectionModel, sender.PersonUSI, sender.PersonUniqueId);

            return(Ok());
        }
        public async Task SendSectionGroupMessage(GroupMessageSectionModel sectionModel, int personUsi, string personUniqueId)
        {
            var validEmailTypeDescriptors = _customParametersProvider.GetParameters().descriptors.validEmailTypeDescriptors;

            // Get a list of all parents associated with the students in the section.
            var parents = await _studentRepository.GetParentsBySection(personUsi, sectionModel.Section, validEmailTypeDescriptors, _dateProvider.Today());

            // Optimization: Hashtable cache to store the translations and not call the translation API n times.
            var languageHashSubject = new Hashtable();
            var languageHashMessage = new Hashtable();

            //Translate the message to the preferred language for parent
            foreach (var parent in parents)
            {
                string englishMessage = sectionModel.Subject;
                string englishSubject = sectionModel.Message;
                //Check the language code of the parent if is null asign english like default
                if (string.IsNullOrEmpty(parent.LanguageCode))
                {
                    parent.LanguageCode = "en";
                }

                // Check to see if we have translated already.
                if (!languageHashSubject.ContainsKey(parent.LanguageCode))
                {
                    var subjectTrans = await TranslateText(sectionModel.Subject, parent.LanguageCode);

                    languageHashSubject.Add(parent.LanguageCode, subjectTrans);
                }

                sectionModel.Subject = languageHashSubject[parent.LanguageCode].ToString();

                if (!languageHashMessage.ContainsKey(parent.LanguageCode))
                {
                    var messageTrans = await TranslateText(sectionModel.Message, parent.LanguageCode);

                    languageHashMessage.Add(parent.LanguageCode, messageTrans);
                }

                sectionModel.Message = languageHashMessage[parent.LanguageCode].ToString();

                await SendGroupMessageHandler(new StudentParentAssociationModel
                {
                    ParentUsi = parent.ParentUsi,
                    Parent    = new ParentModel
                    {
                        Email          = !string.IsNullOrEmpty(parent.ProfileEmail) ? parent.ProfileEmail : parent.EdFiEmail,
                        ParentUniqueId = parent.ParentUniqueId,
                        Telephone      = parent.ProfileTelephone,
                        SMSDomain      = parent.ProfileTelephoneSMSSuffixDomain,
                        ParentAlert    = new ParentAlertModel {
                            PreferredMethodOfContactTypeId = parent.PreferredMethodOfContactTypeId
                        },
                        LanguageCode = parent.LanguageCode
                    }
                }, personUniqueId, sectionModel.Message, sectionModel.Subject, englishSubject, englishMessage, parent.StudentName, parent.StudentUniqueId, $"{parent.StaffFirstName} {parent.StaffLastSurname}", parent.LanguageCode);
            }
        }