コード例 #1
0
ファイル: OrderFacade.cs プロジェクト: Froggeer/AjkaShop
        public async Task <string> CreateOrderAsync(OrderBasketDto basket, CancellationToken cancellationToken)
        {
            var isEmail = Regex.IsMatch(basket.Email, OrderEmailConstants.emailFormatMatchRegex, RegexOptions.IgnoreCase);

            if (!isEmail)
            {
                return(OrderEmailConstants.errorEmailAddressIsNotValid);
            }

            try
            {
                var orderRepository = _unitOfWork.GetRepository <DAL.Model.Order>();
                var newOrder        = new DAL.Model.Order
                {
                    CreateDate    = DateTime.Now,
                    CustomerEmail = basket.Email,
                    Note          = basket.Note,
                    State         = Common.Enums.OrderEnums.OrderState.Created
                };
                await orderRepository.InsertAsync(newOrder).ConfigureAwait(false);

                await _unitOfWork.SaveChangesAsync().ConfigureAwait(false);

                var itemCardsInBasket = await _orderItemService.CreateOrderItemsFromBasketAsync(basket.Items, newOrder.Id, cancellationToken).ConfigureAwait(false);

                if (!itemCardsInBasket.Any())
                {
                    return(OrderEmailConstants.errorNoItemsInBasket);
                }

                var emailBody = await _orderEmailService.RenderViewToStringAsync(itemCardsInBasket, basket.Email, newOrder.Id.ToString(), cancellationToken).ConfigureAwait(false);

                await _orderEmailService.SendAsync(basket.Email, emailBody, basket.IsRequestedCopyOfOrder, cancellationToken).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await _errorLogService.LogExceptionAsync(ex).ConfigureAwait(false);

                return($"Systémová chyba: {ex.Message}");
            }
            return(string.Empty);
        }
コード例 #2
0
        public async Task ImportAsync(string productsData, CancellationToken cancellationToken)
        {
            try
            {
                var productsToImport = new List <ImportAdlerDto>();
                var document         = new XmlDocument();
                document.LoadXml(productsData);
                var productList = document.GetElementsByTagName("product");
                foreach (XmlNode product in productList)
                {
                    XmlNode child   = product.SelectSingleNode("childs");
                    var     sexList = new List <string>();
                    XmlNode sex     = child.SelectSingleNode("sex");
                    foreach (XmlNode sexId in sex.SelectSingleNode("childs"))
                    {
                        sexList.Add(sexId.InnerText);
                    }
                    var productToAdd = new ImportAdlerDto
                    {
                        CategoryId       = child.SelectSingleNode("id_category")?.InnerText,
                        CategoryName     = child.SelectSingleNode("category")?.InnerText,
                        ProductName      = child.SelectSingleNode("name")?.InnerText,
                        ProductLabel     = child.SelectSingleNode("label")?.InnerText,
                        Description      = child.SelectSingleNode("description")?.InnerText,
                        SizeName         = child.SelectSingleNode("name_size")?.InnerText,
                        ColorName        = child.SelectSingleNode("name_color")?.InnerText,
                        SizeId           = child.SelectSingleNode("id_size")?.InnerText,
                        Price            = Convert.ToDecimal(child.SelectSingleNode("price")?.InnerText),
                        ProductImagePath = child.SelectSingleNode("product_image")?.InnerText,
                        Grammage         = child.SelectSingleNode("grammage")?.InnerText,
                        Quantity         = int.Parse(child.SelectSingleNode("expedition_package")?.InnerText),
                        SexList          = sexList
                    };
                    productsToImport.Add(productToAdd);
                }

                if (productsToImport.Any())
                {
                    var categories = productsToImport.GroupBy(g => g.CategoryName).Select(x => x.Key);
                    await _categoryService.SynchronizeGroupCategoriesAsync(categories, cancellationToken).ConfigureAwait(false);

                    var itemCards = productsToImport.GroupBy(g => new { g.CategoryId, g.CategoryName, g.ProductName, g.ProductLabel })
                                    .Select(item => new ImportAdlerDto
                    {
                        CategoryId   = item.Key.CategoryId,
                        CategoryName = item.Key.CategoryName,
                        ProductName  = item.Key.ProductName,
                        ProductLabel = item.Key.ProductLabel,
                        Description  = item.Min(d => d.Description),
                        Quantity     = item.Min(q => q.Quantity),
                        Price        = item.Max(p => p.Price),
                        Grammage     = item.Min(g => g.Grammage),
                        SexList      = item.Select(s => s.SexList).FirstOrDefault(),
                        ImagePaths   = item.GroupBy(g => new { g.ColorName, g.ProductImagePath })
                                       .Select(select => new ImportAdlerImageDto
                        {
                            ColorName = select.Key.ColorName,
                            ImagePath = select.Key.ProductImagePath.Replace("xl.jpg", "l.jpg")
                        }).ToList(),
                        Sizes = item.GroupBy(g => new { g.SizeId, g.SizeName })
                                .Select(select => new ImportAdlerSizeDto
                        {
                            SizeId   = select.Key.SizeId,
                            SizeName = select.Key.SizeName,
                            Price    = select.Max(p => p.Price)
                        }).ToList()
                    });
                    await _itemCardService.SynchronizeAdlerItemCardsAsync(itemCards, cancellationToken).ConfigureAwait(false);
                }
                Debug.WriteLine("Done");
            }
            catch (Exception ex)
            {
                await _errorLogService.LogExceptionAsync(ex).ConfigureAwait(false);
            }
        }