Exemple #1
0
        public async Task <IReminderResponse> RemoveReminder(int userId, int applicationId, int activityId)
        {
            logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  userId : {userId} UserIPAddress: { _userIPAddress.GetUserIP().Result }");

            try
            {
                var reminderData = await _appDbContext.Reminders.Where(x => x.UserID == userId && x.ActivityId == activityId && x.ApplicationId == applicationId).FirstOrDefaultAsync();

                var data = false;
                if (reminderData != null)
                {
                    _appDbContext.Reminders.Remove(reminderData);
                    await _appDbContext.SaveChangesAsync();

                    data = true;
                }

                return(new ReminderResponse(data));
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                throw ex;
            }
        }
        public async Task <IProgramResponse> GetCompletedProgramAsync(int userId)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  userId: {userId} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var completedPrograms = await _appDbContext.Applications.Where(k => k.ProfileId == userId && (k.StatusItemId == (int)ApplicationProgressStatus.Accepted || k.StatusItemId == (int)ApplicationProgressStatus.Alumni)).Join(
                    _appDbContext.Batches.Include(m => m.Programme).Include(m => m.Programme.ProgrammeTypeItem),
                    a => a.BatchId, b => b.Id,
                    (a, b) => new CompletedProgramView
                {
                    BatchNumber       = b.Number,
                    BatchYear         = b.Year,
                    Program           = _mapper.Map <ProgramView>(b.Programme),
                    StatusItemId      = a.StatusItemId ?? 0,
                    ProgramTypeLookup = _mapper.Map <LookupItemView>(b.Programme.ProgrammeTypeItem),
                }).ToListAsync();

                return(new ProgramResponse(completedPrograms));
            }
            catch (Exception e)
            {
                return(new ProgramResponse(ClientMessageConstant.WeAreUnableToProcessYourRequest, HttpStatusCode.InternalServerError));
            }
        }
