public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basket = await _basketRepository.GetByIdAsync(basketId); Guard.Against.NullBasket(basketId, basket); var items = new List <OrderItem>(); foreach (var item in basket.Items) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = new Order(basket.BuyerId, shippingAddress, items); int currentSecond = DateTime.Now.Second; if (currentSecond % 3 == 1) { order.SetStatusOutForDelivery(); } if (currentSecond % 3 == 2) { order.SetStatusDelivered(); } await _orderRepository.AddAsync(order); }
public async Task HandleAsync(CreatePurchaseOrderCommand command) { //Issue: Crossing the boundary context to cut shot the time. //This should call the Basket Api and get the details. Not the repository directly. var basketSpecification = new BasketWithItemsSpecification(command.BasketId); var basket = await _basketAsyncRepository.GetSingleAsync(basketSpecification); var items = new List <PurchaseOrderItem>(); foreach (var basketItem in basket.BasketItems) { var catalogItem = await _catalogItemAsyncRepository.GetByIdAsync(basketItem.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, (CatalogItemType)catalogItem.CatalogType, catalogItem.Name, catalogItem.PictureUri); var orderItem = new PurchaseOrderItem(itemOrdered, basketItem.UnitPrice, basketItem.Quantity); items.Add(orderItem); } var purchaseOrderId = Guid.NewGuid(); var purchaseOrderIdNumberMapping = new PurchaseOrderIdNumberMapping { PurchaseOrderId = purchaseOrderId }; _purchaseOrderIdNumberMappingAsyncRepository.Add(purchaseOrderIdNumberMapping); await _unitOfWork.SaveChangesAsync(); var purchaseOrder = new Domain.PurchaseOrder(purchaseOrderId, purchaseOrderIdNumberMapping.Id, basket.BuyerId, command.Address, items); await _shopAggregateRepositoryService.SaveAsync(purchaseOrder); }
public CustomizeOrder(string buyerId, string buyerName, string buyerContact, string description, string text, string colors, CatalogItemOrdered itemOrdered, string attachFileName) { BuyerId = buyerId; BuyerName = buyerName; BuyerContact = buyerContact; Description = description; Text = text; Colors = colors; ItemOrdered = itemOrdered; AttachFileName = attachFileName; }
public async Task CreateOrderAsync(int basketId) { var basket = await _basketRepository.GetByIdAsync(basketId); Guard.Against.NullBasket(basketId, basket); var items = new List <OrderItem>(); foreach (var item in basket.Items) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); catalogItem.UnitsInStock -= item.Quantity; var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } string connectionString = _configuration.GetConnectionString("IdentityConnection"); using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.TableMappings.Add("Table", "AspNetUsers"); connection.Open(); SqlCommand command = new SqlCommand( $"SELECT * FROM [dbo].[AspNetUsers] WHERE [dbo].[AspNetUsers].[UserName] = '{basket.BuyerId}';", connection); command.CommandType = CommandType.Text; adapter.SelectCommand = command; DataSet dataSet = new DataSet("AspNetUsers"); adapter.Fill(dataSet); connection.Close(); DataTable table = dataSet.Tables["AspNetUsers"]; string city = table.Select()[0]["City"].ToString(); string country = table.Select()[0]["Country"].ToString(); string street = table.Select()[0]["Street"].ToString(); var hn = table.Select()[0]["HomeNumber"]; var flat = table.Select()[0]["Flat"]; var order = new Order(basket.BuyerId, new Address(street, city, hn.ToString(), country, flat.ToString()), items); await _orderRepository.AddAsync(order); } }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basket = await _basketRepository.GetByIdAsync(basketId); var items = new List <OrderItem>(); foreach (var item in basket.Items) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = new Order(basket.BuyerId, shippingAddress, items); await _orderRepository.AddAsync(order); }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) // @issue@I02 { var basket = await _basketRepository.GetByIdAsync(basketId); // @issue@I02 Guard.Against.NullBasket(basketId, basket); // @issue@I02 var items = new List <OrderItem>(); // @issue@I02 foreach (var item in basket.Items) // @issue@I02 { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); // @issue@I02 var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); // @issue@I02 var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); // @issue@I02 items.Add(orderItem); // @issue@I02 } var order = new Order(basket.BuyerId, shippingAddress, items); // @issue@I02 await _orderRepository.AddAsync(order); // @issue@I02 }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basketSpec = new BasketWithItemsSpecification(basketId); var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec); Guard.Against.NullBasket(basketId, basket); var items = new List <OrderItem>(); foreach (var item in basket.Items) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, _uriComposer.ComposePicUri(catalogItem.PictureUri)); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = new Order(basket.BuyerId, shippingAddress, items); await _orderRepository.AddAsync(order); }
public async Task CreateOrderAsync( int basketId, Entities.OrderAggregate.Address shippingAddress, PaymentInfo paymentDetails, OrderStatus status, Purchase purchase, PurchaseResponse purchaseResponse) { var basket = await _basketRepository.GetByIdAsync(basketId); if (basket == null) { throw new BasketNotFoundException(basketId); } var items = new List <OrderItem>(); var pricesAndQuantities = new List <Tuple <decimal, int> >(); foreach (var item in basket.Items) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); pricesAndQuantities.Add(new Tuple <decimal, int>(item.UnitPrice, item.Quantity)); } var totals = OrderCalculator.CalculateTotals(pricesAndQuantities); var order = new Order( basket.BuyerId, shippingAddress, paymentDetails, items, status, purchase, purchaseResponse, totals); await _orderRepository.AddAsync(order); }
public async Task CreateOrderAsync(int cartId) { var cart = await _context.Carts.FindAsync(cartId); EnsureArg.IsNotNull(cart, nameof(cart)); var items = new List <OrderItem> (); foreach (var item in cart.Items) { var catalogItem = await _context.CatalogItems.FindAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.ImageUrl); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = Order.Create(cart.BuyerId, items); _context.Orders.Add(order); await _context.SaveChangesAsync(); }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basketSpec = new BasketWithItemsSpecification(basketId); var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec); Guard.Against.NullBasket(basketId, basket); var catalogItemsSpecification = new CatalogItemsSpecification(basket.Items.Select(item => item.CatalogItemId).ToArray()); var catalogItems = await _itemRepository.ListAsync(catalogItemsSpecification); var items = basket.Items.Select(basketItem => { var catalogItem = catalogItems.First(c => c.Id == basketItem.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, _uriComposer.ComposePicUri(catalogItem.PictureUri)); var orderItem = new OrderItem(itemOrdered, basketItem.UnitPrice, basketItem.Quantity); return(orderItem); }).ToList(); var order = new Order(basket.BuyerId, shippingAddress, items); await _orderRepository.AddAsync(order); }
public Order CreateOrder(int basketId, Address shippingAddress) { var basket = _basketRepository.GetById(basketId); if (basket == null) { throw new BasketNotFoundException(basketId); } var items = new List <OrderItem>(); foreach (var item in basket.Items) { var catalogItem = _itemRepository.GetById(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = new Order(basket.BuyerId, shippingAddress, items); return(_orderRepository.Add(order)); }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basket = await _session.LoadAsync <Basket>("Baskets/" + basketId, x => x.IncludeDocuments(b => b.Items.Select(i => i.CatalogItem))); var items = new List <OrderItem>(); foreach (var item in basket.Items) { // no server call here var catalogItem = await _session.LoadAsync <CatalogItem>(item.CatalogItem); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, _uriComposer.ComposePicUri(catalogItem.PictureUri)); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity); items.Add(orderItem); } var order = new Order(basket.BuyerId, shippingAddress, items); await _session.StoreAsync(order); await _session.SaveChangesAsync(); }
public async Task CreateOrderAsync(int basketId, Address shippingAddress) { var basketSpec = new BasketWithItemsSpecification(basketId); var basket = await _basketRepository.FirstOrDefaultAsync(basketSpec); Guard.Against.NullBasket(basket.id, basket); // make an array of catalogItem ids in all basketItem objects and send to CatalogItemsSpecification() var catalogItemsSpecification = new CatalogItemsSpecification(basket.Items.Select(item => item.CatalogItemId).ToArray()); var catalogItems = await _itemRepository.ListAsync(catalogItemsSpecification); // list of catalogItems with ids in basket items var items = basket.Items.Select(basketItem => { // if basketItem's catalog item id matches repo catalogItem id set var var catalogItem = catalogItems.First(c => c.id == basketItem.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.id, catalogItem.Name, catalogItem.PictureUri); // make new orderItem by using selected basketItem and catalogItem var orderItem = new OrderItem(itemOrdered, catalogItem.Price, basketItem.Quantity); return(orderItem); // return the new orderItem and append to items list }).ToList(); var order = new Order(basket.BuyerId, shippingAddress, items); await _orderRepository.AddAsync(order); // add the new Order obj to orderRepository }
public OrderItem(CatalogItemOrdered itemOrdered, decimal unitPrice, int units) { ItemOrdered = itemOrdered; UnitPrice = unitPrice; Units = units; }
public OrderItem(CatalogItemOrdered itemOrdered, decimal unitPrice, int units) { this.ItemOrdered = itemOrdered; this.UnitPrice = unitPrice; this.Units = units }
public OrderBuilder() { TestCatalogItemOrdered = new CatalogItemOrdered(TestCatalogItemId, TestProductName, TestPictureUri); _order = WithDefaultValues(); }
public async Task <Order> CreateOrderAsync(int basketId, string phoneNumber, int?taxNumber, Address shippingAddress, Address billingAddress, bool useBillingSameAsShipping, decimal shippingCost, string customerEmail = null, bool registerInvoice = false, PaymentType paymentType = PaymentType.CASH) { var basketSpec = new BasketWithItemsSpecification(basketId); var basket = (await _basketRepository.ListAsync(basketSpec)).LastOrDefault(); Guard.Against.NullBasket(basketId, basket); var items = new List <OrderItem>(); foreach (var item in basket.Items) { if (!item.CatalogTypeId.HasValue) { var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); var itemOrdered = new CatalogItemOrdered(catalogItem.Id, catalogItem.Name, catalogItem.PictureUri); var orderItem = new OrderItem(itemOrdered, item.UnitPrice, item.Quantity, item.CustomizeName); items.Add(orderItem); } else { var catalogType = await _catalogRepository.GetByIdAsync(item.CatalogTypeId.Value); var itemOrdered = new CatalogItemOrdered(0, null, null); var customizeItem = new CustomizeItemOrdered( item.CatalogTypeId.Value, item.CustomizeDescription, item.CustomizeName, item.CustomizeColors, catalogType.Name, catalogType.PictureUri); var orderItem = new OrderItem(itemOrdered, 0, item.Quantity); items.Add(orderItem); } } var order = new Order(basket.BuyerId, phoneNumber, taxNumber, shippingAddress, billingAddress, useBillingSameAsShipping, items, shippingCost, null, customerEmail); var savedOrder = await _orderRepository.AddAsync(order); if (registerInvoice) { savedOrder.OrderState = OrderStateType.SUBMITTED; SageResponseDTO response; //From sales rename product name foreach (var item in savedOrder.OrderItems.Where(x => x.ItemOrdered.CatalogItemId == -1).ToList()) { item.ItemOrdered.Rename(item.CustomizeName); } try { response = await _invoiceService.RegisterInvoiceAsync(SageApplicationType.SALESWEB, savedOrder); } catch (Exception ex) { throw new RegisterInvoiceException(ex.ToString()); } if (response.InvoiceId.HasValue) { savedOrder.SalesInvoiceId = response.InvoiceId.Value; savedOrder.SalesInvoiceNumber = response.InvoiceNumber; await _orderRepository.UpdateAsync(savedOrder); //Generate Payment try { var responsePayment = await _invoiceService.RegisterPaymentAsync(SageApplicationType.SALESWEB, savedOrder.SalesInvoiceId.Value, savedOrder.Total(), paymentType); if (responsePayment.PaymentId.HasValue) { savedOrder.SalesPaymentId = responsePayment.PaymentId.Value; await _orderRepository.UpdateAsync(savedOrder); } else { throw new RegisterInvoiceException($"Fatura gerada com sucesso mas com erro de pagamento: {responsePayment?.Message}"); } } catch (Exception ex) { throw new RegisterInvoiceException($"Fatura gerada com sucesso mas com erro de pagamento: {ex}"); } } else //Something wrong { throw new RegisterInvoiceException(response.Message); } } return(savedOrder); }
public static OrderItem Create(CatalogItemOrdered itemOrdered, decimal unitPrice, int units) { return(new OrderItem(itemOrdered, unitPrice, units)); }