Пример #1
0
        public async Task <OrderDetailDto> HandleAsync(OrderQuery query)
        {
            Order o = await _orderRepo.GetAsync(query.OrderId);

            if (o is null)
            {
                throw new MedParkException("order_does_not_exist", $"Order {query.OrderId} does not exist.");
            }

            OrderDetailDto resultDto = _mapper.Map <OrderDetailDto>(o);

            IEnumerable <LineItem> lineItems = await _orderItemRepo.FindAsync(x => x.OrderId == query.OrderId);

            List <LineItemDto> liDtos = new List <LineItemDto>();

            lineItems.ToList().ForEach(li =>
            {
                LineItemDto liDto = _mapper.Map <LineItemDto>(li);
                liDtos.Add(liDto);
            });

            resultDto.OrderItems = liDtos;

            return(resultDto);
        }
        public HttpResponseMessage AddLineItem(LineItemDto lineItem)
        {
            var dbResult = OrderPlacement.AddLineItem(lineItem);


            return(Request.CreateAddRecordResponse(dbResult));
        }
Пример #3
0
        // DELETE api/LineItem/5
        public HttpResponseMessage DeleteLineItem(int id)
        {
            LineItem lineitem = db.LineItems.Find(id);

            if (lineitem == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            if (db.Entry(lineitem.Order).Entity.UserId != User.Identity.Name)
            {
                // Trying to delete a record that does not belong to the user
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            LineItemDto lineItemDto = new LineItemDto(lineitem);

            db.LineItems.Remove(lineitem);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }

            return(Request.CreateResponse(HttpStatusCode.OK, lineItemDto));
        }
Пример #4
0
        // POST api/LineItem
        public HttpResponseMessage PostLineItem(LineItemDto lineitemDto)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            Order order = db.Orders.Find(lineitemDto.OrderId);

            if (order == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            if (order.UserId != User.Identity.Name)
            {
                // Trying to add a record that does not belong to the user
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            LineItem lineItem = lineitemDto.ToEntity();

            // Need to detach to avoid loop reference exception during JSON serialization
            db.Entry(order).State = EntityState.Detached;
            db.LineItems.Add(lineItem);
            db.SaveChanges();
            lineitemDto.LineItemId = lineItem.LineItemId;

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, lineitemDto);

            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = lineitemDto.LineItemId }));
            return(response);
        }
Пример #5
0
        public static LineItemDto ToLineItemsDTO(this LineItemModel lineItem)
        {
            var isValid = Enum.TryParse(typeof(ProductType), lineItem.ProductType, out object productType);

            if (!isValid)
            {
                throw new OrderException($"Product type {lineItem.ProductType} is not valid.");
            }

            var lineItemDto = new LineItemDto
            {
                ProductID   = lineItem.ProductID,
                Category    = lineItem.Category,
                Notes       = lineItem.Notes,
                ProductName = lineItem.ProductName,
                ProductType = (ProductType)productType
            };

            switch (lineItemDto.ProductType)
            {
            case ProductType.Website:
                lineItemDto.WebsiteDetails = new WebsiteDetailsDto
                {
                    TemplateId          = lineItem.WebsiteDetails.TemplateId,
                    WebsiteAddressLine1 = lineItem.WebsiteDetails.WebsiteAddressLine1,
                    WebsiteAddressLine2 = lineItem.WebsiteDetails.WebsiteAddressLine2,
                    WebsiteBusinessName = lineItem.WebsiteDetails.WebsiteBusinessName,
                    WebsiteCity         = lineItem.WebsiteDetails.WebsiteCity,
                    WebsiteEmail        = lineItem.WebsiteDetails.WebsiteEmail,
                    WebsiteMobile       = lineItem.WebsiteDetails.WebsiteMobile,
                    WebsitePhone        = lineItem.WebsiteDetails.WebsitePhone,
                    WebsitePostCode     = lineItem.WebsiteDetails.WebsitePostCode,
                    WebsiteState        = lineItem.WebsiteDetails.WebsiteState,
                };
                break;

            case ProductType.PaidSearch:
                lineItemDto.AdWordCampaign = new AdWordCampaignDto
                {
                    CampaignName         = lineItem.AdWordCampaign.CampaignName,
                    CampaignAddressLine1 = lineItem.AdWordCampaign.CampaignAddressLine1,
                    CampaignPostCode     = lineItem.AdWordCampaign.CampaignPostCode,
                    CampaignRadius       = lineItem.AdWordCampaign.CampaignRadius,
                    LeadPhoneNumber      = lineItem.AdWordCampaign.LeadPhoneNumber,
                    SMSPhoneNumber       = lineItem.AdWordCampaign.SMSPhoneNumber,
                    UniqueSellingPoint1  = lineItem.AdWordCampaign.UniqueSellingPoint1,
                    UniqueSellingPoint2  = lineItem.AdWordCampaign.UniqueSellingPoint2,
                    UniqueSellingPoint3  = lineItem.AdWordCampaign.UniqueSellingPoint3,
                    Offer          = lineItem.AdWordCampaign.Offer,
                    DestinationURL = lineItem.AdWordCampaign.DestinationURL
                };
                break;

            default:
                throw new OrderException($"Product type {lineItem.ProductType} is not valid.");
            }

            return(lineItemDto);
        }
