Пример #1
0
 public Modell.Manager ToEntity(Models.Manager source)
 {
     return(new Modell.Manager()
     {
         ManagerName = source.ManagerName
     });
 }
Пример #2
0
        public Models.Manager MapToManager(Models.Manager manager)
        {
            if (manager != null)
            {
                manager.Id        = Id;
                manager.Name      = Name;
                manager.IP        = IP;
                manager.Port      = Port;
                manager.Latitude  = Latitude;
                manager.Longitude = Longitude;
                //manager.Users = Users;
            }
            else
            {
                manager = new Models.Manager
                {
                    Name      = Name,
                    IP        = IP,
                    Port      = Port,
                    Users     = Users,
                    Latitude  = Latitude,
                    Longitude = Longitude
                };
            }

            return(manager);
        }
Пример #3
0
        public JsonResult CreateManager([FromBody] Models.Manager manager)
        {
            using (var context = new Data.ApplicationDbContext()) {
                String      authUserId = User.GetClaim(OpenIdConnectConstants.Claims.Subject);
                Models.User authUser   = context.Users.AsNoTracking().FirstOrDefault(u => u.Id.ToString().Equals(authUserId));
                if (authUser == null)
                {
                    return(Json(new { status_code = 2, status = "User '" + authUserId + "' does not exist" }));
                }

                if (!Helpers.PermissionChecker.CanAddSite(authUser))
                {
                    return(Json(new { status_code = 1, status = "User '" + authUser.UserName + "' does not have permission to create managers" }));
                }

                if (manager.FName.Length == 0 && manager.LName.Length == 0)
                {
                    return(Json(new { status_code = 4, status = "Manager must have at least a first or last name" }));
                }
                else if (manager.Phone.Length == 0)
                {
                    return(Json(new { status_code = 4, status = "Manager must have a phone number" }));
                }

                context.Managers.Add(manager);
                context.SaveChanges();

                Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateManager, authUser.Id, manager.Id,
                                            String.Format("{0} (id: {1}) created manager '{2}' (id: {3})", authUser.UserName, authUser.Id, manager.FName + " " + manager.LName, manager.Id));

                return(Json(new { status_code = 0, manager }));
            }
        }
Пример #4
0
 public Entities.Manager ParseManager(Models.Manager manager)
 {
     return(new Entities.Manager()
     {
         Name = manager.Name,
         Password = manager.Password,
         Locationid = manager.LocationId,
         Id = manager.Id
     });
 }
Пример #5
0
        //public List<ManagerUserEditModel> ManagerUserEditModels { get; set; }

        public static ManagerEditModel Parse(Models.Manager manager)
        {
            return(new ManagerEditModel
            {
                Id = manager.Id,
                Name = manager.Name,
                IP = manager.IP,
                Port = manager.Port,
                Latitude = manager.Latitude,
                Longitude = manager.Longitude,
                Users = manager.Users,
                //ManagerUserEditModels = manager.Users.Select(mu => new ManagerUserEditModel(mu)).ToList()
            });
        }
Пример #6
0
 public static DAL.Managers ConvertToDAL(Models.Manager man)
 {
     return(new DAL.Managers()
     {
         MailM = man.MailM,
         MCity = man.MCity,
         MFullName = man.MFullName,
         MIdentity = man.MIdentity,
         MNumBallotBox = man.MNumBallotBox,
         MPassword = man.MPassword,
         NumStatus = man.NumStatus,
         ManagersStatus = man.ManagersStatus != null?Models.ManagersStatus.ConvertToDB(man.ManagersStatus) : null,
                              BallotBox = man.BallotBox != null?Models.BallotBox.ConvertToDB(man.BallotBox) : null,
                                              City = man.City != null?Models.City.convertToDB(man.City) : null
     });
 }
Пример #7
0
 public IHttpActionResult PostBallotBoxManager([FromBody] Models.Manager manager)//הוספת מנהל קלפי חדש
 {
     try
     {
         var managerDal = Models.Manager.ConvertToDAL(manager);
         managerDal.ManagersStatus = db.ManagersStatus.FirstOrDefault(p => p.numStatus == "3");
         managerDal.MUserName      = GetVoucherNumber(10);
         managerDal.MPassword      = GetVoucherNumber(9);
         db.Managers.Add(managerDal);
         db.SaveChanges();
         return(Ok());
     }
     catch (Exception ex)
     {
         return(BadRequest());
     }
 }
Пример #8
0
 public IHttpActionResult PutManagerCity(string managerId, [FromBody] Models.Manager manager)
 {
     try
     {
         var manager1 = db.Managers.First(p => p.MIdentity == managerId);
         //manager1 = Models.Manager.ConvertToDAL(manager);
         manager1.City           = db.City.First(p => p.id == manager.MCity);
         manager1.ManagersStatus = db.ManagersStatus.FirstOrDefault(p => p.numStatus == "2");
         manager1.MFullName      = manager.MFullName;
         manager1.MailM          = manager.MailM;
         db.SaveChanges();
         return(Ok(true));
     }
     catch (Exception ex)
     {
         return(BadRequest());
     }
 }
        //Saved de veranderingen in de tabel: Applicationuser
        public void Save(Models.Manager manager)
        {
            if (manager == null)
            {
                throw new ArgumentException("user");
            }


            if (manager.ManagerID == 0)
            {
                _repository.Add(manager);
            }
            else
            {
                _repository.Edit(manager);
            }

            _uow.Commit();
        }
