public int InsertOrganizationSubscription(OrganizationSubscription OrganizationSubscription)
        {
            //context.OrganizationSubscriptions.Add(OrganizationSubscription);
            SqlParameter[] Param = new SqlParameter[9];
            Param[0] = new SqlParameter("@pOrganizationSubscriptionGUID", SqlDbType.UniqueIdentifier);
            Param[0].Value = OrganizationSubscription.OrganizationSubscriptionGUID;
            Param[1] = new SqlParameter("@pOrganizationGUID", SqlDbType.UniqueIdentifier);
            Param[1].Value = OrganizationSubscription.OrganizationGUID;
            Param[2] = new SqlParameter("@pVersion", SqlDbType.Int);
            Param[2].Value = OrganizationSubscription.Version;
            Param[3] = new SqlParameter("@pIsActive", SqlDbType.Bit);
            Param[3].Value = OrganizationSubscription.IsActive;
            Param[4] = new SqlParameter("@pSubscriptionPurchased", SqlDbType.Int);
            Param[4].Value = OrganizationSubscription.SubscriptionPurchased;
            Param[5] = new SqlParameter("@pSubscriptionConsumed", SqlDbType.Int);
            Param[5].Value = OrganizationSubscription.SubscriptionConsumed;
            Param[6] = new SqlParameter("@pStartDate", SqlDbType.DateTime);
            Param[6].Value = (object)OrganizationSubscription.StartDate ?? DBNull.Value;
            Param[7] = new SqlParameter("@pExpiryDate", SqlDbType.DateTime);
            Param[7].Value = (object)OrganizationSubscription.ExpiryDate ?? DBNull.Value;
            Param[8] = new SqlParameter("@pCreatedDate", SqlDbType.DateTime);
            Param[8].Value = (object)OrganizationSubscription.CreatedDate ?? DBNull.Value;

            return context.Database.ExecuteSqlCommand("insert into OrganizationSubscriptions(OrganizationSubscriptionGUID,OrganizationGUID,Version,IsActive,SubscriptionPurchased,"
                + "SubscriptionConsumed,StartDate,ExpiryDate,CreatedDate)values(@pOrganizationSubscriptionGUID,@pOrganizationGUID,@pVersion,@pIsActive,@pSubscriptionPurchased,"
                + "@pSubscriptionConsumed,@pStartDate,@pExpiryDate,@pCreatedDate)", Param);

        }
        public ActionResult Edit(OrganizationSubscriptionView organizationSubscriptionView)
        {

            Logger.Debug("Inside Organization Subscription Controller- Edit HttpPost");
            try
            {
                if (Session["OrganizationGUID"] != null)
                {
                    OrganizationSubscription organizationSubscription = new OrganizationSubscription();
                    organizationSubscription.OrganizationSubscriptionGUID = new Guid(organizationSubscriptionView.OrganizationSubscriptionGUID);
                    organizationSubscription.OrganizationGUID = new Guid(organizationSubscriptionView.OrganizationGUID);
                    organizationSubscription.IsActive = organizationSubscriptionView.IsActive;
                    organizationSubscription.Version = organizationSubscriptionView.Version;
                    organizationSubscription.SubscriptionPurchased = organizationSubscriptionView.SubscriptionPurchased;
                    organizationSubscription.SubscriptionConsumed = organizationSubscriptionView.SubscriptionConsumed;
                    // organizationSubscription.StartDate = organizationSubscriptionView.StartDate;
                    organizationSubscription.ExpiryDate = Convert.ToDateTime(organizationSubscriptionView.ExpiryDate);
                    //organizationSubscription.CreatedDate = organizationSubscriptionView.CreatedDate;

                    int result = _IOrganizationSubscriptionRepository.UpdateOrganizationSubscription(organizationSubscription);
                    //int result = _IOrganizationSubscriptionRepository.Save();
                    if (result > 0)
                        return RedirectToAction("../Organization/Index");
                    else
                        return View();
                }
                else
                {
                    return RedirectToAction("SessionTimeOut", "User");
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                return RedirectToAction("../User/Login");
            }
        }
        public ActionResult Create(OrganizationView organization)
        {
            Logger.Debug("Inside Organization Controller- Create HttpPost");
            try
            {
                if (ModelState.IsValid)
                {
                    if (_IOrganizationRepository.GetOrganizationByID(organization.OrganizationGUID) == null)
                    {
                        Organization Organization = new Organization();
                        Organization.OrganizationFullName = organization.OrganizationFullName;
                        Organization.OrganizationName = organization.OrganizationFullName.Trim();
                        Organization.OrganizationGUID = Guid.NewGuid();
                        Organization.Website = organization.Website;
                        Organization.Phone = organization.Phone;
                        Organization.AddressLine1 = organization.AddressLine1;
                        Organization.AddressLine2 = organization.AddressLine2;
                        Organization.City = organization.City;
                        Organization.Country = organization.Country;
                        Organization.ZipCode = organization.ZipCode;
                        LatLong latLong = new LatLong();
                        latLong = GetLatLngCode(Organization.AddressLine1, Organization.AddressLine2, Organization.City, Organization.State, Organization.Country, Organization.ZipCode);
                        Organization.TimeZone = Convert.ToDouble(getTimeZone(latLong.Latitude, latLong.Longitude));
                        Organization.Latitude = latLong.Latitude;
                        Organization.Longitude = latLong.Longitude;
                        Organization.EmailID = organization.EmailID;
                        Organization.State = organization.State;
                        Organization.IsActive = false;
                        Organization.IsDeleted = false;
                        Organization.AllowContractors = true;
                        Organization.ImageURL = organization.ImageURL;
                        Organization.CreateDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            Organization.CreateBy = new Guid(Session["UserGUID"].ToString());
                        Organization.LastModifiedDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            Organization.LastModifiedBy = new Guid(Session["UserGUID"].ToString());
                        //Group Group = new Group();
                        //Group.GroupGUID = Guid.NewGuid();
                        //Group.Name = "Default";
                        //Group.Description = "Default";
                        //Group.OrganizationGUID = Organization.OrganizationGUID;
                        //Group.IsDefault = false;

                        Region Region = new Region();
                        Region.RegionGUID = Guid.NewGuid();
                        Region.Name = "Default";
                        Region.Description = "Default";
                        if (Organization.OrganizationGUID != Guid.Empty)
                        {
                            Region.OrganizationGUID = Organization.OrganizationGUID;
                        }
                        else
                        {
                            Region.OrganizationGUID = null;
                        }
                        Region.IsDefault = false;

                        Territory Territory = new Territory();
                        Territory.TerritoryGUID = Guid.NewGuid();
                        if (Territory.RegionGUID != Guid.Empty)
                        {
                            Territory.RegionGUID = Territory.RegionGUID;
                        }
                        else
                        {
                            Territory.RegionGUID = null;
                        }
                        Territory.Name = "Default";
                        Territory.Description = "Default";
                        if (Organization.OrganizationGUID != Guid.Empty)
                        {
                            Territory.OrganizationGUID = Organization.OrganizationGUID;
                        }
                        else
                        {
                            Territory.OrganizationGUID = null;
                        }
                        Territory.IsDefault = false;




                        GlobalUser globalUser = new GlobalUser();
                        globalUser.UserGUID = Guid.NewGuid();
                        globalUser.USERID = organization.UserID;
                        globalUser.UserName = organization.UserName;
                        globalUser.Password = _IUserRepository.EncodeTo64(organization.Password);
                        globalUser.IsActive = true;
                        globalUser.IsDelete = false;
                        globalUser.Latitude = latLong.Latitude;
                        globalUser.Longitude = latLong.Longitude;
                        globalUser.Role_Id = _IGlobalUserRepository.GetOrganizationAdminRoleID();
                        globalUser.CreateDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            globalUser.CreateBy = new Guid(Session["UserGUID"].ToString());
                        globalUser.LastModifiedDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            globalUser.LastModifiedBy = new Guid(Session["UserGUID"].ToString());

                        UserProfile userprofile = new UserProfile();
                        userprofile.ProfileGUID = Guid.NewGuid();
                        userprofile.UserGUID = globalUser.UserGUID;
                        userprofile.CompanyName = Organization.OrganizationFullName;
                        userprofile.FirstName = organization.FirstName;
                        userprofile.LastName = organization.LastName;
                        userprofile.MobilePhone = "";
                        userprofile.BusinessPhone = organization.Phone;
                        userprofile.HomePhone = "";
                        userprofile.EmailID = organization.EmailID;
                        userprofile.AddressLine1 = organization.AddressLine1;
                        userprofile.AddressLine2 = organization.AddressLine2;
                        userprofile.City = organization.City;
                        userprofile.State = organization.State;
                        userprofile.Country = organization.Country;
                        userprofile.Latitude = latLong.Latitude;
                        userprofile.Longitude = latLong.Longitude;
                        userprofile.ZipCode = organization.ZipCode;
                        userprofile.IsDeleted = false;
                        userprofile.PicFileURL = Organization.ImageURL;
                        userprofile.LastModifiedDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            userprofile.LastModifiedBy = new Guid(Session["UserGUID"].ToString());


                        userprofile.CompanyName = Organization.OrganizationName;

                        AspNetUser aspnetuser = new AspNetUser();
                        aspnetuser.Id = globalUser.UserGUID.ToString();
                        aspnetuser.UserName = organization.UserName;
                        aspnetuser.FirstName = organization.FirstName;
                        aspnetuser.LastName = organization.LastName;
                        aspnetuser.PasswordHash = _IUserRepository.EncodeTo64(organization.Password);
                        aspnetuser.PhoneNumber = organization.Phone;
                        aspnetuser.EmailID = organization.EmailID;
                        if (Organization.OrganizationGUID != Guid.Empty)
                        {
                            aspnetuser.OrganizationGUID = Organization.OrganizationGUID;
                        }
                        else
                        {
                            aspnetuser.OrganizationGUID = null;
                        }
                        aspnetuser.SecurityStamp = "";
                        aspnetuser.Discriminator = "";

                        OrganizationSubscription organizationSubscription = new OrganizationSubscription();
                        organizationSubscription.OrganizationSubscriptionGUID = Guid.NewGuid();
                        organizationSubscription.OrganizationGUID = Organization.OrganizationGUID;
                        organizationSubscription.IsActive = true;
                        organizationSubscription.Version = 1;
                        organizationSubscription.SubscriptionPurchased = 100;
                        organizationSubscription.SubscriptionConsumed = 1;
                        organizationSubscription.StartDate = DateTime.UtcNow;
                        organizationSubscription.ExpiryDate = DateTime.UtcNow.AddDays(30);
                        organizationSubscription.CreatedDate = DateTime.UtcNow;


                        UserSubscription userSubscription = new UserSubscription();
                        userSubscription.UserSubscriptionGUID = Guid.NewGuid();
                        userSubscription.UserGUID = globalUser.UserGUID;
                        if (organizationSubscription.OrganizationSubscriptionGUID != Guid.Empty)
                        {
                            userSubscription.OrganizationSubscriptionGUID = organizationSubscription.OrganizationSubscriptionGUID;
                        }
                        else
                        {
                            userSubscription.OrganizationSubscriptionGUID = null;
                        }

                        userSubscription.IsActive = true;
                        userSubscription.CreatedDate = DateTime.UtcNow;

                        Market Market = new Market();
                        Market.MarketGUID = Guid.NewGuid();
                        Market.IsDefault = true;
                        if (globalUser.UserGUID != Guid.Empty)
                        {
                            Market.UserGUID = globalUser.UserGUID;
                        }
                        else
                        {
                            Market.UserGUID = null;
                        }
                        Market.EntityType = 0;
                        if (Organization.OrganizationGUID != Guid.Empty)
                        {
                            Market.OrganizationGUID = Organization.OrganizationGUID;
                        }
                        else
                        {
                            Market.OrganizationGUID = null;
                        }
                        if (Organization.OrganizationGUID != Guid.Empty)
                        {
                            Market.OwnerGUID = Organization.OrganizationGUID;
                        }
                        else
                        {
                            Market.OwnerGUID = null;
                        }
                        Market.MarketName = Organization.OrganizationFullName;
                        if (Region.RegionGUID != Guid.Empty)
                        {
                            Market.RegionGUID = Region.RegionGUID;
                        }
                        else
                        {
                            Market.RegionGUID = null;
                        }
                        if (Territory.TerritoryGUID != Guid.Empty)
                        {
                            Market.TerritoryGUID = Territory.TerritoryGUID;
                        }
                        else
                        {
                            Market.TerritoryGUID = null;
                        }
                        if (globalUser.UserGUID != Guid.Empty)
                        {
                            Market.PrimaryContactGUID = globalUser.UserGUID;
                        }
                        else
                        {
                            Market.PrimaryContactGUID = null;
                        }
                        Market.FirstName = organization.FirstName;
                        Market.LastName = organization.LastName;
                        Market.MobilePhone = "";
                        Market.MarketPhone = organization.Phone;
                        Market.HomePhone = "";
                        Market.Emails = organization.EmailID;
                        Market.TimeZone = Organization.TimeZone.ToString();
                        Market.AddressLine1 = organization.AddressLine1;
                        Market.AddressLine2 = organization.AddressLine2;
                        Market.City = organization.City;
                        Market.State = organization.State;
                        Market.Country = organization.Country;
                        Market.ZipCode = organization.ZipCode;
                        Market.Latitude = latLong.Latitude;
                        Market.Longitude = latLong.Longitude;
                        Market.ImageURL = organization.ImageURL;
                        Market.IsDeleted = false;
                        Market.CreateDate = DateTime.UtcNow;
                        Market.UpdatedDate = DateTime.UtcNow;

                        OrganizationUsersMap organizationUserMap = new OrganizationUsersMap();
                        organizationUserMap.OrganizationUserMapGUID = Guid.NewGuid();
                        organizationUserMap.OrganizationGUID = Organization.OrganizationGUID;
                        organizationUserMap.UserGUID = globalUser.UserGUID;
                        organizationUserMap.IsContractor = false;
                        organizationUserMap.IsActive = true;
                        organizationUserMap.Status = 0;
                        if (Region.RegionGUID != Guid.Empty)
                        {
                            organizationUserMap.RegionGUID = Region.RegionGUID;
                        }
                        else
                        {
                            organizationUserMap.RegionGUID = null;
                        }
                        if (Territory.TerritoryGUID != Guid.Empty)
                        {
                            organizationUserMap.TerritoryGUID = Territory.TerritoryGUID;
                        }
                        else
                        {
                            organizationUserMap.TerritoryGUID = null;
                        }
                        organizationUserMap.UserType = "ENT_A";
                        organizationUserMap.CreateDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            organizationUserMap.CreateBy = new Guid(Session["UserGUID"].ToString());
                        organizationUserMap.LastModifiedDate = DateTime.UtcNow;
                        if (Session["UserGUID"] != null)
                            organizationUserMap.LastModifiedBy = new Guid(Session["UserGUID"].ToString());



                        int result = _IOrganizationRepository.InsertOrganization(Organization);
                        // int result = _IOrganizationRepository.Save();
                        if (result > 0)
                        {
                            _IOrganizationSubscriptionRepository.InsertOrganizationSubscription(organizationSubscription);
                            //_IOrganizationSubscriptionRepository.Save();
                            //_IGroupRepository.InsertGroup(Group);
                            //_IGroupRepository.Save();
                            _IRegionRepository.InsertRegion(Region);
                            //_IRegionRepository.Save();
                            _ITerritoryRepository.InsertTerritory(Territory);
                            // _ITerritoryRepository.Save();

                            int userresult = _IUserRepository.InsertUser(aspnetuser);
                            // int userresult = _IUserRepository.Save();
                            if (userresult > 0)
                            {
                                int guresult = _IGlobalUserRepository.InsertGlobalUser(globalUser);
                                //int guresult = _IGlobalUserRepository.Save();

                                if (guresult > 0)
                                {
                                    int OrgUserMap = _IOrganizationRepository.InsertOrganizationUserMap(organizationUserMap);
                                    //int OrgUserMap = _IOrganizationRepository.Save();
                                    if (OrgUserMap > 0)
                                    {
                                        int usrresult = _IUserProfileRepository.InsertUserProfile(userprofile);
                                        //int usrresult = _IUserProfileRepository.Save();
                                        if (usrresult > 0)
                                        {
                                            int usubresult = _IUserSubscriptionRepository.InsertUserSubscription(userSubscription);
                                            //int usubresult = _IUserSubscriptionRepository.Save();
                                            if (usubresult > 0)
                                            {
                                                int marketresult = _IMarketRepository.InsertMarket(Market);
                                                //int marketresult = _IMarketRepository.Save();
                                                if (marketresult > 0)
                                                {
                                                    if (Session["UserType"] != null && Session["UserType"].ToString() == "WIM_A")
                                                    {
                                                        TempData["msg"] = "<script>ModalPopupsAlert('Workers-In-Motion','Organization Created Successfully');</script>";
                                                        return RedirectToAction("Index", "Organization");
                                                    }
                                                    else
                                                    {
                                                        TempData["msg"] = "<script>ModalPopupsAlert('Workers-In-Motion','Organization Created Successfully');</script>";
                                                        return RedirectToAction("../User/Login");
                                                    }
                                                }
                                                else
                                                {
                                                    _IUserSubscriptionRepository.DeleteUserSubscription(userSubscription.UserSubscriptionGUID);
                                                    //_IUserSubscriptionRepository.Save();
                                                    //_IGroupRepository.DeleteGroup(Group.GroupGUID);
                                                    //_IGroupRepository.Save();
                                                    _ITerritoryRepository.DeleteTerritoryByRegionGUID(Region.RegionGUID);
                                                    //_ITerritoryRepository.Save();
                                                    _IRegionRepository.DeleteRegion(Region.RegionGUID);
                                                    //_IRegionRepository.Save();


                                                    _IUserSubscriptionRepository.DeleteUserSubscription(userSubscription.UserSubscriptionGUID);
                                                    //_IUserSubscriptionRepository.Save();
                                                    _IUserProfileRepository.DeleteUserProfile(userprofile.ProfileGUID);
                                                    //_IUserProfileRepository.Save();
                                                    _IGlobalUserRepository.DeleteGlobalUser(globalUser.UserGUID);
                                                    //_IGlobalUserRepository.Save();
                                                    _IUserRepository.DeleteUser(aspnetuser.Id);
                                                    // _IUserRepository.Save();
                                                }
                                            }
                                            else
                                            {
                                                //_IGroupRepository.DeleteGroup(Group.GroupGUID);
                                                //_IGroupRepository.Save();
                                                _ITerritoryRepository.DeleteTerritoryByRegionGUID(Region.RegionGUID);
                                                //_ITerritoryRepository.Save();
                                                _IRegionRepository.DeleteRegion(Region.RegionGUID);
                                                // _IRegionRepository.Save();


                                                _IUserSubscriptionRepository.DeleteUserSubscription(userSubscription.UserSubscriptionGUID);
                                                //_IUserSubscriptionRepository.Save();
                                                _IUserProfileRepository.DeleteUserProfile(userprofile.ProfileGUID);
                                                //_IUserProfileRepository.Save();
                                                _IGlobalUserRepository.DeleteGlobalUser(globalUser.UserGUID);
                                                //_IGlobalUserRepository.Save();
                                                _IUserRepository.DeleteUser(aspnetuser.Id);
                                                //_IUserRepository.Save();

                                                _IOrganizationSubscriptionRepository.DeleteOrganizationSubscription(organizationSubscription.OrganizationSubscriptionGUID);
                                                //_IOrganizationSubscriptionRepository.Save();
                                                //_IUserSubscriptionRepository.Save();
                                                _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                                                //_IOrganizationRepository.Save();
                                            }
                                        }
                                        else
                                        {
                                            _IOrganizationRepository.DeleteOrganizationUserMap(organizationUserMap.OrganizationUserMapGUID);
                                            //_IOrganizationRepository.Save();
                                            _ITerritoryRepository.DeleteTerritoryByRegionGUID(Region.RegionGUID);
                                            //_ITerritoryRepository.Save();
                                            _IRegionRepository.DeleteRegion(Region.RegionGUID);
                                            //_IRegionRepository.Save();


                                            _IUserSubscriptionRepository.DeleteUserSubscription(userSubscription.UserSubscriptionGUID);
                                            //_IUserSubscriptionRepository.Save();
                                            _IUserProfileRepository.DeleteUserProfile(userprofile.ProfileGUID);
                                            //_IUserProfileRepository.Save();
                                            _IGlobalUserRepository.DeleteGlobalUser(globalUser.UserGUID);
                                            //_IGlobalUserRepository.Save();
                                            _IUserRepository.DeleteUser(aspnetuser.Id);
                                            //_IUserRepository.Save();

                                            _IOrganizationSubscriptionRepository.DeleteOrganizationSubscription(organizationSubscription.OrganizationSubscriptionGUID);
                                            //_IOrganizationSubscriptionRepository.Save();
                                            //_IUserSubscriptionRepository.Save();
                                            _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                                            //_IOrganizationRepository.Save();
                                        }
                                    }
                                    else
                                    {
                                        //_IGroupRepository.DeleteGroup(Group.GroupGUID);
                                        //_IGroupRepository.Save();
                                        _ITerritoryRepository.DeleteTerritoryByRegionGUID(Region.RegionGUID);
                                        //_ITerritoryRepository.Save();
                                        _IRegionRepository.DeleteRegion(Region.RegionGUID);
                                        // _IRegionRepository.Save();


                                        _IUserSubscriptionRepository.DeleteUserSubscription(userSubscription.UserSubscriptionGUID);
                                        //_IUserSubscriptionRepository.Save();
                                        _IUserProfileRepository.DeleteUserProfile(userprofile.ProfileGUID);
                                        // _IUserProfileRepository.Save();
                                        _IGlobalUserRepository.DeleteGlobalUser(globalUser.UserGUID);
                                        //_IGlobalUserRepository.Save();
                                        _IUserRepository.DeleteUser(aspnetuser.Id);
                                        //_IUserRepository.Save();

                                        _IOrganizationSubscriptionRepository.DeleteOrganizationSubscription(organizationSubscription.OrganizationSubscriptionGUID);
                                        //_IOrganizationSubscriptionRepository.Save();
                                        //_IUserSubscriptionRepository.Save();
                                        _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                                        //_IOrganizationRepository.Save();
                                    }
                                }
                                else
                                {
                                    _IGlobalUserRepository.DeleteGlobalUser(globalUser.UserGUID);
                                    //_IGlobalUserRepository.Save();
                                    _IUserRepository.DeleteUser(aspnetuser.Id);
                                    // _IUserRepository.Save();
                                    _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                                    //_IOrganizationRepository.Save();
                                }
                            }
                            else
                            {
                                _IUserRepository.DeleteUser(aspnetuser.Id);
                                // _IUserRepository.Save();
                                _IOrganizationSubscriptionRepository.DeleteOrganizationSubscription(organizationSubscription.OrganizationSubscriptionGUID);
                                //_IOrganizationSubscriptionRepository.Save();
                                _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                                // _IOrganizationRepository.Save();
                            }
                        }
                        else
                        {
                            _IOrganizationRepository.DeleteOrganization(Organization.OrganizationGUID);
                            //_IOrganizationRepository.Save();
                        }
                    }
                    else
                    {
                        //UserName already exists
                        TempData["msg"] = "<script>ModalPopupsAlert('Workers-In-Motion','Organization Name is Aleady Exists');</script>";
                    }
                }
                return View(organization);

            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                return View(organization);
            }
        }
        public ActionResult Index(string id = "")
        {
            Logger.Debug("Inside User Controller- Index");
            try
            {
                if (Session["OrganizationGUID"] != null)
                {
                    var userList = new AspNetUserViewModel();
                    userList.Users = new List<AspUser>();
                    var appUser = new List<UserProfile>();

                    if (string.IsNullOrEmpty(id))
                    {
                        appUser = _IUserProfileRepository.GetUserProfilesbyOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).OrderBy(sort => sort.FirstName).ToList();
                    }
                    else
                    {
                        appUser = _IUserProfileRepository.GetUserProfilesbyOrganizationGUID(new Guid(id)).OrderBy(sort => sort.FirstName).ToList();
                    }
                    foreach (var user in appUser.ToList())
                    {
                        UserSubscription userSubscription = _IUserSubscriptionRepository.GetUserSubscriptionByUserID(user.UserGUID);
                        GlobalUser _globalUser = _IGlobalUserRepository.GetGlobalUserByID(user.UserGUID);
                        string Regionname = string.Empty;
                        string Territoryname = string.Empty;
                        string Groupname = string.Empty;
                        string userType = string.Empty;
                        if (_globalUser != null)
                        {
                            OrganizationUsersMap _orgUserMap = _IOrganizationRepository.GetOrganizationUserMapByUserGUID(user.UserGUID);
                            if (_orgUserMap != null && _orgUserMap.RegionGUID != null)
                            {
                                Regionname = _IRegionRepository.GetRegionNameByRegionGUID(new Guid(_orgUserMap.RegionGUID.ToString()));
                            }
                            else
                            {
                                Regionname = "";
                            }
                            if (_orgUserMap != null && _orgUserMap.TerritoryGUID != null)
                            {
                                Territoryname = _ITerritoryRepository.GetTerritoryNameByTerritoryGUID(new Guid(_orgUserMap.TerritoryGUID.ToString()));
                            }
                            else
                            {
                                Territoryname = "";
                            }
                            //  Groupname = _IGroupRepository.GetGroupNameByGroupGUID(new Guid(_globalUser.GroupGUID.ToString()));
                            userType = _IGlobalUserRepository.GetUserTypeByRoleID(_globalUser.Role_Id);
                        }
                        string UserTypeName = _IGlobalUserRepository.GetUserRoleName(user.UserGUID);

                        if (userSubscription != null)
                            userList.Users.Add(new AspUser { UserTypeName = UserTypeName, RegionName = Regionname, TerritoryName = Territoryname, GroupName = Groupname, OrganizationSubscriptionGUID = userSubscription.OrganizationSubscriptionGUID.ToString(), UserType = userType, IsActive = userSubscription.IsActive, SubscriptionGUID = userSubscription.UserSubscriptionGUID.ToString(), FirstName = user.FirstName, LastName = user.LastName, Id = user.UserGUID.ToString(), EmailID = user.EmailID, MobilePhone = user.MobilePhone, City = user.City, State = user.State, Country = user.Country });
                    }
                    userList.Users = userList.Users.OrderBy(sort => sort.FirstName).ToList();

                    DropdownValues();
                    OrganizationSubscription orgSubscription = new OrganizationSubscription();
                    if (Session["UserType"] != null && Session["UserType"].ToString() != "WIM_A")
                    {
                        if (string.IsNullOrEmpty(id))
                        {
                            orgSubscription = _IOrganizationSubscriptionRepository.GetOrganizationSubscriptionByOrgID(new Guid(Session["OrganizationGUID"].ToString()));
                        }
                        else
                        {
                            orgSubscription = _IOrganizationSubscriptionRepository.GetOrganizationSubscriptionByOrgID(new Guid(id));
                        }
                        if (orgSubscription != null)
                        {
                            ViewBag.EnableCreateUserButton = "true";
                        }

                        //if (orgSubscription != null && orgSubscription.SubscriptionPurchased > orgSubscription.SubscriptionConsumed)
                        //{
                        //    ViewBag.EnableCreateUserButton = "true";
                        //}
                        //else
                        //{
                        //    ViewBag.EnableCreateUserButton = "false";
                        //}
                    }
                    else
                    {
                        ViewBag.EnableCreateUserButton = "false";
                    }
                    return View(userList.Users.AsEnumerable());
                }
                else
                {
                    return RedirectToAction("SessionTimeOut", "User");
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                return RedirectToAction("Login", "User");

            }
        }
        //public UserController(WorkersInMotionJobContext context)
        //{
        // //   this._IJobRepository = new JobRepository(context);
        //}

        #endregion
        public ActionResult Index(string id = "", string regionguid = "", string selection = "")
        {
            Logger.Debug("Inside User Controller- Index");
            try
            {
                if (Session["OrganizationGUID"] != null)
                {
                    if (!string.IsNullOrEmpty(id))
                    {
                        TempData["TabName"] = id;
                    }
                    else
                    {
                        TempData["TabName"] = "Details";
                    }
                    mycompany pmycompany = new mycompany();
                    pmycompany.OrganizationEditView = new OrganizationEditView();
                    pmycompany.AspNetUserViewModel = new AspNetUserViewModel();
                    pmycompany.TerritoryViewModel = new TerritoryViewModel();
                    pmycompany.RegionViewModel = new RegionViewModel();


                    //switch (id)
                    //{
                    //    case "Users":
                    //        ViewBag.TabName = "Users";
                    var userList = new AspNetUserViewModel();
                    userList.Users = new List<AspUser>();
                    var appUser = new List<UserProfile>();

                    appUser = _IUserProfileRepository.GetUserProfilesbyOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).OrderBy(sort => sort.FirstName).ToList();

                    foreach (var user in appUser.ToList())
                    {
                        UserSubscription userSubscription = _IUserSubscriptionRepository.GetUserSubscriptionByUserID(user.UserGUID);
                        GlobalUser _globalUser = _IGlobalUserRepository.GetGlobalUserByID(user.UserGUID);
                        string Regionname = string.Empty;
                        string Territoryname = string.Empty;
                        string Groupname = string.Empty;
                        string userType = string.Empty;
                        if (_globalUser != null)
                        {
                            OrganizationUsersMap _orgUserMap = _IOrganizationRepository.GetOrganizationUserMapByUserGUID(user.UserGUID);

                            if (_orgUserMap != null && _orgUserMap.RegionGUID != null)
                            {
                                Regionname = _IRegionRepository.GetRegionNameByRegionGUID(new Guid(_orgUserMap.RegionGUID.ToString()));
                            }
                            else
                            {
                                Regionname = "";
                            }
                            if (_orgUserMap != null && _orgUserMap.TerritoryGUID != null)
                            {
                                Territoryname = _ITerritoryRepository.GetTerritoryNameByTerritoryGUID(new Guid(_orgUserMap.TerritoryGUID.ToString()));
                            }
                            else
                            {
                                Territoryname = "";
                            }


                            // Groupname = _IGroupRepository.GetGroupNameByGroupGUID(new Guid(_globalUser.GroupGUID.ToString()));
                            userType = _IGlobalUserRepository.GetUserTypeByRoleID(_globalUser.Role_Id);
                        }
                        string UserTypeName = _IGlobalUserRepository.GetUserRoleName(user.UserGUID);

                        if (userSubscription != null)
                            userList.Users.Add(new AspUser { UserTypeName = UserTypeName, RegionName = Regionname, TerritoryName = Territoryname, GroupName = Groupname, OrganizationSubscriptionGUID = userSubscription.OrganizationSubscriptionGUID.ToString(), UserType = userType, IsActive = userSubscription.IsActive, SubscriptionGUID = userSubscription.UserSubscriptionGUID.ToString(), FirstName = user.FirstName, LastName = user.LastName, Id = user.UserGUID.ToString(), EmailID = user.EmailID, MobilePhone = user.MobilePhone, City = user.City, State = user.State, Country = user.Country });
                    }

                    OrganizationSubscription orgSubscription = new OrganizationSubscription();
                    if (Session["UserType"] != null && Session["UserType"].ToString() != "WIM_A")
                    {
                        orgSubscription = _IOrganizationSubscriptionRepository.GetOrganizationSubscriptionByOrgID(new Guid(Session["OrganizationGUID"].ToString()));
                        if (orgSubscription != null)
                        {
                            ViewBag.EnableCreateUserButton = "true";
                        }
                        else
                        {
                            ViewBag.EnableCreateUserButton = "false";
                        }
                        //if (orgSubscription != null && orgSubscription.SubscriptionPurchased > orgSubscription.SubscriptionConsumed)
                        //{
                        //    ViewBag.EnableCreateUserButton = "true";
                        //}
                        //else
                        //{
                        //    ViewBag.EnableCreateUserButton = "false";
                        //}
                    }
                    else
                    {
                        ViewBag.EnableCreateUserButton = "false";
                    }
                    pmycompany.AspNetUserViewModel = userList;
                    //    break;
                    //case "Region":
                    //    ViewBag.TabName = "Regions";
                    var territoryList = new TerritoryViewModel();
                    territoryList.Territory = new List<TerritoryModel>();
                    List<Territory> appTerritory = new List<Territory>();
                    if (!string.IsNullOrEmpty(regionguid) && regionguid != Guid.Empty.ToString())
                    {
                        appTerritory = _ITerritoryRepository.GetTerritoryByRegionGUID(new Guid(regionguid)).ToList();
                        TempData["TabName"] = "Markets";
                        ViewBag.AddTerritory = "true";
                        ViewBag.Id = regionguid;
                    }
                    else
                    {
                        appTerritory = _ITerritoryRepository.GetTerritoryByOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).ToList();
                    }
                    foreach (var territory in appTerritory.ToList())
                    {
                        territoryList.Territory.Add(new TerritoryModel { Name = territory.Name, TerritoryGUID = territory.TerritoryGUID.ToString(), RegionGUID = territory.RegionGUID != null ? territory.RegionGUID.ToString() : Guid.Empty.ToString(), Description = territory.Description, OrganizationGUID = territory.OrganizationGUID != null ? territory.OrganizationGUID.ToString() : Guid.Empty.ToString() });
                    }
                    StringBuilder sb = new StringBuilder();
                    sb.Append("<div class='actions'>");
                    sb.Append("<div class='btn-group'>");
                    if (!string.IsNullOrEmpty(regionguid) && regionguid != Guid.Empty.ToString())
                    {
                        sb.Append("<a href='#' id='ulaworkergroup' class='btn green' data-toggle='dropdown'><i class='icon-map-marker'></i> " + _IRegionRepository.GetRegionNameByRegionGUID(new Guid(regionguid)) + " <i class='icon-angle-down'></i></a>");
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(selection) && selection == "All")
                        {
                            sb.Append("<a href='#' id='ulaworkergroup' class='btn green' data-toggle='dropdown'><i class='icon-map-marker'></i>All<i class='icon-angle-down'></i></a>");
                        }
                        else
                        {
                            sb.Append("<a href='#' id='ulaworkergroup' class='btn green' data-toggle='dropdown'><i class='icon-map-marker'></i> Select Region <i class='icon-angle-down'></i></a>");
                        }
                    }
                    sb.Append("<ul id='ulworkgroup' style='height:100px;overflow-y:scroll' class='dropdown-menu pull-right'>");
                    if (string.IsNullOrEmpty(selection) || selection != "All")
                    {
                        sb.Append("<li><a href=" + Url.Action("Index", "MyCompany", new { id = "Markets", selection = "All" }) + ">All</a></li>");
                    }
                    List<Region> RegList = _IRegionRepository.GetRegionByOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).ToList();
                    foreach (Region item in RegList)
                    {
                        sb.Append("<li><a href=" + Url.Action("Index", "MyCompany", new { regionguid = item.RegionGUID.ToString() }) + " data-groupguid=" + item.RegionGUID + ">" + item.Name + "</a></li>");
                    }
                    sb.Append("</ul>");
                    sb.Append("</div>");
                    sb.Append("</div>");
                    ViewBag.RegionList = sb.ToString();
                    pmycompany.TerritoryViewModel = territoryList;
                    //    break;
                    //case "Territory":
                    //    ViewBag.TabName = "Territories";
                    var regionList = new RegionViewModel();
                    regionList.Region = new List<RegionModel>();
                    var appRegion = _IRegionRepository.GetRegionByOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).ToList();
                    foreach (var region in appRegion.ToList())
                    {
                        regionList.Region.Add(new RegionModel { Name = region.Name, RegionGUID = region.RegionGUID.ToString(), Description = region.Description, OrganizationGUID = region.OrganizationGUID != null ? region.OrganizationGUID.ToString() : Guid.Empty.ToString() });
                    }
                    pmycompany.RegionViewModel = regionList;
                    //    break;
                    //case "Organization":
                    //    ViewBag.TabName = "Details";
                    OrganizationEditView organization = new OrganizationEditView();
                    organization.OrganizationGUID = new Guid(Session["OrganizationGUID"].ToString());
                    Organization Organization = _IOrganizationRepository.GetOrganizationByID(organization.OrganizationGUID);
                    if (organization != null)
                    {
                        organization.OrganizationFullName = Organization.OrganizationFullName;
                        organization.OrganizationName = Organization.OrganizationFullName.Trim();
                        organization.OrganizationGUID = Organization.OrganizationGUID;
                        organization.Website = Organization.Website;
                        organization.Phone = Organization.Phone;
                        organization.TimeZone = Organization.TimeZone.ToString();
                        organization.AddressLine1 = Organization.AddressLine1;
                        organization.AddressLine2 = Organization.AddressLine2;
                        organization.ImageURL = Organization.ImageURL;
                        organization.City = Organization.City;
                        organization.Country = Organization.Country;
                        organization.State = Organization.State;
                        organization.ZipCode = Organization.ZipCode;
                        organization.EmailID = Organization.EmailID;
                        organization.IsActive = Organization.IsActive;
                        organization.IsDeleted = Organization.IsDeleted;
                        organization.CreatedDate = Organization.CreateDate;
                        organization.CreateBy = Organization.CreateBy;
                        pmycompany.OrganizationEditView = organization;
                    }

                    //    break;
                    //default:
                    //    ViewBag.TabName = "Details";
                    //    OrganizationEditView porganization = new OrganizationEditView();
                    //    porganization.OrganizationGUID = new Guid(Session["OrganizationGUID"].ToString());
                    //    Organization pOrganization = _IOrganizationRepository.GetOrganizationByID(porganization.OrganizationGUID);
                    //    if (porganization != null)
                    //    {
                    //        porganization.OrganizationFullName = pOrganization.OrganizationFullName;
                    //        porganization.OrganizationName = pOrganization.OrganizationFullName.Trim();
                    //        porganization.OrganizationGUID = pOrganization.OrganizationGUID;
                    //        porganization.Website = pOrganization.Website;
                    //        porganization.Phone = pOrganization.Phone;
                    //        porganization.TimeZone = pOrganization.TimeZone.ToString();
                    //        porganization.AddressLine1 = pOrganization.AddressLine1;
                    //        porganization.AddressLine2 = pOrganization.AddressLine2;
                    //        porganization.ImageURL = pOrganization.ImageURL;
                    //        porganization.City = pOrganization.City;
                    //        porganization.Country = pOrganization.Country;
                    //        porganization.State = pOrganization.State;
                    //        porganization.ZipCode = pOrganization.ZipCode;
                    //        porganization.EmailID = pOrganization.EmailID;
                    //        porganization.IsActive = pOrganization.IsActive;
                    //        porganization.IsDeleted = pOrganization.IsDeleted;
                    //        porganization.CreatedDate = pOrganization.CreateDate;
                    //        porganization.CreateBy = pOrganization.CreateBy;
                    //        pmycompany.OrganizationEditView.Add(porganization);
                    //    }
                    //    break;
                    // }



                    return View(pmycompany);
                }
                else
                {
                    return RedirectToAction("SessionTimeOut", "User");
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                return RedirectToAction("Login", "User");

            }
        }
        private AspNetUserViewModel UserDetails()
        {
            #region UserDetails
            try
            {
                var userList = new AspNetUserViewModel();
                userList.Users = new List<AspUser>();
                var appUser = new List<UserProfile>();

                appUser = _IUserProfileRepository.GetUserProfilesbyOrganizationGUID(new Guid(Session["OrganizationGUID"].ToString())).OrderBy(sort => sort.FirstName).ToList();

                foreach (var user in appUser.ToList())
                {
                    UserSubscription userSubscription = _IUserSubscriptionRepository.GetUserSubscriptionByUserID(user.UserGUID);
                    GlobalUser _globalUser = _IGlobalUserRepository.GetGlobalUserByID(user.UserGUID);
                    string Regionname = string.Empty;
                    string Territoryname = string.Empty;
                    string Groupname = string.Empty;
                    string userType = string.Empty;
                    if (_globalUser != null)
                    {
                        OrganizationUsersMap _orgUserMap = _IOrganizationRepository.GetOrganizationUserMapByUserGUID(user.UserGUID);

                        if (_orgUserMap != null && _orgUserMap.RegionGUID != null)
                        {
                            Regionname = _IRegionRepository.GetRegionNameByRegionGUID(new Guid(_orgUserMap.RegionGUID.ToString()));
                        }
                        else
                        {
                            Regionname = "";
                        }
                        if (_orgUserMap != null && _orgUserMap.TerritoryGUID != null)
                        {
                            Territoryname = _ITerritoryRepository.GetTerritoryNameByTerritoryGUID(new Guid(_orgUserMap.TerritoryGUID.ToString()));
                        }
                        else
                        {
                            Territoryname = "";
                        }

                        //Regionname = _IRegionRepository.GetRegionNameByRegionGUID(new Guid(_IOrganizationRepository.GetOrganizationUserMapByUserGUID(user.UserGUID).RegionGUID.ToString()));
                        //Territoryname = _ITerritoryRepository.GetTerritoryNameByTerritoryGUID(new Guid(_IOrganizationRepository.GetOrganizationUserMapByUserGUID(user.UserGUID).TerritoryGUID.ToString()));
                        userType = _IGlobalUserRepository.GetUserTypeByRoleID(_globalUser.Role_Id);
                    }
                    string UserTypeName = _IGlobalUserRepository.GetUserRoleName(user.UserGUID);

                    if (userSubscription != null)
                        userList.Users.Add(new AspUser { UserTypeName = UserTypeName, RegionName = Regionname, TerritoryName = Territoryname, GroupName = Groupname, OrganizationSubscriptionGUID = userSubscription.OrganizationSubscriptionGUID.ToString(), UserType = userType, IsActive = userSubscription.IsActive, SubscriptionGUID = userSubscription.UserSubscriptionGUID.ToString(), FirstName = user.FirstName, LastName = user.LastName, Id = user.UserGUID.ToString(), EmailID = user.EmailID, MobilePhone = user.MobilePhone, City = user.City, State = user.State, Country = user.Country });
                }

                OrganizationSubscription orgSubscription = new OrganizationSubscription();
                if (Session["UserType"] != null && Session["UserType"].ToString() != "WIM_A")
                {
                    orgSubscription = _IOrganizationSubscriptionRepository.GetOrganizationSubscriptionByOrgID(new Guid(Session["OrganizationGUID"].ToString()));
                    if (orgSubscription != null)
                    {
                        ViewBag.EnableCreateUserButton = "true";
                    }
                    else
                    {
                        ViewBag.EnableCreateUserButton = "false";
                    }
                    //if (orgSubscription != null && orgSubscription.SubscriptionPurchased > orgSubscription.SubscriptionConsumed)
                    //{
                    //    ViewBag.EnableCreateUserButton = "true";
                    //}
                    //else
                    //{
                    //    ViewBag.EnableCreateUserButton = "false";
                    //}
                }
                else
                {
                    ViewBag.EnableCreateUserButton = "false";
                }
                return userList;
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                return null;
            }
            #endregion
        }
        public int UpdateOrganizationSubscriptionCount(OrganizationSubscription OrganizationSubscription)
        {
            //using (var dataContext = new WorkersInMotionDB())
            //{
            //    var qry = from p in dataContext.OrganizationSubscriptions where p.OrganizationSubscriptionGUID == OrganizationSubscription.OrganizationSubscriptionGUID select p;
            //    var item = qry.Single();
            //    item.SubscriptionConsumed = item.SubscriptionConsumed + 1;
            //    return dataContext.SaveChanges();
            //}
            SqlParameter[] Param = new SqlParameter[2];
            Param[0] = new SqlParameter("@pSubscriptionConsumed", SqlDbType.Int);
            Param[0].Value = OrganizationSubscription.SubscriptionConsumed + 1;
            Param[1] = new SqlParameter("@pOrganizationSubscriptionGUID", SqlDbType.UniqueIdentifier);
            Param[1].Value = OrganizationSubscription.OrganizationSubscriptionGUID;

            return context.Database.ExecuteSqlCommand("Update OrganizationSubscriptions set SubscriptionConsumed=@pSubscriptionConsumed where OrganizationSubscriptionGUID=@pOrganizationSubscriptionGUID", Param);
        }
        public int UpdateOrganizationSubscription(OrganizationSubscription OrganizationSubscription)
        {
            // context.Entry(OrganizationSubscription).State = EntityState.Modified;

            SqlParameter[] Param = new SqlParameter[9];
            Param[0] = new SqlParameter("@pOrganizationSubscriptionGUID", SqlDbType.UniqueIdentifier);
            Param[0].Value = OrganizationSubscription.OrganizationSubscriptionGUID;
            Param[1] = new SqlParameter("@pOrganizationGUID", SqlDbType.UniqueIdentifier);
            Param[1].Value = OrganizationSubscription.OrganizationGUID;
            Param[2] = new SqlParameter("@pVersion", SqlDbType.Int);
            Param[2].Value = OrganizationSubscription.Version;
            Param[3] = new SqlParameter("@pIsActive", SqlDbType.Bit);
            Param[3].Value = OrganizationSubscription.IsActive;
            Param[4] = new SqlParameter("@pSubscriptionPurchased", SqlDbType.Int);
            Param[4].Value = OrganizationSubscription.SubscriptionPurchased;
            Param[5] = new SqlParameter("@pSubscriptionConsumed", SqlDbType.Int);
            Param[5].Value = OrganizationSubscription.SubscriptionConsumed;
            Param[6] = new SqlParameter("@pStartDate", SqlDbType.DateTime);
            Param[6].Value = (object)OrganizationSubscription.StartDate ?? DBNull.Value;
            Param[7] = new SqlParameter("@pExpiryDate", SqlDbType.DateTime);
            Param[7].Value = (object)OrganizationSubscription.ExpiryDate ?? DBNull.Value;
            Param[8] = new SqlParameter("@pCreatedDate", SqlDbType.DateTime);
            Param[8].Value = (object)OrganizationSubscription.CreatedDate ?? DBNull.Value;

            return context.Database.ExecuteSqlCommand("update OrganizationSubscriptions set OrganizationGUID=@pOrganizationGUID,Version=@pVersion,IsActive=@pIsActive,SubscriptionPurchased=@pSubscriptionPurchased,"
                + "SubscriptionConsumed=@pSubscriptionConsumed,StartDate=@pStartDate,ExpiryDate=@pExpiryDate,CreatedDate=@pCreatedDate where OrganizationSubscriptionGUID=@pOrganizationSubscriptionGUID", Param);

        }