Exemple #3
0
        public async Task <IActivityAndChallengesResponse> GetActivityCategoryAsync(int profileId)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input: {profileId} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var initiativeCategories = await _appDbContext.InitiativeCategories.Include(k => k.Initiatives).ToListAsync();

                var categoriesViewModels = _mapper.Map <List <InitiativeCategoryViewModel> >(initiativeCategories);
                foreach (var item in categoriesViewModels)
                {
                    item.Activities = item.Activities.Where(a => a.InitiativeTypeItemId == (int)InitiativeType.EngagementActivities && a.IsActive == true).ToList();
                    foreach (var item1 in item.Activities.ToList())
                    {
                        if (item1.FileId != null)
                        {
                            item1.FileName = _appDbContext.Files.FirstOrDefault(k => k.IdGuid == item1.FileId)?.Name ?? "";
                        }

                        var batch = await _appDbContext.BatchInitiatives.Where(x => x.InitiativeId == item1.Id).ToListAsync();

                        if (batch.Count() > 0)
                        {
                            var applicationList = new List <Application>();
                            foreach (var item2 in batch)
                            {
                                var application = await _appDbContext.Applications.Where(x => (x.BatchId == item2.BatchId && x.ProfileId == profileId) &&
                                                                                         (x.StatusItemId == 59006 || x.StatusItemId == 59009)).FirstOrDefaultAsync();

                                if (application != null)
                                {
                                    applicationList.Add(application);
                                }
                            }

                            if (applicationList.Count == 0)
                            {
                                item.Activities.Remove(item1);
                            }
                        }
                    }
                }

                var userActivity = await _appDbContext.InitiativeProfiles.Include(k => k.Initiative).ThenInclude(m => m.QuestionGroup)
                                   .Include(m => m.StatusItem).Where(k => k.ProfileId == profileId).ToListAsync();


                var userInitiatives = userActivity.Select(k =>
                {
                    var ini = _mapper.Map <InitiativeViewModel>(k.Initiative);
                    if (ini.FileId != null && ini.FileId != new Guid())
                    {
                        ini.FileName = _appDbContext.Files.FirstOrDefault(k => k.IdGuid == ini.FileId)?.Name ?? "";
                    }
                    ini.InitiativeStatus = _mapper.Map <LookupItemView>(k.StatusItem);
                    ini.ReferenceNumber  = _appDbContext.ParticipationReferences.FirstOrDefault(a => a.Id == k.ParticipationReferenceID)?.ReferenceNumber ?? "";
                    return(ini);
                }).ToList();



                var allInitiatives =
                    _mapper.Map <List <InitiativeViewModel> >(await _appDbContext.Initiatives.Include(k => k.InitiativeTypeItem).Where(k => k.IsActive == true).ToListAsync());
                foreach (var item1 in allInitiatives.ToList())
                {
                    if (item1.FileId != null && item1.FileId != new Guid())
                    {
                        item1.FileName = _appDbContext.Files.FirstOrDefault(k => k.IdGuid == item1.FileId)?.Name ?? "";
                    }

                    var batch = await _appDbContext.BatchInitiatives.Where(x => x.InitiativeId == item1.Id).ToListAsync();

                    if (batch.Count() > 0)
                    {
                        var applicationList = new List <Application>();
                        foreach (var item in batch)
                        {
                            var application = await _appDbContext.Applications.Where(x => (x.BatchId == item.BatchId && x.ProfileId == profileId) &&
                                                                                     (x.StatusItemId == 59006 || x.StatusItemId == 59009)).FirstOrDefaultAsync();

                            if (application != null)
                            {
                                applicationList.Add(application);
                            }
                        }

                        if (applicationList.Count == 0)
                        {
                            allInitiatives.Remove(item1);
                        }
                    }
                }

                var lookupItemsList = _mapper.Map <List <LookupItemView> >(await _appDbContext.LookupItems.Where(k => k.LookupId == (int)LookupType.InitiativeType)
                                                                           .ToListAsync());

                foreach (InitiativeType type in Enum.GetValues(typeof(InitiativeType)))
                {
                    if (type == InitiativeType.EngagementActivities || type == InitiativeType.MyActivity)
                    {
                        continue;;
                    }

                    var lookUp = lookupItemsList.FirstOrDefault(k => k.Id == (int)type);
                    categoriesViewModels.Add(new InitiativeCategoryViewModel()
                    {
                        Id         = (int)type,
                        TitleEn    = lookUp?.NameEn,
                        TitleAr    = lookUp?.NameAr,
                        Activities = allInitiatives.Where(k => k.InitiativeTypeItemId == (int)type).ToList()
                    });
                }

                categoriesViewModels.ForEach(k => k.Activities.ForEach(m => m.InitiativeStatus = _mapper.Map <LookupItemView>(userActivity.FirstOrDefault(c => c.InitiativeId == m.Id)?.StatusItem)));

                categoriesViewModels.Insert(0, new InitiativeCategoryViewModel()
                {
                    Id         = (int)InitiativeType.MyActivity,
                    TitleEn    = "My Activity",
                    TitleAr    = "نشاطي",
                    Activities = userInitiatives
                });

                foreach (var item2 in categoriesViewModels)
                {
                    foreach (var item3 in item2.Activities)
                    {
                        var reminder = await _appDbContext.Reminders.Where(x => x.UserID == profileId && x.ActivityId == item3.Id && x.ApplicationId == 2).FirstOrDefaultAsync();

                        item3.isReminderSet = reminder != null ? true : false;
                    }
                }

                return(new ActivityAndChallengesResponse(categoriesViewModels));
            }
            catch (Exception e)
            {
                logger.Error(e);
                return(new ActivityAndChallengesResponse(e));
            }
        }
