Beispiel #1
0
        public bool CanAddFlyerToOrder(
            IUnitOfWork uow, IRouteListParametersProvider routeListParametersProvider, int flyerId, int geographicGroupId)
        {
            WarehouseMovementOperation operationAddAlias    = null;
            WarehouseMovementOperation operationRemoveAlias = null;
            VodovozOrder   orderAlias          = null;
            DeliveryPoint  deliveryPointAlias  = null;
            District       districtAlias       = null;
            OrderEquipment orderEquipmentAlias = null;

            var warehouseId = geographicGroupId == routeListParametersProvider.SouthGeographicGroupId
                                ? routeListParametersProvider.WarehouseSofiiskayaId
                                : routeListParametersProvider.WarehouseParnasId;

            var subqueryAdded = uow.Session.QueryOver(() => operationAddAlias)
                                .Where(() => operationAddAlias.Nomenclature.Id == flyerId)
                                .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation>(o => o.IncomingWarehouse)))
                                .Where(o => o.IncomingWarehouse.Id == warehouseId)
                                .Select(Projections.Sum <WarehouseMovementOperation>(o => o.Amount))
                                .SingleOrDefault <decimal>();

            var subqueryRemoved = uow.Session.QueryOver(() => operationRemoveAlias)
                                  .Where(() => operationRemoveAlias.Nomenclature.Id == flyerId)
                                  .Where(Restrictions.IsNotNull(Projections.Property <WarehouseMovementOperation>(o => o.WriteoffWarehouse)))
                                  .Where(o => o.WriteoffWarehouse.Id == warehouseId)
                                  .Select(Projections.Sum <WarehouseMovementOperation>(o => o.Amount))
                                  .SingleOrDefault <decimal>();

            var subqueryReserved = uow.Session.QueryOver(() => orderAlias)
                                   .JoinAlias(() => orderAlias.OrderEquipments, () => orderEquipmentAlias)
                                   .JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                                   .JoinAlias(() => deliveryPointAlias.District, () => districtAlias)
                                   .Where(() => orderEquipmentAlias.Nomenclature.Id == flyerId)
                                   .Where(() => districtAlias.GeographicGroup.Id == geographicGroupId)
                                   .Where(() => orderAlias.OrderStatus == OrderStatus.NewOrder ||
                                          orderAlias.OrderStatus == OrderStatus.Accepted ||
                                          orderAlias.OrderStatus == OrderStatus.InTravelList ||
                                          orderAlias.OrderStatus == OrderStatus.OnLoading)
                                   .Select(Projections.Sum(() => orderEquipmentAlias.Count))
                                   .SingleOrDefault <int>();

            return(subqueryAdded - subqueryRemoved - subqueryReserved > 0);
        }
        public RouteListJournalViewModel(
            RouteListJournalFilterViewModel filterViewModel,
            IRouteListRepository routeListRepository,
            IFuelRepository fuelRepository,
            ISubdivisionRepository subdivisionRepository,
            ICategoryRepository categoryRepository,
            ITrackRepository trackRepository,
            IUndeliveredOrdersRepository undeliveredOrdersRepository,
            IDeliveryShiftRepository deliveryShiftRepository,
            IUnitOfWorkFactory unitOfWorkFactory,
            IRouteListParametersProvider routeListParametersProvider,
            ICallTaskWorker callTaskWorker,
            IWarehouseRepository warehouseRepository,
            ICarJournalFactory carJournalFactory,
            IEmployeeJournalFactory employeeJournalFactory,
            IEmployeeRepository employeeRepository,
            IGtkTabsOpener gtkTabsOpener,
            IOrderSelectorFactory orderSelectorFactory,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            IDeliveryPointJournalFactory deliveryPointJournalFactory,
            ISubdivisionJournalFactory subdivisionJournalFactory,
            IUndeliveredOrdersJournalOpener undeliveredOrdersJournalOpener,
            IStockRepository stockRepository,
            IReportPrinter reportPrinter,
            ITerminalNomenclatureProvider terminalNomenclatureProvider,
            IEmployeeSettings employeeSettings,
            ICommonServices commonServices)
            : base(filterViewModel, unitOfWorkFactory, commonServices)
        {
            _routeListRepository         = routeListRepository ?? throw new ArgumentNullException(nameof(routeListRepository));
            _fuelRepository              = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository));
            _subdivisionRepository       = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
            _categoryRepository          = categoryRepository ?? throw new ArgumentNullException(nameof(categoryRepository));
            _trackRepository             = trackRepository ?? throw new ArgumentNullException(nameof(trackRepository));
            _undeliveredOrdersRepository =
                undeliveredOrdersRepository ?? throw new ArgumentNullException(nameof(undeliveredOrdersRepository));
            _deliveryShiftRepository     = deliveryShiftRepository ?? throw new ArgumentNullException(nameof(deliveryShiftRepository));
            _routeListParametersProvider =
                routeListParametersProvider ?? throw new ArgumentNullException(nameof(routeListParametersProvider));
            _callTaskWorker              = callTaskWorker ?? throw new ArgumentNullException(nameof(callTaskWorker));
            _warehouseRepository         = warehouseRepository ?? throw new ArgumentNullException(nameof(warehouseRepository));
            _carJournalFactory           = carJournalFactory ?? throw new ArgumentNullException(nameof(carJournalFactory));
            _employeeJournalFactory      = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory));
            _employeeRepository          = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository));
            _gtkTabsOpener               = gtkTabsOpener ?? throw new ArgumentNullException(nameof(gtkTabsOpener));
            _orderSelectorFactory        = orderSelectorFactory ?? throw new ArgumentNullException(nameof(orderSelectorFactory));
            _counterpartyJournalFactory  = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory));
            _deliveryPointJournalFactory =
                deliveryPointJournalFactory ?? throw new ArgumentNullException(nameof(deliveryPointJournalFactory));
            _subdivisionJournalFactory      = subdivisionJournalFactory ?? throw new ArgumentNullException(nameof(subdivisionJournalFactory));
            _undeliveredOrdersJournalOpener =
                undeliveredOrdersJournalOpener ?? throw new ArgumentNullException(nameof(undeliveredOrdersJournalOpener));
            _stockRepository = stockRepository ?? throw new ArgumentNullException(nameof(stockRepository));
            _reportPrinter   = reportPrinter ?? throw new ArgumentNullException(nameof(reportPrinter));
            _terminalNomenclatureProvider = terminalNomenclatureProvider ?? throw new ArgumentNullException(nameof(terminalNomenclatureProvider));
            _employeeSettings             = employeeSettings ?? throw new ArgumentNullException(nameof(employeeSettings));
            TabName = "Журнал МЛ";

            NotifyConfiguration.Enable();
            NotifyConfiguration.Instance.BatchSubscribeOnEntity <RouteList>(changeEvents => Refresh());

            InitPopupActions();
        }