Пример #10
0
 public IActionResult Create(Models.Manager manager)
 {
     if (manager != null)
     {
         if (TryValidateModel(manager))
         {
             try
             {
                 db.Managers.Add(manager);
                 db.SaveChanges();
             }
             catch (Exception e)
             {
                 Debug.WriteLine($"Error {e.Message}. Stack trace: {e.StackTrace}");
             }
         }
     }
     return(RedirectToAction("Index"));
 }
Пример #11
0
 public IActionResult Update(Models.Manager updatedManager)
 {
     if (db.Managers != null)
     {
         var manager = db.Managers.FirstOrDefault(x => x.ManagerId == updatedManager.ManagerId);
         if (manager != null)
         {
             if (TryValidateModel(updatedManager))
             {
                 manager.ManagerName = updatedManager.ManagerName;
                 db.SaveChanges();
             }
         }
         return(RedirectToAction("Index"));
     }
     else
     {
         throw new NullReferenceException("Context does not contain set for Managers");
     }
 }
Пример #12
0
        public static ManagerReturnModel MakeReturnManager(Models.Manager dbManager, Models.Property dbProperty)
        {
            return(new ManagerReturnModel
            {
                Name = dbManager.names,
                UserId = dbManager.userId,
                Username = dbManager.username,
                Salary = dbManager.salary,
                Role = dbManager.role,

                Property = new MiniProperty
                {
                    Address = dbProperty.address,
                    rooms = dbProperty.rooms,
                    country = dbProperty.country,
                    PropertyId = dbProperty.propertyId,
                    TotalLandLords = dbProperty.landLordProperties.Count,
                    TotalManagers = dbProperty.managers.Count,
                    TotalTenants = dbProperty.tenants.Count
                }
                // Add more manager fields
            });
        }
Пример #13
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            var userList = _db.User.ToList();

            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new Users {
                    UserName       = Input.Email,
                    Email          = Input.Email,
                    FName          = Input.FName,
                    LName          = Input.LName,
                    SName          = Input.SName,
                    Role           = Input.Role,
                    PhoneNumber    = Input.PhoneNumber,
                    AddressId      = Input.AddressId,
                    DepartmentId   = Input.DepartmentId,
                    Position       = Input.Position,
                    EnteredToWork  = DateTime.ParseExact(Input.EnteredToWork, "MM/dd/yyyy", CultureInfo.InvariantCulture),
                    EmailConfirmed = true
                };

                // *********************


                // ****************************88
                var manager = new Models.Manager
                {
                    UserId = user.Id
                };

                var employee = new Models.Employee
                {
                    UserId = user.Id,
                };
                var emp = new Models.Employee();
                if (user.Role != null && user.Role == SD.Role_Employee)
                {
                    var managers  = _db.Managers.ToList();
                    var managerId = managers.FirstOrDefault(u => u.UserId == Input.ManagerId).ManagerId;
                    emp.ManagerId = managerId;
                    emp.UserId    = user.Id;
                }
                // Manager is creating new user
                if (User.IsInRole(SD.Role_Manager))
                {
                    var ManId = _db.Managers.ToList().FirstOrDefault(u => u.UserId == _userManager.GetUserId(User)).ManagerId;
                    var DepId = _db.User.ToList().FirstOrDefault(u => u.Id == _userManager.GetUserId(User)).DepartmentId;
                    user.DepartmentId  = DepId;
                    user.Role          = SD.Role_Employee;
                    employee.ManagerId = ManId;
                }

                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    var comfirmationLink = Url.Action("ConfirmEmail", "Account",
                                                      new { userId = user.Id, token }, Request.Scheme);

                    _logger.Log(LogLevel.Warning, comfirmationLink);
                    _logger.LogInformation("User created a new account with password.");
                    if (!await _roleManager.RoleExistsAsync(SD.Role_Admin))
                    {
                        await _roleManager.CreateAsync(new IdentityRole(SD.Role_Admin));
                    }
                    if (!await _roleManager.RoleExistsAsync(SD.Role_Employee))
                    {
                        await _roleManager.CreateAsync(new IdentityRole(SD.Role_Employee));
                    }
                    if (!await _roleManager.RoleExistsAsync(SD.Role_Manager))
                    {
                        await _roleManager.CreateAsync(new IdentityRole(SD.Role_Manager));
                    }
                    if (user.Role == null)
                    {
                        //await _userManager.AddToRoleAsync(user, SD.Role_Requester);
                        user.Role = SD.Role_Admin;
                    }

                    else
                    {
                        if (user.Role == SD.Role_Employee)
                        {
                            _db.Employees.Add(employee);
                        }
                        if (user.Role == SD.Role_Manager)
                        {
                            _db.Managers.Add(manager);
                        }
                        await _userManager.AddToRoleAsync(user, user.Role);
                    }
                    if (user.Role == SD.Role_Admin)
                    {
                        //Console.WriteLine(requester.RequestmakerId + " and " + requester.UserId);
                        await _userManager.AddToRoleAsync(user, user.Role);

                        user.Role = null;
                    }



                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        if (user.Role == null)
                        {
                            await _signInManager.SignInAsync(user, isPersistent : false);

                            return(LocalRedirect(returnUrl));
                        }
                        else if (User.IsInRole(SD.Role_Admin))
                        {
                            //admin is registering new user
                            return(RedirectToAction("Index", "Users", new { Area = "Admin" }));
                        }
                        //   else if(user.Role == SD.Role_Manager)
                        //  {
                        //     return RedirectToAction("Index", "Users", new { Area = "Admin" });
                        //}
                        else if (User.IsInRole(SD.Role_Manager))
                        {
                            return(RedirectToAction("Index", "Employees", new { Area = "Manager" }));
                        }
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            Input = new InputModel()
            {
                BuildingList = _db.Addresses.Select(i => new SelectListItem
                {
                    Text  = i.Building,
                    Value = i.AddressId.ToString()
                }),
                DepartmentList = _db.Departments.ToList().Select(i => new SelectListItem
                {
                    Text  = i.DepartmentName,
                    Value = i.DepartmentId.ToString()
                }),
                RoleList = _db.Roles.Select(x => x.Name).Select(i => new SelectListItem
                {
                    Text     = i,
                    Value    = i,
                    Selected = false
                }),
                ManagerList = userList.Where(u => u.Role == "Manager").Select(i => new SelectListItem
                {
                    Text  = i.FName + " " + i.LName,
                    Value = i.Id.ToString()
                }),
            };


            // If we got this far, something failed, redisplay form
            return(Page());
        }