Exemple #4
0
        public async Task <IUserRecommendationResponse> SendRecommendationAsync(MultipleUserRecommendationModelView view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input: {view.ToJsonString()} UserIPAddress: { _userIPAddress.GetUserIP().Result }");

                var firstName = await _appDbContext.Profiles.Where(k => k.Id == view.SenderUserID).Select(k => k.FirstNameEn).FirstOrDefaultAsync();

                var lastName = await _appDbContext.Profiles.Where(k => k.Id == view.SenderUserID).Select(k => k.LastNameEn).FirstOrDefaultAsync();

                var userName = firstName + " " + lastName;

                var notifyText = view.isAskedRecommendation ? userName + " is asked for recommendation" : userName + " has sent to you recommendation";

                List <UserRecommendationModelView> UserRecommendViews = new List <UserRecommendationModelView>();

                foreach (int RecipientUserID in view.RecipientUserID)
                {
                    var data = new UserRecommendation()
                    {
                        SenderUserID          = view.SenderUserID,
                        RecipientUserID       = RecipientUserID,
                        RecommendationText    = view.RecommendationText,
                        isAskedRecommendation = view.isAskedRecommendation,
                        isRead     = false,
                        Created    = DateTime.Now,
                        CreatedBy  = userName,
                        Modified   = DateTime.Now,
                        ModifiedBy = userName
                    };

                    await _appDbContext.AddAsync(data);

                    await _appDbContext.SaveChangesAsync();


                    var userRecommend = _mapper.Map <UserRecommendationModelView>(data);



                    //var deviceIds = await _appDbContext.UserDeviceInfos.Where(k => k.UserId == RecipientUserID).Select(k => k.DeviceId).ToListAsync();

                    //if (deviceIds.Count > 0)
                    //{
                    //    foreach (var deviceId in deviceIds)
                    //    {
                    //        logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  Sending recommend push notification to User : {RecipientUserID} and Device ID: {deviceId} ");
                    //        await _pushNotificationService.SendRecommendPushNotificationAsync(userRecommend, notifyText, deviceId);
                    //    }
                    //    logger.Info("Notification sent");
                    //}

                    var customNotificationData = await _appDbContext.CustomNotifications.Where(x => x.ProfileID == data.RecipientUserID && x.CategoryID == (int)CategoryType.Messages).FirstOrDefaultAsync();

                    if (customNotificationData?.isEnabled == true || customNotificationData == null)
                    {
                        await AddNotificationAsync(data.RecipientUserID, data.isAskedRecommendation?ActionType.AskRecommendation : ActionType.SendRecommendation, data.ID, ParentType.UserRecommendation, data.SenderUserID, notifyText);
                    }

                    UserRecommendViews.Add(userRecommend);
                }

                return(new UserRecommendationResponse(UserRecommendViews));
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                return(new UserRecommendationResponse(ex));
            }
        }
        public async Task <IFileResponse> GetProfileImageAsync(int profileId)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  userId: {profileId} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var userInfo = await _appDbContext.UserInfos.Include(k => k.User).FirstOrDefaultAsync(k => k.Id == profileId);

                if (userInfo == null)
                {
                    return(new FileResponse(ClientMessageConstant.UserNotFound, HttpStatusCode.NotFound));
                }
                var file = await _appDbContext.Files.FirstOrDefaultAsync(k => k.Id == userInfo.User.OriginalImageFileId);

                if (file == null)
                {
                    return(new FileResponse(ClientMessageConstant.FileNotFound, HttpStatusCode.NotFound));
                }

                var fileDb = await _fileDbContext.FileDB.FirstOrDefaultAsync(k => k.Id == file.IdGuid);

                var model = new FileView()
                {
                    Id            = file.Id,
                    IdGuid        = file.IdGuid,
                    FileBytes     = fileDb?.Bytes,
                    Name          = file.Name,
                    CorrelationId = file.CorrelationId,
                    MimeType      = file.MimeType,
                    SizeMb        = file.SizeMb,
                    ExtraParams   = file.ExtraParams
                };

                return(new FileResponse(model));
            }
            catch (Exception e)
            {
                logger.Error(e);
                return(new FileResponse(e));
            }
        }
        public async Task <IReportProblemResponse> ReportProblemAsync(ReportProblemView view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input: {view.ToJsonString()} UserIPAddress: { _userIPAddress.GetUserIP().Result }");

                var email = await _appDbContext.UserInfos.Where(k => k.UserId == view.UserID).Select(k => k.Email).FirstOrDefaultAsync();

                if (email == null)
                {
                    return(new ReportProblemResponse(ClientMessageConstant.UserNotFound, HttpStatusCode.NotFound));
                }

                var firstName = await _appDbContext.Profiles.Where(k => k.Id == view.UserID).Select(k => k.FirstNameEn).FirstOrDefaultAsync();

                var lastName = await _appDbContext.Profiles.Where(k => k.Id == view.UserID).Select(k => k.LastNameEn).FirstOrDefaultAsync();

                var userName = firstName + " " + lastName;

                var data = new ReportProblem()
                {
                    UserID            = view.UserID,
                    ReportDescription = view.ReportDescription,
                    Created           = DateTime.Now,
                    Modified          = DateTime.Now,
                    CreatedBy         = userName,
                    ModifiedBy        = userName,
                };

                if (view.ReportFile != null)
                {
                    data.ReportFileID = (await SaveFileAsync(view.ReportFile, email)).Id;
                }

                await _appDbContext.ReportProblems.AddAsync(data);

                await _appDbContext.SaveChangesAsync();

                await _emailService.SendReportProblemEmailAsync(view.ReportDescription, email, userName);

                var reportProblem = _mapper.Map <ReportProblemModelView>(data);

                return(new ReportProblemResponse(reportProblem));
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                throw ex;
            }
        }
