/// <summary>
        /// Create a new <see cref="ConceptionDevisWS.Models.Model"/> for an existing <see cref="ConceptionDevisWS.Models.Range"/>.
        /// </summary>
        /// <param name="rangeId">the range's identity</param>
        /// <param name="newModel">the model to store</param>
        /// <param name="lang">the culture to create the model into (fr-FR or en-US)</param>
        /// <returns>the stored model</returns>
        /// <exception cref="HttpResponseException">In case something went wrong (when the given range does not exists or the model is null).</exception>
        public async static Task <Model> CreateNew(int rangeId, Model newModel, string lang)
        {
            if (newModel == null || newModel.Name == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }
            Range seekedRange = await _searchRange(rangeId, lang);

            newModel.Range = seekedRange;

            if (!await Validate(rangeId, newModel))
            {
                string errMsg = "Invalid content : The model ExternalFinishing or FrameQuality does not match its Range.";
                HttpResponseMessage responseMessage = new HttpResponseMessage {
                    StatusCode = HttpStatusCode.BadRequest, Content = new StringContent(errMsg)
                };
                throw new HttpResponseException(responseMessage);
            }

            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                List <Expression <Func <Range, object> > > modelsExpr = new List <Expression <Func <Range, object> > >();
                await ServiceHelper <Model> .LoadSingleNavigationProperty <Range>(newModel, ctx, m => m.Range, _getCtxRanges, modelsExpr, _setRange);

                ctx.Models.Add(newModel);
                await ctx.SaveChangesAsync();

                return(newModel);
            }
        }
Exemple #2
0
        public static Articles searchArticle(ModelsDBContext db, int id)
        {
            Articles article = new Articles();

            article = db.Article.Find(id);
            return(article);
        }
