Beispiel #1
0
 public bool HasRouteListItemsForOrder(IUnitOfWork uow, Domain.Orders.Order order)
 {
     return(uow.Session.QueryOver <RouteListItem>()
            .Where(x => x.Order.Id == order.Id)
            .Select(Projections.Count <RouteListItem>(x => x.Id))
            .SingleOrDefault <int>() > 0);
 }
Beispiel #2
0
        public async Task <bool> ProcessPayment(Domain.Orders.Order order, PaymentDTO payment)
        {
            var orderRequest = new OrderInProcessingIntegrationEvent()
            {
                OrderId     = order.Id,
                CustomerId  = order.CustomerId,
                Price       = order.Amount,
                PaymentType = 1, //TODO: Implement the proper type in the future
                CardName    = payment.CardHolderName,
                CardNumber  = payment.CardNumber,
                Expiration  = payment.CardExpiration,
                CVV         = payment.CardCvv
            };

            var response = await _messageBus.RequestAsync <OrderInProcessingIntegrationEvent, ResponseMessage>(orderRequest);

            if (response.ValidResult.IsValid)
            {
                return(true);
            }

            foreach (var error in response.ValidResult.Errors)
            {
                AddError(error.ErrorMessage);
            }

            return(false);
        }
Beispiel #3
0
 public bool WasOrderInAnyRouteList(IUnitOfWork uow, Domain.Orders.Order order)
 {
     return(!uow.Session.QueryOver <RouteListItem>()
            .Where(i => i.Order == order)
            .List()
            .Any());
 }
Beispiel #4
0
        public static OrderDTO Map(Domain.Orders.Order order)
        {
            var orderDTO = new OrderDTO {
                Id          = order.Id,
                Code        = order.Code,
                Status      = (int)order.OrderStatus,
                CreatedDate = order.CreatedDate,
                Amount      = order.Amount,
                Discount    = order.DiscountApplied,
                HasVoucher  = order.IsUsedVoucher,
                Items       = new List <OrderItemDTO>(),
                Address     = new AddressDTO()
            };

            foreach (var item in order.OrderItems)
            {
                orderDTO.Items.Add(new OrderItemDTO {
                    Name      = item.ProductName,
                    Image     = item.Image,
                    Qty       = item.Qty,
                    ProductId = item.ProductId,
                    Price     = item.Price,
                    OrderId   = item.OrderId
                });
            }

            return(orderDTO);
        }
Beispiel #5
0
        public RouteListItem GetRouteListItemForOrder(IUnitOfWork uow, Domain.Orders.Order order)
        {
            RouteListItem routeListItemAlias = null;

            return(uow.Session.QueryOver(() => routeListItemAlias)
                   .Where(rli => rli.Status != RouteListItemStatus.Transfered)
                   .Where(() => routeListItemAlias.Order.Id == order.Id)
                   .SingleOrDefault());
        }
Beispiel #6
0
        public RouteList GetRouteListByOrder(IUnitOfWork uow, Domain.Orders.Order order)
        {
            RouteList     routeListAlias     = null;
            RouteListItem routeListItemAlias = null;

            return(uow.Session.QueryOver(() => routeListAlias)
                   .Left.JoinAlias(() => routeListAlias.Addresses, () => routeListItemAlias)
                   .Where(() => routeListItemAlias.Order.Id == order.Id)
                   .List()
                   .FirstOrDefault());
        }
        public IEnumerable <CallTask> GetAutoGeneratedTask(IUnitOfWork UoW, Domain.Orders.Order order, CallTaskStatus?taskStatus = null)
        {
            CallTask callTaskAlias = null;

            return(UoW.Session.QueryOver(() => callTaskAlias)
                   .Where(x => x.SourceDocumentId.Value == order.Id)
                   .And(x => x.Source == TaskSource.AutoFromOrder)
                   .And(x => x.Comment == null)
                   .And(x => !x.IsTaskComplete)
                   .And(x => taskStatus == null || x.TaskState == taskStatus.Value)
                   .Take(1)
                   .List());
        }
Beispiel #8
0
        public int CreateOrder(int customerID, List <IncomingOrderItemGroup> incomingOrderItems)
        {
            var itemGroup = new List <OrderItemGroup>();

            foreach (var item in incomingOrderItems)
            {
                var itemtobeordered = itemService.GetByID(item.ItemID);
                CheckIfItemExistsInDatabase(item, itemtobeordered);
                itemGroup.Add(new OrderItemGroup(itemtobeordered, item.ItemAmount));
            }
            Domain.Orders.Order order = new Domain.Orders.Order(itemGroup, customerID);
            Database.Orders.Add(order);
            return(order.ID);
        }
Beispiel #9
0
        public ReferenceNode CreateReferenceToContract(Domain.Orders.Order order)
        {
            if (order.Contract != null)
            {
                return(CreateReferenceTo(order.Contract));
            }

            var contract = new VirtualContract(
                order.Client,
                order.Contract.Organization,
                $"{order.Client.VodovozInternalId}-1"
                );

            return(CreateReferenceTo(contract));
        }
Beispiel #10
0
        public async Task <Domain.Orders.Order> Insert(Domain.Orders.Order order)
        {
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            var dbOrder = order.ToDalOrNull(OrderConverter.ToDalNew);

            await _orders.AddAsync(dbOrder);

            await context.SaveChangesAsync();

            return(dbOrder.ToDomainOrNull(OrderConverter.ToDomain));
        }
Beispiel #11
0
        public static IEnumerable <OrderCountResultNode> OrdersCountByDistrict(IUnitOfWork uow, DateTime date, int minBottlesInOrder)
        {
            OrderCountResultNode resultAlias = null;

            Domain.Orders.Order orderAlias         = null;
            OrderItem           orderItemsAlias    = null;
            DeliveryPoint       deliveryPointAlias = null;

            var districtSubquery = QueryOver.Of <District>()
                                   .Where(
                Restrictions.Eq(
                    Projections.SqlFunction(
                        new SQLFunctionTemplate(
                            NHibernateUtil.Boolean,
                            "ST_WITHIN(PointFromText(CONCAT('POINT(', ?1 ,' ', ?2,')')), ?3)"
                            ),
                        NHibernateUtil.Boolean,
                        Projections.Property(() => deliveryPointAlias.Latitude),
                        Projections.Property(() => deliveryPointAlias.Longitude),
                        Projections.Property <District>(x => x.DistrictBorder)
                        ),
                    true
                    )
                )
                                   .Select(x => x.Id)
                                   .Take(1);

            return(uow.Session.QueryOver(() => orderAlias)
                   .Where(x => x.DeliveryDate == date)
                   .Where(x => x.OrderStatus == OrderStatus.Accepted || x.OrderStatus == OrderStatus.InTravelList)
                   .JoinQueryOver(x => x.OrderItems, () => orderItemsAlias)
                   .JoinQueryOver(x => x.Nomenclature)
                   .Where(x => x.Category == Domain.Goods.NomenclatureCategory.water && !x.IsDisposableTare)
                   .JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                   .SelectList(list => list.SelectGroup(x => x.Id).WithAlias(() => resultAlias.OrderId)
                               .SelectSum(() => (int)orderItemsAlias.Count).WithAlias(() => resultAlias.WaterCount)
                               .SelectSubQuery(districtSubquery).WithAlias(() => resultAlias.DistrictId)
                               )
                   .Where(Restrictions.Gt(
                              Projections.Sum(
                                  Projections.Property(() => orderItemsAlias.Count)), 12))
                   .TransformUsing(Transformers.AliasToBean <OrderCountResultNode>())
                   .List <OrderCountResultNode>());
        }
Beispiel #12
0
        private Domain.Orders.Order OrderMap(CreateOrderCommand message)
        {
            var address = new Address
            {
                Street   = message.Address.Street,
                Number   = message.Address.Number,
                City     = message.Address.City,
                State    = message.Address.State,
                Country  = message.Address.Country,
                PostCode = message.Address.PostCode
            };

            var order = new Domain.Orders.Order(message.CustomerId, message.TotalPrice, message.Items.Select(OrderItemDTO.Map).ToList(),
                                                message.HasVoucher, message.Voucher != null ? message.Voucher.Discount: 0);

            order.SetAddress(address);
            order.StartOrder();
            return(order);
        }
Beispiel #13
0
        private bool ApplyVoucher(CreateOrderCommand message, Domain.Orders.Order order)
        {
            if (!message.HasVoucher)
            {
                return(true);
            }
            var voucher = new Voucher(message.Voucher.Code, message.Voucher.Discount, 1, (VoucherType)message.Voucher.DiscountType, DateTime.Now.AddMinutes(1), true, false);

            var voucherValidation = new VoucherValidation().Validate(voucher);

            if (!voucherValidation.IsValid)
            {
                voucherValidation.Errors.ToList().ForEach(m => AddError(m.ErrorMessage));
                return(false);
            }

            order.ApplyVoucher(voucher);
            return(true);
        }
Beispiel #14
0
        public async Task <Domain.Orders.Order> Update(Domain.Orders.Order order)
        {
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            var dbOrder = await findByIdWithTracking(order.Id);

            if (dbOrder == null)
            {
                return(null);
            }

            dbOrder.State      = order.State.ToDal();
            dbOrder.TotalPrice = order.TotalPrice;

            await context.SaveChangesAsync();

            return(dbOrder.ToDomainOrNull(OrderConverter.ToDomain));
        }
