public ActionResult EditResourceStructure(ResourceStructureModel model)
        {
            using (ResourceStructureManager rsManager = new ResourceStructureManager())
            {
                //check name
                ResourceStructure temp = rsManager.GetResourceStructureByName(StringHelper.CutSpaces(model.Name));
                if (temp != null && temp.Id != model.Id)
                {
                    ModelState.AddModelError("NameExist", "Name already exist");
                }


                ResourceStructure rs = rsManager.GetResourceStructureById(model.Id);
                if (rs == null)
                {
                    ModelState.AddModelError("Errors", "ResourceStructure does not exist.");
                }

                if (rs.ResourceAttributeUsages.Select(a => a.ResourceStructureAttribute).ToList().Count() < 1)
                {
                    ModelState.AddModelError("Errors", "Resource Structure has no attributes.");
                }

                if (rs.Parent != null)
                {
                    if (rs.Parent.Id == rs.Id)
                    {
                        ModelState.AddModelError("Errors", "Parent resource structure can not be themselves.");
                    }
                }



                if (ModelState.IsValid)
                {
                    rs.Name        = model.Name;
                    rs.Description = model.Description;

                    rsManager.Update(rs);

                    return(RedirectToAction("ResourceStructure"));
                }
                else
                {
                    return(View("_editResourceStructure", model));
                }
            }
        }
        public ActionResult Create(CreateResourceStructureModel model)
        {
            using (ResourceStructureManager rsManager = new ResourceStructureManager())
                using (var pManager = new EntityPermissionManager())
                    using (var entityTypeManager = new EntityManager())
                        using (UserManager userManager = new UserManager())
                        {
                            //check name
                            ResourceStructure temp = rsManager.GetResourceStructureByName(StringHelper.CutSpaces(model.Name));
                            if (temp != null)
                            {
                                ModelState.AddModelError("NameExist", "Name already exist");
                            }

                            if (ModelState.IsValid)
                            {
                                ResourceStructure rS = rsManager.Create(model.Name, model.Description, null, null);

                                //Start -> add security ----------------------------------------
                                var userTask = userManager.FindByNameAsync(HttpContext.User.Identity.Name);
                                userTask.Wait();
                                var user = userTask.Result;

                                Entity entityType = entityTypeManager.FindByName("ResourceStructure");

                                //31 is the sum from all rights:  Read = 1, Write = 4, Delete = 8, Grant = 16
                                int rights = (int)RightType.Read + (int)RightType.Write + (int)RightType.Delete + (int)RightType.Grant;
                                pManager.Create(user, entityType, rS.Id, rights);


                                //End -> add security ------------------------------------------


                                ResourceStructureModel rSmodel = new ResourceStructureModel(rS);
                                rSmodel.FirstCreated = true;
                                return(View("_editResourceStructure", rSmodel));
                            }

                            else
                            {
                                return(View("_createResourceStructure", model));
                            }
                        }
        }
        public ActionResult AddResourceAttributeUsages(string rsId, string rsaIds)
        {
            using (ResourceStructureManager rsManger = new ResourceStructureManager())
                using (ResourceStructureAttributeManager rsaManager = new ResourceStructureAttributeManager())
                {
                    ResourceStructure rs = rsManger.GetResourceStructureById(Convert.ToInt64(rsId));

                    string message = "";
                    if (rs != null)
                    {
                        if (!string.IsNullOrEmpty(rsaIds))
                        {
                            var selectedRsa = rsaIds.Split(',').Select(n => int.Parse(n)).ToList();
                            foreach (int i in selectedRsa)
                            {
                                ResourceStructureAttribute rsa = rsaManager.GetResourceStructureAttributesById(i);
                                if (!IsAttributeInStructure(rs, rsa))
                                {
                                    rsaManager.CreateResourceAttributeUsage(rsa, rs, false, false);
                                }
                                else
                                {
                                    message += "Resource Structure Attribute " + rsa.Name + "is allready in the structure.";
                                }
                            }
                        }

                        ResourceStructureModel model = new ResourceStructureModel(rs);
                        model.Message = message;
                        return(View("_editResourceStructure", model));
                    }
                    else
                    {
                        //rs don't exsits ??
                        return(View("_editResourceStructure"));
                    }
                }
        }
        public ActionResult AddResourceAttributeUsage(long rsId, long rsaId)
        {
            using (ResourceStructureManager rsManger = new ResourceStructureManager())
                using (ResourceStructureAttributeManager rsaManager = new ResourceStructureAttributeManager())
                {
                    ResourceStructure          rs  = rsManger.GetResourceStructureById(rsId);
                    ResourceStructureAttribute rsa = rsaManager.GetResourceStructureAttributesById(rsaId);
                    string message = "";

                    if (!IsAttributeInStructure(rs, rsa))
                    {
                        rsaManager.CreateResourceAttributeUsage(rsa, rs, false, false);
                    }
                    else
                    {
                        message += "Resource Structure Attribute " + rsa.Name + "is allready in the structure.";
                    }

                    ResourceStructureModel model = new ResourceStructureModel(rs);
                    model.Message = message;
                    return(View("_editResourceStructure", model));
                }
        }
        public EditResourceModel(R.SingleResource resource, List <ResourceStructureAttributeValueModel> valuesModel, List <TextValueModel> textValues, List <FileValueModel> fileValues)
        {
            Id                = resource.Id;
            Name              = resource.Name;
            Description       = resource.Description;
            Quantity          = resource.Quantity;
            ResourceStructure = new ResourceStructureModel(resource.ResourceStructure);
            ResourceStructureAttributeValues = valuesModel;
            ResourceStructures = new List <ResourceStructureModel>();
            Color                 = resource.Color;
            WithActivity          = resource.WithActivity;
            ResourceConstraints   = new List <Resource.ResourceConstraintModel>();
            DependencyConstraints = new List <DependencyConstraintModel>();
            BlockingConstraints   = new List <BlockingConstraintModel>();
            QuantityConstraints   = new List <QuantityConstraintModel>();
            //TextValues = new List<TextValueModel>();
            //FileValues = new List<FileValueModel>();

            TextValues = textValues;
            FileValues = fileValues;

            //BookingTimeGranularity
            Duration  = new TimeDuration();
            Duration  = resource.Duration.Self;
            TimeUnits = Enum.GetValues(typeof(SystemDefinedUnit)).Cast <SystemDefinedUnit>().ToList();

            using (ResourceStructureManager manager = new ResourceStructureManager())
            {
                foreach (RS.ResourceStructure rs in manager.GetAllResourceStructures().ToList())
                {
                    ResourceStructures.Add(new ResourceStructureModel(rs));
                }
            }
            //BookingTimeGranularity = resource.BookingTimeGranularity;

            ResourceConstraintModel = new ResourceConstraintModel();

            if (resource.ResourceConstraints != null)
            {
                foreach (ResourceConstraint c in resource.ResourceConstraints)
                {
                    if (c is DependencyConstraint)
                    {
                        DependencyConstraintModel dcModel = new DependencyConstraintModel((DependencyConstraint)c);
                        dcModel.Id    = c.Id;
                        dcModel.Index = c.Index;
                        DependencyConstraints.Add(dcModel);
                        ResourceConstraints.Add(dcModel);
                    }

                    if (c is BlockingConstraint)
                    {
                        BlockingConstraintModel bcModel = new BlockingConstraintModel((BlockingConstraint)c);
                        bcModel.Id    = c.Id;
                        bcModel.Index = c.Index;
                        BlockingConstraints.Add(bcModel);
                        ResourceConstraints.Add(bcModel);
                    }

                    if (c is QuantityConstraint)
                    {
                        QuantityConstraintModel qcModel = new QuantityConstraintModel((QuantityConstraint)c);
                        qcModel.Id    = c.Id;
                        qcModel.Index = c.Index;
                        QuantityConstraints.Add(qcModel);
                        ResourceConstraints.Add(qcModel);
                    }
                }
                //Sort by Index
                ResourceConstraints = ResourceConstraints.OrderBy(x => x.Index).ToList();
            }
        }