Пример #14
0
        public void Update(Models.Manager item)
        {
            var manager = _context.Managers.FirstOrDefault(m => (m.Id == item.Id));

            manager.SecondName = item.SecondName;
        }
        // GET: ManagerRegister
        public ActionResult ManagerRegister(int id = 0)
        {
            Manager manager = new Models.Manager();

            return(View(manager));
        }
Пример #16
0
        public void Add(Models.Manager item)
        {
            var entity = this.ToEntity(item);

            managersContext.Manager.Add(entity);
        }
 public void AddAManager(Models.Manager manager)
 {
     context.Manager.Add(mapper.ParseManager(manager));
     context.SaveChanges();
 }
Пример #18
0
        public Modell.Manager GetEntity(Models.Manager source)
        {
            var entity = this.managersContext.Manager.FirstOrDefault(x => x.ManagerName == source.ManagerName);

            return(entity);
        }
Пример #19
0
 public JsonResult UpdateManager([FromBody] Models.Manager manager)
 {
     return(Json(new { status_code = -1, status = "NOT YET IMPLEMENTED" }));
 }
        public JsonResult Create([FromBody] Models.ActivationForm form, [RequiredFromQuery] int type)
        {
            if (type == 0)
            {
                // Create new site & activation
                using (var context = new Data.ApplicationDbContext()) {
                    // Verify user exists & has permission
                    String      authUserId = User.GetClaim(OpenIdConnectConstants.Claims.Subject);
                    Models.User authUser   = context.Users.AsNoTracking().FirstOrDefault(u => u.Id.ToString().Equals(authUserId));
                    if (authUser == null)
                    {
                        return(Json(new { status_code = 2, status = "User '" + authUserId + "' does not exist" }));
                    }

                    if (!Helpers.PermissionChecker.CanAddSite(authUser))
                    {
                        return(Json(new { status_code = 3, status = "User '" + authUser.UserName + "' does not have permission to activate sites" }));
                    }

                    // Used to check if installer object and/or manager object need to be added to database
                    bool InstallerCreated = false, ManagerCreated = false, OwnerCreated = false;

                    // #1 - Check installer //
                    // if Id is 0, create new installer. Otherwise, verify installer exists
                    if (form.SiteInstaller.Id != 0)
                    {
                        Models.Installer installer = context.Installers.AsNoTracking().FirstOrDefault(i => i.Id == form.SiteInstaller.Id);
                        if (installer == null)
                        {
                            return(Json(new { status_code = 5, status = "Installer '" + form.SiteInstaller.Id + "' does not exist" }));
                        }
                    }
                    else
                    {
                        if (form.SiteInstaller.FName.Length == 0 && form.SiteInstaller.LName.Length == 0)
                        {
                            return(Json(new { status_code = 5, status = "Installer must have at least a first or last name" }));
                        }
                        else if (form.SiteInstaller.Phone.Length == 0)
                        {
                            return(Json(new { status_code = 5, status = "Installer must have a phone number" }));
                        }
                        context.Installers.Add(form.SiteInstaller);
                        InstallerCreated = true;
                    }

                    // #2 - Check manager //
                    // Same logic as installer (0 = new, otherwise use existing)
                    if (form.SiteManager.Id != 0)
                    {
                        Models.Manager manager = context.Managers.AsNoTracking().FirstOrDefault(m => m.Id == form.SiteManager.Id);
                        if (manager == null)
                        {
                            return(Json(new { status_code = 5, status = "Manager '" + form.SiteManager.Id + "' does not exist" }));
                        }
                    }
                    else
                    {
                        if (form.SiteManager.FName.Length == 0 && form.SiteManager.LName.Length == 0)
                        {
                            return(Json(new { status_code = 5, status = "Manager must have at least a first or last name" }));
                        }
                        else if (form.SiteManager.Phone.Length == 0)
                        {
                            return(Json(new { status_code = 5, status = "Manager must have a phone number" }));
                        }
                        context.Managers.Add(form.SiteManager);
                        ManagerCreated = true;
                    }

                    // #3 - Verify new owner info //
                    if (form.NewOwner.Id == 0)
                    {
                        if (context.Users.AsNoTracking().FirstOrDefault(u => form.NewOwner.UserName != null && u.UserName != null && form.NewOwner.UserName.ToLower().Equals(u.UserName.ToLower())) != null)
                        {
                            return(Json(new { status_code = 3, status = "User '" + form.NewOwner.UserName + "' already exists" }));
                        }

                        if (String.IsNullOrWhiteSpace(form.NewOwner.UserName) || String.IsNullOrWhiteSpace(form.NewOwner.Password))
                        {
                            return(Json(new { status_code = 4, status = "Invalid user creation body" }));
                        }

                        form.NewOwner.Active        = true;
                        form.NewOwner.Level         = 2;                 // force user to be owner
                        form.NewOwner.UserLastLogin = new DateTime(2000, 1, 1);
                        OwnerCreated = true;
                    }
                    else
                    {
                        form.NewOwner = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == form.NewOwner.Id);
                        if (form.NewOwner == null)
                        {
                            return(Json(new { status_code = 2, status = "Owner '" + form.NewOwner.Id + "' does not exist" }));
                        }
                    }

                    if (!form.PreApproved && (String.IsNullOrWhiteSpace(form.NewOwner.UserName) || String.IsNullOrWhiteSpace(form.NewOwner.Password)))
                    {
                        return(Json(new { status_code = 5, status = "Invalid user creation body" }));
                    }

                    // #4 - Create new site //
                    // note: if site is pre-approved, new site will not be created

                    // Verify site info
                    Models.System system = context.Systems.AsNoTracking().FirstOrDefault(s => s.Id == form.NewSite.SystemId);
                    if (system == null)
                    {
                        return(Json(new { status_code = 5, status = "Invalid system given", id = form.NewSite.SystemId }));
                    }

                    Models.User distrib = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == form.NewSite.SiteDistributor);
                    if (distrib == null)
                    {
                        return(Json(new { status_code = 5, status = "Invalid distributor given" }));
                    }

                    if (form.NewSite.SiteName.Length == 0)
                    {
                        return(Json(new { status_code = 5, status = "No site name given" }));
                    }
                    if (!form.NewSite.SiteInstallDate.HasValue)
                    {
                        return(Json(new { status_code = 5, status = "Invalid install date" }));
                    }
                    if (form.NewSite.SiteAddress.Length == 0 || form.NewSite.SiteCity.Length == 0 || form.NewSite.SiteState.Length == 0 ||
                        form.NewSite.SiteCountry.Length == 0 || form.NewSite.SiteZip.Length < 5 || form.NewSite.SiteZip.Length > 10)
                    {
                        return(Json(new { status_code = 5, status = "Invalid site address given" }));
                    }
                    if (form.NewSite.SiteOwnerName.Length == 0)
                    {
                        return(Json(new { status_code = 5, status = "No owner name given" }));
                    }
                    if (form.NewSite.SiteOwnerEmail.Length == 0 && form.NewSite.SiteOwnerPhone.Length == 0)
                    {
                        return(Json(new { status_code = 5, status = "Need at least one way to contact owner (none given)" }));
                    }

                    // Generate site info if not pre-approved
                    if (!form.PreApproved)
                    {
                        List <Models.Site> sites = context.Sites.AsNoTracking().OrderByDescending(s => s.SiteNumber).ToList();
                        int maxSiteNum           = -1;
                        foreach (Models.Site s in sites)
                        {
                            if (s.SiteNumber.HasValue)
                            {
                                maxSiteNum = (int)s.SiteNumber;
                                break;
                            }
                        }

                        form.NewSite.SiteNumber   = ++maxSiteNum;
                        form.NewSite.SiteActive   = true;
                        form.NewSite.SiteEnabled  = true;
                        form.NewSite.SiteLastPing = new DateTime(2000, 1, 1);
                        form.NewSite.SiteLastIp   = "127.0.0.1";
                    }

                    // #5 - New activation row //
                    // Need to save these to database to generate any IDs (in case new installer/manager is used, and for new site/owner) if site isn't pre-approved
                    if (!form.PreApproved)
                    {
                        if (form.NewOwner.Id == 0)
                        {
                            context.Users.Add(form.NewOwner);
                        }
                        context.Sites.Add(form.NewSite);
                        context.SaveChanges();
                    }

                    // Verify that distributor has access to site
                    // (because users can create distributors when activating site)
                    Models.Permission permission = context.Permissions.FirstOrDefault(p => form.NewSite.SiteDistributor.HasValue &&
                                                                                      p.UserId == form.NewSite.SiteDistributor && p.SiteId == form.NewSite.SiteId);
                    if (permission == null)
                    {
                        permission = new Models.Permission {
                            UserId = (int)form.NewSite.SiteDistributor,
                            SiteId = form.NewSite.SiteId,
                            Access = 1,
                        };

                        context.Permissions.Add(permission);
                    }
                    else if (permission.Access.HasValue && (int)permission.Access != 1)
                    {
                        permission.Access = 1;
                    }

                    // Set some default values for newly created sites
                    form.NewSite.LastCommunityDrop = new DateTime(1970, 1, 1, 0, 0, 0);
                    form.NewSite.LastGrandDrop     = new DateTime(1970, 1, 1, 0, 0, 0);

                    // Activation form needs to save what was submitted, not reflect current information
                    // therefore, activation table essentially acts as a merged version of multiple tables
                    form.ActivationInfo.SiteId           = form.NewSite.SiteId;
                    form.ActivationInfo.RoomName         = form.NewSite.SiteName;
                    form.ActivationInfo.SystemId         = system.Id;
                    form.ActivationInfo.StorePhone       = form.NewSite.StorePhone;
                    form.ActivationInfo.InstallerId      = form.SiteInstaller.Id;
                    form.ActivationInfo.InstallerFName   = form.SiteInstaller.FName;
                    form.ActivationInfo.InstallerLName   = form.SiteInstaller.LName;
                    form.ActivationInfo.InstallerEmail   = form.SiteInstaller.Email;
                    form.ActivationInfo.InstallerPhone   = form.SiteInstaller.Phone;
                    form.ActivationInfo.ManagerId        = form.SiteManager.Id;
                    form.ActivationInfo.ManagerFName     = form.SiteManager.FName;
                    form.ActivationInfo.ManagerLName     = form.SiteManager.LName;
                    form.ActivationInfo.ManagerEmail     = form.SiteManager.Email;
                    form.ActivationInfo.ManagerPhone     = form.SiteManager.Phone;
                    form.ActivationInfo.OwnerId          = form.NewOwner.Id;
                    form.ActivationInfo.OwnerFName       = form.NewOwner.FName;
                    form.ActivationInfo.OwnerLName       = form.NewOwner.LName;
                    form.ActivationInfo.OwnerEmail       = form.NewOwner.Email;
                    form.ActivationInfo.OwnerPhone       = form.NewOwner.Phone;
                    form.ActivationInfo.OwnerUserName    = form.NewOwner.UserName;
                    form.ActivationInfo.DistributorId    = distrib.Id;
                    form.ActivationInfo.DistributorFName = distrib.FName;
                    form.ActivationInfo.DistributorLName = distrib.LName;
                    form.ActivationInfo.SiteAddress      = form.NewSite.SiteAddress;
                    form.ActivationInfo.SiteCity         = form.NewSite.SiteCity;
                    form.ActivationInfo.SiteState        = form.NewSite.SiteState;
                    form.ActivationInfo.SiteCountry      = form.NewSite.SiteCountry;
                    form.ActivationInfo.SiteZip          = form.NewSite.SiteZip;
                    form.ActivationInfo.SubmissionDate   = DateTime.UtcNow;

                    // #6 - Create permission for new site
                    if (!form.PreApproved)
                    {
                        Models.Permission newSitePermission = new Models.Permission {
                            Access = 1,
                            SiteId = form.NewSite.SiteId,
                            UserId = form.NewOwner.Id
                        };

                        context.Permissions.Add(newSitePermission);
                    }

                    // Since these objects aren't being created through their respective controllers, need to manually log them
                    if (InstallerCreated)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateInstaller, authUser.Id, form.SiteInstaller.Id,
                                                    String.Format("{0} (id: {1}) created installer '{2}' (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.SiteInstaller.FName + " " + form.SiteInstaller.LName, form.SiteInstaller.Id));
                    }
                    if (ManagerCreated)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateManager, authUser.Id, form.SiteManager.Id,
                                                    String.Format("{0} (id: {1}) created manager '{2}' (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.SiteManager.FName + " " + form.SiteManager.LName, form.SiteManager.Id));
                    }
                    if (!form.PreApproved)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateUser, authUser.Id, form.NewOwner.Id,
                                                    String.Format("{0} (id: {1}) created user {2} (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.NewOwner.UserName, form.NewOwner.Id));
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateSite, authUser.Id, form.NewSite.SiteId,
                                                    String.Format("{0} (id: {1}) created site '{2}' (site number: {3})", authUser.UserName, authUser.Id,
                                                                  form.NewSite.SiteName, form.NewSite.SiteNumber));
                    }

                    // #7 - Save all final info to database (all information has been verified by this point) //
                    context.Activations.Add(form.ActivationInfo);
                    context.SaveChanges();

                    // #8 - Logging and alerting

                    // log
                    Helpers.LogHelper.LogAction(Models.Log.ActionType.ActivateSite, authUser.Id, form.NewSite.SiteId,
                                                String.Format("{0} (id: {1}) activated site '{2}' (site number: {3})", authUser.UserName, authUser.Id, form.NewSite.SiteName, form.NewSite.SiteNumber));

                    // send to Zapier to handle proper notification
                    var json = new {
                        SiteId = form.NewSite.SiteNumber,
                        form.NewSite.SiteName,
                        SystemName = system.Name,
                        form.ActivationInfo.SystemId,
                        form.NewSite.StorePhone,
                        form.SiteInstaller,
                        form.SiteManager,
                        NewOwner        = new { form.NewOwner.Active, form.NewOwner.Email, form.NewOwner.FName, form.NewOwner.LName, form.NewOwner.Phone, form.NewOwner.UserName },
                        SiteDistributor = new { distrib.Active, distrib.Email, distrib.FName, distrib.LName, distrib.Phone, distrib.UserName },
                        form.NewSite.SiteAddress,
                        form.NewSite.SiteCity,
                        form.NewSite.SiteState,
                        form.NewSite.SiteCountry,
                        form.NewSite.SiteZip,
                        SubmissionDate = form.ActivationInfo.SubmissionDate.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
                        form.ActivationInfo.ActivationNotes
                    };
                    Helpers.LogHelper.NotifyAction(Models.Log.ActionType.ActivateSite, json);
                }
                return(Json(new { status_code = 0, form.NewSite.SiteId }));
            }
            else if (type == 1)
            {
                // Just create new activation. Site was already approved through old report portal.
                using (var context = new Data.ApplicationDbContext()) {
                    // Verify user exists & has permission
                    String      authUserId = User.GetClaim(OpenIdConnectConstants.Claims.Subject);
                    Models.User authUser   = context.Users.AsNoTracking().FirstOrDefault(u => u.Id.ToString().Equals(authUserId));
                    if (authUser == null)
                    {
                        return(Json(new { status_code = 2, status = "User '" + authUserId + "' does not exist" }));
                    }

                    if (!Helpers.PermissionChecker.CanAddSite(authUser))
                    {
                        return(Json(new { status_code = 1, status = "User '" + authUser.UserName + "' does not have permission to activate sites" }));
                    }

                    bool InstallerCreated = false, ManagerCreated = false, OwnerCreated = false;

                    // #1 - Check installer //
                    // if Id is 0, create new installer. Otherwise, verify installer exists
                    if (form.SiteInstaller.Id != 0)
                    {
                        Models.Installer installer = context.Installers.AsNoTracking().FirstOrDefault(i => i.Id == form.SiteInstaller.Id);
                        if (installer == null)
                        {
                            return(Json(new { status_code = 2, status = "Installer '" + form.SiteInstaller.Id + "' does not exist" }));
                        }
                    }
                    else
                    {
                        if (form.SiteInstaller.FName.Length == 0 && form.SiteInstaller.LName.Length == 0)
                        {
                            return(Json(new { status_code = 4, status = "Installer must have at least a first or last name" }));
                        }
                        else if (form.SiteInstaller.Phone.Length == 0)
                        {
                            return(Json(new { status_code = 4, status = "Installer must have a phone number" }));
                        }
                        context.Installers.Add(form.SiteInstaller);
                        InstallerCreated = true;
                    }

                    // #2 - Check manager //
                    // Same logic as installer (0 = new, otherwise use existing)
                    if (form.SiteManager.Id != 0)
                    {
                        Models.Manager manager = context.Managers.AsNoTracking().FirstOrDefault(m => m.Id == form.SiteManager.Id);
                        if (manager == null)
                        {
                            return(Json(new { status_code = 2, status = "Manager '" + form.SiteManager.Id + "' does not exist" }));
                        }
                    }
                    else
                    {
                        if (form.SiteManager.FName.Length == 0 && form.SiteManager.LName.Length == 0)
                        {
                            return(Json(new { status_code = 4, status = "Manager must have at least a first or last name" }));
                        }
                        else if (form.SiteManager.Phone.Length == 0)
                        {
                            return(Json(new { status_code = 4, status = "Manager must have a phone number" }));
                        }
                        context.Managers.Add(form.SiteManager);
                        ManagerCreated = true;
                    }

                    // #3 - Verify new owner info //
                    if (form.NewOwner.Id == 0)
                    {
                        if (context.Users.AsNoTracking().FirstOrDefault(u => form.NewOwner.UserName != null && u.UserName != null && form.NewOwner.UserName.ToLower().Equals(u.UserName.ToLower())) != null)
                        {
                            return(Json(new { status_code = 3, status = "User '" + form.NewOwner.UserName + "' already exists" }));
                        }

                        if (String.IsNullOrWhiteSpace(form.NewOwner.UserName) || String.IsNullOrWhiteSpace(form.NewOwner.Password))
                        {
                            return(Json(new { status_code = 4, status = "Invalid user creation body" }));
                        }

                        form.NewOwner.Active        = true;
                        form.NewOwner.Level         = 2;                 // force user to be owner
                        form.NewOwner.UserLastLogin = new DateTime(2000, 1, 1);
                        OwnerCreated = true;
                    }
                    else
                    {
                        form.NewOwner = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == form.NewOwner.Id);
                        if (form.NewOwner == null)
                        {
                            return(Json(new { status_code = 2, status = "Owner '" + form.NewOwner.Id + "' does not exist" }));
                        }
                    }

                    // #4 - Create new site //

                    // Verify site info
                    Models.System system = context.Systems.AsNoTracking().FirstOrDefault(s => s.Id == form.NewSite.SystemId);
                    if (system == null)
                    {
                        return(Json(new { status_code = 4, status = "Invalid system given", id = form.NewSite.SystemId }));
                    }

                    Models.User distrib = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == form.NewSite.SiteDistributor);
                    if (distrib == null)
                    {
                        return(Json(new { status_code = 4, status = "Invalid distributor given" }));
                    }

                    if (form.NewSite.SiteName.Length == 0)
                    {
                        return(Json(new { status_code = 4, status = "No site name given" }));
                    }
                    if (!form.NewSite.SiteInstallDate.HasValue || form.NewSite.SiteInstallDate > DateTime.UtcNow)
                    {
                        return(Json(new { status_code = 4, status = "Invalid install date" }));
                    }
                    if (form.NewSite.SiteAddress.Length == 0 || form.NewSite.SiteCity.Length == 0 || form.NewSite.SiteState.Length == 0 ||
                        form.NewSite.SiteCountry.Length == 0 || form.NewSite.SiteZip.Length < 5 || form.NewSite.SiteZip.Length > 10)
                    {
                        return(Json(new { status_code = 4, status = "Invalid site address given" }));
                    }
                    if (form.NewSite.SiteOwnerName.Length == 0)
                    {
                        return(Json(new { status_code = 4, status = "No owner name given" }));
                    }
                    if (form.NewSite.SiteOwnerEmail.Length == 0 && form.NewSite.SiteOwnerPhone.Length == 0)
                    {
                        return(Json(new { status_code = 4, status = "Need at least one way to contact owner (none given)" }));
                    }

                    // Copy over any modified info if site is pre-approved
                    if (form.PreApproved)
                    {
                        Models.Site currentSite = context.Sites.FirstOrDefault(s => s.SiteId == form.NewSite.SiteId);
                        currentSite.Copy(form.NewSite, false);
                        context.SaveChanges();
                    }

                    // #5 - New activation row //
                    // Need to save these to database to generate any IDs (in case new installer/manager is used, and for new site/owner)
                    if (form.NewOwner.Id == 0)
                    {
                        context.Users.Add(form.NewOwner);
                        context.SaveChanges();
                    }

                    // Activation form needs to save what was submitted, not reflect current information
                    // therefore, activation table essentially acts as a merged version of multiple tables
                    form.ActivationInfo.SiteId           = form.NewSite.SiteId;
                    form.ActivationInfo.RoomName         = form.NewSite.SiteName;
                    form.ActivationInfo.SystemId         = system.Id;
                    form.ActivationInfo.StorePhone       = form.NewSite.StorePhone;
                    form.ActivationInfo.InstallerId      = form.SiteInstaller.Id;
                    form.ActivationInfo.InstallerFName   = form.SiteInstaller.FName;
                    form.ActivationInfo.InstallerLName   = form.SiteInstaller.LName;
                    form.ActivationInfo.InstallerEmail   = form.SiteInstaller.Email;
                    form.ActivationInfo.InstallerPhone   = form.SiteInstaller.Phone;
                    form.ActivationInfo.ManagerId        = form.SiteManager.Id;
                    form.ActivationInfo.ManagerFName     = form.SiteManager.FName;
                    form.ActivationInfo.ManagerLName     = form.SiteManager.LName;
                    form.ActivationInfo.ManagerEmail     = form.SiteManager.Email;
                    form.ActivationInfo.ManagerPhone     = form.SiteManager.Phone;
                    form.ActivationInfo.OwnerId          = form.NewOwner.Id;
                    form.ActivationInfo.OwnerFName       = form.NewOwner.FName;
                    form.ActivationInfo.OwnerLName       = form.NewOwner.LName;
                    form.ActivationInfo.OwnerEmail       = form.NewOwner.Email;
                    form.ActivationInfo.OwnerPhone       = form.NewOwner.Phone;
                    form.ActivationInfo.OwnerUserName    = form.NewOwner.UserName;
                    form.ActivationInfo.DistributorId    = distrib.Id;
                    form.ActivationInfo.DistributorFName = distrib.FName;
                    form.ActivationInfo.DistributorLName = distrib.LName;
                    form.ActivationInfo.SiteAddress      = form.NewSite.SiteAddress;
                    form.ActivationInfo.SiteCity         = form.NewSite.SiteCity;
                    form.ActivationInfo.SiteState        = form.NewSite.SiteState;
                    form.ActivationInfo.SiteCountry      = form.NewSite.SiteCountry;
                    form.ActivationInfo.SiteZip          = form.NewSite.SiteZip;
                    form.ActivationInfo.SubmissionDate   = DateTime.UtcNow;

                    // #6 - Create permission for new site
                    Models.Permission sitePermission = context.Permissions.AsNoTracking().FirstOrDefault(p => p.UserId == form.NewOwner.Id && p.SiteId == form.NewSite.SiteId);
                    if (sitePermission == null)
                    {
                        sitePermission = new Models.Permission {
                            Access = 1,
                            SiteId = form.NewSite.SiteId,
                            UserId = form.NewOwner.Id
                        };

                        context.Permissions.Add(sitePermission);
                    }

                    // Since these objects aren't being created through their respective controllers, need to manually log them
                    if (InstallerCreated)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateInstaller, authUser.Id, form.SiteInstaller.Id,
                                                    String.Format("{0} (id: {1}) created installer '{2}' (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.SiteInstaller.FName + " " + form.SiteInstaller.LName, form.SiteInstaller.Id));
                    }
                    if (ManagerCreated)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateManager, authUser.Id, form.SiteManager.Id,
                                                    String.Format("{0} (id: {1}) created manager '{2}' (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.SiteManager.FName + " " + form.SiteManager.LName, form.SiteManager.Id));
                    }
                    if (OwnerCreated)
                    {
                        Helpers.LogHelper.LogAction(Models.Log.ActionType.CreateUser, authUser.Id, form.NewOwner.Id,
                                                    String.Format("{0} (id: {1}) created user {2} (id: {3})", authUser.UserName, authUser.Id,
                                                                  form.NewOwner.UserName, form.NewOwner.Id));
                    }

                    // #7 - Save all final info to database (all information has been verified by this point) //

                    // check if form is pre-approved thru old RP
                    if (form.PreApproved)
                    {
                        form.ActivationInfo.ApprovedBy    = -1;
                        form.ActivationInfo.ApprovalNotes = "This site was pre-approved through old report portal.";
                    }

                    context.Activations.Add(form.ActivationInfo);
                    context.SaveChanges();

                    // #8 - Logging and alerting

                    // log
                    Helpers.LogHelper.LogAction(Models.Log.ActionType.ActivateSite, authUser.Id, form.NewSite.SiteId,
                                                String.Format("{0} (id: {1}) reactivated site '{2}' (site number: {3})", authUser.UserName, authUser.Id, form.NewSite.SiteName, form.NewSite.SiteNumber));

                    // send to Zapier to handle proper notification
                    var json = new {
                        SiteId = form.NewSite.SiteNumber,
                        form.NewSite.SiteName,
                        SystemName = system.Name,
                        form.ActivationInfo.SystemId,
                        form.NewSite.StorePhone,
                        form.SiteInstaller,
                        form.SiteManager,
                        NewOwner        = new { form.NewOwner.Active, form.NewOwner.Email, form.NewOwner.FName, form.NewOwner.LName, form.NewOwner.Phone, form.NewOwner.UserName },
                        SiteDistributor = new { distrib.Active, distrib.Email, distrib.FName, distrib.LName, distrib.Phone, distrib.UserName },
                        form.NewSite.SiteAddress,
                        form.NewSite.SiteCity,
                        form.NewSite.SiteState,
                        form.NewSite.SiteCountry,
                        form.NewSite.SiteZip,
                        SubmissionDate = form.ActivationInfo.SubmissionDate.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
                        form.ActivationInfo.ActivationNotes
                    };
                    Helpers.LogHelper.NotifyAction(Models.Log.ActionType.ActivateSite, json);
                }
                return(Json(new { status_code = 0 }));
            }
            else
            {
                return(Json(new { status_code = 5, status = "Unknown status code '" + type + "'" }));
            }
        }
