public TransfersController( UserManager <ApplicationUser> userManager, ITransfersService transfersService, IWarehousesService warehousesService, IGoodsService goodsService) { this.userManager = userManager; this.transfersService = transfersService; this.warehousesService = warehousesService; this.goodsService = goodsService; }
public WarehousesController(IWarehousesService warehousesService) { _warehousesService = warehousesService; }
private bool ProcessOrderFile(IServiceProvider serviceProvider, string fileName, string fileContent) { IWarehousesService warehousesService = serviceProvider.GetService <IWarehousesService>(); IShippingWarehousesService shippingWarehousesService = serviceProvider.GetService <IShippingWarehousesService>(); IOrdersService ordersService = serviceProvider.GetService <IOrdersService>(); // Загружаем данные из файла XmlDocument doc = new XmlDocument(); using (StringReader reader = new StringReader(fileContent)) { doc.Load(reader); } var docRoots = doc.SelectNodes("//IDOC"); int totalCount = docRoots.Count; int processedCount = 0; var orders = new List <OrderFormDto>(); foreach (XmlNode docRoot in docRoots) { ++processedCount; string orderNumber = docRoot.SelectSingleNode("E1EDK02[QUALF='002']/BELNR")?.InnerText?.TrimStart('0'); OrderFormDto dto = ordersService.GetFormByNumber(orderNumber); bool isNew = dto == null; if (dto == null) { dto = new OrderFormDto(); } dto.AdditionalInfo = $"INJECTION - {fileName}"; decimal weightUomCoeff = docRoot.ParseUom("E1EDK01/GEWEI", new[] { "GRM", "GR", "KGM", "KG" }, new[] { 0.001M, 0.001M, 1M, 1M }, 1); string soldTo = docRoot.SelectSingleNode("E1EDKA1[PARVW='AG']/PARTN")?.InnerText?.TrimStart('0'); dto.OrderNumber = new LookUpDto(orderNumber); dto.OrderDate = docRoot.ParseDateTime("E1EDK02[QUALF='001']/DATUM")?.ToString("dd.MM.yyyy") ?? dto.OrderDate; dto.WeightKg = docRoot.ParseDecimal("E1EDK01/BRGEW").ApplyDecimalUowCoeff(weightUomCoeff) ?? dto.WeightKg; dto.BoxesCount = docRoot.ParseDecimal("E1EDK01/Y0126SD_ORDERS05_TMS_01/YYCAR_H") ?? dto.BoxesCount; dto.DeliveryDate = docRoot.ParseDateTime("E1EDK03[IDDAT='002']/DATUM")?.ToString("dd.MM.yyyy") ?? dto.DeliveryDate; dto.OrderAmountExcludingVAT = docRoot.ParseDecimal("E1EDS01[SUMID='002']/SUMME") ?? dto.OrderAmountExcludingVAT; string shippingAddressCode = docRoot.SelectSingleNode("E1EDP01/WERKS")?.InnerText; var shippingWarehouse = shippingWarehousesService.GetByCode(shippingAddressCode); dto.ShippingAddress = shippingWarehouse?.Address ?? dto.ShippingAddress; dto.ShippingCity = string.IsNullOrEmpty(shippingWarehouse?.City) ? dto.ShippingCity : new LookUpDto(shippingWarehouse.City); dto.ShippingWarehouseId = shippingWarehouse?.Id == null ? dto.ShippingWarehouseId : new LookUpDto(shippingWarehouse.Id.ToString(), shippingWarehouse.WarehouseName); dto.DeliveryAddress = null; dto.DeliveryCity = null; dto.DeliveryRegion = null; dto.PickingTypeId = null; dto.TransitDays = null; dto.DeliveryType = null; if (isNew) { dto.ClientOrderNumber = docRoot.SelectSingleNode("E1EDK02[QUALF='001']/BELNR")?.InnerText ?? dto.ClientOrderNumber; dto.Payer = docRoot.SelectSingleNode("E1EDKA1[PARVW='RG']/PARTN")?.InnerText?.TrimStart('0') ?? dto.Payer; } if (isNew || dto.ManualPalletsCount != true) { dto.PalletsCount = docRoot.ParseInt("E1EDK01/Y0126SD_ORDERS05_TMS_01/YYPAL_H") ?? dto.PalletsCount; } IEnumerable <string> missedRequiredFields = ValidateRequiredFields(dto); if (missedRequiredFields.Any()) { string fields = string.Join(", ", missedRequiredFields); Log.Error("В файле {fileName} отсутствуют следующие обязательные поля: {fields}. Заказ ({processedCount}/{totalCount}) не создан.", fileName, fields, processedCount, totalCount); } else { int entryInd = 0; var itemRoots = docRoot.SelectNodes("E1EDP01"); dto.Items = dto.Items ?? new List <OrderItemDto>(); var updatedItems = new HashSet <string>(); foreach (XmlNode itemRoot in itemRoots) { ++entryInd; string posex = itemRoot.SelectSingleNode("POSEX")?.InnerText ?? string.Empty; int posexNum = -1; int.TryParse(posex.TrimStart('0'), out posexNum); if ((posexNum % 10) != 0) { continue; } string nart = itemRoot.SelectSingleNode("E1EDP19/IDTNR")?.InnerText?.TrimStart('0'); if (string.IsNullOrEmpty(nart)) { Log.Warning("Пустое значение NART в позиции #{entryInd} заказа ({processedCount}/{totalCount}) из файла {fileName}, пропуск.", entryInd, processedCount, totalCount, fileName); continue; } int?quantity = itemRoot.ParseInt("MENGE"); if (quantity == null || quantity == 0) { Log.Warning("Пустое количество в позиции #{entryInd} заказа ({processedCount}/{totalCount}) из файла {fileName}, пропуск.", entryInd, processedCount, totalCount, fileName); continue; } OrderItemDto itemDto = dto.Items.Where(i => i.Nart == nart).FirstOrDefault(); if (itemDto == null) { itemDto = new OrderItemDto(); dto.Items.Add(itemDto); } else { updatedItems.Add(itemDto.Id); } itemDto.Nart = nart; itemDto.Quantity = quantity ?? itemDto.Quantity; } var itemsToRemove = dto.Items.Where(x => !string.IsNullOrEmpty(x.Id) && !updatedItems.Contains(x.Id)).ToList(); itemsToRemove.ForEach(x => dto.Items.Remove(x)); if (isNew) { Log.Information("Создан новый заказ {OrderNumber} ({processedCount}/{totalCount}) на основании файла {fileName}.", dto.OrderNumber, processedCount, totalCount, fileName); } else { Log.Information("Обновлен заказ {OrderNumber} ({processedCount}/{totalCount}) на основании файла {fileName}.", dto.OrderNumber, processedCount, totalCount, fileName); } orders.Add(dto); } } bool isSuccess = orders.Any(); if (isSuccess) { ordersService.Import(orders); } return(isSuccess); }
public DocumentsController(IDocumentsService documentsService, IWarehousesService warehousesService) { _documentsService = documentsService; _warehousesService = warehousesService; }