Beispiel #15
0
        private bool OrderValidation(Domain.Orders.Order order)
        {
            var orderPrice    = order.Amount;
            var orderDiscount = order.DiscountApplied;

            order.CalculateOrderAmount();

            if (order.Amount != orderPrice)
            {
                AddError("Price of order is different");
                return(false);
            }

            if (order.DiscountApplied != orderDiscount)
            {
                AddError("Discount Applied is different");
                return(false);
            }

            return(true);
        }
Beispiel #16
0
        private IEnumerable <PromosetDuplicateInfoNode> GetDeliveryPointResult(IUnitOfWork uow, DeliveryPoint deliveryPoint)
        {
            DeliveryPoint deliveryPointAlias = null;

            Domain.Orders.Order     orderAlias        = null;
            Domain.Orders.OrderItem orderItemAlias    = null;
            Counterparty            counterpartyAlias = null;
            Phone counterpartyPhoneAlias          = null;
            Phone deliveryPointPhoneAlias         = null;
            PromosetDuplicateInfoNode resultAlias = null;

            var query = uow.Session.QueryOver(() => orderAlias)
                        .Left.JoinAlias(() => orderAlias.OrderItems, () => orderItemAlias)
                        .Left.JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                        .Left.JoinAlias(() => orderAlias.Client, () => counterpartyAlias)
                        .Left.JoinAlias(() => counterpartyAlias.Phones, () => counterpartyPhoneAlias)
                        .Left.JoinAlias(() => deliveryPointAlias.Phones, () => deliveryPointPhoneAlias)
                        .Where(
                Restrictions.And(
                    Restrictions.Where(() =>
                                       deliveryPointAlias.City == deliveryPoint.City &&
                                       deliveryPointAlias.Street == deliveryPoint.Street &&
                                       deliveryPointAlias.Building == deliveryPoint.Building &&
                                       deliveryPointAlias.Room == deliveryPoint.Room
                                       ),
                    Restrictions.Ge(Projections.Property(() => deliveryPointAlias.Room), 1)
                    )
                )
                        .Where(Restrictions.IsNotNull(Projections.Property(() => orderItemAlias.PromoSet)));

            var deliveryPointsResult = query.SelectList(list => list
                                                        .SelectGroup(() => orderAlias.Id)
                                                        .Select(() => orderAlias.DeliveryDate).WithAlias(() => resultAlias.Date)
                                                        .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Client)
                                                        .Select(() => deliveryPointAlias.CompiledAddress).WithAlias(() => resultAlias.Address)
                                                        ).TransformUsing(Transformers.AliasToBean <PromosetDuplicateInfoNode>())
                                       .List <PromosetDuplicateInfoNode>();

            return(deliveryPointsResult);
        }
Beispiel #17
0
        public async Task <Domain.Orders.Order> InserOrderItem(Domain.Orders.Order order, Domain.OrderItems.OrderItem item)
        {
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }

            var dbOrderItem = item.ToDalOrNull(OrderItems.DbEntites.OrderItemConverter.ToDalNew);

            var dbOrder = order.ToDalOrNull(OrderConverter.ToDal);

            dbOrder.Items.Add(dbOrderItem);

            await context.SaveChangesAsync();

            return(dbOrder.ToDomainOrNull(OrderConverter.ToDomain));
        }
        public bool IsOrderCloseWithoutDelivery(IUnitOfWork uow, Domain.Orders.Order order)
        {
            if (uow == null)
            {
                throw new ArgumentNullException(nameof(uow));
            }
            if (order == null)
            {
                throw new ArgumentNullException(nameof(order));
            }

            if (order.OrderStatus != OrderStatus.Closed)
            {
                return(false);
            }


            var routeListItem = uow.Session.QueryOver <RouteListItem>()
                                .Where(x => x.Order.Id == order.Id)
                                .Take(1).List()?.FirstOrDefault();

            if (routeListItem != null)
            {
                return(false);
            }

            var selfDeliveryDocument = uow.Session.QueryOver <SelfDeliveryDocument>()
                                       .Where(x => x.Order.Id == order.Id)
                                       .Take(1).List()?.FirstOrDefault();

            if (selfDeliveryDocument != null)
            {
                return(false);
            }

            return(true);
        }
