Beispiel #1
0
        public async Task <CommWrap <string> > ConfirmOrder(bool validate, string orderGuid)
        {
            CommWrap <string> responseReturn    = null;
            CommWrap <string> validationMessage = new CommWrap <string> {
                Content = orderGuid
            };

            if (validate == true)
            {
                validationMessage.RequestStatus = 1;
            }
            else
            {
                validationMessage.RequestStatus = 0;
            }

            HttpResponseMessage response = await this.client.PostAsJsonAsync("api/Order/Confirm", validationMessage);

            if (response.IsSuccessStatusCode)
            {
                responseReturn = await response.Content.ReadAsAsync <CommWrap <string> >();
            }

            return(responseReturn);
        }
Beispiel #2
0
        public async Task <CommWrap <Menu> > Get()
        {
            ICollection <Sandwich> sand = _context.Sandwiches
                                          .Where(q => q.Available == true)
                                          .ToList();
            ICollection <Vegetable> veg = _context.Vegetables
                                          .Where(q => q.Available == true)
                                          .ToList();

            List <Menu> menus = _context.Menus.ToList();

            CommWrap <Menu> commRes = null;

            if (menus.Count == 0)
            {
                commRes = new CommWrap <Menu> {
                    RequestStatus = 0
                };
            }
            else
            {
                Menu menu = new Menu {
                    Id = menus[0].Id, VegetablesPrice = menus[0].VegetablesPrice, Sandwiches = sand, Vegetables = veg
                };
                commRes = new CommWrap <Menu> {
                    RequestStatus = 1, Content = menu
                };
            }

            return(commRes);
        }