Пример #6
0
 private void AssertOrder(LineItemModel lineItem, LineItemDto lineItemDto)
 {
     Assert.Equal(lineItemDto.Category, lineItem.Category);
     Assert.Equal(lineItemDto.Notes, lineItem.Notes);
     Assert.Equal(lineItemDto.ProductName, lineItem.ProductName);
     Assert.Equal(lineItemDto.ProductID, lineItem.ProductID);
     Assert.Equal(lineItemDto.ProductType.ToString(), lineItem.ProductType);
 }
 public static int AddLineItem(LineItemDto lineItem)
 {
     if (CheckForAvailableProduct(lineItem.ProductId) && CheckForOpenOrder(lineItem.OrderId))
     {
         var repo     = new LineItemRepository();
         var dbResult = repo.Create(lineItem);
         if (dbResult == 1)
         {
             return(DecrementQuantity(lineItem.ProductId));
         }
     }
     return(0);
 }
Пример #8
0
 public WebsiteProduct(LineItemDto lineItemDto)
     : base(lineItemDto.ProductID, lineItemDto.ProductType, lineItemDto.Notes, lineItemDto.Category)
 {
     TemplateId   = lineItemDto.WebsiteDetails.TemplateId;
     BusinessName = lineItemDto.WebsiteDetails.WebsiteBusinessName;
     AddressLine1 = lineItemDto.WebsiteDetails.WebsiteAddressLine1;
     AddressLine2 = lineItemDto.WebsiteDetails.WebsiteAddressLine2;
     City         = lineItemDto.WebsiteDetails.WebsiteCity;
     State        = lineItemDto.WebsiteDetails.WebsiteState;
     PostCode     = lineItemDto.WebsiteDetails.WebsitePostCode;
     Phone        = lineItemDto.WebsiteDetails.WebsitePhone;
     Email        = lineItemDto.WebsiteDetails.WebsiteEmail;
     Mobile       = lineItemDto.WebsiteDetails.WebsiteMobile;
 }