Exemple #7
0
        public async Task <EmailView> SendActivationEmailAsync(string toEmail, string userName,
                                                               LanguageType languageType = LanguageType.EN)
        {
            EmailView emailResponse = new EmailView();

            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EmailTo: {toEmail} UserName: {userName} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var emailSetting = await _appDbContext.ApplicationSettings.ToListAsync();

                var appSetting = new AppSettings()
                {
                    SmtpHost     = emailSetting.FirstOrDefault(k => k.Key == "smtpHostName")?.Value,
                    SmtpPassword = emailSetting.FirstOrDefault(k => k.Key == "smtpPassword")?.Value,
                    SmtpPort     = emailSetting.FirstOrDefault(k => k.Key == "smtpPortNumber")?.Value,
                    SmtpUsername = emailSetting.FirstOrDefault(k => k.Key == "smtpUserName")?.Value
                };
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  SMTP_PasswordEncrypt: {appSetting.SmtpPassword}");

                appSetting.SmtpPassword = _encryptor.Decrypt(appSetting.SmtpPassword);

                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  SMTP_PasswordDecrypt: {appSetting.SmtpPassword}");

                var email = new MailMessage(appSetting.SmtpUsername, toEmail);

                var templateInfo = await _appDbContext.TemplateInfos.Include(k => k.EmailHeaderAndFooterTemplate).FirstOrDefaultAsync(k => k.Id == 13002);

                var otp = GenerateOtp();

                var body = languageType == LanguageType.EN ? GetActivationEnglishContent(userName, templateInfo, otp, email) : GetActivationArabicContent(userName, templateInfo, otp, email);


                email.Body       = body;
                email.IsBodyHtml = true;
                using (var smtp = new SmtpClient())
                {
                    smtp.Host      = appSetting.SmtpHost;
                    smtp.EnableSsl = true;
                    NetworkCredential networkCred = new NetworkCredential(appSetting.SmtpUsername, appSetting.SmtpPassword);
                    smtp.UseDefaultCredentials = true;
                    smtp.Credentials           = networkCred;
                    smtp.Port = int.Parse(appSetting.SmtpPort);
                    smtp.Send(email);
                }
                emailResponse.ID      = Guid.NewGuid();
                emailResponse.Result  = true;
                emailResponse.Message = "Email Sent";
                emailResponse.OTP     = otp;

                return(emailResponse);
            }
            catch (Exception e)
            {
                logger.Error(e);
                emailResponse.ID      = Guid.NewGuid();
                emailResponse.Result  = false;
                emailResponse.Message = "Email Not Sent";
                logger.Info(emailResponse);
                return(emailResponse);
            }
        }