Exemple #3
0
        /// <summary>
        /// Update completely an <see cref="ConceptionDevisWS.Models.User"/>.
        /// </summary>
        /// <param name="id">the user's identity</param>
        /// <param name="newUser">the updated user</param>
        /// <param name="lang">the culture to update this user into (fr-FR or en-US)</param>
        /// <returns>the updated user</returns>
        /// <exception cref="HttpResponseException">In case something went wront (for example the requested user doesn't exist).</exception>
        public async static Task <User> UpdateUser(int id, User newUser, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                User seekedUser = await GetUser(id, lang);

                ctx.Entry(seekedUser).State = EntityState.Modified;
                ctx.Entry(seekedUser).Collection(u => u.Clients).EntityEntry.State = EntityState.Modified;

                await ServiceHelper <User> .UpdateNavigationProperty <Client>(newUser, seekedUser, ctx, _getClients, _getCtxClients);

                seekedUser.UpdateNonComposedPropertiesFrom(newUser);
                bool updateSuccess = false;
                do
                {
                    try
                    {
                        await ctx.SaveChangesAsync();

                        updateSuccess = true;
                    }
                    catch (DbUpdateConcurrencyException dbuce)
                    {
                        DbEntityEntry entry = dbuce.Entries.Single();
                        entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync());
                    }
                } while (!updateSuccess);
                return(seekedUser);
            }
        }
 /// <summary>
 /// Retrieve a <see cref="ConceptionDevisWS.Models.Client"/>'s <see cref="ConceptionDevisWS.Models.Project"/>.
 /// </summary>
 /// <param name="clientId">the client's identity</param>
 /// <param name="id">the project's identity</param>
 /// <param name="lang">the culture to get the project into (fr-FR or en-US)</param>
 /// <returns>a project</returns>
 /// <exception cref="HttpResponseException">In case either the client or project doesn't exist.</exception>
 public async static Task <Project> GetClientProject(int clientId, int id, string lang)
 {
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await _searchClientProject(clientId, id, lang));
     }
 }
 public AccountController(UserManager <User> userManager,
                          SignInManager <User> signInManager, ModelsDBContext context)
 {
     _signManager = signInManager;
     _userManager = userManager;
     _context     = context;
 }
        /// <summary>
        /// Internal use only, Update completely a given <see cref="ConceptionDevisWS.Models.Project"/> Including its <see cref="ConceptionDevisWS.Models.Client"/>.
        /// </summary>
        /// <param name="originalClientId">the original client's identity</param>
        /// <param name="newClientId">the new client's identity</param>
        /// <param name="id">the project's identity</param>
        /// <param name="newProject">the updated project (possibly with a different client) </param>
        /// <param name="lang">the culture to udpate the project into (fr-FR or en-US)</param>
        /// <returns>the updated project</returns>
        /// <exception cref="HttpResponseException">In case either the client or project doesn't exist.</exception>
        public async static Task <Project> SpecialUpdateProject(int originalClientId, int newClientId, int id, Project newProject, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                if (newProject.Client == null)
                {
                    newProject.Client = new Client();
                }
                newProject.Client.Id = newClientId;

                if (newProject == null || newProject.Name == null)
                {
                    throw new HttpResponseException(HttpStatusCode.BadRequest);
                }

                Project seekedProject = await _searchClientProject(originalClientId, id, lang);

                ctx.Entry(seekedProject).State = EntityState.Modified;
                List <Expression <Func <Client, object> > > usersExpr = new List <Expression <Func <Client, object> > > ();
                await ServiceHelper <Project> .SetSingleNavigationProperty <Client>(newProject, seekedProject, ctx, p => p.Client, _getCtxClients, usersExpr, _setClient);

                seekedProject.UpdateNonComposedPropertiesFrom(newProject);
                await ctx.SaveChangesAsync();

                return(seekedProject);
            }
        }
        /// <summary>
        /// Update completely the given <see cref="ConceptionDevisWS.Models.Range"/>.
        /// </summary>
        /// <param name="id">the range's identity</param>
        /// <param name="newRange">the updated range to store</param>
        /// <param name="lang">the culture to update this range into (fr-FR or en-US)</param>
        /// <returns>the updated range</returns>
        /// <exception cref="HttpResponseException">In case something went wrong (for example, when the requested range does not exists).</exception>
        public async static Task <Range> UpdateRange(int id, Range newRange, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Range seekedRange = await GetRange(id, lang);

                ctx.Entry(seekedRange).State = EntityState.Modified;
                ctx.Entry(seekedRange).Collection(r => r.Models).EntityEntry.State = EntityState.Modified;

                await ServiceHelper <Range> .UpdateNavigationProperty <Model>(newRange, seekedRange, ctx, _getModels, _getCtxModels);

                seekedRange.UpdateNonComposedPropertiesFrom(newRange);
                bool updateSuccess = false;

                do
                {
                    try
                    {
                        await ctx.SaveChangesAsync();

                        updateSuccess = true;
                    }
                    catch (DbUpdateConcurrencyException dbuce)
                    {
                        DbEntityEntry entry = dbuce.Entries.Single();
                        entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync());
                    }
                } while (!updateSuccess);
                return(seekedRange);
            }
        }
 public async static Task <Client> GetMaderaClient()
 {
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Clients.FirstAsync(c => c.FirstName == "Madera" && c.ZipCode == -1));
     }
 }
        public async static Task <Product> CreateNew(Product newProduct, string lang)
        {
            if (newProduct == null || newProduct.Name == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }
            CulturalEnumStringConverter.Culture = new CultureInfo(lang);
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                if (newProduct.Graphic != null && newProduct.Graphic.Length > 4000)
                {
                    newProduct.Graphic = "";
                }

                List <Expression <Func <Model, object> > > rangesExpr = new List <Expression <Func <Model, object> > > {
                    m => m.Range,
                    m => m.Modules.Select(mod => mod.Components)
                };
                await ServiceHelper <Product> .LoadSingleNavigationProperty <Model>(newProduct, ctx, p => p.Model, _getCtxModels, rangesExpr, _setModel);

                ctx.Products.Add(newProduct);
                await ctx.SaveChangesAsync();

                return(newProduct);
            }
        }