Пример #9
0
 public PaidSearchProduct(LineItemDto lineItemDto)
     : base(lineItemDto.ProductID, lineItemDto.ProductType, lineItemDto.Notes, lineItemDto.Category)
 {
     CampaignName         = lineItemDto.AdWordCampaign.CampaignName;
     CampaignAddressLine1 = lineItemDto.AdWordCampaign.CampaignAddressLine1;
     CampaignPostCode     = lineItemDto.AdWordCampaign.CampaignPostCode;
     CampaignRadius       = lineItemDto.AdWordCampaign.CampaignRadius;
     LeadPhoneNumber      = lineItemDto.AdWordCampaign.LeadPhoneNumber;
     SMSPhoneNumber       = lineItemDto.AdWordCampaign.SMSPhoneNumber;
     UniqueSellingPoint1  = lineItemDto.AdWordCampaign.UniqueSellingPoint1;
     UniqueSellingPoint2  = lineItemDto.AdWordCampaign.UniqueSellingPoint2;
     UniqueSellingPoint3  = lineItemDto.AdWordCampaign.UniqueSellingPoint3;
     Offer          = lineItemDto.AdWordCampaign.Offer;
     DestinationURL = lineItemDto.AdWordCampaign.DestinationURL;
 }
        private void PartFinderControl_OnJobPartAdded1(object sender, PartFinderControl.JobPartAddedArgs e)
        {
            LineItemDto newLineItem = new LineItemDto
            {
                PurchaseOrderID = orderDTO.PurchaseOrderID,
                Description     = "new job part...",
                JobID           = orderDTO.JobID,
                Quantity        = 1.0m,
                PartID          = 0,
                Price           = decimal.Zero,
                UiD             = 1
            };

            bsLineitems.Add(newLineItem);
        }
        private void PartFinderControl_OnPartAdded1(object sender, PartFinderControl.PartAddedArgs e)
        {
            if (e.selectPart != null)
            {
                LineItemDto newLineItem = new LineItemDto
                {
                    PurchaseOrderID = orderDTO.PurchaseOrderID,
                    Description     = e.selectPart.ItemDescription,
                    JobID           = orderDTO.JobID,
                    Quantity        = 1.0m,
                    PartID          = e.selectPart.PartID,
                    Price           = e.selectPart.Cost.GetValueOrDefault(),
                    UiD             = e.selectPart.UID.GetValueOrDefault()
                };

                bsLineitems.Add(newLineItem);
            }
        }
Пример #12
0
        public Product OrderProduct(LineItemDto lineItemDto)
        {
            switch (lineItemDto.ProductType)
            {
            case ProductType.Website:
                _productFactory = new WebsiteProductFactory();
                break;

            case ProductType.PaidSearch:
                _productFactory = new PaidSearchProductFactory();
                break;

            default:
                throw new OrderException($"Product type {lineItemDto.ProductType} is not valid.");
            }

            return(_productFactory.CreateProduct(lineItemDto));
        }
Пример #13
0
        // PUT api/LineItem/5
        public HttpResponseMessage PutLineItem(int id, LineItemDto lineitemDto)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            if (id != lineitemDto.LineItemId)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            LineItem lineItem = lineitemDto.ToEntity();
            Order    order    = db.Orders.Find(lineItem.OrderId);

            if (order == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            if (order.UserId != User.Identity.Name)
            {
                // Trying to modify a record that does not belong to the user
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            // Need to detach to avoid duplicate primary key exception when SaveChanges is called
            db.Entry(order).State    = EntityState.Detached;
            db.Entry(lineItem).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
Пример #14
0
        public async Task HandleAsync(CheckoutBasket command, ICorrelationContext context)
        {
            CustomerBasket basket = await _basketRepo.GetAsync(command.BasketId);

            if (basket is null)
            {
                throw new MedParkException("basket_does_not_exist", $"A basket for customer {command.BasketId} does not exist.");
            }

            IEnumerable <BasketItem> items = await _basketItemRepo.FindAsync(x => x.BasketId == command.BasketId);

            if (items.Count() == 0)
            {
                throw new MedParkException("basket_items_not_valid", $"The basket {command.BasketId} items are not valid to checkout.");
            }


            BasketCheckedOut   basketCheckedOutEvent = new BasketCheckedOut(basket.CustomerId, command.ShippingType, command.ShippingAddress);
            List <LineItemDto> lineItems             = new List <LineItemDto>();

            items.ToList().ForEach(i =>
            {
                LineItemDto lineItem = new LineItemDto {
                    Id = Guid.NewGuid(), ProductCode = i.Code, Price = i.Price, ProductName = i.Name, Quantity = i.Quantity
                };
                lineItems.Add(lineItem);
            });

            basketCheckedOutEvent.Items = lineItems;

            //Publish event to start order
            await _busPublisher.PublishAsync(basketCheckedOutEvent, null);

            //Empty basket
            items.ToList().ForEach(async(i) =>
            {
                await _basketItemRepo.DeleteAsync(i.Id);
            });
        }
Пример #15
0
 public Product CreateProduct(LineItemDto lineItemDto)
 {
     return(new WebsiteProduct(lineItemDto));
 }
Пример #16
0
 public Product CreateProduct(LineItemDto lineItemDto)
 {
     return(new PaidSearchProduct(lineItemDto));
 }