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); }
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); } }