Beispiel #19
0
 public Task SaveAsync(Domain.Orders.Order aAggregateRoot)
 {
     throw new System.NotImplementedException();
 }
        private IQueryOver <UndeliveredOrder> GetUndeliveredOrdersQuery(IUnitOfWork uow)
        {
            UndeliveredOrderJournalNode resultAlias           = null;
            UndeliveredOrder            undeliveredOrderAlias = null;

            Domain.Orders.Order oldOrderAlias       = null;
            Domain.Orders.Order newOrderAlias       = null;
            Employee            driverAlias         = null;
            Employee            oldOrderAuthorAlias = null;
            Employee            authorAlias         = null;
            Employee            editorAlias         = null;
            Employee            registratorAlias    = null;
            Nomenclature        nomenclatureAlias   = null;
            OrderItem           orderItemAlias      = null;
            OrderEquipment      orderEquipmentAlias = null;
            Counterparty        counterpartyAlias   = null;
            DeliveryPoint       undeliveredOrderDeliveryPointAlias    = null;
            DeliverySchedule    undeliveredOrderDeliveryScheduleAlias = null;
            DeliverySchedule    newOrderDeliveryScheduleAlias         = null;
            RouteList           routeListAlias             = null;
            RouteListItem       routeListItemAlias         = null;
            Subdivision         subdivisionAlias           = null;
            Fine               fineAlias                   = null;
            FineItem           fineItemAlias               = null;
            Employee           finedEmployeeAlias          = null;
            Subdivision        inProcessAtSubdivisionAlias = null;
            Subdivision        authorSubdivisionAlias      = null;
            GuiltyInUndelivery guiltyInUndeliveryAlias     = null;

            var subqueryDrivers = QueryOver.Of <RouteListItem>(() => routeListItemAlias)
                                  .Where(() => routeListItemAlias.Order.Id == oldOrderAlias.Id)
                                  .Left.JoinQueryOver(i => i.RouteList, () => routeListAlias)
                                  .Left.JoinAlias(i => i.Driver, () => driverAlias)
                                  .Select(
                Projections.SqlFunction(
                    new SQLFunctionTemplate(NHibernateUtil.String,
                                            "GROUP_CONCAT(CONCAT(?1, ' ', LEFT(?2,1),'.',LEFT(?3,1)) ORDER BY ?4 DESC SEPARATOR '\n\t↑\n')"),             //⬆
                    NHibernateUtil.String,
                    Projections.Property(() => driverAlias.LastName),
                    Projections.Property(() => driverAlias.Name),
                    Projections.Property(() => driverAlias.Patronymic),
                    Projections.Property(() => routeListItemAlias.Id)
                    )
                );

            var subquery19LWaterQty = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                      .Where(() => orderItemAlias.Order.Id == oldOrderAlias.Id)
                                      .Left.JoinQueryOver(i => i.Nomenclature, () => nomenclatureAlias)
                                      .Where(n => n.Category == NomenclatureCategory.water && n.TareVolume == TareVolume.Vol19L)
                                      .Select(Projections.Sum(() => orderItemAlias.Count));

            var subqueryGoodsToClient = QueryOver.Of <OrderEquipment>(() => orderEquipmentAlias)
                                        .Where(() => orderEquipmentAlias.Order.Id == oldOrderAlias.Id)
                                        .Where(() => orderEquipmentAlias.Direction == Direction.Deliver)
                                        .Left.JoinQueryOver(i => i.Nomenclature, () => nomenclatureAlias)
                                        .Select(
                Projections.SqlFunction(
                    new SQLFunctionTemplate(NHibernateUtil.String,
                                            "TRIM(GROUP_CONCAT(CONCAT(IF(?1 IS NULL, ?2, ?1),':',?3) SEPARATOR ?4))"),
                    NHibernateUtil.String,
                    Projections.Property(() => nomenclatureAlias.ShortName),
                    Projections.Property(() => nomenclatureAlias.Name),
                    Projections.Property(() => orderEquipmentAlias.Count),
                    Projections.Constant("\n")
                    )
                );

            var subqueryGoodsFromClient = QueryOver.Of <OrderEquipment>(() => orderEquipmentAlias)
                                          .Where(() => orderEquipmentAlias.Order.Id == oldOrderAlias.Id)
                                          .Where(() => orderEquipmentAlias.Direction == Direction.PickUp)
                                          .Left.JoinQueryOver(i => i.Nomenclature, () => nomenclatureAlias)
                                          .Select(
                Projections.SqlFunction(
                    new SQLFunctionTemplate(NHibernateUtil.String,
                                            "TRIM(GROUP_CONCAT(CONCAT(IF(?1 IS NULL, ?2, ?1),':',?3) SEPARATOR ?4))"),
                    NHibernateUtil.String,
                    Projections.Property(() => nomenclatureAlias.ShortName),
                    Projections.Property(() => nomenclatureAlias.Name),
                    Projections.Property(() => orderEquipmentAlias.Count),
                    Projections.Constant("\n")
                    )
                );

            var subqueryGuilty = QueryOver.Of <GuiltyInUndelivery>(() => guiltyInUndeliveryAlias)
                                 .Where(() => undeliveredOrderAlias.Id == guiltyInUndeliveryAlias.UndeliveredOrder.Id)
                                 .Left.JoinQueryOver(g => g.GuiltyDepartment, () => subdivisionAlias)
                                 .Select(
                Projections.SqlFunction(
                    new SQLFunctionTemplate(NHibernateUtil.String,
                                            "GROUP_CONCAT(CONCAT(" +
                                            "CASE ?1 " +
                                            $"WHEN '{nameof(GuiltyTypes.Client)}' THEN 'Клиент' " +
                                            $"WHEN '{nameof(GuiltyTypes.Driver)}' THEN 'Водитель' " +
                                            $"WHEN '{nameof(GuiltyTypes.Department)}' THEN 'Отд' " +
                                            $"WHEN '{nameof(GuiltyTypes.ServiceMan)}' THEN 'Мастер СЦ' " +
                                            $"WHEN '{nameof(GuiltyTypes.ForceMajor)}' THEN 'Форс-мажор' " +
                                            $"WHEN '{nameof(GuiltyTypes.None)}' THEN 'Нет (не недовоз)' " +
                                            "ELSE 'Неизвестно' " +
                                            "END, " +
                                            "IF(?1 = 'Department' AND ?2 = '', ':Неизвестно', " +
                                            "IF(?1 = 'Department' AND ?2 != '', CONCAT(':', ?2), ''))) " +
                                            "SEPARATOR '\n')"),
                    NHibernateUtil.String,
                    Projections.Property(() => guiltyInUndeliveryAlias.GuiltySide),
                    Projections.Property(() => subdivisionAlias.ShortName)
                    )
                );

            var subqueryFined = QueryOver.Of <Fine>(() => fineAlias)
                                .Where(() => fineAlias.UndeliveredOrder.Id == undeliveredOrderAlias.Id)
                                .Left.JoinAlias(() => fineAlias.Items, () => fineItemAlias)
                                .Left.JoinAlias(() => fineItemAlias.Employee, () => finedEmployeeAlias)
                                .Select(
                Projections.SqlFunction(
                    new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT(CONCAT_WS(': ', ?1, ?2) SEPARATOR '\n')"),
                    NHibernateUtil.String,
                    Projections.Property(() => finedEmployeeAlias.LastName),
                    Projections.Property(() => fineItemAlias.Money)
                    )
                );

            var query = uow.Session.QueryOver <UndeliveredOrder>(() => undeliveredOrderAlias)
                        .Left.JoinAlias(u => u.OldOrder, () => oldOrderAlias)
                        .Left.JoinAlias(u => u.NewOrder, () => newOrderAlias)
                        .Left.JoinAlias(() => oldOrderAlias.Client, () => counterpartyAlias)
                        .Left.JoinAlias(() => newOrderAlias.DeliverySchedule, () => newOrderDeliveryScheduleAlias)
                        .Left.JoinAlias(() => oldOrderAlias.Author, () => oldOrderAuthorAlias)
                        .Left.JoinAlias(() => oldOrderAlias.DeliveryPoint, () => undeliveredOrderDeliveryPointAlias)
                        .Left.JoinAlias(() => oldOrderAlias.DeliverySchedule, () => undeliveredOrderDeliveryScheduleAlias)
                        .Left.JoinAlias(u => u.Author, () => authorAlias)
                        .Left.JoinAlias(u => u.LastEditor, () => editorAlias)
                        .Left.JoinAlias(u => u.EmployeeRegistrator, () => registratorAlias)
                        .Left.JoinAlias(u => u.InProcessAtDepartment, () => inProcessAtSubdivisionAlias)
                        .Left.JoinAlias(u => u.Author.Subdivision, () => authorSubdivisionAlias)
                        .Left.JoinAlias(() => undeliveredOrderAlias.GuiltyInUndelivery, () => guiltyInUndeliveryAlias)
                        .Left.JoinAlias(() => guiltyInUndeliveryAlias.GuiltyDepartment, () => subdivisionAlias);

            if (FilterViewModel?.RestrictDriver != null)
            {
                var oldOrderIds = _undeliveredOrdersRepository.GetListOfUndeliveryIdsForDriver(UoW, FilterViewModel.RestrictDriver);
                query.Where(() => oldOrderAlias.Id.IsIn(oldOrderIds.ToArray()));
            }

            if (FilterViewModel?.RestrictOldOrder != null)
            {
                query.Where(() => oldOrderAlias.Id == FilterViewModel.RestrictOldOrder.Id);
            }

            if (FilterViewModel?.RestrictClient != null)
            {
                query.Where(() => counterpartyAlias.Id == FilterViewModel.RestrictClient.Id);
            }

            if (FilterViewModel?.RestrictAddress != null)
            {
                query.Where(() => undeliveredOrderDeliveryPointAlias.Id == FilterViewModel.RestrictAddress.Id);
            }

            if (FilterViewModel?.RestrictAuthorSubdivision != null)
            {
                query.Where(() => authorAlias.Subdivision.Id == FilterViewModel.RestrictAuthorSubdivision.Id);
            }

            if (FilterViewModel?.RestrictOldOrderAuthor != null)
            {
                query.Where(() => oldOrderAuthorAlias.Id == FilterViewModel.RestrictOldOrderAuthor.Id);
            }

            if (FilterViewModel?.RestrictOldOrderStartDate != null)
            {
                query.Where(() => oldOrderAlias.DeliveryDate >= FilterViewModel.RestrictOldOrderStartDate);
            }

            if (FilterViewModel?.RestrictOldOrderEndDate != null)
            {
                query.Where(() => oldOrderAlias.DeliveryDate <= FilterViewModel.RestrictOldOrderEndDate.Value.AddDays(1).AddTicks(-1));
            }

            if (FilterViewModel?.RestrictNewOrderStartDate != null)
            {
                query.Where(() => newOrderAlias.DeliveryDate >= FilterViewModel.RestrictNewOrderStartDate);
            }

            if (FilterViewModel?.RestrictNewOrderEndDate != null)
            {
                query.Where(() => newOrderAlias.DeliveryDate <= FilterViewModel.RestrictNewOrderEndDate.Value.AddDays(1).AddTicks(-1));
            }

            if (FilterViewModel?.RestrictGuiltySide != null)
            {
                query.Where(() => guiltyInUndeliveryAlias.GuiltySide == FilterViewModel.RestrictGuiltySide);
            }

            if (FilterViewModel != null && FilterViewModel.RestrictIsProblematicCases)
            {
                query.Where(() => !guiltyInUndeliveryAlias.GuiltySide.IsIn(FilterViewModel.ExcludingGuiltiesForProblematicCases));
            }

            if (FilterViewModel?.RestrictGuiltyDepartment != null)
            {
                query.Where(() => subdivisionAlias.Id == FilterViewModel.RestrictGuiltyDepartment.Id);
            }

            if (FilterViewModel?.RestrictInProcessAtDepartment != null)
            {
                query.Where(u => u.InProcessAtDepartment.Id == FilterViewModel.RestrictInProcessAtDepartment.Id);
            }

            if (FilterViewModel?.NewInvoiceCreated != null)
            {
                if (FilterViewModel.NewInvoiceCreated.Value)
                {
                    query.Where(u => u.NewOrder != null);
                }
                else
                {
                    query.Where(u => u.NewOrder == null);
                }
            }

            if (FilterViewModel?.RestrictUndeliveryStatus != null)
            {
                query.Where(u => u.UndeliveryStatus == FilterViewModel.RestrictUndeliveryStatus);
            }

            if (FilterViewModel?.RestrictUndeliveryAuthor != null)
            {
                query.Where(u => u.Author == FilterViewModel.RestrictUndeliveryAuthor);
            }

            var addressProjection = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.String,
                                        "CONCAT_WS(', ', ?1, CONCAT('д.', ?2), CONCAT('лит.', ?3), CONCAT('кв/оф ', ?4))"),
                NHibernateUtil.String,
                Projections.Property(() => undeliveredOrderDeliveryPointAlias.Street),
                Projections.Property(() => undeliveredOrderDeliveryPointAlias.Building),
                Projections.Property(() => undeliveredOrderDeliveryPointAlias.Letter),
                Projections.Property(() => undeliveredOrderDeliveryPointAlias.Room));

            var oldOrderAuthorProjection = CustomProjections.Concat_WS(" ",
                                                                       () => oldOrderAuthorAlias.LastName, () => oldOrderAuthorAlias.Name, () => oldOrderAuthorAlias.Patronymic);

            var registratorProjection = CustomProjections.Concat_WS(" ",
                                                                    () => registratorAlias.LastName, () => registratorAlias.Name, () => registratorAlias.Patronymic);

            var authorProjection = CustomProjections.Concat_WS(" ",
                                                               () => authorAlias.LastName, () => authorAlias.Name, () => authorAlias.Patronymic);


            query.Where(GetSearchCriterion(
                            () => undeliveredOrderAlias.Id,
                            () => addressProjection,
                            () => counterpartyAlias.Name,
                            () => undeliveredOrderAlias.Reason,
                            () => oldOrderAuthorProjection,
                            () => registratorProjection,
                            () => authorProjection)
                        );

            var itemsQuery = query.SelectList(list => list
                                              .SelectGroup(() => undeliveredOrderAlias.Id).WithAlias(() => resultAlias.Id)
                                              .Select(() => newOrderAlias.Id).WithAlias(() => resultAlias.NewOrderId)
                                              .Select(() => newOrderAlias.DeliveryDate).WithAlias(() => resultAlias.NewOrderDeliveryDate)
                                              .Select(() => newOrderDeliveryScheduleAlias.Name).WithAlias(() => resultAlias.NewOrderDeliverySchedule)
                                              .Select(() => oldOrderAlias.Id).WithAlias(() => resultAlias.OldOrderId)
                                              .Select(() => oldOrderAlias.DeliveryDate).WithAlias(() => resultAlias.OldOrderDeliveryDateTime)
                                              .Select(() => undeliveredOrderAlias.DispatcherCallTime).WithAlias(() => resultAlias.DispatcherCallTime)
                                              .Select(() => undeliveredOrderAlias.DriverCallNr).WithAlias(() => resultAlias.DriverCallNr)
                                              .Select(() => undeliveredOrderAlias.DriverCallTime).WithAlias(() => resultAlias.DriverCallTime)
                                              .Select(() => undeliveredOrderAlias.DriverCallType).WithAlias(() => resultAlias.DriverCallType)
                                              .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Client)
                                              .Select(() => oldOrderAuthorAlias.LastName).WithAlias(() => resultAlias.OldOrderAuthorLastName)
                                              .Select(() => oldOrderAuthorAlias.Name).WithAlias(() => resultAlias.OldOrderAuthorFirstName)
                                              .Select(() => oldOrderAuthorAlias.Patronymic).WithAlias(() => resultAlias.OldOrderAuthorMiddleName)
                                              .Select(() => undeliveredOrderDeliveryScheduleAlias.Name).WithAlias(() => resultAlias.OldDeliverySchedule)
                                              .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorLastName)
                                              .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorFirstName)
                                              .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorMiddleName)
                                              .Select(() => registratorAlias.LastName).WithAlias(() => resultAlias.RegistratorLastName)
                                              .Select(() => registratorAlias.Name).WithAlias(() => resultAlias.RegistratorFirstName)
                                              .Select(() => registratorAlias.Patronymic).WithAlias(() => resultAlias.RegistratorMiddleName)
                                              .Select(() => editorAlias.LastName).WithAlias(() => resultAlias.EditorLastName)
                                              .Select(() => editorAlias.Name).WithAlias(() => resultAlias.EditorFirstName)
                                              .Select(() => editorAlias.Patronymic).WithAlias(() => resultAlias.EditorMiddleName)
                                              .Select(() => undeliveredOrderAlias.Reason).WithAlias(() => resultAlias.Reason)
                                              .Select(() => undeliveredOrderAlias.UndeliveryStatus).WithAlias(() => resultAlias.UndeliveryStatus)
                                              .Select(() => undeliveredOrderAlias.OldOrderStatus).WithAlias(() => resultAlias.StatusOnOldOrderCancel)
                                              .Select(() => oldOrderAlias.OrderStatus).WithAlias(() => resultAlias.OldOrderCurStatus)
                                              .Select(() => inProcessAtSubdivisionAlias.Name).WithAlias(() => resultAlias.InProcessAt)
                                              .SelectSubQuery(subqueryDrivers).WithAlias(() => resultAlias.OldRouteListDriverName)
                                              .SelectSubQuery(subquery19LWaterQty).WithAlias(() => resultAlias.OldOrder19LBottleQty)
                                              .SelectSubQuery(subqueryGoodsToClient).WithAlias(() => resultAlias.OldOrderGoodsToClient)
                                              .SelectSubQuery(subqueryGoodsFromClient).WithAlias(() => resultAlias.OldOrderGoodsFromClient)
                                              .SelectSubQuery(subqueryFined).WithAlias(() => resultAlias.Fined)
                                              .SelectSubQuery(subqueryGuilty).WithAlias(() => resultAlias.Guilty)
                                              .Select(addressProjection).WithAlias(() => resultAlias.Address)
                                              ).OrderBy(() => oldOrderAlias.DeliveryDate).Asc
                             .TransformUsing(Transformers.AliasToBean <UndeliveredOrderJournalNode>());

            return(itemsQuery);
        }