Пример #21
0
        /// <summary>
        /// Import a Manager(2) component.
        /// </summary>
        /// <param name="compNode">The Manager component node being imported</param>
        /// <param name="destParent">Destination parent node that the new child is added to</param>
        /// <param name="newNode">The new Manager node</param>
        /// <returns>The new node</returns>
        private XmlNode ImportManager2(XmlNode compNode, XmlNode destParent, XmlNode newNode)
        {
            Models.Manager mymanager = new Models.Manager();

            // copy code here

            // import this object into the new xml document
            newNode = ImportObject(destParent, newNode, mymanager, XmlUtilities.NameAttr(compNode));

            // some Manager components have Memo children. For ApsimX the import
            // will just put them as the next sibling of the Manager rather
            // than as a child of the Manager.
            destParent = this.ImportManagerMemos(compNode, destParent);

            return newNode;
        }
Пример #22
0
        /// <summary>
        /// Import a Manager(1) component.
        /// </summary>
        /// <param name="compNode">The node being imported from the apsim file xml</param>
        /// <param name="destParent">The new parent xml node</param>
        /// <param name="newNode">The new component node</param>
        /// <returns>The new node</returns>
        private XmlNode ImportManager(XmlNode compNode, XmlNode destParent, XmlNode newNode)
        {
            Models.Manager mymanager = new Models.Manager();

            StringBuilder code = new StringBuilder();
            code.Append("using System;\nusing Models.Core;\nusing Models.PMF;\nusing Models.PMF.OldPlant;\nnamespace Models\n{\n");
            code.Append("\t[Serializable]\n");
            code.Append("\t[System.Xml.Serialization.XmlInclude(typeof(Model))]\n");
            code.Append("\tpublic class Script : Model\n");
            code.Append("\t{\n");
            code.Append("\t\t[Link] Clock Clock;\n");

            List<string> startofdayScripts = new List<string>();
            List<string> endofdayScripts = new List<string>();
            List<string> initScripts = new List<string>();
            List<string> unknownHandlerScripts = new List<string>();

            List<XmlNode> nodes = new List<XmlNode>();
            XmlUtilities.FindAllRecursivelyByType(compNode, "script", ref nodes);
            foreach (XmlNode script in nodes)
            {
                // find the event
                XmlNode eventNode = XmlUtilities.Find(script, "event");

                // find the text
                XmlNode textNode = XmlUtilities.Find(script, "text");
                if ((textNode != null) && (textNode.InnerText.Length > 0))
                {
                    if (eventNode.InnerText.ToLower() == "init")
                    {
                        initScripts.Add(textNode.InnerText);
                    }
                    else if (eventNode.InnerText.ToLower() == "start_of_day")
                    {
                        startofdayScripts.Add(textNode.InnerText);
                    }
                    else if (eventNode.InnerText.ToLower() == "end_of_day")
                    {
                        endofdayScripts.Add(textNode.InnerText);
                    }
                    else
                    {
                        // use the StartOfDay as a default when the event name is unknown
                        unknownHandlerScripts.Add("// ----- " + eventNode.InnerText + " ----- \n" + textNode.InnerText);
                    }
                }
            }

            // append all the scripts for each type
            if (initScripts.Count > 0)
            {
                code.Append("\t\t[EventSubscribe(\"Commencing\")]\n");
                code.Append("\t\tprivate void OnSimulationCommencing(object sender, EventArgs e)\n");
                code.Append("\t\t{\n");
                foreach (string scripttext in initScripts)
                {
                    code.Append("\t\t\t/*\n");
                    code.Append("\t\t\t\t" + scripttext + "\n");
                    code.Append("\t\t\t*/\n");
                }
                code.Append("\t\t}\n");
            }
            if (startofdayScripts.Count > 0)
            {
                code.Append("\t\t[EventSubscribe(\"DoManagement\")]\n");
                code.Append("\t\tprivate void OnDoManagement(object sender, EventArgs e)\n");
                code.Append("\t\t{\n");
                foreach (string scripttext in startofdayScripts)
                {
                    code.Append("\t\t\t/*\n");
                    code.Append("\t\t\t\t" + scripttext + "\n");
                    code.Append("\t\t\t*/\n");
                }
                code.Append("\t\t}\n");
            }
            if (endofdayScripts.Count > 0)
            {
                code.Append("\t\t[EventSubscribe(\"DoCalculations\")]\n");
                code.Append("\t\tprivate void OnDoCalculations(object sender, EventArgs e)\n");
                code.Append("\t\t{\n");
                foreach (string scripttext in endofdayScripts)
                {
                    code.Append("\t\t\t/*\n");
                    code.Append("\t\t\t\t" + scripttext + "\n");
                    code.Append("\t\t\t*/\n");
                }
                code.Append("\t\t}\n");
            }
            if (unknownHandlerScripts.Count > 0)
            {
                code.Append("\t\t//[EventSubscribe(\"unknown\")]\n");
                code.Append("\t\t//private void OnUnknown(object sender, EventArgs e)\n");
                code.Append("\t\t//{\n");
                foreach (string scripttext in unknownHandlerScripts)
                {
                    code.Append("\t\t\t/*\n");
                    code.Append("\t\t\t\t" + scripttext + "\n");
                    code.Append("\t\t\t*/\n");
                }
                code.Append("\t\t//}\n");
            }
            code.Append("\t}\n}\n");

            mymanager.Code = code.ToString();

            // import this object into the new xml document
            newNode = ImportObject(destParent, newNode, mymanager, XmlUtilities.NameAttr(compNode));

            // some Manager components have Memo children. For ApsimX the import
            // will just put them as the next sibling of the Manager rather
            // than as a child of the Manager.
            destParent = this.ImportManagerMemos(compNode, destParent);

            return newNode;
        }