/// <summary> /// Commit saving entities /// </summary> /// <returns></returns> public bool Save() { int saved = _context.SaveChanges(); if (saved > 0) { return(true); } else { return(false); } }
public async Task <Result> CheckIn(CheckInOutViewModel CheckInOutVM) { var LatestCheckOut = _context.CheckInOut.Where(c => c.ShopId == CheckInOutVM.ShopId && c.UserId == CheckInOutVM.UserId).OrderByDescending(c => c.Id).Select(c => c.CheckOutDate).FirstOrDefault(); var LatestCheckIn = _context.CheckInOut.Where(c => c.ShopId == CheckInOutVM.ShopId && c.UserId == CheckInOutVM.UserId).OrderByDescending(c => c.Id).Select(c => c.CheckInDate).FirstOrDefault(); var userName = _context.Users.Where(u => u.Id == CheckInOutVM.UserId).Select(u => u.FullName).FirstOrDefault(); var shopName = _context.Shop.Where(u => u.Id == CheckInOutVM.ShopId).Select(u => u.Name).FirstOrDefault(); if (LatestCheckIn != null && LatestCheckOut == null) { return(new Result() { IsSuccess = false, Errors = new List <string> { Resources.PleaseCheckOutOfShopToCheckInAgain } }); } else { CheckInOut CheckInOut = new CheckInOut(); CheckInOut.UserId = CheckInOutVM.UserId; CheckInOut.ShopId = CheckInOutVM.ShopId; CheckInOut.CheckInDate = DateTime.Now; CheckInOut.CreationDate = DateTime.Now; CheckInOut.CreatedBy = "Test"; CheckInOut.IsActive = true; _context.CheckInOut.Add(CheckInOut); _context.SaveChanges(); #region SendNotification For checkedIn User //send notifications var title = Resources.CheckInTitle; var body = Resources.CheckedIn + " " + shopName + " " + Resources.Successfully; PayLoadViewModel payLoadData = new PayLoadViewModel { InfectedUserName = "******", Title = title, Body = body }; var TokensList = GetUserToken(CheckInOut.UserId); FirebaseHelper.SendNotification(TokensList, title, body, payLoadData); #endregion #region SendNotification For Shop //send notifications var titleShop = Resources.CheckInTitle; var bodyShop = userName + " " + Resources.CheckInStore; PayLoadViewModel payLoadDataShop = new PayLoadViewModel { InfectedUserName = "******", Title = titleShop, Body = bodyShop }; var TokensListShop = GetShopToken(CheckInOut.ShopId); FirebaseHelper.SendNotification(TokensListShop, titleShop, bodyShop, payLoadDataShop); #endregion return(new Result() { IsSuccess = true, Errors = new List <string>() }); } }
public async Task <Result> CreateUser(RegisterViewModel UserViewModel) { // validation if (string.IsNullOrWhiteSpace(UserViewModel.Password) || string.IsNullOrWhiteSpace(UserViewModel.Id)) { return new Result() { IsSuccess = false, Errors = new List <string> { Resources.IdAndPasswordRequired } } } ; byte[] passwordHash, passwordSalt; CreatePasswordHash(UserViewModel.Password, out passwordHash, out passwordSalt); if (UserViewModel.UserType == UserTypeEnum.Citizen) { User user = new User(); user.IDNumber = UserViewModel.Id; user.NormalizedUserName = UserViewModel.FullName; user.FullName = UserViewModel.FullName; user.GWTPasswordHash = passwordHash; user.GWTPasswordSalt = passwordSalt; user.IsActive = true; user.CreatedBy = "test"; user.CreationDate = DateTime.Now; _context.Users.Add(user); _context.SaveChanges(); var UserId = _context.Users.OrderByDescending(u => u.Id).Select(u => u.Id).FirstOrDefault(); UserStatus userStatus = new UserStatus(); userStatus.UserId = UserId; userStatus.UserStatusEnum = UserStatusEnum.Normal; userStatus.CreationDate = DateTime.Now; userStatus.IsActive = true; userStatus.CreatedBy = "test"; _context.UserStatus.Add(userStatus); _context.SaveChanges(); } else if (UserViewModel.UserType == UserTypeEnum.Shop) { Shop shop = new Shop(); shop.LicenseNumber = UserViewModel.Id; shop.Name = UserViewModel.FullName; shop.GWTPasswordHash = passwordHash; shop.GWTPasswordSalt = passwordSalt; shop.IsActive = true; shop.CreatedBy = "test"; shop.CreationDate = DateTime.Now; shop.CategoryId = UserViewModel.CategoryId; _context.Shop.Add(shop); _context.SaveChanges(); var ShopId = _context.Shop.OrderByDescending(u => u.Id).Select(u => u.Id).FirstOrDefault(); ShopStatus shopStatus = new ShopStatus(); shopStatus.ShopId = ShopId; shopStatus.UserStatusEnum = UserStatusEnum.Normal; shopStatus.CreationDate = DateTime.Now; shopStatus.IsActive = true; shopStatus.CreatedBy = "test"; _context.ShopStatus.Add(shopStatus); _context.SaveChanges(); } else { User user = new User(); user.Email = UserViewModel.Id; user.NormalizedUserName = UserViewModel.FullName; user.FullName = UserViewModel.FullName; user.GWTPasswordHash = passwordHash; user.GWTPasswordSalt = passwordSalt; user.IsActive = true; user.CreatedBy = "test"; user.CreationDate = DateTime.Now; _context.Users.Add(user); _context.SaveChanges(); } return(new Result() { Data = true, IsSuccess = true, Errors = new List <string> { } }); }
public async Task <Result> EditCitizenStatus(EditStatusViewModel EditStatusVM) { if (EditStatusVM.UserStatusEnum != UserStatusEnum.Normal) { // change user status var UserId = _context.Users.Where(u => u.Id == EditStatusVM.UserId).Select(u => u.Id).FirstOrDefault(); var oldStatus = _context.UserStatus.Where(u => u.UserId == EditStatusVM.UserId).OrderByDescending(u => u.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); if (UserId != null) { if (oldStatus != EditStatusVM.UserStatusEnum) { UserStatus userStatus = new UserStatus(); userStatus.UserId = UserId; userStatus.UserStatusEnum = EditStatusVM.UserStatusEnum; userStatus.Date = DateTime.Now; userStatus.CreationDate = DateTime.Now; userStatus.IsActive = true; userStatus.CreatedBy = "test"; _context.UserStatus.Add(userStatus); _context.SaveChanges(); //change all checkedin shops in last 14 day satus to be suspected var checkedInPlacesLastTwoWeeks = _context.CheckInOut.Where(c => c.UserId == EditStatusVM.UserId && c.CheckInDate.Value.AddDays(14) > DateTime.Now).Select(c => c.ShopId).ToList(); var CheckInOutList = _context.CheckInOut.Where(c => c.UserId == EditStatusVM.UserId && c.CheckInDate.Value.AddDays(14) > DateTime.Now).ToList(); List <CheckInOutPeriod> CheckInOutPeriodList = new List <CheckInOutPeriod>(); foreach (var CheckInOut in CheckInOutList) { CheckInOutPeriod CheckInOutPeriod = new CheckInOutPeriod(); CheckInOutPeriod.CheckIn = CheckInOut.CheckInDate; CheckInOutPeriod.CheckOut = CheckInOut.CheckOutDate; CheckInOutPeriodList.Add(CheckInOutPeriod); } var CheckedInAtThisShops = _context.CheckInOut.Where(c => checkedInPlacesLastTwoWeeks.Contains(c.ShopId) && c.UserId != EditStatusVM.UserId).ToList(); List <string> userUdsForNotifications = new List <string>(); foreach (var CheckPeriod in CheckInOutPeriodList) { foreach (var usersCheckedIn in CheckedInAtThisShops) { if ((usersCheckedIn.CheckInDate < CheckPeriod.CheckOut && usersCheckedIn.CheckOutDate > CheckPeriod.CheckIn) || (usersCheckedIn.CheckInDate > CheckPeriod.CheckIn && CheckPeriod.CheckOut == null)) { UserStatus newUserStatus = new UserStatus(); newUserStatus.UserId = usersCheckedIn.UserId; newUserStatus.UserStatusEnum = UserStatusEnum.Suspected; newUserStatus.Date = DateTime.Now; newUserStatus.CreationDate = DateTime.Now; newUserStatus.IsActive = true; newUserStatus.CreatedBy = "test"; _context.UserStatus.Add(newUserStatus); _context.SaveChanges(); userUdsForNotifications.Add(usersCheckedIn.UserId); } } } List <long> NormalShopIds = new List <long>(); List <long> SuspectedShopIds = new List <long>(); List <long> InfectedShopIds = new List <long>(); // change shop status foreach (var checkedInShop in checkedInPlacesLastTwoWeeks) { var suspectedusersIds = _context.CheckInOut.Where(c => c.ShopId == checkedInShop).Select(c => c.UserId).Distinct().ToList(); List <UserStatusEnum> NoramlUsersStatesList = new List <UserStatusEnum>(); List <UserStatusEnum> SuspectedUsersStatesList = new List <UserStatusEnum>(); List <UserStatusEnum> InfectedUsersStatesList = new List <UserStatusEnum>(); foreach (var suspecteduserId in suspectedusersIds) { UserStatusEnum userLastStatus = _context.UserStatus.Where(u => u.UserId == suspecteduserId).OrderByDescending(u => u.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); if (userLastStatus == UserStatusEnum.Normal) { NoramlUsersStatesList.Add(userLastStatus); } else if (userLastStatus == UserStatusEnum.Suspected) { SuspectedUsersStatesList.Add(userLastStatus); } else if (userLastStatus == UserStatusEnum.Infected) { InfectedUsersStatesList.Add(userLastStatus); } } if (NoramlUsersStatesList.Count() > (SuspectedUsersStatesList.Count() + InfectedUsersStatesList.Count())) { var shopStatus = _context.ShopStatus.Where(s => s.ShopId == checkedInShop).OrderByDescending(s => s.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); if (shopStatus != UserStatusEnum.Normal) { ShopStatus NewShopStatus = new ShopStatus(); NewShopStatus.ShopId = checkedInShop; NewShopStatus.UserStatusEnum = UserStatusEnum.Normal; NewShopStatus.Date = DateTime.Now; NewShopStatus.CreationDate = DateTime.Now; NewShopStatus.IsActive = true; NewShopStatus.CreatedBy = "test"; _context.ShopStatus.Add(NewShopStatus); _context.SaveChanges(); NormalShopIds.Add(checkedInShop); } } else if (SuspectedUsersStatesList.Count() > NoramlUsersStatesList.Count()) { var shopStatus = _context.ShopStatus.Where(s => s.ShopId == checkedInShop).OrderByDescending(s => s.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); if (shopStatus != UserStatusEnum.Suspected) { ShopStatus NewShopStatus = new ShopStatus(); NewShopStatus.ShopId = checkedInShop; NewShopStatus.UserStatusEnum = UserStatusEnum.Suspected; NewShopStatus.Date = DateTime.Now; NewShopStatus.CreationDate = DateTime.Now; NewShopStatus.IsActive = true; NewShopStatus.CreatedBy = "test"; _context.ShopStatus.Add(NewShopStatus); _context.SaveChanges(); SuspectedShopIds.Add(checkedInShop); } } //else if (InfectedUsersStatesList.Count() >= NoramlUsersStatesList.Count() || InfectedUsersStatesList.Count() >= SuspectedUsersStatesList.Count() || (((SuspectedUsersStatesList.Count() + InfectedUsersStatesList.Count()) > 0) && NoramlUsersStatesList.Count() == 0)) //{ // var shopStatus = _context.ShopStatus.Where(s => s.ShopId == checkedInShop).OrderByDescending(s => s.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); // if (shopStatus != UserStatusEnum.Infected) // { // ShopStatus NewShopStatus = new ShopStatus(); // NewShopStatus.ShopId = checkedInShop; // NewShopStatus.UserStatusEnum = UserStatusEnum.Infected; // NewShopStatus.Date = DateTime.Now; // NewShopStatus.CreationDate = DateTime.Now; // NewShopStatus.IsActive = true; // NewShopStatus.CreatedBy = "test"; // _context.ShopStatus.Add(NewShopStatus); // _context.SaveChanges(); // InfectedShopIds.Add(checkedInShop); // } //} } #region SendNotification For Infected User //send notifications var title = Resources.MedicalStatusAlertTitle; var body = Resources.MedicalStatusIsChanged + " " + EditStatusVM.UserStatusEnum + " " + Resources.PleaseQuarantineYourSelf; PayLoadViewModel payLoadData = new PayLoadViewModel { InfectedUserName = "******", Title = title, Body = body }; var TokensList = GetUserToken(EditStatusVM.UserId); FirebaseHelper.SendNotification(TokensList, title, body, payLoadData); #endregion #region SendNotification For Suspected Users //send notifications var titleForSuspected = Resources.MedicalStatusAlertTitle; var bodyForSuspected = Resources.MedicalStatusIsChanged + " " + Resources.ContactedWithInfectedPerson; PayLoadViewModel payLoadDataForSuspected = new PayLoadViewModel { InfectedUserName = "******", Title = titleForSuspected, Body = bodyForSuspected }; var TokensListForSuspected = GetUsersTokens(userUdsForNotifications); FirebaseHelper.SendNotification(TokensListForSuspected, titleForSuspected, bodyForSuspected, payLoadDataForSuspected); #endregion #region SendNotification For Normal Shops if (NormalShopIds != null && NormalShopIds.Count() > 0) { var titleForShop = Resources.MedicalStatusAlertTitle; var bodyForNormalShop = Resources.TruststatusIsNormal; PayLoadViewModel payLoadDataForNormalShop = new PayLoadViewModel { InfectedUserName = "******", Title = titleForShop, Body = bodyForNormalShop }; var TokensListForNormalShops = GetShopsTokens(NormalShopIds); FirebaseHelper.SendNotification(TokensListForNormalShops, titleForShop, bodyForNormalShop, payLoadDataForNormalShop); } #endregion #region SendNotification For Suspected Shops if (SuspectedShopIds != null && SuspectedShopIds.Count() > 0) { var titleForShop = Resources.MedicalStatusAlertTitle; var bodyForSuspectedShops = Resources.InfectedPersonVisitStore; PayLoadViewModel payLoadDataForSuspectedShops = new PayLoadViewModel { InfectedUserName = "******", Title = titleForShop, Body = bodyForSuspectedShops }; var TokensListForSuspectedShops = GetShopsTokens(SuspectedShopIds); FirebaseHelper.SendNotification(TokensListForSuspectedShops, titleForShop, bodyForSuspectedShops, payLoadDataForSuspectedShops); } #endregion //#region SendNotification For Infected Shops //if (InfectedShopIds != null && InfectedShopIds.Count() > 0) //{ // var titleForShop = Resources.MedicalStatusAlertTitle; // var bodyForInfectedShops = Resources.InfectedPersonVisitStore; // PayLoadViewModel payLoadDataForInfectedShops = new PayLoadViewModel // { // InfectedUserName = "******", // Title = titleForShop, // Body = bodyForInfectedShops // }; // var TokensListForInfectedShops = GetShopsTokens(InfectedShopIds); // FirebaseHelper.SendNotification(TokensListForInfectedShops, titleForShop, bodyForInfectedShops, payLoadDataForInfectedShops); //} //#endregion return(new Result() { IsSuccess = true, Errors = new List <string>() }); } else { return(new Result() { IsSuccess = false, Errors = new List <string> { Resources.UserIsAlreadyOnThisStatus } }); } } else { return(new Result() { IsSuccess = false, Errors = new List <string> { Resources.UserNotExist } }); } } else { // change user status var UserId = _context.Users.Where(u => u.Id == EditStatusVM.UserId).Select(u => u.Id).FirstOrDefault(); var oldStatus = _context.UserStatus.Where(u => u.UserId == EditStatusVM.UserId).OrderByDescending(u => u.Id).Select(u => u.UserStatusEnum).FirstOrDefault(); if (UserId != null) { if (oldStatus != UserStatusEnum.Normal) { UserStatus userStatus = new UserStatus(); userStatus.UserId = UserId; userStatus.UserStatusEnum = EditStatusVM.UserStatusEnum; userStatus.Date = DateTime.Now; userStatus.CreationDate = DateTime.Now; userStatus.IsActive = true; userStatus.CreatedBy = "test"; _context.UserStatus.Add(userStatus); _context.SaveChanges(); #region SendNotification For Normal User //send notifications var title = Resources.MedicalStatusAlertTitle; var body = Resources.MedicalStatusIsChanged + " " + EditStatusVM.UserStatusEnum; PayLoadViewModel payLoadData = new PayLoadViewModel { InfectedUserName = "******", Title = title, Body = body }; var TokensList = GetUserToken(EditStatusVM.UserId); FirebaseHelper.SendNotification(TokensList, title, body, payLoadData); #endregion } else { return(new Result() { IsSuccess = false, Errors = new List <string> { Resources.UserIsAlreadyOnThisStatus } }); } } else { return(new Result() { IsSuccess = false, Errors = new List <string> { Resources.UserNotExist } }); } return(new Result() { IsSuccess = true, Errors = new List <string>() }); } }