Beispiel #3
0
        public async Task <IActionResult> Index(RegisterViewModel model, string returnUrl = null)
        {
            ViewData["ReturnUrl"] = returnUrl;
            if (await _activationInformant.IsRegistered())
            {
                return(RedirectToLocal(returnUrl));
            }

            if (ModelState.IsValid)
            {
                var company = new Company {
                    Name = model.CompanyName, NbEmployees = model.NumberOfEmployee, Mail = model.Email, Address = model.AddressNumber + " " + model.AddressStreet + ", " + model.AddressBox + ", " + model.AddressPostalCode + ", " + model.AddressCity + ", " + model.AddressCountry, Status = false
                };
                var manager = new Employee {
                    UserName = model.UserName, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Wallet = (decimal)0.00, Company = company
                };

                RemoteCall         remoteCaller    = RemoteCall.GetInstance();
                CommWrap <Company> responseCompany = await remoteCaller.RegisterCompany(company);

                if (responseCompany.RequestStatus == 1)
                {
                    company.Id      = responseCompany.Content.Id;
                    company.ChkCode = responseCompany.Content.ChkCode;
                    var result = await _userManager.CreateAsync(manager, model.Password);

                    if (result.Succeeded)
                    {
                        IdentityRole role = new IdentityRole {
                            Name = "Responsable", NormalizedName = "RESPONSABLE"
                        };
                        bool roleExist = await _roleManager.RoleExistsAsync(role.NormalizedName);

                        if (!roleExist)
                        {
                            IdentityResult roleResult = await _roleManager.CreateAsync(role);

                            if (roleResult.Succeeded)
                            {
                                await _userManager.AddToRoleAsync(manager, role.Name);
                            }
                        }
                        else
                        {
                            await _userManager.AddToRoleAsync(manager, role.Name);
                        }

                        return(RedirectToLocal(returnUrl));
                    }
                    AddErrors(result);
                }
                AddErrors("Registration failed on the Snack side");
            }
            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Beispiel #4
0
        //Permet de recuperer une cruditée par son id
        public async Task <CommWrap <Vegetable> > GetVegetableById(int id)
        {
            CommWrap <Vegetable> responseReturn = null;

            HttpResponseMessage response = await this.client.GetAsync("api/Vegetable/" + id);

            if (response.IsSuccessStatusCode)
            {
                responseReturn = await response.Content.ReadAsAsync <CommWrap <Vegetable> >();
            }

            return(responseReturn);
        }
Beispiel #5
0
        public async Task <CommWrap <Menu> > GetMenu()
        {
            CommWrap <Menu> responseReturn = null;

            HttpResponseMessage response = await this.client.GetAsync("api/Menu");

            if (response.IsSuccessStatusCode)
            {
                responseReturn = await response.Content.ReadAsAsync <CommWrap <Menu> >();
            }

            return(responseReturn);
        }
Beispiel #6
0
        public async Task <CommWrap <Company> > RegisterCompany(Company company)
        {
            CommWrap <Company> responseReturn = null;

            HttpResponseMessage response = await this.client.PostAsJsonAsync("api/RegisterCompany", company);

            if (response.IsSuccessStatusCode)
            {
                responseReturn = await response.Content.ReadAsAsync <CommWrap <Company> >();
            }

            return(responseReturn);
        }
Beispiel #7
0
        public async Task <CommWrap <OrderGuid_Com> > SendOrder(Order orderToSend, Company company)
        {
            CommWrap <OrderGuid_Com> responseReturn = null;
            OrderCompany_Com         orderCompany   = new OrderCompany_Com {
                Order_com = orderToSend, Company_com = company
            };

            HttpResponseMessage response = await this.client.PostAsJsonAsync("api/Order", orderCompany);

            if (response.IsSuccessStatusCode)
            {
                responseReturn = await response.Content.ReadAsAsync <CommWrap <OrderGuid_Com> >();
            }

            return(responseReturn);
        }
        public async Task <CommWrap <Company> > Post([FromBody] Company newCompany)
        {
            CommWrap <Company> response = new CommWrap <Company> {
                RequestStatus = 0, Content = newCompany
            };

            try {
                newCompany.Status  = true;
                newCompany.ChkCode = RandomString(10);
                _context.Add(newCompany);
                await _context.SaveChangesAsync();

                response = new CommWrap <Company> {
                    RequestStatus = 1, Content = newCompany
                };
            }
            catch (Exception) {
            }

            return(response);
        }
Beispiel #9
0
        public async Task <IActionResult> Index()
        {
            string id = _userManager.GetUserId(User);

            if (id == null)
            {
                return(NotFound());
            }

            //Permet de recuperer un employer ainsi que toutes c'est commandes avec toutes les info ( sandwich , cruditees).
            Employee employee = await _context.Employees
                                .Include(emp => emp.Orders)
                                .ThenInclude(order => order.OrderLines)
                                .ThenInclude(odLin => odLin.Sandwich)
                                .Include(emp => emp.Orders)
                                .ThenInclude(order => order.OrderLines)
                                .ThenInclude(odLin => odLin.OrderLineVegetables)
                                .ThenInclude(odLinVeg => odLinVeg.Vegetable)
                                .SingleOrDefaultAsync(m => m.Id == id);

            if (employee == null)
            {
                return(NotFound());
            }

            //Permet de supprimer les commande dont l'on a pas besoin pour l'affichage des commande du jour ou du lendemain si apres  10h
            DateTime now = DateTime.Now;
            DateTime delivreryDate;

            if (now.Hour >= 10)
            {
                delivreryDate = DateTime.Today.AddDays(1.0);
            }
            else
            {
                delivreryDate = DateTime.Today;
            }
            employee.Orders = employee.Orders.Where(q => q.DateOfDelivery.Equals(delivreryDate)).ToList();

            //Permet de recupere les infos relatives aux sandwich et cruditées des commandes
            foreach (Order order in employee.Orders)
            {
                foreach (OrderLine orderline in order.OrderLines)
                {
                    CommWrap <Sandwich> CommSan = await RemoteCall.GetInstance().GetSandwichById(orderline.Sandwich.Id);

                    if (CommSan.RequestStatus == 1)
                    {
                        orderline.Sandwich = CommSan.Content;
                    }
                    else
                    {
                        return(NotFound());
                    }
                    foreach (OrderLineVegetable orderLineVeg in orderline.OrderLineVegetables)
                    {
                        CommWrap <Vegetable> CommVeg = await RemoteCall.GetInstance().GetVegetableById(orderLineVeg.Vegetable.Id);

                        if (CommVeg.RequestStatus == 1)
                        {
                            orderLineVeg.Vegetable = CommVeg.Content;
                        }
                        else
                        {
                            return(NotFound());
                        }
                    }
                }
            }
            return(View(employee));
        }
        public async Task <IActionResult> Index()
        {
            RemoteCall      remoteCaller = RemoteCall.GetInstance();
            CommWrap <Menu> responseMenu = await remoteCaller.GetMenu();

            MenuViewModel menuViewModel = new MenuViewModel();

            if (responseMenu.RequestStatus == 1)
            {
                Menu menu = responseMenu.Content;

                menuViewModel.ListSandwiches   = menu.Sandwiches.ToList();
                menuViewModel.SelectedSandwich = null;

                menuViewModel.VegetablesPrice = menu.VegetablesPrice;
                List <VegWithChkBxViewModel> listVegWithChkBxViewModels = new List <VegWithChkBxViewModel>();
                foreach (Vegetable veg in menu.Vegetables)
                {
                    VegWithChkBxViewModel vegWithChkBxViewModel = new VegWithChkBxViewModel {
                        Checked = false, Id = veg.Id, Name = veg.Name, Description = veg.Description
                    };
                    listVegWithChkBxViewModels.Add(vegWithChkBxViewModel);
                }
                menuViewModel.ListVegetablesWithCheckBoxes = listVegWithChkBxViewModels;

                return(View("Index", menuViewModel));
            }
            AddErrors("Le menu n'a pu être chargé correctement");

            return(View("Index", menuViewModel));

            /*string id = _userManager.GetUserId(User);
             *
             * if (id == null)
             * {
             *  return NotFound();
             * }
             *
             * var employee = await _context.Employees
             *                  .Include(emp => emp.Orders)
             *                      .ThenInclude(order => order.OrderLines)
             *                          .ThenInclude(orderLine => orderLine.Sandwich)
             *                  .Include(emp => emp.Orders)
             *                      .ThenInclude(order => order.OrderLines)
             *                          .ThenInclude(orderLine => orderLine.OrderLineVegetables)
             *                              .ThenInclude(orderLineVegetable => orderLineVegetable.Vegetable)
             *                  .SingleOrDefaultAsync(m => m.Id == id);
             *
             */

            //string id = _userManager.GetUserId(User);

            //Employee emp = _context.Employees.Where(e => e.Id == id).FirstOrDefault();

            //Order order = GetCurrentOrder(emp);

            //string serializable = HttpContext.Session.GetString("cart");

            //Order order = JsonConvert.DeserializeObject<Order>(serializable);

            //return View(order.OrderLines.ToList());
        }
        public async Task <IActionResult> ValidateSessionCart()
        {
            Order cartOrder = ShoppingCart.GetCartContent(User, HttpContext);

            Company companyDb = _context.Companies.First();

            //Si la company n'est visible en DB, c'est qui il y a un gros problème.
            if (companyDb == null)
            {
                return(NotFound());//Ou page d'erreur
            }

            CommWrap <OrderGuid_Com> comm = await RemoteCall.GetInstance().SendOrder(cartOrder, companyDb);

            if (comm.RequestStatus == 0)
            {
                //Si une erreur est survenue sur le serveur : company pas trouvée, erreur Db, ...
                return(NotFound());//Or pas d'erreur
            }
            Order  orderUpdatedByServ = comm.Content.Order_com;
            string orderUpdatedGuid   = comm.Content.Guid_com;

            string employeeId = _userManager.GetUserId(User);
            var    employeeDb = await _context.Employees.SingleOrDefaultAsync(m => m.Id == employeeId);

            bool reussite = employeeDb.DebitWallet(orderUpdatedByServ.TotalAmount);

            if (reussite == false)
            {
                ModelState.AddModelError(string.Empty, "Porte monnaie insuffisant");
                //L'employé n'a pas suffisement d'argent.
                CommWrap <string> commCancellation = await RemoteCall.GetInstance().ConfirmOrder(false, orderUpdatedGuid);

                return(await Index());

                if (commCancellation.RequestStatus != 0)
                {
                    //Il faut afficher à l'utilisateur qu'il n'a pas assez d'argent.
                    //return
                }
                //L'annulation n'a pas aboutie, si on arrive ici, c'est que quelque
                //chose d'inattendu s'est produit ou peut être que la requête a été
                //appelée manuelle par l'utilisateur.
                //return
            }

            //L'employé avait suffisement de crédit et sa commande se confirme.
            CommWrap <string> commConfirmation = await RemoteCall.GetInstance().ConfirmOrder(true, orderUpdatedGuid);

            if (commConfirmation.RequestStatus != 0)
            {
                //Sauvegarder dans la DB coté client


                using (var tx = _context.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    Order orderDb = await _context.Orders
                                    .Include(order => order.OrderLines)
                                    .ThenInclude(odLin => odLin.Sandwich)
                                    .Include(order => order.OrderLines)
                                    .ThenInclude(odLin => odLin.OrderLineVegetables)
                                    .ThenInclude(odLinVeg => odLinVeg.Vegetable)
                                    .SingleOrDefaultAsync(o => o.Employee.Equals(employeeDb) && o.DateOfDelivery.Equals(orderUpdatedByServ.DateOfDelivery));

                    if (orderDb == null)
                    {
                        //Si aucune commande pour cette journée n'a été trouvée, on lui assigne la nouvelle commande.
                        for (int i = 0; i < orderUpdatedByServ.OrderLines.Count; i++)
                        {
                            Sandwich sandwichTemp = await _context.Sandwiches.SingleOrDefaultAsync(s => s.Id == orderUpdatedByServ.OrderLines.ElementAt(i).Sandwich.Id);

                            if (sandwichTemp != null)
                            {
                                orderUpdatedByServ.OrderLines.ElementAt(i).Sandwich = sandwichTemp;
                            }
                            //_context.Entry(orderInValidation.OrderLines.ElementAt(i).Sandwich).State = EntityState.Unchanged;

                            for (int j = 0; j < orderUpdatedByServ.OrderLines.ElementAt(i).OrderLineVegetables.Count; j++)
                            {
                                Vegetable vegetableTemp = await _context.Vegetables.SingleOrDefaultAsync(s => s.Id == orderUpdatedByServ.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable.Id);

                                if (vegetableTemp != null)
                                {
                                    orderUpdatedByServ.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable = vegetableTemp;
                                }
                                //_context.Entry(orderInValidation.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable).State = EntityState.Unchanged;
                            }
                        }
                        employeeDb.Orders.Add(orderUpdatedByServ);
                    }
                    else
                    {
                        //Une commande à été trouvé pour la journée, on somme celle-ci avec la nouvelle.
                        orderDb.SumUpOrders(orderUpdatedByServ);
                    }

                    _context.SaveChanges();
                    tx.Commit();
                }



                //Tout s'est bien passé, on peut vider le panier
                ShoppingCart.UpdateCartContent(HttpContext, null);
                return(RedirectToAction("Index"));
            }

            //La confirmation n'a pas aboutie, si on arrive ici, c'est que quelque
            //chose d'inattendu s'est produit ou peut être que la requête a été
            //appelée manuelle par l'utilisateur.
            //return
            return(RedirectToAction("Index"));//temporaire juste le temps des tests
        }
Beispiel #12
0
        //[Route("api/Order/Confirm")]
        public async Task <CommWrap <string> > Confirm([FromBody] CommWrap <string> communication)
        {
            //Si le client indique un echec de son coté (pas assez de crédit par exemple)
            if (communication.RequestStatus == 0)
            {
                if (ordersToValidate.ContainsKey(communication.Content))
                {
                    //Supprimer l'Order de la liste en attente
                    ordersToValidate.Remove(communication.Content);
                    return(new CommWrap <string> {
                        RequestStatus = 0
                    });
                }
            }

            //Si il n'y a pas de eu de soucis chez le client, on continue
            if (!ordersToValidate.ContainsKey(communication.Content))
            {
                //Si on ne trouve pas la commande que le client veut valider
                return(new CommWrap <string> {
                    RequestStatus = 0
                });
            }
            else
            {
                OrderCompany_Com orderInValidationInfo = ordersToValidate[communication.Content];
                ordersToValidate.Remove(communication.Content);
                ////////////
                //Récolte des infos Db nécessaire pour enregistrer la commande.
                ////////////
                Company company           = orderInValidationInfo.Company_com;
                Order   orderInValidation = orderInValidationInfo.Order_com;

                using (var tx = _context.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    Company companyDb = await _context.Companies.SingleOrDefaultAsync(c => c.Id == company.Id && c.ChkCode == company.ChkCode);

                    Order orderDb = await _context.Orders
                                    .Include(order => order.OrderLines)
                                    .ThenInclude(odLin => odLin.Sandwich)
                                    .Include(order => order.OrderLines)
                                    .ThenInclude(odLin => odLin.OrderLineVegetables)
                                    .ThenInclude(odLinVeg => odLinVeg.Vegetable)
                                    .SingleOrDefaultAsync(o => o.Company.Equals(companyDb) && o.DateOfDelivery.Equals(orderInValidation.DateOfDelivery));

                    if (companyDb == null)
                    {
                        //Si, étrangement, on n'a pas trouvé la company (mesure de sécurité).
                        return(new CommWrap <string> {
                            RequestStatus = 0
                        });
                    }


                    for (int i = 0; i < orderInValidation.OrderLines.Count; i++)
                    {
                        Sandwich sandwichTemp = await _context.Sandwiches.SingleOrDefaultAsync(s => s.Id == orderInValidation.OrderLines.ElementAt(i).Sandwich.Id);

                        orderInValidation.OrderLines.ElementAt(i).Sandwich = sandwichTemp;
                        //_context.Entry(orderInValidation.OrderLines.ElementAt(i).Sandwich).State = EntityState.Unchanged;

                        for (int j = 0; j < orderInValidation.OrderLines.ElementAt(i).OrderLineVegetables.Count; j++)
                        {
                            Vegetable vegetableTemp = await _context.Vegetables.SingleOrDefaultAsync(s => s.Id == orderInValidation.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable.Id);

                            orderInValidation.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable = vegetableTemp;
                            //_context.Entry(orderInValidation.OrderLines.ElementAt(i).OrderLineVegetables.ElementAt(j).Vegetable).State = EntityState.Unchanged;
                        }
                    }

                    if (orderDb == null)
                    {
                        //Si aucune commande pour cette journée n'a été trouvée, on lui assigne la nouvelle commande.
                        companyDb.Orders.Add(orderInValidation);
                    }
                    else
                    {
                        //Une commande à été trouvé pour la journée, on somme celle-ci avec la nouvelle.
                        orderDb.SumUpOrders(orderInValidation);
                    }

                    _context.SaveChanges();
                    tx.Commit();
                }

                return(new CommWrap <string> {
                    RequestStatus = 1, Content = ""
                });
            }
        }