Beispiel #21
0
        private IQueryOver <ClientTask> GetClientTaskQuery(IUnitOfWork uow)
        {
            DeliveryPoint            deliveryPointAlias   = null;
            BottlesMovementOperation bottlesMovementAlias = null;
            ClientTask callTaskAlias = null;
            BusinessTaskJournalNode <ClientTask> resultAlias = null;
            Counterparty counterpartyAlias        = null;
            Employee     employeeAlias            = null;
            Phone        deliveryPointPhonesAlias = null;
            Phone        counterpartyPhonesAlias  = null;

            Domain.Orders.Order orderAlias = null;

            var tasksQuery = UoW.Session.QueryOver(() => callTaskAlias)
                             .Left.JoinAlias(() => callTaskAlias.DeliveryPoint, () => deliveryPointAlias);

            switch (FilterViewModel.DateType)
            {
            case TaskFilterDateType.CreationTime:
                tasksQuery.Where(x => x.CreationDate >= FilterViewModel.StartDate.Date)
                .And(x => x.CreationDate <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;

            case TaskFilterDateType.CompleteTaskDate:
                tasksQuery.Where(x => x.CompleteDate >= FilterViewModel.StartDate.Date)
                .And(x => x.CompleteDate <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;

            default:
                tasksQuery.Where(x => x.EndActivePeriod >= FilterViewModel.StartDate.Date)
                .And(x => x.EndActivePeriod <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;
            }

            if (FilterViewModel.Employee != null)
            {
                tasksQuery.Where(x => x.AssignedEmployee == FilterViewModel.Employee);
            }
            else if (FilterViewModel.ShowOnlyWithoutEmployee)
            {
                tasksQuery.Where(x => x.AssignedEmployee == null);
            }

            if (FilterViewModel.HideCompleted)
            {
                tasksQuery.Where(x => !x.IsTaskComplete);
            }

            if (FilterViewModel.DeliveryPointCategory != null)
            {
                tasksQuery.Where(() => deliveryPointAlias.Category == FilterViewModel.DeliveryPointCategory);
            }

            var bottleDebtByAddressQuery = UoW.Session.QueryOver(() => bottlesMovementAlias)
                                           .JoinAlias(() => bottlesMovementAlias.Order, () => orderAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                           .Where(() => bottlesMovementAlias.Counterparty.Id == counterpartyAlias.Id)
                                           .And(() => bottlesMovementAlias.DeliveryPoint.Id == deliveryPointAlias.Id || orderAlias.SelfDelivery)
                                           .Select(
                Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int32, "( ?2 - ?1 )"),
                                        NHibernateUtil.Int32, new IProjection[] {
                Projections.Sum(() => bottlesMovementAlias.Returned),
                Projections.Sum(() => bottlesMovementAlias.Delivered)
            }
                                        ));

            var bottleDebtByClientQuery = UoW.Session.QueryOver(() => bottlesMovementAlias)
                                          .Where(() => bottlesMovementAlias.Counterparty.Id == counterpartyAlias.Id)
                                          .Select(
                Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int32, "( ?2 - ?1 )"),
                                        NHibernateUtil.Int32, new IProjection[] {
                Projections.Sum(() => bottlesMovementAlias.Returned),
                Projections.Sum(() => bottlesMovementAlias.Delivered)
            }
                                        ));

            tasksQuery.Where(
                GetSearchCriterion(
                    () => callTaskAlias.Id,
                    () => deliveryPointAlias.ShortAddress,
                    () => counterpartyAlias.Name,
                    () => callTaskAlias.TaskState
                    )
                );

            var tasks = tasksQuery
                        .Left.JoinAlias(() => deliveryPointAlias.Phones, () => deliveryPointPhonesAlias)
                        .Left.JoinAlias(() => counterpartyAlias.Phones, () => counterpartyPhonesAlias)
                        .Left.JoinAlias(() => callTaskAlias.Counterparty, () => counterpartyAlias)
                        .Left.JoinAlias(() => callTaskAlias.AssignedEmployee, () => employeeAlias)
                        .SelectList(list => list
                                    .SelectGroup(() => callTaskAlias.Id)
                                    .Select(() => deliveryPointAlias.ShortAddress).WithAlias(() => resultAlias.AddressName)
                                    .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.ClientName)
                                    .Select(() => employeeAlias.Name).WithAlias(() => resultAlias.EmployeeName)
                                    .Select(() => employeeAlias.LastName).WithAlias(() => resultAlias.EmployeeLastName)
                                    .Select(() => employeeAlias.Patronymic).WithAlias(() => resultAlias.EmployeePatronymic)
                                    .Select(() => callTaskAlias.EndActivePeriod).WithAlias(() => resultAlias.Deadline)
                                    .Select(() => callTaskAlias.CreationDate).WithAlias(() => resultAlias.CreationDate)
                                    .Select(() => callTaskAlias.Id).WithAlias(() => resultAlias.Id)
                                    .Select(() => callTaskAlias.TaskState).WithAlias(() => resultAlias.TaskStatus)
                                    .Select(() => callTaskAlias.ImportanceDegree).WithAlias(() => resultAlias.ImportanceDegree)
                                    .Select(() => callTaskAlias.IsTaskComplete).WithAlias(() => resultAlias.IsTaskComplete)
                                    .Select(() => callTaskAlias.TareReturn).WithAlias(() => resultAlias.TareReturn)
                                    .Select(Projections.SqlFunction(
                                                new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT( CONCAT(?2 , ?1) SEPARATOR ?3 )"),
                                                NHibernateUtil.String,
                                                Projections.Property(() => deliveryPointPhonesAlias.DigitsNumber),
                                                Projections.Constant("+7"),
                                                Projections.Constant("\n"))
                                            ).WithAlias(() => resultAlias.DeliveryPointPhones)
                                    .Select(Projections.SqlFunction(
                                                new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT( CONCAT(?2 , ?1) SEPARATOR ?3 )"),
                                                NHibernateUtil.String,
                                                Projections.Property(() => counterpartyPhonesAlias.DigitsNumber),
                                                Projections.Constant("+7"),
                                                Projections.Constant("\n"))
                                            ).WithAlias(() => resultAlias.CounterpartyPhones)
                                    .SelectSubQuery((QueryOver <BottlesMovementOperation>)bottleDebtByAddressQuery).WithAlias(() => resultAlias.DebtByAddress)
                                    .SelectSubQuery((QueryOver <BottlesMovementOperation>)bottleDebtByClientQuery).WithAlias(() => resultAlias.DebtByClient)
                                    )
                        .TransformUsing(Transformers.AliasToBean <BusinessTaskJournalNode <ClientTask> >());

            return(tasks);
        }
