private void CreateMatchedWaybill(SentOrderLine orderLine)
        {
            var sendOrder = orderLine.Order;
            var waybill   = new Waybill {
                ProviderDocumentId = sendOrder.Id.ToString(),
                DocumentDate       = DateTime.Now,
                WriteTime          = DateTime.Now,
                Address            = sendOrder.Address,
                Supplier           = session.Load <Supplier>(sendOrder.Price.SupplierId),
            };
            var line = new WaybillLine {
                Product      = orderLine.ProductSynonym,
                Producer     = orderLine.ProducerSynonym,
                Quantity     = (int?)orderLine.Count,
                SupplierCost = orderLine.Cost,
            };

            waybill.AddLine(line);
            waybill.Calculate(settings, new List <uint>());
            session.Save(waybill);
            session.Save(new WaybillOrder(line.Id, orderLine.ServerId.Value));
        }
        private List <WaybillLine> LoadMatchedWaybill(SentOrderLine line, IStatelessSession session)
        {
            if (line == null)
            {
                return(new List <WaybillLine>());
            }
            var ids = session
                      .CreateSQLQuery("select DocumentLineId from WaybillOrders where OrderLineId = :orderLineId")
                      .SetParameter("orderLineId", line.ServerId)
                      .List()
                      .Cast <object>()
                      .Select(Convert.ToUInt32)
                      .ToList();

            if (ids.Count == 0)
            {
                return(new List <WaybillLine>());
            }
            var lines = session.Query <WaybillLine>()
                        .Where(l => ids.Contains(l.Id))
                        .Fetch(l => l.Waybill)
                        .ThenFetch(l => l.Supplier)
                        .Fetch(l => l.Waybill)
                        .ThenFetchMany(w => w.Lines)
                        .ToList();

            if (lines.Count > 0)
            {
                var result = lines[0].Waybill.Lines.OrderBy(l => l.Product).ToList();
                //будь бдителен - хотя с точки зрения бд lines[0] и result.First(l => l.Id == lines[0].Id) один и тот же объект
                //nhibernate интерпретирует их как два разных объекта и выделение строки в ui не будет работать
                CurrentWaybillLine.Value = result.First(l => l.Id == lines[0].Id);
                return(result);
            }
            return(lines);
        }