private OrderHead GetOrder(blading blading) { orders.Clear(); // очистка списка заказов var orderIds = new List <uint>(); if (blading.@uint != null) { orderIds.Add((uint)blading.@uint); } // если заказы объединены (накладной соответствует несколько заказов) if (orderIds.Count == 0 && blading.bladingFolder != null) { orderIds = blading.bladingFolder.Where(f => f.orderUint != null).Select(f => (uint)f.orderUint.Value).Distinct().ToList(); // берем все заказы } if (orderIds.Count == 0) { _logger.WarnFormat("Для накладной {0}({1}) не задан номер заказа", blading.bladingId, blading.baseId); return(null); } //игнорируем потеряные заказы orders = orderIds .Where(id => id <IgnoreOrderFromId || id> IgnoreOrderToId) .Select(id => ActiveRecordMediator <OrderHead> .FindByPrimaryKey(id, false)) .Where(o => o != null) .ToList(); return(orders.FirstOrDefault()); }
public void SetUp() { supplier = TestSupplier.CreateNaked(session); client1 = TestClient.CreateNaked(session); client2 = TestClient.CreateNaked(session); order1 = new TestOrder(); order1.Client = client1; order1.Address = client1.Addresses[0]; order1.Price = supplier.Prices[0]; session.Save(order1); order2 = new TestOrder(); order2.Client = client2; order2.Address = client2.Addresses[0]; order2.Price = supplier.Prices[0]; session.Save(order2); fake = new FakeProtekHandler(); fake.IgnoreOrderFromId = 0; fake.IgnoreOrderToId = 100; fake.headerResponce = new getBladingHeadersResponse { @return = new eZakazXML { blading = new[] { new blading { bladingId = 1, }, } } }; blading = new blading { bladingId = 1, @uint = (int?)order1.Id, bladingItems = new[] { new bladingItem { itemId = 3345, itemName = "Коринфар таб п/о 10мг № 50", manufacturerName = "", bitemQty = 3, country = "Хорватия/Германия", prodexpiry = DateTime.Parse("17.02.2012"), distrPriceNds = 45.05, distrPriceWonds = 40.95, vitalMed = 1, sumVat = 12.3 } }, }; fake.bodyResponce = new getBladingBodyResponse { @return = new eZakazXML { blading = new[] { blading } } }; begin = DateTime.Now; }
public static void Dump(string path, blading blading) { if (String.IsNullOrEmpty(path)) { return; } var file = Path.Combine(path, DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss_fff") + ".xml"); using (var stream = File.OpenWrite(file)) blading.ToXml(stream); }
public Document ToDocument(blading blading, ProtekServiceConfig config) { Dump(ConfigurationManager.AppSettings["DebugProtekPath"], blading); var order = GetOrder(blading); Supplier supplier = null; Address address = null; if (order != null) { supplier = order.Price.Supplier; address = order.Address; } else if (!String.IsNullOrEmpty(blading.recipientId.ToString())) { var query = new AddressIdQuery(config.SupplierId, false) { SupplierDeliveryId = blading.recipientId.ToString(), }; var addressIds = query.Query(); if (addressIds.Count > 0) { supplier = Supplier.Find(config.SupplierId); address = Address.Find(addressIds.First()); } } if (address == null) { _logger.WarnFormat("Для накладной {0}({1}) не удалось определить получателя код клиента {2} код доставки {3}", blading.bladingId, blading.baseId, blading.payerId, blading.recipientId); return(null); } var log = new DocumentReceiveLog(supplier, address, DocType.Waybill) { IsFake = true, Comment = "Получен через сервис Протек" }; var document = new Document(log, "ProtekHandler") { OrderId = order?.Id, ProviderDocumentId = blading.baseId, DocumentDate = blading.date0, }; document.SetInvoice(); var invoice = document.Invoice; invoice.InvoiceDate = blading.date0; invoice.InvoiceNumber = blading.baseId; invoice.SellerName = blading.protekNameAddr; invoice.SellerINN = blading.protekInnKpp; invoice.ShipperInfo = blading.protekAddr; invoice.RecipientId = blading.recipientId; invoice.RecipientName = blading.recipientName; invoice.RecipientAddress = blading.recipientAddr; invoice.PaymentDocumentInfo = blading.baseId; invoice.BuyerId = blading.payerId; invoice.BuyerName = blading.payerName; invoice.BuyerINN = blading.payerInn; invoice.CommissionFee = (decimal?)blading.ksMin; invoice.CommissionFeeContractId = blading.ncontr2; invoice.AmountWithoutNDS = (decimal?)blading.sumbyWonds; invoice.AmountWithoutNDS10 = (decimal?)blading.sumbyNdsrate10; invoice.NDSAmount10 = (decimal?)blading.nds10; invoice.AmountWithoutNDS18 = (decimal?)blading.sumbyNdsrate18; invoice.NDSAmount18 = (decimal?)blading.nds20; invoice.Amount = (decimal?)blading.rprice; invoice.DelayOfPaymentInBankDays = blading.dbd; invoice.DelayOfPaymentInDays = blading.dkd; foreach (var bladingItem in blading.bladingItems) { var line = document.NewLine(); line.Code = bladingItem.itemId.ToString(); line.Product = bladingItem.itemName; line.Producer = bladingItem.manufacturerName; line.Quantity = (uint?)bladingItem.bitemQty; line.Country = bladingItem.country; line.ExpireInMonths = bladingItem.expiry; line.Period = bladingItem.prodexpiry?.ToShortDateString(); line.DateOfManufacture = bladingItem.proddt; line.RegistryCost = (decimal?)bladingItem.reestrPrice; line.RegistryDate = bladingItem.reestrDate; line.SupplierPriceMarkup = (decimal?)bladingItem.distrProc; line.NdsAmount = (decimal?)bladingItem.sumVat; line.Nds = (uint?)bladingItem.vat; line.SupplierCostWithoutNDS = (decimal?)bladingItem.distrPriceWonds; line.SupplierCost = (decimal?)bladingItem.distrPriceNds; line.ProducerCostWithoutNDS = (decimal?)bladingItem.prodPriceWonds; line.VitallyImportant = bladingItem.vitalMed != null && bladingItem.vitalMed.Value == 1; line.Amount = (decimal?)bladingItem.positionsum; line.SerialNumber = bladingItem.prodseria; line.EAN13 = NullableConvert.ToUInt64(bladingItem.prodsbar); line.CountryCode = bladingItem.countryCode; line.BillOfEntryNumber = bladingItem.gtdn; line.UnitCode = bladingItem.cvpItemOkei.ToString(); if (bladingItem.bladingItemSeries != null) { var certificates = bladingItem.bladingItemSeries .Where(s => s.bladingItemSeriesCertificates != null) .SelectMany(s => s.bladingItemSeriesCertificates) .Where(c => c != null); line.ProtekDocIds = certificates .Select(c => c.docId) .Where(id => id != null) .Select(id => new ProtekDoc(line, id.Value)) .ToList(); line.Certificates = certificates.FirstOrDefault()?.regNo; line.CertificateAuthority = certificates.FirstOrDefault()?.regOrg; line.CertificatesDate = certificates.FirstOrDefault()?.regd?.ToString(); line.CertificatesEndDate = certificates.FirstOrDefault()?.dateExpire; } } return(document); }