Beispiel #22
0
        private IQueryOver <ClientTask> GetPaymenTaskQuery(IUnitOfWork uow)
        {
            DeliveryPoint deliveryPointAlias = null;
            ClientTask    callTaskAlias      = null;
            BusinessTaskJournalNode <PaymentTask> resultAlias = null;
            Counterparty counterpartyAlias        = null;
            Employee     employeeAlias            = null;
            Phone        deliveryPointPhonesAlias = null;
            Phone        counterpartyPhonesAlias  = null;

            Domain.Orders.Order orderAlias = null;

            var tasksQuery = UoW.Session.QueryOver(() => callTaskAlias)
                             .Left.JoinAlias(() => callTaskAlias.DeliveryPoint, () => deliveryPointAlias);

            switch (FilterViewModel.DateType)
            {
            case TaskFilterDateType.CreationTime:
                tasksQuery.Where(x => x.CreationDate >= FilterViewModel.StartDate.Date)
                .And(x => x.CreationDate <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;

            case TaskFilterDateType.CompleteTaskDate:
                tasksQuery.Where(x => x.CompleteDate >= FilterViewModel.StartDate.Date)
                .And(x => x.CompleteDate <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;

            default:
                tasksQuery.Where(x => x.EndActivePeriod >= FilterViewModel.StartDate.Date)
                .And(x => x.EndActivePeriod <= FilterViewModel.EndDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59));
                break;
            }

            if (FilterViewModel.Employee != null)
            {
                tasksQuery.Where(x => x.AssignedEmployee == FilterViewModel.Employee);
            }
            else if (FilterViewModel.ShowOnlyWithoutEmployee)
            {
                tasksQuery.Where(x => x.AssignedEmployee == null);
            }

            if (FilterViewModel.HideCompleted)
            {
                tasksQuery.Where(x => !x.IsTaskComplete);
            }

            if (FilterViewModel.DeliveryPointCategory != null)
            {
                tasksQuery.Where(() => deliveryPointAlias.Category == FilterViewModel.DeliveryPointCategory);
            }

            tasksQuery.Where(
                GetSearchCriterion(
                    () => callTaskAlias.Id,
                    () => deliveryPointAlias.ShortAddress,
                    () => counterpartyAlias.Name,
                    () => callTaskAlias.TaskState
                    )
                );

            var tasks = tasksQuery
                        .Left.JoinAlias(() => deliveryPointAlias.Phones, () => deliveryPointPhonesAlias)
                        .Left.JoinAlias(() => counterpartyAlias.Phones, () => counterpartyPhonesAlias)
                        .Left.JoinAlias(() => callTaskAlias.Counterparty, () => counterpartyAlias)
                        .Left.JoinAlias(() => callTaskAlias.AssignedEmployee, () => employeeAlias)
                        .SelectList(list => list
                                    .SelectGroup(() => callTaskAlias.Id)
                                    .Select(() => deliveryPointAlias.ShortAddress).WithAlias(() => resultAlias.AddressName)
                                    .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.ClientName)
                                    .Select(() => employeeAlias.Name).WithAlias(() => resultAlias.EmployeeName)
                                    .Select(() => employeeAlias.LastName).WithAlias(() => resultAlias.EmployeeLastName)
                                    .Select(() => employeeAlias.Patronymic).WithAlias(() => resultAlias.EmployeePatronymic)
                                    .Select(() => callTaskAlias.EndActivePeriod).WithAlias(() => resultAlias.Deadline)
                                    .Select(() => callTaskAlias.CreationDate).WithAlias(() => resultAlias.CreationDate)
                                    .Select(() => callTaskAlias.Id).WithAlias(() => resultAlias.Id)
                                    .Select(() => callTaskAlias.TaskState).WithAlias(() => resultAlias.TaskStatus)
                                    .Select(() => callTaskAlias.ImportanceDegree).WithAlias(() => resultAlias.ImportanceDegree)
                                    .Select(() => callTaskAlias.IsTaskComplete).WithAlias(() => resultAlias.IsTaskComplete))
                        .TransformUsing(Transformers.AliasToBean <BusinessTaskJournalNode <PaymentTask> >());

            return(tasks);
        }
Beispiel #23
0
        private IEnumerable <PromosetDuplicateInfoNode> GetPhonesResult(IUnitOfWork uow, IEnumerable <Phone> phones)
        {
            Domain.Orders.Order     orderAlias         = null;
            Domain.Orders.OrderItem orderItemAlias     = null;
            Counterparty            counterpartyAlias  = null;
            DeliveryPoint           deliveryPointAlias = null;
            Phone counterpartyPhoneAlias          = null;
            Phone deliveryPointPhoneAlias         = null;
            PromosetDuplicateInfoNode resultAlias = null;

            var phonesArray    = phones.Select(x => x.DigitsNumber).ToArray();
            var nullProjection = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.String, "NULLIF(1,1)"),
                NHibernateUtil.String
                );

            var counterpartyPhoneProjection = Projections.Conditional(
                Restrictions.In(Projections.Property(() => counterpartyPhoneAlias.DigitsNumber), phonesArray),
                Projections.Property(() => counterpartyPhoneAlias.DigitsNumber),
                nullProjection
                );

            var deliveryPointPhoneProjection = Projections.Conditional(
                Restrictions.In(Projections.Property(() => deliveryPointPhoneAlias.DigitsNumber), phonesArray),
                Projections.Property(() => deliveryPointPhoneAlias.DigitsNumber),
                nullProjection
                );

            var counterpartyConcatPhoneProjection = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT(DISTINCT ?1 SEPARATOR ?2)"),
                NHibernateUtil.String,
                counterpartyPhoneProjection,
                Projections.Constant(", ")
                );

            var deliveryPointConcatPhoneProjection = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.String, "GROUP_CONCAT(DISTINCT ?1 SEPARATOR ?2)"),
                NHibernateUtil.String,
                deliveryPointPhoneProjection,
                Projections.Constant(", ")
                );

            var concatPhoneProjection = Projections.SqlFunction(
                new SQLFunctionTemplate(NHibernateUtil.String, "CONCAT_WS(', ', ?1, ?2)"),
                NHibernateUtil.String,
                counterpartyConcatPhoneProjection,
                deliveryPointConcatPhoneProjection
                );

            var phoneResult = uow.Session.QueryOver(() => orderAlias)
                              .Left.JoinAlias(() => orderAlias.OrderItems, () => orderItemAlias)
                              .Left.JoinAlias(() => orderAlias.Client, () => counterpartyAlias)
                              .Left.JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                              .Left.JoinAlias(() => counterpartyAlias.Phones, () => counterpartyPhoneAlias)
                              .Left.JoinAlias(() => deliveryPointAlias.Phones, () => deliveryPointPhoneAlias)
                              .Where(
                Restrictions.Or(
                    Restrictions.In(Projections.Property(() => counterpartyPhoneAlias.DigitsNumber), phonesArray),
                    Restrictions.In(Projections.Property(() => deliveryPointPhoneAlias.DigitsNumber), phonesArray)
                    )
                )
                              .Where(Restrictions.IsNotNull(Projections.Property(() => orderItemAlias.PromoSet)))
                              .SelectList(list => list
                                          .SelectGroup(() => orderAlias.Id)
                                          .Select(() => orderAlias.DeliveryDate).WithAlias(() => resultAlias.Date)
                                          .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Client)
                                          .Select(() => deliveryPointAlias.CompiledAddress).WithAlias(() => resultAlias.Address)
                                          .Select(concatPhoneProjection).WithAlias(() => resultAlias.Phone)
                                          ).TransformUsing(Transformers.AliasToBean <PromosetDuplicateInfoNode>())
                              .List <PromosetDuplicateInfoNode>();

            return(phoneResult);
        }