Exemple #10
0
        public static List <Articles> showIndexModel(ModelsDBContext db, string context)
        {
            List <Articles> articles = new List <Articles>();

            articles = db.Article.Where(p => p.Areas.Equals(context)).ToList();
            return(articles);
        }
        /// <summary>
        /// Update a given module
        ///
        /// only components associations can be updated
        /// </summary>
        /// <param name="id">the module's identity</param>
        /// <param name="newModule">the updated module to store</param>
        /// <param name="lang">the culture to update the module into (fr-FR or en-US)</param>
        /// <returns>the updated module</returns>
        public async static Task <Module> UpdateModule(int id, Module newModule, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Module seekedModule = await GetModule(id, lang);

                ctx.Entry(seekedModule).State = EntityState.Modified;
                ctx.Entry(seekedModule).Collection(mod => mod.Components).EntityEntry.State = EntityState.Modified;

                await ServiceHelper <Module> .UpdateNavigationProperty <Component>(newModule, seekedModule, ctx, _getComposants, _getContextComponents);

                seekedModule.UpdateNonComposedPropertiesFrom(newModule);
                bool updateSuccess = false;
                do
                {
                    try
                    {
                        int affectedRows = await ctx.SaveChangesAsync();

                        updateSuccess = true;
                    } catch (DbUpdateConcurrencyException dbuce)
                    {
                        DbEntityEntry entry = dbuce.Entries.Single();
                        entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync());
                    }
                } while (!updateSuccess);

                return(seekedModule);
            }
        }
        /// <summary>
        /// Update completely the given <see cref="ConceptionDevisWS.Models.Client"/>.
        /// </summary>
        /// <param name="id">the client's identity</param>
        /// <param name="newClient">the updated client to store</param>
        /// <returns>the updated client</returns>
        /// <exception cref="HttpResponseException">In case something went wrong (for example, when the requested client does not exists).</exception>
        public async static Task <Client> UpdateClient(int id, Client newClient)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                bool   updateSuccess = false;
                Client seekedClient  = await GetClient(id);

                ctx.Entry(seekedClient).State = EntityState.Modified;
                ctx.Entry(seekedClient).Collection(c => c.Projects).EntityEntry.State = EntityState.Modified;
                ctx.Entry(seekedClient).Reference(c => c.User).EntityEntry.State      = EntityState.Modified;


                await ServiceHelper <Client> .UpdateNavigationProperty <Project>(newClient, seekedClient, ctx, _getProjects, _getCtxProjects);


                seekedClient.UpdateNonComposedPropertiesFrom(newClient);
                do
                {
                    try
                    {
                        await ctx.SaveChangesAsync();

                        updateSuccess = true;
                    } catch (DbUpdateConcurrencyException dbuce)
                    {
                        DbEntityEntry entry = dbuce.Entries.Single();
                        entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync());
                    }
                } while (!updateSuccess);
                return(seekedClient);
            }
        }
 /// <summary>
 /// Retrieve all existing <see cref="ConceptionDevisWS.Models.Module"/>s with their <see cref="ConceptionDevisWS.Models.Component"/>s.
 /// </summary>
 /// <param name="lang">the culture to get the modules into (fr-FR or en-US)</param>
 /// <returns>a list of modules</returns>
 public async static Task <IEnumerable <Module> > GetAllModules(string lang)
 {
     CulturalEnumStringConverter.Culture = new CultureInfo(lang);
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Modules.Include(m => m.Components).ToListAsync());
     }
 }
 public async static Task <List <Product> > GetAllProducts(string lang)
 {
     CulturalEnumStringConverter.Culture = new CultureInfo(lang);
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Products.ToListAsync());
     }
 }
Exemple #15
0
 /// <summary>
 /// Retrieve all existing <see cref="ConceptionDevisWS.Models.User"/>s.
 /// </summary>
 /// <param name="lang">the culture to get users into (fr-FR or en-US)</param>
 /// <returns>a list of users</returns>
 public async static Task <IEnumerable <User> > GetAllUsers(string lang)
 {
     CulturalEnumStringConverter.Culture = new CultureInfo(lang);
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Users.Include(u => u.Clients).ToListAsync <User>());
     }
 }
Exemple #16
0
 private async static Task <User> _findUser(string login)
 {
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Users.Include(u => u.Clients.Select(c => c.Projects.Select(proj => proj.Products
                                                                                     .Select(prod => prod.Model))))
                .FirstOrDefaultAsync(u => u.Login.Equals(login, StringComparison.InvariantCultureIgnoreCase)));
     }
 }
 /// <summary>
 /// Retrieve all existing <see cref="ConceptionDevisWS.Models.Client"/>s with their <see cref="ConceptionDevisWS.Models.Project"/>s.
 /// </summary>
 /// <returns>a list of clients</returns>
 public async static Task <IEnumerable <Client> > GetAllClients()
 {
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Clients.Include(c => c.Projects)
                .Where(c => c.Id != 1)
                .ToListAsync <Client>());
     }
 }
