public byte[] GenerateShipmentRequestDocument(IEnumerable <IPurchaseOrder> orders) { var orderList = orders.ToList(); m_log.Info($"Zacinam vytvareni dokumentu pro Zasilkovnu, zdroj = {orderList.Count} objednavek"); using (var stream = new MemoryStream()) using (var streamWriter = new StreamWriter(stream, Encoding.UTF8)) { var generator = new CsvGenerator(streamWriter, ZasilkovnaColIndex); foreach (var order in orderList) { try { var shipmentTitle = order.ShippingMethodName; var dobirkovaCastka = StringUtil.FormatDecimal(order.PriceWithVat); if (!string.IsNullOrWhiteSpace(dobirkovaCastka) && order.Currency.Symbol == "CZK") { dobirkovaCastka = ((int)double.Parse(dobirkovaCastka)).ToString(); } if (!order.IsPayOnDelivery) { dobirkovaCastka = string.Empty; } var pobockaId = GetPobockaId(order); if (string.IsNullOrWhiteSpace(order.CustomerEmail) && string.IsNullOrWhiteSpace(order.DeliveryAddress?.Phone) && string.IsNullOrWhiteSpace(order.InvoiceAddress?.Phone)) { throw new Exception("Musi byt telefon nebo e-mail"); } var externalDeliveryProvider = false; if (string.IsNullOrWhiteSpace(pobockaId)) { externalDeliveryProvider = true; pobockaId = GetBranches().GetPobockaId(shipmentTitle, GetShipmentMethodsMapping()); } if (order.ErpId == null) { throw new InvalidOperationException("Unexpected order without Erp"); } var erpClient = m_erpClientFactory.GetErpClient(order.ErpId.Value); var trackingNumber = erpClient.GetPackingReferenceNumber(order); decimal?weight = null; try { weight = m_orderWeightCalculator.GetWeight(order); } catch (Exception e) { m_log.Error($"Weight calc failed", e); } // not sure about Version 4 used by Elsa, but ver. 6 is documented here: https://docs.packetery.com/03-creating-packets/01-csv-import.html generator.CellOpt(null) //1 Vyhrazeno .CellMan(trackingNumber) //2 Číslo objednávky .CellMan(order.DeliveryAddress?.FirstName, order.InvoiceAddress?.FirstName) //3 Jméno .CellMan(order.DeliveryAddress?.LastName, order.InvoiceAddress?.LastName) //4 Příjmení .CellOpt( externalDeliveryProvider ? (string.IsNullOrWhiteSpace(order.DeliveryAddress?.CompanyName) ? order.InvoiceAddress?.CompanyName : order.DeliveryAddress?.CompanyName) : string.Empty) //5 Firma .CellOpt(order.CustomerEmail) //6 E-mail .CellOpt(order.DeliveryAddress?.Phone, order.InvoiceAddress?.Phone) //7 Mobil .CellOpt(dobirkovaCastka) //8 Dobírková částka .CellMan(order.Currency.Symbol) //9 Měna .CellMan(StringUtil.FormatDecimal(order.PriceWithVat)) //10 Hodnota zásilky .CellOpt(StringUtil.FormatDecimal(weight)) //11 Hmotnost zásilky .CellMan(pobockaId) //12 Cílová pobočka .CellMan(/*"biorythme.cz"*/ m_config.ClientName) //13 Odesilatel .CellMan(0) //14 Obsah 18+ .CellOpt(null) //15 Zpožděný výdej ; if (externalDeliveryProvider) { generator.CellMan(order.DeliveryAddress?.Street, order.InvoiceAddress?.Street) //16 .CellMan( GetFormattedHouseNumber(order.DeliveryAddress), GetFormattedHouseNumber(order.InvoiceAddress)) //17 .CellMan(order.DeliveryAddress?.City, order.InvoiceAddress?.City) //18 .CellMan(order.DeliveryAddress?.Zip, order.InvoiceAddress?.Zip) //19 ; } generator.CommitRow(); } catch (Exception ex) { generator.RollbackRow(); throw new InvalidOperationException( "Chyba objednavky " + order.OrderNumber + ":" + ex.Message, ex); } } streamWriter.Flush(); return(stream.ToArray()); } }