Beispiel #24
0
        public override void UpdateNodes()
        {
            WorkingDriverVMNode resultAlias    = null;
            Employee            driverAlias    = null;
            RouteList           routeListAlias = null;
            Car carAlias = null;

            Domain.Orders.Order orderAlias        = null;
            OrderItem           ordItemsAlias     = null;
            Nomenclature        nomenclatureAlias = null;

            var completedSubquery = QueryOver.Of <RouteListItem>()
                                    .Where(i => i.RouteList.Id == routeListAlias.Id)
                                    .Where(i => i.Status != RouteListItemStatus.EnRoute)
                                    .Select(Projections.RowCount());

            var addressesSubquery = QueryOver.Of <RouteListItem>()
                                    .Where(i => i.RouteList.Id == routeListAlias.Id)
                                    .Select(Projections.RowCount());

            var uncompletedBottlesSubquery = QueryOver.Of <RouteListItem>()             // Запрашивает количество ещё не доставленных бутылей.
                                             .Where(i => i.RouteList.Id == routeListAlias.Id)
                                             .Where(i => i.Status == RouteListItemStatus.EnRoute)
                                             .JoinAlias(rli => rli.Order, () => orderAlias)
                                             .JoinAlias(() => orderAlias.OrderItems, () => ordItemsAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                             .JoinAlias(() => ordItemsAlias.Nomenclature, () => nomenclatureAlias)
                                             .Where(() => nomenclatureAlias.Category == NomenclatureCategory.water && nomenclatureAlias.TareVolume == TareVolume.Vol19L)
                                             .Select(Projections.Sum(() => ordItemsAlias.Count));

            var isCompanyHavingProjection = Projections.Conditional(Restrictions.In(Projections.Property(() => carAlias.TypeOfUse), Car.GetCompanyHavingsTypes()), Projections.Constant(true), Projections.Constant(false));

            var trackSubquery = QueryOver.Of <Track>()
                                .Where(x => x.RouteList.Id == routeListAlias.Id)
                                .Select(x => x.Id);

            var query = UoW.Session.QueryOver <RouteList>(() => routeListAlias);

            var result = query
                         .JoinAlias(rl => rl.Driver, () => driverAlias)
                         .JoinAlias(rl => rl.Car, () => carAlias)

                         .Where(rl => rl.Status == RouteListStatus.EnRoute)
                         .Where(rl => rl.Driver != null)
                         .Where(rl => rl.Car != null)

                         .SelectList(list => list
                                     .Select(() => driverAlias.Id).WithAlias(() => resultAlias.Id)
                                     .Select(() => driverAlias.Name).WithAlias(() => resultAlias.Name)
                                     .Select(() => driverAlias.LastName).WithAlias(() => resultAlias.LastName)
                                     .Select(() => driverAlias.Patronymic).WithAlias(() => resultAlias.Patronymic)
                                     .Select(() => carAlias.RegistrationNumber).WithAlias(() => resultAlias.CarNumber)
                                     .Select(isCompanyHavingProjection).WithAlias(() => resultAlias.IsVodovozAuto)
                                     .Select(() => routeListAlias.Id).WithAlias(() => resultAlias.RouteListNumber)
                                     .SelectSubQuery(addressesSubquery).WithAlias(() => resultAlias.AddressesAll)
                                     .SelectSubQuery(completedSubquery).WithAlias(() => resultAlias.AddressesCompleted)
                                     .SelectSubQuery(trackSubquery).WithAlias(() => resultAlias.TrackId)
                                     .SelectSubQuery(uncompletedBottlesSubquery).WithAlias(() => resultAlias.BottlesLeft)
                                     )
                         .TransformUsing(Transformers.AliasToBean <WorkingDriverVMNode>())
                         .List <WorkingDriverVMNode>();

            var summaryResult = new List <WorkingDriverVMNode>();

            foreach (var driver in result.GroupBy(x => x.Id))
            {
                var savedRow = driver.First();
                savedRow.RouteListsText     = String.Join("; ", driver.Select(x => x.TrackId != null ? String.Format("<span foreground=\"green\"><b>{0}</b></span>", x.RouteListNumber) : x.RouteListNumber.ToString()));
                savedRow.RouteListsIds      = driver.ToDictionary(x => x.RouteListNumber, x => x.TrackId);
                savedRow.AddressesAll       = driver.Sum(x => x.AddressesAll);
                savedRow.AddressesCompleted = driver.Sum(x => x.AddressesCompleted);
                summaryResult.Add(savedRow);
            }

            SetItemsSource(summaryResult.OrderBy(x => x.ShortName).ToList());
        }
Beispiel #25
0
        public override void UpdateNodes()
        {
            IncomingInvoice              invoiceAlias          = null;
            IncomingWater                waterAlias            = null;
            MovementDocument             movementAlias         = null;
            WriteoffDocument             writeoffAlias         = null;
            InventoryDocument            inventoryAlias        = null;
            ShiftChangeWarehouseDocument shiftchangeAlias      = null;
            SelfDeliveryDocument         selfDeliveryAlias     = null;
            RegradingOfGoodsDocument     regradingOfGoodsAlias = null;
            DocumentVMNode               resultAlias           = null;
            Counterparty  counterpartyAlias       = null;
            Counterparty  secondCounterpartyAlias = null;
            Warehouse     warehouseAlias          = null;
            Warehouse     secondWarehouseAlias    = null;
            MovementWagon wagonAlias = null;

            Nomenclature productAlias = null;

            CarLoadDocument   loadCarAlias   = null;
            CarUnloadDocument unloadCarAlias = null;
            RouteList         routeListAlias = null;
            Car      carAlias        = null;
            Employee driverAlias     = null;
            Employee authorAlias     = null;
            Employee lastEditorAlias = null;

            Domain.Orders.Order orderAlias = null;

            List <DocumentVMNode> result = new List <DocumentVMNode> ();

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.IncomingInvoice) && Filter.RestrictDriver == null)
            {
                var invoiceQuery = UoW.Session.QueryOver <IncomingInvoice>(() => invoiceAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    invoiceQuery.Where(x => x.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    invoiceQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    invoiceQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var invoiceList = invoiceQuery.JoinQueryOver(() => invoiceAlias.Contractor, () => counterpartyAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .JoinQueryOver(() => invoiceAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .JoinAlias(() => invoiceAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .JoinAlias(() => invoiceAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .SelectList(list => list
                                              .Select(() => invoiceAlias.Id).WithAlias(() => resultAlias.Id)
                                              .Select(() => invoiceAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                              .Select(() => invoiceAlias.Comment).WithAlias(() => resultAlias.Comment)
                                              .Select(() => DocumentType.IncomingInvoice).WithAlias(() => resultAlias.DocTypeEnum)
                                              .Select(Projections.Conditional(
                                                          Restrictions.Where(() => counterpartyAlias.Name == null),
                                                          Projections.Constant("Не указан", NHibernateUtil.String),
                                                          Projections.Property(() => counterpartyAlias.Name)))
                                              .WithAlias(() => resultAlias.Counterparty)
                                              .Select(Projections.Conditional(
                                                          Restrictions.Where(() => warehouseAlias.Name == null),
                                                          Projections.Constant("Не указан", NHibernateUtil.String),
                                                          Projections.Property(() => warehouseAlias.Name)))
                                              .WithAlias(() => resultAlias.Warehouse)
                                              .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                              .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                              .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                              .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                              .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                              .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                              .Select(() => invoiceAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime)
                                              )
                                  .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                  .List <DocumentVMNode> ();

                result.AddRange(invoiceList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.IncomingWater) && Filter.RestrictDriver == null)
            {
                var waterQuery = UoW.Session.QueryOver <IncomingWater>(() => waterAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    waterQuery.Where(x => x.IncomingWarehouse.Id == Filter.RestrictWarehouse.Id || x.WriteOffWarehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    waterQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    waterQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var waterList = waterQuery
                                .JoinQueryOver(() => waterAlias.IncomingWarehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                .JoinAlias(() => waterAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                .JoinAlias(() => waterAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                .Left.JoinAlias(() => waterAlias.Product, () => productAlias)
                                .SelectList(list => list
                                            .Select(() => waterAlias.Id).WithAlias(() => resultAlias.Id)
                                            .Select(() => waterAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                            .Select(() => DocumentType.IncomingWater).WithAlias(() => resultAlias.DocTypeEnum)
                                            .Select(Projections.Conditional(
                                                        Restrictions.Where(() => warehouseAlias.Name == null),
                                                        Projections.Constant("Не указан", NHibernateUtil.String),
                                                        Projections.Property(() => warehouseAlias.Name)))
                                            .WithAlias(() => resultAlias.Warehouse)
                                            .Select(() => productAlias.Name).WithAlias(() => resultAlias.ProductName)
                                            .Select(() => waterAlias.Amount).WithAlias(() => resultAlias.Amount)
                                            .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                            .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                            .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                            .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                            .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                            .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                            .Select(() => waterAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                .List <DocumentVMNode> ();

                result.AddRange(waterList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.MovementDocument) && Filter.RestrictDriver == null)
            {
                var movementQuery = UoW.Session.QueryOver <MovementDocument>(() => movementAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    movementQuery.Where(x => x.FromWarehouse.Id == Filter.RestrictWarehouse.Id || x.ToWarehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    movementQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    movementQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }
                if (Filter.RestrictMovementStatus.HasValue && Filter.RestrictDocumentType == DocumentType.MovementDocument)
                {
                    movementQuery.Where(o => o.Status == Filter.RestrictMovementStatus.Value);
                }

                var movementList = movementQuery
                                   .JoinQueryOver(() => movementAlias.FromWarehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinQueryOver(() => movementAlias.ToWarehouse, () => secondWarehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinAlias(() => movementAlias.MovementWagon, () => wagonAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinAlias(() => movementAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinAlias(() => movementAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .SelectList(list => list
                                               .Select(() => movementAlias.Id).WithAlias(() => resultAlias.Id)
                                               .Select(() => movementAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                               .Select(() => DocumentType.MovementDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                               .Select(() => movementAlias.Status).WithAlias(() => resultAlias.MovementDocumentStatus)
                                               .Select(() => movementAlias.HasDiscrepancy).WithAlias(() => resultAlias.MovementDocumentDiscrepancy)
                                               .Select(() => wagonAlias.Name).WithAlias(() => resultAlias.CarNumber)
                                               .Select(Projections.Conditional(
                                                           Restrictions.Where(() => warehouseAlias.Name == null),
                                                           Projections.Constant("Не указан", NHibernateUtil.String),
                                                           Projections.Property(() => warehouseAlias.Name)))
                                               .WithAlias(() => resultAlias.Warehouse)
                                               .Select(Projections.Conditional(
                                                           Restrictions.Where(() => secondWarehouseAlias.Name == null),
                                                           Projections.Constant("Не указан", NHibernateUtil.String),
                                                           Projections.Property(() => secondWarehouseAlias.Name)))
                                               .WithAlias(() => resultAlias.SecondWarehouse)
                                               .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                               .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                               .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                               .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                               .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                               .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                               .Select(() => movementAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                   .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                   .List <DocumentVMNode> ();

                result.AddRange(movementList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.WriteoffDocument) && Filter.RestrictDriver == null)
            {
                var writeoffQuery = UoW.Session.QueryOver <WriteoffDocument>(() => writeoffAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    writeoffQuery.Where(x => x.WriteoffWarehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    writeoffQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    writeoffQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var writeoffList = writeoffQuery
                                   .JoinQueryOver(() => writeoffAlias.Client, () => counterpartyAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinQueryOver(() => writeoffAlias.WriteoffWarehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinAlias(() => writeoffAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinAlias(() => writeoffAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .SelectList(list => list
                                               .Select(() => writeoffAlias.Id).WithAlias(() => resultAlias.Id)
                                               .Select(() => writeoffAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                               .Select(() => DocumentType.WriteoffDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                               .Select(Projections.Conditional(
                                                           Restrictions.Where(() => counterpartyAlias.Name == null),
                                                           Projections.Constant(string.Empty, NHibernateUtil.String),
                                                           Projections.Property(() => counterpartyAlias.Name)))
                                               .WithAlias(() => resultAlias.Counterparty)
                                               .Select(Projections.Conditional(
                                                           Restrictions.Where(() => warehouseAlias.Name == null),
                                                           Projections.Constant(string.Empty, NHibernateUtil.String),
                                                           Projections.Property(() => warehouseAlias.Name)))
                                               .WithAlias(() => resultAlias.Warehouse)
                                               .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                               .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                               .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                               .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                               .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                               .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                               .Select(() => writeoffAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                   .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                   .List <DocumentVMNode> ();

                result.AddRange(writeoffList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.InventoryDocument) && Filter.RestrictDriver == null)
            {
                var inventoryQuery = UoW.Session.QueryOver <InventoryDocument>(() => inventoryAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    inventoryQuery.Where(x => x.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    inventoryQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    inventoryQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var inventoryList = inventoryQuery
                                    .JoinQueryOver(() => inventoryAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                    .JoinAlias(() => inventoryAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                    .JoinAlias(() => inventoryAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                    .SelectList(list => list
                                                .Select(() => inventoryAlias.Id).WithAlias(() => resultAlias.Id)
                                                .Select(() => inventoryAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                                .Select(() => DocumentType.InventoryDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                                .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                                .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                                .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                                .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                                .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                                .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                                .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                                .Select(() => inventoryAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                    .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                    .List <DocumentVMNode> ();

                result.AddRange(inventoryList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.ShiftChangeDocument) && Filter.RestrictDriver == null)
            {
                var shiftchangeQuery = UoW.Session.QueryOver <ShiftChangeWarehouseDocument>(() => shiftchangeAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    shiftchangeQuery.Where(x => x.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    shiftchangeQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    shiftchangeQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var shiftchangeList = shiftchangeQuery
                                      .JoinQueryOver(() => shiftchangeAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                      .JoinAlias(() => shiftchangeAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                      .JoinAlias(() => shiftchangeAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                      .SelectList(list => list
                                                  .Select(() => shiftchangeAlias.Id).WithAlias(() => resultAlias.Id)
                                                  .Select(() => shiftchangeAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                                  .Select(() => DocumentType.ShiftChangeDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                                  .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                                  .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                                  .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                                  .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                                  .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                                  .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                                  .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                                  .Select(() => shiftchangeAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                      .TransformUsing(Transformers.AliasToBean <DocumentVMNode>())
                                      .List <DocumentVMNode>();

                result.AddRange(shiftchangeList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.RegradingOfGoodsDocument) && Filter.RestrictDriver == null)
            {
                var regrandingQuery = UoW.Session.QueryOver <RegradingOfGoodsDocument>(() => regradingOfGoodsAlias);
                if (Filter.RestrictWarehouse != null)
                {
                    regrandingQuery.Where(x => x.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    regrandingQuery.Where(o => o.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    regrandingQuery.Where(o => o.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var regrandingList = regrandingQuery
                                     .JoinQueryOver(() => regradingOfGoodsAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .JoinAlias(() => regradingOfGoodsAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .JoinAlias(() => regradingOfGoodsAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .SelectList(list => list
                                                 .Select(() => regradingOfGoodsAlias.Id).WithAlias(() => resultAlias.Id)
                                                 .Select(() => regradingOfGoodsAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                                 .Select(() => DocumentType.RegradingOfGoodsDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                                 .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                                 .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                                 .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                                 .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                                 .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                                 .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                                 .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                                 .Select(() => regradingOfGoodsAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                     .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                     .List <DocumentVMNode> ();

                result.AddRange(regrandingList);
            }

            if ((Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.SelfDeliveryDocument) && Filter.RestrictDriver == null)
            {
                var selfDeliveryQuery = UoW.Session.QueryOver <SelfDeliveryDocument>(() => selfDeliveryAlias)
                                        .JoinQueryOver(() => selfDeliveryAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                        .JoinQueryOver(() => selfDeliveryAlias.Order, () => orderAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                        .JoinQueryOver(() => orderAlias.Client, () => counterpartyAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin);

                if (Filter.RestrictWarehouse != null)
                {
                    selfDeliveryQuery.Where(() => selfDeliveryAlias.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    selfDeliveryQuery.Where(() => selfDeliveryAlias.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    selfDeliveryQuery.Where(() => selfDeliveryAlias.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }

                var selfDeliveryList = selfDeliveryQuery
                                       .JoinAlias(() => selfDeliveryAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                       .JoinAlias(() => selfDeliveryAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                       .SelectList(list => list
                                                   .Select(() => selfDeliveryAlias.Id).WithAlias(() => resultAlias.Id)
                                                   .Select(() => orderAlias.Id).WithAlias(() => resultAlias.OrderId)
                                                   .Select(() => selfDeliveryAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                                   .Select(() => DocumentType.SelfDeliveryDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                                   .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Counterparty)
                                                   .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                                   .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                                   .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                                   .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                                   .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                                   .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                                   .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                                   .Select(() => selfDeliveryAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                       .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                       .List <DocumentVMNode> ();

                result.AddRange(selfDeliveryList);
            }

            if (Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.CarLoadDocument)
            {
                var carLoadQuery = UoW.Session.QueryOver <CarLoadDocument>(() => loadCarAlias)
                                   .JoinQueryOver(() => loadCarAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinQueryOver(() => loadCarAlias.RouteList, () => routeListAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinQueryOver(() => routeListAlias.Car, () => carAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                   .JoinQueryOver(() => routeListAlias.Driver, () => driverAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin);

                if (Filter.RestrictWarehouse != null)
                {
                    carLoadQuery.Where(() => loadCarAlias.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    carLoadQuery.Where(() => loadCarAlias.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    carLoadQuery.Where(() => loadCarAlias.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }
                if (Filter.RestrictDriver != null)
                {
                    carLoadQuery.Where(() => routeListAlias.Driver.Id == Filter.RestrictDriver.Id);
                }

                var carLoadList = carLoadQuery
                                  .JoinAlias(() => loadCarAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .JoinAlias(() => loadCarAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                  .SelectList(list => list
                                              .Select(() => loadCarAlias.Id).WithAlias(() => resultAlias.Id)
                                              .Select(() => loadCarAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                              .Select(() => DocumentType.CarLoadDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                              .Select(() => carAlias.Model).WithAlias(() => resultAlias.CarModel)
                                              .Select(() => carAlias.RegistrationNumber).WithAlias(() => resultAlias.CarNumber)
                                              .Select(() => driverAlias.LastName).WithAlias(() => resultAlias.DirverSurname)
                                              .Select(() => driverAlias.Name).WithAlias(() => resultAlias.DirverName)
                                              .Select(() => driverAlias.Patronymic).WithAlias(() => resultAlias.DirverPatronymic)
                                              .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                              .Select(() => routeListAlias.Id).WithAlias(() => resultAlias.RouteListId)
                                              .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                              .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                              .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                              .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                              .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                              .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                              .Select(() => loadCarAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                  .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                  .List <DocumentVMNode> ();

                result.AddRange(carLoadList);
            }

            if (Filter.RestrictDocumentType == null || Filter.RestrictDocumentType == DocumentType.CarUnloadDocument)
            {
                var carUnloadQuery = UoW.Session.QueryOver <CarUnloadDocument>(() => unloadCarAlias)
                                     .JoinQueryOver(() => unloadCarAlias.Warehouse, () => warehouseAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .JoinQueryOver(() => unloadCarAlias.RouteList, () => routeListAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .JoinQueryOver(() => routeListAlias.Car, () => carAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                     .JoinQueryOver(() => routeListAlias.Driver, () => driverAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin);

                if (Filter.RestrictWarehouse != null)
                {
                    carUnloadQuery.Where(() => unloadCarAlias.Warehouse.Id == Filter.RestrictWarehouse.Id);
                }
                if (Filter.RestrictStartDate.HasValue)
                {
                    carUnloadQuery.Where(() => unloadCarAlias.TimeStamp >= Filter.RestrictStartDate.Value);
                }
                if (Filter.RestrictEndDate.HasValue)
                {
                    carUnloadQuery.Where(() => unloadCarAlias.TimeStamp < Filter.RestrictEndDate.Value.AddDays(1));
                }
                if (Filter.RestrictDriver != null)
                {
                    carUnloadQuery.Where(() => routeListAlias.Driver.Id == Filter.RestrictDriver.Id);
                }

                var carUnloadList = carUnloadQuery
                                    .JoinAlias(() => unloadCarAlias.Author, () => authorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                    .JoinAlias(() => unloadCarAlias.LastEditor, () => lastEditorAlias, NHibernate.SqlCommand.JoinType.LeftOuterJoin)
                                    .SelectList(list => list
                                                .Select(() => unloadCarAlias.Id).WithAlias(() => resultAlias.Id)
                                                .Select(() => unloadCarAlias.TimeStamp).WithAlias(() => resultAlias.Date)
                                                .Select(() => DocumentType.CarUnloadDocument).WithAlias(() => resultAlias.DocTypeEnum)
                                                .Select(() => carAlias.Model).WithAlias(() => resultAlias.CarModel)
                                                .Select(() => carAlias.RegistrationNumber).WithAlias(() => resultAlias.CarNumber)
                                                .Select(() => driverAlias.LastName).WithAlias(() => resultAlias.DirverSurname)
                                                .Select(() => driverAlias.Name).WithAlias(() => resultAlias.DirverName)
                                                .Select(() => driverAlias.Patronymic).WithAlias(() => resultAlias.DirverPatronymic)
                                                .Select(() => warehouseAlias.Name).WithAlias(() => resultAlias.Warehouse)
                                                .Select(() => routeListAlias.Id).WithAlias(() => resultAlias.RouteListId)
                                                .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorSurname)
                                                .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                                .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                                .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorSurname)
                                                .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                                .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                                .Select(() => unloadCarAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime))
                                    .TransformUsing(Transformers.AliasToBean <DocumentVMNode> ())
                                    .List <DocumentVMNode> ();

                result.AddRange(carUnloadList);
            }

            result.Sort((x, y) => {
                if (x.Date < y.Date)
                {
                    return(1);
                }
                if (x.Date == y.Date)
                {
                    return(0);
                }
                return(-1);
            });

            SetItemsSource(result);
        }
Beispiel #26
0
        public IList <object[]> GetGuilties(UndeliveredOrdersFilterViewModel filter)
        {
            OrderItem    orderItemAlias    = null;
            Nomenclature nomenclatureAlias = null;

            UndeliveredOrder undeliveredOrderAlias = null;

            Domain.Orders.Order oldOrderAlias       = null;
            Domain.Orders.Order newOrderAlias       = null;
            Employee            oldOrderAuthorAlias = null;
            Counterparty        counterpartyAlias   = null;
            DeliveryPoint       undeliveredOrderDeliveryPointAlias = null;
            Subdivision         subdivisionAlias        = null;
            GuiltyInUndelivery  guiltyInUndeliveryAlias = null;
            Employee            authorAlias             = null;

            var subquery19LWatterQty = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                       .Where(() => orderItemAlias.Order.Id == oldOrderAlias.Id)
                                       .Left.JoinQueryOver(i => i.Nomenclature, () => nomenclatureAlias)
                                       .Where(n => n.Category == NomenclatureCategory.water && n.TareVolume == TareVolume.Vol19L)
                                       .Select(Projections.Sum(() => orderItemAlias.Count));

            var query = _uow.Session.QueryOver <UndeliveredOrder>(() => undeliveredOrderAlias)
                        .Left.JoinAlias(u => u.OldOrder, () => oldOrderAlias)
                        .Left.JoinAlias(u => u.NewOrder, () => newOrderAlias)
                        .Left.JoinAlias(() => oldOrderAlias.Client, () => counterpartyAlias)
                        .Left.JoinAlias(() => oldOrderAlias.Author, () => oldOrderAuthorAlias)
                        .Left.JoinAlias(() => oldOrderAlias.DeliveryPoint, () => undeliveredOrderDeliveryPointAlias)
                        .Left.JoinAlias(() => undeliveredOrderAlias.GuiltyInUndelivery, () => guiltyInUndeliveryAlias)
                        .Left.JoinAlias(() => guiltyInUndeliveryAlias.GuiltyDepartment, () => subdivisionAlias)
                        .Left.JoinAlias(u => u.Author, () => authorAlias);

            if (filter?.RestrictDriver != null)
            {
                var oldOrderIds = _undeliveredOrdersRepository.GetListOfUndeliveryIdsForDriver(_uow, filter.RestrictDriver);
                query.Where(() => oldOrderAlias.Id.IsIn(oldOrderIds.ToArray()));
            }

            if (filter?.RestrictOldOrder != null)
            {
                query.Where(() => oldOrderAlias.Id == filter.RestrictOldOrder.Id);
            }

            if (filter?.RestrictClient != null)
            {
                query.Where(() => counterpartyAlias.Id == filter.RestrictClient.Id);
            }

            if (filter?.RestrictAddress != null)
            {
                query.Where(() => undeliveredOrderDeliveryPointAlias.Id == filter.RestrictAddress.Id);
            }

            if (filter?.RestrictOldOrderAuthor != null)
            {
                query.Where(() => oldOrderAuthorAlias.Id == filter.RestrictOldOrderAuthor.Id);
            }

            if (filter?.RestrictOldOrderStartDate != null)
            {
                query.Where(() => oldOrderAlias.DeliveryDate >= filter.RestrictOldOrderStartDate);
            }

            if (filter?.RestrictOldOrderEndDate != null)
            {
                query.Where(() => oldOrderAlias.DeliveryDate <= filter.RestrictOldOrderEndDate.Value.AddDays(1).AddTicks(-1));
            }

            if (filter?.RestrictNewOrderStartDate != null)
            {
                query.Where(() => newOrderAlias.DeliveryDate >= filter.RestrictNewOrderStartDate);
            }

            if (filter?.RestrictNewOrderEndDate != null)
            {
                query.Where(() => newOrderAlias.DeliveryDate <= filter.RestrictNewOrderEndDate.Value.AddDays(1).AddTicks(-1));
            }

            if (filter?.RestrictGuiltySide != null)
            {
                query.Where(() => guiltyInUndeliveryAlias.GuiltySide == filter.RestrictGuiltySide);
            }

            if (filter != null && filter.RestrictIsProblematicCases)
            {
                query.Where(() => !guiltyInUndeliveryAlias.GuiltySide.IsIn(filter.ExcludingGuiltiesForProblematicCases));
            }

            if (filter?.RestrictGuiltyDepartment != null)
            {
                query.Where(() => subdivisionAlias.Id == filter.RestrictGuiltyDepartment.Id);
            }

            if (filter?.RestrictInProcessAtDepartment != null)
            {
                query.Where(u => u.InProcessAtDepartment.Id == filter.RestrictInProcessAtDepartment.Id);
            }

            if (filter?.NewInvoiceCreated != null)
            {
                if (filter.NewInvoiceCreated.Value)
                {
                    query.Where(u => u.NewOrder != null);
                }
                else
                {
                    query.Where(u => u.NewOrder == null);
                }
            }

            if (filter?.RestrictUndeliveryStatus != null)
            {
                query.Where(u => u.UndeliveryStatus == filter.RestrictUndeliveryStatus);
            }

            if (filter?.RestrictUndeliveryAuthor != null)
            {
                query.Where(u => u.Author == filter.RestrictUndeliveryAuthor);
            }


            if (filter?.RestrictAuthorSubdivision != null)
            {
                query.Where(() => authorAlias.Subdivision.Id == filter.RestrictAuthorSubdivision.Id);
            }

            int position = 0;
            var result   =
                query.SelectList(list => list
                                 .SelectGroup(u => u.Id)
                                 .Select(Projections.SqlFunction(
                                             new SQLFunctionTemplate(
                                                 NHibernateUtil.String,
                                                 "GROUP_CONCAT(" +
                                                 "CASE ?1 " +
                                                 $"WHEN '{nameof(GuiltyTypes.Department)}' THEN IFNULL(CONCAT('Отд: ', ?2), 'Отдел ВВ') " +
                                                 $"WHEN '{nameof(GuiltyTypes.Client)}' THEN 'Клиент' " +
                                                 $"WHEN '{nameof(GuiltyTypes.Driver)}' THEN 'Водитель' " +
                                                 $"WHEN '{nameof(GuiltyTypes.ServiceMan)}' THEN 'Мастер СЦ' " +
                                                 $"WHEN '{nameof(GuiltyTypes.ForceMajor)}' THEN 'Форс-мажор' " +
                                                 $"WHEN '{nameof(GuiltyTypes.None)}' THEN 'Нет (не недовоз)' " +
                                                 "ELSE ?1 " +
                                                 "END ORDER BY ?1 ASC SEPARATOR '\n')"
                                                 ),
                                             NHibernateUtil.String,
                                             Projections.Property(() => guiltyInUndeliveryAlias.GuiltySide),
                                             Projections.Property(() => subdivisionAlias.ShortName)))
                                 .SelectSubQuery(subquery19LWatterQty))
                .List <object[]>()
                .GroupBy(x => x[1])
                .Select(r => new[] { r.Key, r.Count(), position++, r.Sum(x => x[2] == null ? 0 : (decimal)x[2]) })
                .ToList();

            return(result);
        }
Beispiel #27
0
 public OrderDTO ToDTO(Domain.Orders.Order order)
 {
     return(new OrderDTO(order.ID, orderItemMapper.ToItemGroupDTO(order.ItemGroups), order.TotalPrice, order.CustomerID));;
 }