Exemple #8
0
        public async Task <List <QuestionViewModel> > GetBatchQuestionsAsync(int profileId, int batchId)
        {
            //try
            //{
            logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  userId: {profileId} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
            var batchDetails = await _appDbContext.Batches.FirstOrDefaultAsync(k => k.Id == batchId && !k.IsClosed && k.DateRegFrom <= DateTime.Now && k.DateRegTo >= DateTime.Now);

            if (batchDetails == null)
            {
                return(null);
            }

            var questionGroups = await _appDbContext.QuestionGroupsQuestions.Include(m => m.Group)
                                 .Include(k => k.Question).Include(k => k.Question.QuestionTypeItem).Include(k => k.Question.Options)
                                 .Where(k => k.GroupId == batchDetails.QuestionGroupId).ToListAsync();

            var questions = questionGroups.Select(k => k.Question).ToList();

            var questionViews = _mapper.Map <List <QuestionViewModel> >(questions);

            var application = await
                              _appDbContext.Applications.FirstOrDefaultAsync(k => k.ProfileId == profileId && k.BatchId == batchId);

            if (application != null)
            {
                var listdata = await _appDbContext.QuestionAnswers.Include(k => k.AnswerFile).Include(k => k.Questionansweroptions)
                               .Where(k => k.ProfileId == profileId && k.ApplicationId == application.Id).ToListAsync();

                var answers = _mapper.Map <List <QuestionAnswerViewModel> >(listdata);
                foreach (var item in answers)
                {
                    var options = listdata.FirstOrDefault(a => a.Id == item.Id).Questionansweroptions.ToList();
                    item.MultiSelectedOptionId = options.Select(a => new QuestionAnswerOptionViewModel()
                    {
                        optionID         = a.optionID,
                        QuestionanswerID = a.QuestionanswerID
                    }).ToList();
                }
                questionViews.ForEach(k => k.Answered = answers.FirstOrDefault(y => y.QuestionId == k.Id));
            }

            return(questionViews);
            //}
            //catch (Exception e)
            //{
            //    //return new ProgramResponse(e.Message, HttpStatusCode.InternalServerError);
            //}
        }
        public async Task <IAccountResponse> SignupAsync(UserRegistration view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input : {view.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                if (!view.IsTC_Accepted)
                {
                    view.Message          = "Please Accept Terms And Condition";
                    view.CustomStatusCode = CustomStatusCode.FunctionalError;
                    view.Success          = false;
                    return(new AccountResponse(view));
                }
                //var hostname = _httpContextAccessor.HttpContext.Request.Host.Value;
                // logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDForDEV : {_eidSettings.EIDForDEV}");



                if (_eidSettings.EIDForDEV != "true")
                {
                    //logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDForDEV : {_eidSettings.EIDForDEV} EmiratesID : {view.EmiratesId}");


                    var data = await CheckEID(view.EmiratesId);


                    if (data == CitizinType.Expat)
                    {
                        view.Message          = ClientMessageConstant.EIDNotEligible;
                        view.CustomStatusCode = CustomStatusCode.Expat;
                        view.Success          = false;
                        logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDResponse : {view.Message}");
                        return(new AccountResponse(view));
                    }
                    else if (data == CitizinType.NotFound)
                    {
                        view.Message          = ClientMessageConstant.EIDNotFound;
                        view.CustomStatusCode = CustomStatusCode.NotFound;
                        view.Success          = false;
                        logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDResponse : {view.Message}");
                        return(new AccountResponse(view));
                    }
                    else if (data == CitizinType.APINotWorking)
                    {
                        view.Message          = ClientMessageConstant.EIDAPINotWorking;
                        view.CustomStatusCode = CustomStatusCode.APINotWorking;
                        view.Success          = false;
                        logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDResponse : {view.Message}");
                        return(new AccountResponse(view));
                    }
                }

                if (_eidSettings.EIDForDEV == "true")
                {
                    if (long.Parse(view.EmiratesId) < 600000000000000L)
                    {
                        view.Message          = ClientMessageConstant.EIDNotEligible;
                        view.CustomStatusCode = CustomStatusCode.Expat;
                        view.Success          = false;
                        logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDResponse : {view.Message}");
                        return(new AccountResponse(view));
                    }
                }
                var userProfiles = await _appDbContext.Profiles.FirstOrDefaultAsync(x => x.Eid == view.EmiratesId);

                if (_appDbContext.UserInfos.Include(k => k.User).Any(o => o.User.Username == view.Email && o.TokenIsCompleted))
                {
                    view.Message          = ClientMessageConstant.EmailIdExists;
                    view.CustomStatusCode = CustomStatusCode.EmailIDExists;
                    view.Success          = false;
                    return(new AccountResponse(view));
                }

                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  UserProfiles : {userProfiles}");
                if (userProfiles != null)
                {
                    view.Message          = ClientMessageConstant.EIDExist;
                    view.CustomStatusCode = CustomStatusCode.EIDExist;
                    view.Success          = false;
                    logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  EIDResponse : {view.CustomStatusCode}");
                    return(new AccountResponse(view));


                    //var userInfo = await _appDbContext.UserInfos.Include(k => k.User)
                    //    .FirstOrDefaultAsync(x => x.UserId == userProfiles.Id);

                    //if (userInfo.TokenIsCompleted)
                    //{
                    //    view.Success = false;
                    //    view.Message = ClientMessageConstant.EmiratesIdExist;
                    //    view.CustomStatusCode = CustomStatusCode.EmiratesIDExist;
                    //    return new AccountResponse(view);
                    //}

                    //var userName = view.FirstName + " " + view.LastName;

                    //var emailResult = await _emailService.SendActivationEmailAsync(userInfo.Email, userName, view.LanguageType);

                    //userInfo.OTP = emailResult.OTP;
                    //await _appDbContext.SaveChangesAsync();


                    //view.Id = userInfo.Id;
                    //view.Message = ClientMessageConstant.Success;
                    //view.CustomStatusCode = CustomStatusCode.Success;
                    //view.Success = true;
                    //return new AccountResponse(view);
                }

                using (var transaction = _appDbContext.Database.BeginTransaction())
                {
                    try
                    {
                        var emailResult = await _emailService.SendActivationEmailAsync(view.Email, $"{view.FirstName} {view.LastName}", view.LanguageType);

                        var user = await AddUser(view);

                        var userInfo = await AddUserInfo(user, view.Email, emailResult.OTP);

                        var profile = await AddProfile(view, user, view.EmiratesId);
                        await PermissionSetAsync(user.Id, 2);

                        view.Id               = user.Id;
                        view.Message          = ClientMessageConstant.Success;
                        view.CustomStatusCode = CustomStatusCode.Success;
                        view.Success          = true;


                        transaction.Commit();
                        return(new AccountResponse(view));
                    }
                    catch (System.Exception ex)
                    {
                        // TODO logging stuff
                        transaction.Rollback();
                        view.Success          = false;
                        view.Message          = ClientMessageConstant.WeAreUnableToProcessYourRequest;
                        view.CustomStatusCode = CustomStatusCode.FunctionalError;
                        new AccountResponse(ex);
                        return(new AccountResponse(view));
                    }
                }
            }
            catch (Exception ex1)
            {
                view.Success          = false;
                view.Message          = ClientMessageConstant.WeAreUnableToProcessYourRequest;
                view.CustomStatusCode = CustomStatusCode.FunctionalError;

                return(new AccountResponse(view, ex1));
            }
        }
        public async Task <IRecommendLeaderResponse> AddRecommendLeader(RecommendLeaderView view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input: {view.ToJsonString()} UserIPAddress: { _userIPAddress.GetUserIP().Result }");


                var firstName = await _appDbContext.Profiles.Where(k => k.Id == view.ProfileID).Select(k => k.FirstNameEn).FirstOrDefaultAsync();

                var lastName = await _appDbContext.Profiles.Where(k => k.Id == view.ProfileID).Select(k => k.LastNameEn).FirstOrDefaultAsync();

                var userName = firstName + " " + lastName;

                var matchingProfileId = 0;
                var profileUrl        = "";

                var RecommendStatusItem = await _appDbContext.LookupItems.Where(k => k.LookupId == (int)LookupType.StatusItem).OrderBy(k => k.NameEn).FirstOrDefaultAsync();

                //var email = await _appDbContext.UserInfos.Where(k => k.UserId == view.ProfileID).Select(k => k.Email).FirstOrDefaultAsync();
                var linkedinUrl = new Profile();
                var TwitterUrl  = new Profile();
                var email       = new UserInfo();
                var mobile      = new UserInfo();
                if (view.LinkedinURL != null)
                {
                    linkedinUrl = await _appDbContext.Profiles.Where(x => x.LinkedInUrl == view.LinkedinURL).FirstOrDefaultAsync();
                }
                if (view.TwitterURL != null)
                {
                    TwitterUrl = await _appDbContext.Profiles.Where(x => x.TwitterUrl == view.TwitterURL).FirstOrDefaultAsync();
                }

                if (view.Email != null)
                {
                    email = await _appDbContext.UserInfos.Where(x => x.Email == view.Email).FirstOrDefaultAsync();
                }

                if (view.ContactNumber != null)
                {
                    mobile = await _appDbContext.UserInfos.Where(x => x.Mobile == view.ContactNumber).FirstOrDefaultAsync();
                }

                if (linkedinUrl?.LinkedInUrl != null || TwitterUrl?.TwitterUrl != null || email?.Email != null || mobile?.Mobile != null)
                {
                    profileUrl        = "https://stagingplatform.uaeglp.gov.ae/";
                    matchingProfileId = email.Email != null ? email.Id
                                        : mobile.Mobile != null ? mobile.Id
                                        : linkedinUrl.LinkedInUrl != null ? linkedinUrl.Id
                                        : TwitterUrl.TwitterUrl != null ? TwitterUrl.Id : 0;
                }

                var recommendLeader = new RecommendLeadr()
                {
                    FullName             = view.FullName,
                    RecommendingText     = view.RecommendingText,
                    Occupation           = view.Occupation,
                    ContactNumber        = view.ContactNumber,
                    Email                = view.Email,
                    LinkedinURL          = view.LinkedinURL,
                    TwitterURL           = view.TwitterURL,
                    InstagramURL         = view.InstagramURL,
                    RecommenderProfileID = view.ProfileID != 0 ? view.ProfileID : null,
                    OtherFitment         = view.OthersText,
                    SourceItemID         = view.SourceItemID,
                    StatusItemID         = RecommendStatusItem.Id,
                    Created              = DateTime.Now,
                    Modified             = DateTime.Now,
                    CreatedBy            = view.ProfileID != null ? userName : "******",
                    ModifiedBy           = view.ProfileID != null ? userName : "******",
                    RecommendedProfileID = matchingProfileId != 0 ? matchingProfileId : (int?)null
                };

                if (view.AudioFile != null)
                {
                    var audioGuid = Guid.NewGuid();
                    recommendLeader.RecommendingAudioID = audioGuid;
                    minioAudioVideoUpload(view.AudioFile, "audio", audioGuid);
                }

                if (view.VideoFile != null)
                {
                    var videoGuid = Guid.NewGuid();
                    recommendLeader.RecommendingVideoID = videoGuid;
                    minioAudioVideoUpload(view.VideoFile, "video", videoGuid);
                }

                await _appDbContext.RecommandLeaders.AddAsync(recommendLeader);

                await _appDbContext.SaveChangesAsync();

                var recommendId = await _appDbContext.RecommandLeaders.Where(x => x.ID == recommendLeader.ID).Select(x => x.ID).FirstOrDefaultAsync();

                List <int?> FitList = new List <int?>();

                FitList = view.RecommendLeaderFit != null ? view.RecommendLeaderFit : null;

                var recommendFit      = new RecommendationFitDetails();
                var recommendFitOther = new RecommandationOther();
                if (FitList != null)
                {
                    foreach (var item in FitList)
                    {
                        recommendFit = new RecommendationFitDetails()
                        {
                            RecommendID             = recommendId,
                            RecommendationFitItemId = item
                        };

                        await _appDbContext.RecommendationFitDetails.AddAsync(recommendFit);

                        await _appDbContext.SaveChangesAsync();

                        _appDbContext.Entry(recommendFit).State = EntityState.Detached;
                    }
                }

                var data = new RecommendLeaderSubmissionView()
                {
                    RecommendLeaderSubmission = _mapper.Map <RecommendSubmissionView> (recommendLeader),
                    RecommendLeaderFitment    = FitList,
                };

                data.RecommendLeaderSubmission.RecommendViewProfileURL = profileUrl;
                return(new RecommendLeaderResponse(data));
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                throw ex;
            }
        }
        public async Task <IPeopleNearByResponse> AddUpdateUserLocation(UserLocationModel view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input: {view.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");

                var firstName = await _appDbContext.Profiles.Where(k => k.Id == view.ProfileID).Select(k => k.FirstNameEn).FirstOrDefaultAsync();

                var lastName = await _appDbContext.Profiles.Where(k => k.Id == view.ProfileID).Select(k => k.LastNameEn).FirstOrDefaultAsync();

                var userName = firstName + " " + lastName;

                var data = await _appDbContext.UserLocations.FirstOrDefaultAsync(x => x.ProfileID == view.ProfileID);

                if (data == null)
                {
                    data = new UserLocation()
                    {
                        ProfileID      = view.ProfileID,
                        Latitude       = view.Latitude,
                        Longitude      = view.Longitude,
                        isHideLocation = true,
                        Created        = DateTime.Now,
                        LastUpdated    = DateTime.Now,
                        CreatedBy      = userName,
                        LastUpdatedBy  = userName
                    };

                    await _appDbContext.UserLocations.AddAsync(data);

                    await _appDbContext.SaveChangesAsync();
                }
                else
                {
                    data.Latitude    = view.Latitude;
                    data.Longitude   = view.Longitude;
                    data.LastUpdated = DateTime.Now;
                    await _appDbContext.SaveChangesAsync();
                }

                var userLocation = _mapper.Map <UserLocationModelView>(data);
                return(new PeopleNearByResponse(userLocation));
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                throw ex;
            }
        }