Beispiel #1
0
        public async Task <Result> Checkout(CheckInOutViewModel CheckInOutVM)
        {
            var CheckInOut = _context.CheckInOut.Where(c => c.UserId == CheckInOutVM.UserId && c.ShopId == CheckInOutVM.ShopId && c.CheckOutDate == null).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();

            CheckInOut.CheckOutDate     = DateTime.Now;
            CheckInOut.ModificationDate = DateTime.Now;
            CheckInOut.UpdatedBy        = "Test";

            _context.SaveChanges();


            #region SendNotification For checkedIn User
            //send notifications
            var title = Resources.CheckOutTitle;
            var body  = Resources.Checkedout + " " + 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.CheckOutTitle;
            var bodyShop  = userName + " " + Resources.CheckOutStore;

            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>()
            });
        }
Beispiel #2
0
        //test notifications
        public Result TestNotifications()
        {
            var title = Resources.MedicalStatusAlertTitle;
            var body  = Resources.NotificationBody;
            PayLoadViewModel payLoadData = new PayLoadViewModel
            {
                InfectedUserName = "******",
                Title            = "This Is Title",
                Body             = "This is Body"
            };

            var allUsersIds = _context.Users.Select(a => a.Id).ToList();
            var TokensList  = GetUsersTokens(allUsersIds);

            FirebaseHelper.SendNotification(TokensList, title, body, payLoadData);

            return(new Result()
            {
                IsSuccess = true,
                Errors = new List <string>()
            });
        }
Beispiel #3
0
        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>()
                });
            }
        }
Beispiel #4
0
        public async Task <Result> EditShopStatus(EditStatusViewModel EditStatusVM)
        {
            var shopId    = _context.Shop.Where(u => u.Id.ToString() == EditStatusVM.UserId).Select(u => u.Id).FirstOrDefault();
            var oldStatus = _context.ShopStatus.Where(u => u.ShopId.ToString() == EditStatusVM.UserId).OrderByDescending(u => u.Id).Select(u => u.UserStatusEnum).FirstOrDefault();

            if (shopId != 0 || shopId != null)
            {
                if (oldStatus != EditStatusVM.UserStatusEnum)
                {
                    ShopStatus shopStatus = new ShopStatus();
                    shopStatus.ShopId         = shopId;
                    shopStatus.UserStatusEnum = EditStatusVM.UserStatusEnum;
                    shopStatus.Date           = DateTime.Now;
                    shopStatus.CreationDate   = DateTime.Now;
                    shopStatus.IsActive       = true;
                    shopStatus.CreatedBy      = "test";

                    _context.ShopStatus.Add(shopStatus);
                    _context.SaveChanges();

                    #region SendNotification For Shops

                    var titleForShop = Resources.MedicalStatusAlertTitle;
                    var bodyForShop  = Resources.ShopStatusIsChanged + " " + EditStatusVM.UserStatusEnum;

                    PayLoadViewModel payLoadDataForShop = new PayLoadViewModel
                    {
                        InfectedUserName = "******",
                        Title            = titleForShop,
                        Body             = bodyForShop
                    };

                    var TokensListForShop = GetShopToken(shopId);

                    FirebaseHelper.SendNotification(TokensListForShop, titleForShop, bodyForShop, payLoadDataForShop);


                    #endregion



                    #region SendNotification For CheckedIn Users In shop

                    if (EditStatusVM.UserStatusEnum == UserStatusEnum.Normal)
                    {
                        var userIds  = _context.CheckInOut.Where(c => c.ShopId == shopId).Select(c => c.UserId).Distinct().ToList();
                        var shopName = _context.Shop.Where(c => c.Id == shopId).Select(c => c.Name).FirstOrDefault();

                        var titleForCheckedInUser = Resources.MedicalStatusAlertTitle;
                        var bodyForCheckedInUser  = shopName + " " + Resources.ShopStatusIsChangedToNormal;

                        PayLoadViewModel payLoadDataForCheckedInUser = new PayLoadViewModel
                        {
                            InfectedUserName = "******",
                            Title            = titleForCheckedInUser,
                            Body             = bodyForCheckedInUser
                        };

                        var TokensListForCheckedInUser = GetUsersTokens(userIds);

                        FirebaseHelper.SendNotification(TokensListForCheckedInUser, titleForCheckedInUser, bodyForCheckedInUser, payLoadDataForCheckedInUser);
                    }

                    #endregion


                    return(new Result()
                    {
                        IsSuccess = true,
                        Errors = new List <string>()
                    });
                }
                else
                {
                    return(new Result()
                    {
                        IsSuccess = false,
                        Errors = new List <string> {
                            Resources.ShopIsAlreadyOnThisStatus
                        }
                    });
                }
            }
            else
            {
                return(new Result()
                {
                    IsSuccess = false,
                    Errors = new List <string> {
                        Resources.ShopIsNotExist
                    }
                });
            }
        }
Beispiel #5
0
        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>()
                });
            }
        }