public async Task SendGroupMessages()
        {
            var validParentDescriptors    = _customParametersProvider.GetParameters().descriptors.validParentDescriptors;
            var validEmailTypeDescriptors = _customParametersProvider.GetParameters().descriptors.validEmailTypeDescriptors;

            var queues = await _communicationsRepository.GetGroupMessagesQueuesQueued();


            foreach (var queue in queues)
            {
                var staffInfo = await _staffRepository.GetStaffIdentityByUniqueId(queue.StaffUniqueId);

                //Verify if the queue is retry again
                if (queue.SentStatus == GroupMessagesStatusEnum.Error.Value)
                {
                    queue.RetryCount = queue.RetryCount + 1;
                }

                //This call to database is to broken the previews scheme in entity framework,
                //In case of a news petitions to the enpoint this validate the actual status of the queue.
                var queueVerification = await _communicationsRepository.GetGroupMessagesQueue(queue.Id);

                if (queueVerification.SentStatus == GroupMessagesStatusEnum.Processing.Value)
                {
                    continue;
                }

                // We mark the queue item so that we dont process many at the same time.
                queue.SentStatus = GroupMessagesStatusEnum.Processing.Value;
                await _communicationsRepository.UpdateGroupMessagesQueue(queue);

                var parents = await GetParentsStudentsByQueueParams(validParentDescriptors, validEmailTypeDescriptors, queue.StaffUniqueId, queue.Type, queue.FilterParams);

                try
                {
                    //We send the message for all the parents
                    await SendMessagesToParents(parents, queue.Subject, queue.BodyMessage, $"{staffInfo.FirstName} {staffInfo.LastSurname}", queue.StaffUniqueId, queue.Id);
                }
                catch (Exception ex)
                {
                    queue.SentStatus = GroupMessagesStatusEnum.Error.Value;
                    await _communicationsRepository.UpdateGroupMessagesQueue(queue);

                    throw ex;
                }

                //We assign the sent status to the queue when finish
                queue.SentStatus = GroupMessagesStatusEnum.Sent.Value;
                queue.DateSent   = DateTime.Now;
                await _communicationsRepository.UpdateGroupMessagesQueue(queue);
            }
        }