Exemple #18
0
        private async static Task <RevokedToken> _findToken(string login)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                RevokedToken revokedToken = await ctx.RevokedTokens.FirstOrDefaultAsync(t => t.Name == login);

                return(revokedToken);
            }
        }
        /// <summary>
        /// Retrieve a <see cref="ConceptionDevisWS.Models.Client"/>'s <see cref="ConceptionDevisWS.Models.Project"/>s.
        /// </summary>
        /// <param name="clientId">the client's identity</param>
        /// <param name="lang">the culture to get projects into (fr-FR or en-US)</param>
        /// <returns>a list of projects</returns>
        /// <exception cref="HttpResponseException">In case something went wrong (for example when the given client doesn't exist).</exception>
        public async static Task <IEnumerable <Project> > GetClientProjects(int clientId, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Client seekedClient = await _searchClient(clientId, lang);

                return(seekedClient.Projects);
            }
        }
        /// <summary>
        /// Retrieve a given <see cref="ConceptionDevisWS.Models.Range"/>'s <see cref="ConceptionDevisWS.Models.Model"/>s.
        /// </summary>
        /// <param name="rangeId">the range's identity</param>
        /// <param name="lang">the culture to get the models into (fr-FR or en-US)</param>
        /// <returns>a list of models</returns>
        /// <exception cref="HttpResponseException">In case something went wrong (for example, when the given range does not exists).</exception>
        public async static Task <List <Model> > GetRangeModels(int rangeId, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Range seekedRange = await _searchRange(rangeId, lang);

                return(seekedRange.Models);
            }
        }
        /// <summary>
        /// Remove the given module from storage.
        /// </summary>
        /// <param name="id">the module's identity</param>
        /// <exception cref="HttpResponseException">In case something went wront (for example, the given module is not found).</exception>
        public async static Task RemoveModule(int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Module module = await GetModule(id, "fr-FR");

                ctx.Entry(module).State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }
        /// <summary>
        /// Remove the given <see cref="ConceptionDevisWS.Models.Project"/> from storage.
        /// </summary>
        /// <param name="clientId">the client's identity</param>
        /// <param name="id">the project's identity</param>
        /// <exception cref="HttpResponseException">In case either the client or project doesn't exist.</exception>
        public async static Task RemoveProject(int clientId, int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Project seekedProject = await _searchClientProject(clientId, id, "fr-FR");

                ctx.Entry(seekedProject).State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }
        /// <summary>
        /// Remove the given <see cref="ConceptionDevisWS.Models.Model"/> from storage.
        /// </summary>
        /// <param name="rangeId">the range'es identity</param>
        /// <param name="id">the model's identity</param>
        /// <exception cref="HttpResponseException">In case something went wrong (for example, when the requested range or model does not exists).</exception>
        public async static Task RemoveModel(int rangeId, int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Model seekedModel = await _searchRangeModel(rangeId, id, "fr-FR");

                ctx.Entry(seekedModel).State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }
Exemple #24
0
        /// <summary>
        /// Remove an <see cref="ConceptionDevisWS.Models.User"/>.
        /// </summary>
        /// <param name="id">the user's identity</param>
        /// <exception cref="HttpResponseException">In case something went wront (for example the requested user doesn't exist).</exception>
        public async static Task RemoveUser(int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                User seekedUser = await GetUser(id, "fr-FR");

                ctx.Entry(seekedUser).State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }
