コード例 #1
0
        public async Task <IActionResult> SaveDelivery(Models.Delivery delivery)
        {
            try
            {
                IActionResult result = null;

                if (delivery == null)
                {
                    return(BadRequest($"The delivery is invalid (null)"));
                }
                if (string.IsNullOrEmpty(delivery.Id))
                {
                    return(BadRequest($"The delivery id is invalid (null or empty)"));
                }

                if (await _repository.GetDeliveryByIdAsync(delivery.Id) == null)
                {
                    result = this.CreatedAtRoute(
                        routeName: "Default",
                        value: await _repository.AddDeliveryAsync(delivery)
                        );
                }
                else
                {
                    result = BadRequest($"The delivery with {delivery.Id} already exists");
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw new DeliveryDomainException("An error caused an exception", ex);
            }
        }
コード例 #2
0
        private void PublishDeliveryStatusChange(Models.Delivery delivery)
        {
            switch ((DTO.Status)delivery.IdStatus)
            {
            case DTO.Status.PickedUp:
                var deliveryPickedUpMessage = new FoodOnKontainers.Events.DTO.Delivery.DeliveryPickedUpEvent()
                {
                    idOrder = delivery.IdOrder
                };
                eventManager.DeliveryPickedUp(deliveryPickedUpMessage);
                break;

            case DTO.Status.Delivered:
                var deliveryCompletedMessage = new FoodOnKontainers.Events.DTO.Delivery.DeliveryCompletedEvent()
                {
                    idOrder = delivery.IdOrder
                };
                eventManager.DeliveryCompleted(deliveryCompletedMessage);
                break;

            case DTO.Status.ToPickUp:
            case DTO.Status.Canceled:
            default:
                break;
            }
        }
コード例 #3
0
        public async Task UpdateDelivery(DTO.Delivery delivery)
        {
            Models.Delivery current = await GetDelivery(delivery.Id);

            DeliveriesMapper.MapDeliveryDTO(current, delivery);
            await deliveriesDbContext.SaveChangesAsync();
        }
コード例 #4
0
        public async Task UpdateDeliveryStatus(int idDelivery, DTO.Status newStatus)
        {
            Models.Delivery delivery = await GetDelivery(idDelivery);

            delivery.IdStatus = (int)newStatus;
            switch (newStatus)
            {
            case DTO.Status.ToPickUp:
                delivery.TakeChargeDate = DateTime.UtcNow;
                break;

            case DTO.Status.PickedUp:
                delivery.PickUpDate = DateTime.UtcNow;
                break;

            case DTO.Status.Delivered:
                delivery.DeliveryDate = DateTime.UtcNow;
                break;

            case DTO.Status.Canceled:
            default:
                break;
            }
            await deliveriesDbContext.SaveChangesAsync();

            PublishDeliveryStatusChange(delivery);
        }
コード例 #5
0
        public async Task <ActionResult> SubmitDelivered(ViewModels.Delivery delivery, string IdOrder)
        {
            var order = await db.Orders.Where(x => x.Id == IdOrder).SingleOrDefaultAsync();

            if (order != null)
            {
                var newDelivery = new Models.Delivery()
                {
                    Id             = Guid.NewGuid().ToString(),
                    Created        = DateTimeOffset.Now,
                    ETA            = delivery.ETA,
                    TrackingNumber = delivery.TrackingNumber,
                    Service        = delivery.Service,
                    Status         = Models.DeliveryStatus.Procesing
                };
                order.Delivery        = newDelivery;
                order.Status          = Models.OrderStatus.Delivered;
                db.Entry(order).State = EntityState.Modified;
                var result = await db.SaveChangesAsync();

                if (result > 0)
                {
                    return(RedirectToAction("DetailOrder", new { id = IdOrder }));
                }
            }
            return(View());
        }
コード例 #6
0
ファイル: HomeController.cs プロジェクト: antohka/ASP-C-
        public string AjaxTest(string Name, string Secondname, string Adress, string Weight, string Comment, string Radio)
        {
            //Вартість доставки розраховується за принципом:
            //вартість доставки в місто + вага * вартість за кг.
            //вартість за кг - 30 грн
            //Полтава - 20 грн, Київ - 60 грн.Харків - 40 грн
            float costDelivery = 0;
            float weightNum    = float.Parse(Weight);

            if (Adress == "Полтава")
            {
                costDelivery = 20 + weightNum * 30;
            }
            if (Adress == "Киев")
            {
                costDelivery = 60 + weightNum * 30;
            }
            if (Adress == "Харьков")
            {
                costDelivery = 40 + weightNum * 30;
            }
            Models.Delivery person = new Models.Delivery
            {
                first_name  = Name,
                second_name = Secondname,
                adress      = Adress,
                weight      = weightNum,
                coment      = Comment,
                type        = Radio,
                cost        = costDelivery
            };
            db.Deliveries.Add(person);
            db.SaveChanges();
            return(costDelivery.ToString());
        }
コード例 #7
0
        public async Task <int> AddDelivery(DTO.Delivery delivery)
        {
            Models.Delivery newDelivery = DeliveriesMapper.MapNewDeliveryDTO(delivery);
            deliveriesDbContext.Delivery.Add(newDelivery);
            await deliveriesDbContext.SaveChangesAsync();

            return(newDelivery.Id);
        }
コード例 #8
0
ファイル: DeliveriesMapper.cs プロジェクト: giron85/FOK
 internal static Models.Delivery MapNewDeliveryDTO(DTO.Delivery input)
 {
     Models.Delivery output = new Models.Delivery()
     {
         DeliveryAddress = input.DeliveryAddress,
         DeliveryName = input.DeliveryName,
         DeliveryRequestedDate = input.DeliveryRequestedDate ?? DateTime.UtcNow.AddHours(1),
         IdOrder = input.IdOrder,
         IdRestaurant = input.IdRestaurant,
         IdStatus = (int)DTO.Status.ToPickUp,
         PickUpAddress = input.PickUpAddress,
         RestaurantName = input.RestaurantName
     };
     return output;
 }
コード例 #9
0
ファイル: DeliveriesMapper.cs プロジェクト: giron85/FOK
 internal static void MapDeliveryDTO(Models.Delivery current, DTO.Delivery input)
 {
     current.DeliveryAddress = string.IsNullOrEmpty(input.DeliveryAddress) ? current.DeliveryAddress : input.DeliveryAddress;
     current.DeliveryDate = input.DeliveryDate ?? current.DeliveryDate;
     current.DeliveryName = string.IsNullOrEmpty(input.DeliveryName) ? current.DeliveryName : input.DeliveryName;
     current.DeliveryRequestedDate = input.DeliveryRequestedDate ?? current.DeliveryRequestedDate;
     //current.IdOrder = input.IdOrder;
     current.IdRestaurant = input.IdRestaurant ?? current.IdRestaurant;
     current.IdRider = input.IdRider ?? current.IdRider;
     current.IdStatus = input.IdStatus ?? (int)DTO.Status.ToPickUp;
     current.PickUpAddress = string.IsNullOrEmpty(input.PickUpAddress) ? current.PickUpAddress : input.PickUpAddress;
     current.PickUpDate = input.PickUpDate ?? current.PickUpDate;
     current.RestaurantName = string.IsNullOrEmpty(input.RestaurantName) ? current.RestaurantName : input.RestaurantName;
     current.TakeChargeDate = input.TakeChargeDate ?? input.TakeChargeDate;
 }
コード例 #10
0
        public async void SaveDeliveryCreated(Models.Delivery[] deliveries)
        {
            // Arrange
            Models.Delivery    deliveryToSave = deliveries[0];
            var                mock           = new Mock <IDeliveryRepository>();
            DeliveryController controller     = new DeliveryController(mock.Object);

            mock.Setup(rep => rep.GetDeliveryByIdAsync(It.IsAny <string>())).Returns(Task <Models.Delivery> .Run(() => default(Models.Delivery)));

            // Act
            CreatedAtRouteResult result = await controller.SaveDelivery(deliveryToSave) as CreatedAtRouteResult;

            // Assert
            Assert.Equal((int?)HttpStatusCode.Created, result.StatusCode);
            mock.Verify(rep => rep.AddDeliveryAsync(It.IsAny <Models.Delivery>()), Times.Once);
        }
コード例 #11
0
        public async Task <ActionResult <Models.Site> > Create(SiteCreateResponse response)
        {
            var user = new Models.User {
                Id = 1
            };

            using var transaction = _context.Database.BeginTransaction();

            _context.Attach(user);

            var existSite = await _context.Sites.Where(s => s.Slug == response.Slug).FirstOrDefaultAsync();

            if (existSite != null)
            {
                return(BadRequest("Exist slug"));
            }

            var site = new Models.Site
            {
                Address     = response.Address ?? "Москва, Первомайская 28А",
                Deliveries  = null,
                Description = response.Description ?? "Федеральная сеть столовх BestFood - это демократичные столовые, расположенные в различных районах Москвы и Московской области. Мы взяли все самое лучшее из советского общепита и сделали наши блюда вкусными, разнообразными и по-настоящему домашними. Почти все, что мы предлагаем Вам, приготовлено по собственным рецептам – включая выпечку и напитки. Широкий ассортимент позволит каждому гостю подобрать блюдо по вкусу. Также мы готовим специальное меню к таким праздникам, как Новый год, Масленица, Великий пост и многим другим. И пусть Вас не пугают очереди в наших столовых! Стоять долго не придется, потому что Вы всегда можете оформить заказ на нашем сайте \"Veryfood.ru\" и оплатить с помощью банковской карты или наличными. Наши курьеры доставят Вам заказ в кратчайшие сроки вместе с комплектом приборов, чтобы вы могли насладиться едой без лишних неудобств. Мы вседа рады новым клиентам, приятного аппетита!",
                Name        = response.Name,
                Phone       = response.Phone ?? "+7(915)123-45-67",
                Categories  = null,
                Slug        = response.Slug,
                Type        = response.Type,
                User        = user,
            };

            _context.Sites.Add(site);

            var delivery = new Models.Delivery
            {
                Id          = 0,
                Type        = "courier",
                Cost        = 30,
                Description = "Наша доставка еды по Подмосковью работает ежедневно с 10:00 до 21:40. Мы готовы принять ваш заказ и оформить доставку еды в офис, квартиру, общежитие или университет. Примерное время доставки еды составляет 30 минут. Время доставки еды может меняться в зависимости от вашего местонахождения, загрузки обслуживающего персонала.",
                Site        = site,
            };

            _context.Deliveries.Add(delivery);
            await _context.SaveChangesAsync();

            transaction.Commit();
            return(site);
        }
コード例 #12
0
        public async void SaveDeliveryBadRequestIdIsNullOrEmpty()
        {
            // Arrange
            Models.Delivery delivery = new Models.Delivery()
            {
                Id = string.Empty
            };
            var mock = new Mock <IDeliveryRepository>();
            DeliveryController controller = new DeliveryController(mock.Object);

            // Act
            BadRequestObjectResult result = await controller.SaveDelivery(delivery) as BadRequestObjectResult;

            // Assert
            mock.Verify(rep => rep.AddDeliveryAsync(It.IsAny <Models.Delivery>()), Times.Never);
            Assert.Equal((int?)HttpStatusCode.BadRequest, result.StatusCode);
        }
コード例 #13
0
        public async void UpdateDeliveryOk(Models.Delivery[] deliveries)
        {
            // Arrange
            var mock = new Mock <IDeliveryRepository>();

            Models.Delivery deliveryToUpdate = deliveries[0];
            mock.Setup(rep => rep.GetDeliveryByIdAsync(It.IsAny <string>()))
            .Returns(Task <Models.Delivery> .Run(() => deliveryToUpdate));
            DeliveryController controller = new DeliveryController(mock.Object);

            // Act
            OkObjectResult model = await controller.UpdateDelivery(
                deliveryToUpdate.Id,
                new JsonPatchDocument <Models.Delivery>()) as OkObjectResult;

            // Assert
            Assert.Equal((int?)HttpStatusCode.OK, model.StatusCode);
            mock.Verify(rep => rep.GetDeliveryByIdAsync(It.IsAny <string>()), Times.Once);
            mock.Verify(rep => rep.UpdateDeliveryAsync(It.IsAny <string>(), It.IsAny <Models.Delivery>()), Times.Once);
        }
コード例 #14
0
        public async Task <IActionResult> UpdateDelivery(string id, [FromBody] JsonPatchDocument <Models.Delivery> patch)
        {
            IActionResult result = null;

            Models.Delivery delivery = null;

            try
            {
                if (string.IsNullOrEmpty(id))
                {
                    return(BadRequest($"The id {id} is not valid (null or empty)"));
                }
                if (patch == null)
                {
                    return(BadRequest($"The patch argument is not valid"));
                }

                delivery = await _repository.GetDeliveryByIdAsync(id);

                if (delivery != null)
                {
                    patch?.ApplyTo(delivery);
                    delivery = await _repository.UpdateDeliveryAsync(id, delivery);

                    result = Ok(delivery);
                }
                else
                {
                    result = NotFound($"The delivery with id {id} was not found");
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw new DeliveryDomainException("An error caused an exception", ex);
            }
        }