Exemple #25
0
 /// <summary>
 /// Logs a <see cref="ConceptionDevisWS.Models.User"/> out.
 /// </summary>
 /// <param name="principal">the user's security identity</param>
 /// <remarks>
 /// This is not fully \htmlonly <accronym title="REpresentational State Transfer">REST</accronym>\endhtmlonly compliant, but it's usual.
 /// </remarks>
 public async static Task Logout(IPrincipal principal)
 {
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         RevokedToken revokedToken = new RevokedToken {
             Name = principal.Identity.Name
         };
         ctx.RevokedTokens.Add(revokedToken);
         await ctx.SaveChangesAsync();
     }
 }
 /// <summary>
 /// Retrieve all existing <see cref="ConceptionDevisWS.Models.Range"/>s with their <see cref="ConceptionDevisWS.Models.Model"/>s.
 /// </summary>
 /// <param name="lang">the language to get ranges for (fr-FR or en-US)</param>
 /// <returns>a list of ranges</returns>
 public async static Task <IEnumerable <Range> > GetAllRanges(string lang)
 {
     CulturalEnumStringConverter.Culture = new CultureInfo(lang);
     using (ModelsDBContext ctx = new ModelsDBContext())
     {
         return(await ctx.Ranges.Include(
                    r => r.Models)
                .Include(r => r.Models.Select(m => m.Modules.Select(mod => mod.Components)))
                .ToListAsync <Range>());
     }
 }
        /// <summary>
        /// Remove the given <see cref="ConceptionDevisWS.Models.Range"/> and its <see cref="ConceptionDevisWS.Models.Model"/>s from storage.
        /// </summary>
        /// <param name="id">the range's identity</param>
        /// <exception cref="HttpResponseException">In case something went wrong (for example, when the requested range does not exists).</exception>
        public async static Task RemoveRange(int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Range seekedRange = await GetRange(id, "fr-FR");

                ctx.Entry(seekedRange).State = EntityState.Deleted;
                ctx.Entry(seekedRange).Collection(r => r.Models).EntityEntry.State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }
        /// <summary>
        /// Update completely a given <see cref="ConceptionDevisWS.Models.Project"/>.
        /// </summary>
        /// <param name="clientId">the client's identity</param>
        /// <param name="id">the project's identity</param>
        /// <param name="newProject">the updated project </param>
        /// <param name="lang">the culture to update the project into (fr-FR or en-US)</param>
        /// <returns>the updated project</returns>
        /// <exception cref="HttpResponseException">In case either the client or project doesn't exist.</exception>
        public async static Task <Project> UpdateProject(int clientId, int id, Project newProject, string lang)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                if (newProject == null || newProject.Name == null)
                {
                    throw new HttpResponseException(HttpStatusCode.BadRequest);
                }

                if (newProject.Client == null)
                {
                    newProject.Client = new Client();
                }
                newProject.Client.Id = clientId;

                Project seekedProject = await _searchClientProject(clientId, id, lang);

                ctx.Entry(seekedProject).State = EntityState.Modified;
                ctx.Entry(seekedProject).Collection(p => p.Products).EntityEntry.State = EntityState.Modified;
                List <Expression <Func <Client, object> > > clientInfosExpr = new List <Expression <Func <Client, object> > > {
                };
                await ServiceHelper <Project> .SetSingleNavigationProperty <Client>(newProject, seekedProject, ctx, p => p.Client, _getCtxClients, clientInfosExpr, _setClient);

                await ServiceHelper <Project> .UpdateNavigationProperty <Product>(newProject, seekedProject, ctx, _getProducts, _getCtxProducts);

                foreach (Product newProduct in newProject.Products)
                {
                    Product currentProduct = seekedProject.Products.Find(prod => prod.Id == newProduct.Id);
                    if (currentProduct != null)
                    {
                        currentProduct.UpdateNonComposableProperties(newProduct);
                    }
                }

                seekedProject.UpdateNonComposedPropertiesFrom(newProject);
                bool updateSuccess = false;
                do
                {
                    try
                    {
                        await ctx.SaveChangesAsync();

                        updateSuccess = true;
                    } catch (DbUpdateConcurrencyException dbuce)
                    {
                        DbEntityEntry entry = dbuce.Entries.Single();
                        entry.OriginalValues.SetValues(await entry.GetDatabaseValuesAsync());
                    }
                } while (!updateSuccess);
                return(seekedProject);
            }
        }
Exemple #29
0
        private async static Task _removeLogout(string login)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                RevokedToken seekedToken = await _findToken(login);

                if (seekedToken != null)
                {
                    ctx.Entry(seekedToken).State = EntityState.Deleted;
                    await ctx.SaveChangesAsync();
                }
            }
        }
        public async static Task RemoveProduct(int id)
        {
            using (ModelsDBContext ctx = new ModelsDBContext())
            {
                Product seekedProduct = await GetProduct(id, "fr-FR");

                ctx.Entry(seekedProduct).State = EntityState.Deleted;
                ctx.Entry(seekedProduct).Reference(p => p.Model).EntityEntry.State = EntityState.Unchanged;
                // deletes the relation between the removed product and its model
                ctx.Entry(seekedProduct).Collection(p => new Model[] { p.Model }).EntityEntry.State = EntityState.Deleted;
                await ctx.SaveChangesAsync();
            }
        }