public CounterpartyOrderViewModel(Counterparty client, IUnitOfWorkFactory unitOfWorkFactory, ITdiCompatibilityNavigation tdinavigation, IRouteListRepository routedListRepository, MangoManager mangoManager, IOrderParametersProvider orderParametersProvider, IEmployeeJournalFactory employeeJournalFactory, ICounterpartyJournalFactory counterpartyJournalFactory, INomenclatureRepository nomenclatureRepository, IParametersProvider parametersProvider, int count = 5) { Client = client; tdiNavigation = tdinavigation; _routedListRepository = routedListRepository; MangoManager = mangoManager; _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _employeeJournalFactory = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory)); _counterpartyJournalFactory = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory)); _nomenclatureRepository = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository)); _parametersProvider = parametersProvider ?? throw new ArgumentNullException(nameof(parametersProvider)); UoW = unitOfWorkFactory.CreateWithoutRoot(); LatestOrder = _orderRepository.GetLatestOrdersForCounterparty(UoW, client, count).ToList(); RefreshOrders = _RefreshOrders; NotifyConfiguration.Instance.BatchSubscribe(_RefreshCounterparty) .IfEntity <Counterparty>() .AndWhere(c => c.Id == client.Id) .Or.IfEntity <DeliveryPoint>() .AndWhere(d => client.DeliveryPoints.Any(cd => cd.Id == d.Id)); }
public Stage1OrganizationProvider(IOrganizationParametersProvider organizationParametersProvider, IOrderParametersProvider orderParametersProvider) { this.organizationParametersProvider = organizationParametersProvider ?? throw new ArgumentNullException(nameof(organizationParametersProvider)); this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); }
public PaymentByCardViewModel( IEntityUoWBuilder uowBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices, CallTaskWorker callTaskWorker, IOrderPaymentSettings orderPaymentSettings, IOrderParametersProvider orderParametersProvider, Employee currentEmployee) : base(uowBuilder, unitOfWorkFactory, commonServices) { if (orderPaymentSettings == null) { throw new ArgumentNullException(nameof(orderPaymentSettings)); } if (orderParametersProvider == null) { throw new ArgumentNullException(nameof(orderParametersProvider)); } _callTaskWorker = callTaskWorker ?? throw new ArgumentNullException(nameof(callTaskWorker)); _currentEmployee = currentEmployee; TabName = "Оплата по карте"; ItemsList = UoW.GetAll <PaymentFrom>().ToList(); if (PaymentByCardFrom == null) { PaymentByCardFrom = ItemsList.FirstOrDefault(p => p.Id == orderPaymentSettings.DefaultSelfDeliveryPaymentFromId); } Entity.PropertyChanged += Entity_PropertyChanged; ValidationContext.ServiceContainer.AddService(typeof(IOrderParametersProvider), orderParametersProvider); }
public ExportOperation(IOrderParametersProvider orderParametersProvider, Export1cMode mode, DateTime start, DateTime end) { this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); uow = UnitOfWorkFactory.CreateWithoutRoot(); this.start = start; this.end = end; this.mode = mode; }
public SalesReceiptsInstanceProvider( ISalesReceiptsServiceSettings salesReceiptsServiceSettings, IOrderRepository orderRepository, IOrderParametersProvider orderParametersProvider) { _salesReceiptsServiceSettings = salesReceiptsServiceSettings ?? throw new ArgumentNullException(nameof(salesReceiptsServiceSettings)); _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); }
public FiscalizationWorker( IOrderRepository orderRepository, ISalesReceiptSender salesReceiptSender, IOrderParametersProvider orderParametersProvider, IEnumerable <CashBox> cashBoxes) { this.orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); this.salesReceiptSender = salesReceiptSender ?? throw new ArgumentNullException(nameof(salesReceiptSender)); this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); this.cashBoxes = cashBoxes ?? throw new ArgumentNullException(nameof(cashBoxes)); }
public SmsPaymentService( IPaymentController paymentController, IDriverPaymentService androidDriverService, IOrderParametersProvider orderParametersProvider, SmsPaymentFileCache smsPaymentFileCache ) { this.paymentController = paymentController ?? throw new ArgumentNullException(nameof(paymentController)); this.androidDriverService = androidDriverService ?? throw new ArgumentNullException(nameof(androidDriverService)); this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); this.smsPaymentFileCache = smsPaymentFileCache ?? throw new ArgumentNullException(nameof(smsPaymentFileCache)); }
public SmsPaymentServiceInstanceProvider( IPaymentController paymentController, IDriverPaymentService driverPaymentService, IOrderParametersProvider orderParametersProvider, SmsPaymentFileCache smsPaymentFileProdiver ) { this.paymentController = paymentController ?? throw new ArgumentNullException(nameof(paymentController)); this.driverPaymentService = driverPaymentService ?? throw new ArgumentNullException(nameof(driverPaymentService)); this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); this.smsPaymentFileProdiver = smsPaymentFileProdiver ?? throw new ArgumentNullException(nameof(smsPaymentFileProdiver)); }
public Stage2OrganizationProvider( IOrganizationParametersProvider organizationParametersProvider, IOrderParametersProvider orderParametersProvider, IGeographicGroupParametersProvider geographicGroupParametersProvider) { _organizationParametersProvider = organizationParametersProvider ?? throw new ArgumentNullException(nameof(organizationParametersProvider)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _geographicGroupParametersProvider = geographicGroupParametersProvider ?? throw new ArgumentNullException(nameof(geographicGroupParametersProvider)); }
public SalesReceiptsService( ISalesReceiptsServiceSettings salesReceiptsServiceSettings, IOrderRepository orderRepository, IOrderParametersProvider orderParametersProvider, IOrganizationParametersProvider organizationParametersProvider ) { this.salesReceiptsServiceSettings = salesReceiptsServiceSettings ?? throw new ArgumentNullException(nameof(salesReceiptsServiceSettings)); this.orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); this.orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); this.organizationParametersProvider = organizationParametersProvider ?? throw new ArgumentNullException(nameof(organizationParametersProvider)); }
public CounterpartyTalkViewModel( INavigationManager navigation, ITdiCompatibilityNavigation tdinavigation, IUnitOfWorkFactory unitOfWorkFactory, IRouteListRepository routedListRepository, IInteractiveService interactiveService, IOrderParametersProvider orderParametersProvider, MangoManager manager, IEmployeeJournalFactory employeeJournalFactory, ICounterpartyJournalFactory counterpartyJournalFactory, INomenclatureRepository nomenclatureRepository, IOrderRepository orderRepository, IParametersProvider parametersProvider, IDeliveryRulesParametersProvider deliveryRulesParametersProvider, IDeliveryPointJournalFactory deliveryPointJournalFactory) : base(navigation, manager) { NavigationManager = navigation ?? throw new ArgumentNullException(nameof(navigation)); _tdiNavigation = tdinavigation ?? throw new ArgumentNullException(nameof(navigation)); _routedListRepository = routedListRepository; _interactiveService = interactiveService ?? throw new ArgumentNullException(nameof(interactiveService)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _employeeJournalFactory = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory)); _counterpartyJournalFactory = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory)); _nomenclatureRepository = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository)); _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); _parametersProvider = parametersProvider ?? throw new ArgumentNullException(nameof(parametersProvider)); _deliveryRulesParametersProvider = deliveryRulesParametersProvider ?? throw new ArgumentNullException(nameof(deliveryRulesParametersProvider)); _uow = unitOfWorkFactory.CreateWithoutRoot(); _deliveryPointJournalFactory = deliveryPointJournalFactory ?? throw new ArgumentNullException(nameof(deliveryPointJournalFactory)); if (ActiveCall.CounterpartyIds.Any()) { var clients = _uow.GetById <Counterparty>(ActiveCall.CounterpartyIds); foreach (Counterparty client in clients) { CounterpartyOrderViewModel model = new CounterpartyOrderViewModel( client, unitOfWorkFactory, tdinavigation, routedListRepository, MangoManager, _orderParametersProvider, _employeeJournalFactory, _counterpartyJournalFactory, _nomenclatureRepository, _parametersProvider, _deliveryRulesParametersProvider); CounterpartyOrdersViewModels.Add(model); } currentCounterparty = CounterpartyOrdersViewModels.FirstOrDefault().Client; } else { throw new InvalidProgramException("Открыт диалог разговора с имеющимся контрагентом, но ни одного id контрагента не найдено."); } }
public Stage2OrganizationProvider( IOrganizationParametersProvider organizationParametersProvider, IOrderParametersProvider orderParametersProvider, IGeographicGroupParametersProvider geographicGroupParametersProvider) { _organizationParametersProvider = organizationParametersProvider ?? throw new ArgumentNullException(nameof(organizationParametersProvider)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); if (geographicGroupParametersProvider == null) { throw new ArgumentNullException(nameof(geographicGroupParametersProvider)); } _northOrganizationGeoGroupsIds = new[] { geographicGroupParametersProvider.NorthGeographicGroupId, geographicGroupParametersProvider.EastGeographicGroupId }; }
public SmsPaymentService( IPaymentController paymentController, ISmsPaymentStatusNotificationReciever smsPaymentStatusNotificationReciever, IOrderParametersProvider orderParametersProvider, SmsPaymentFileCache smsPaymentFileCache, ISmsPaymentDTOFactory smsPaymentDTOFactory, ISmsPaymentValidator smsPaymentValidator ) { _paymentController = paymentController ?? throw new ArgumentNullException(nameof(paymentController)); _smsPaymentStatusNotificationReciever = smsPaymentStatusNotificationReciever ?? throw new ArgumentNullException(nameof(smsPaymentStatusNotificationReciever)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _smsPaymentFileCache = smsPaymentFileCache ?? throw new ArgumentNullException(nameof(smsPaymentFileCache)); _smsPaymentDTOFactory = smsPaymentDTOFactory ?? throw new ArgumentNullException(nameof(smsPaymentDTOFactory)); _smsPaymentValidator = smsPaymentValidator ?? throw new ArgumentNullException(nameof(smsPaymentValidator)); }
public FastPaymentManager( IFastPaymentParametersProvider fastPaymentParametersProvider, IOrderParametersProvider orderParametersProvider, IStandartNomenclatures standartNomenclatures, IRouteListItemRepository routeListItemRepository, ISelfDeliveryRepository selfDeliveryRepository, ICashRepository cashRepository) { _fastPaymentParametersProvider = fastPaymentParametersProvider ?? throw new ArgumentNullException(nameof(fastPaymentParametersProvider)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _standartNomenclatures = standartNomenclatures ?? throw new ArgumentNullException(nameof(standartNomenclatures)); _routeListItemRepository = routeListItemRepository ?? throw new ArgumentNullException(nameof(routeListItemRepository)); _selfDeliveryRepository = selfDeliveryRepository ?? throw new ArgumentNullException(nameof(selfDeliveryRepository)); _cashRepository = cashRepository ?? throw new ArgumentNullException(nameof(cashRepository)); }
public SmsPaymentServiceInstanceProvider( IPaymentController paymentController, IDriverPaymentService driverPaymentService, ISmsPaymentStatusNotificationReciever smsPaymentStatusNotificationReciever, IOrderParametersProvider orderParametersProvider, SmsPaymentFileCache smsPaymentFileProdiver, ISmsPaymentDTOFactory smsPaymentDTOFactory ) { _paymentController = paymentController ?? throw new ArgumentNullException(nameof(paymentController)); _driverPaymentService = driverPaymentService ?? throw new ArgumentNullException(nameof(driverPaymentService)); _smsPaymentStatusNotificationReciever = smsPaymentStatusNotificationReciever ?? throw new ArgumentNullException(nameof(smsPaymentStatusNotificationReciever)); _orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); _smsPaymentFileProdiver = smsPaymentFileProdiver ?? throw new ArgumentNullException(nameof(smsPaymentFileProdiver)); _smsPaymentDTOFactory = smsPaymentDTOFactory ?? throw new ArgumentNullException(nameof(smsPaymentDTOFactory)); }
public IEnumerable <ReceiptForOrderNode> GetOrdersForCashReceiptServiceToSend( IUnitOfWork uow, IOrderParametersProvider orderParametersProvider, DateTime?startDate = null) { ReceiptForOrderNode resultAlias = null; OrderItem orderItemAlias = null; VodovozOrder orderAlias = null; CashReceipt cashReceiptAlias = null; Counterparty counterpartyAlias = null; var orderSumProjection = Projections.Sum( Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Decimal, "CAST(IFNULL(?1 * ?2 - ?3, 0) AS DECIMAL(14,2))"), NHibernateUtil.Decimal, Projections.Property(() => orderItemAlias.Count), Projections.Property(() => orderItemAlias.Price), Projections.Property(() => orderItemAlias.DiscountMoney) ) ); var paymentTypeRestriction = Restrictions.Disjunction() .Add(() => orderAlias.PaymentType == PaymentType.Terminal) .Add(Restrictions.Conjunction() .Add(() => orderAlias.PaymentType == PaymentType.cash) .Add(() => counterpartyAlias.AlwaysSendReceipts)) .Add(Restrictions.Conjunction() .Add(() => orderAlias.PaymentType == PaymentType.ByCard) .Add(Restrictions.Disjunction() .Add(() => orderAlias.PaymentByCardFrom.Id == orderParametersProvider.PaymentFromTerminalId) .Add(() => orderAlias.PaymentByCardFrom.Id == orderParametersProvider.GetPaymentByCardFromFastPaymentServiceId) .Add(() => orderAlias.PaymentByCardFrom.Id == orderParametersProvider.GetPaymentByCardFromAvangardId) //Не выбираем данный источник отправки для чеков, пока нет оплаты на сайте по QR /*.Add(() => orderAlias.PaymentByCardFrom.Id == orderParametersProvider.GetPaymentByCardFromSiteByQrCode)*/)); var statusRestriction = Restrictions.Disjunction() .Add(Restrictions.In(Projections.Property(() => orderAlias.OrderStatus), new[] { OrderStatus.Shipped, OrderStatus.UnloadingOnStock })) .Add(Restrictions.Conjunction() .Add(() => orderAlias.SelfDelivery) .Add(() => orderAlias.IsSelfDeliveryPaid)); var positiveSumRestriction = Restrictions.Gt(orderSumProjection, 0); var notSentRestriction = Restrictions.Disjunction() .Add(Restrictions.IsNull(Projections.Property(() => cashReceiptAlias.Id))) .Add(() => !cashReceiptAlias.Sent); var ordersToSendQuery = uow.Session.QueryOver <VodovozOrder>(() => orderAlias) .JoinEntityAlias(() => cashReceiptAlias, () => cashReceiptAlias.Order.Id == orderAlias.Id, JoinType.LeftOuterJoin) .Left.JoinAlias(() => orderAlias.OrderItems, () => orderItemAlias) .Inner.JoinAlias(() => orderAlias.Client, () => counterpartyAlias) .Where(paymentTypeRestriction) .And(statusRestriction) .And(positiveSumRestriction) .And(notSentRestriction); if (startDate.HasValue) { ordersToSendQuery.Where(() => orderAlias.DeliveryDate >= startDate.Value); } var ordersToSend = ordersToSendQuery .SelectList(list => list .SelectGroup(() => orderAlias.Id).WithAlias(() => resultAlias.OrderId) .Select(() => cashReceiptAlias.Id).WithAlias(() => resultAlias.ReceiptId) .Select(() => cashReceiptAlias.Sent).WithAlias(() => resultAlias.WasSent)) .TransformUsing(Transformers.AliasToBean <ReceiptForOrderNode>()) .List <ReceiptForOrderNode>(); return(ordersToSend); }
public PaymentTypeConverter(IOrderParametersProvider orderParametersProvider) { this._orderParametersProvider = orderParametersProvider ?? throw new ArgumentNullException(nameof(orderParametersProvider)); }
public IEnumerable <ReceiptForOrderNode> GetOrdersForCashReceiptServiceToSend( IUnitOfWork uow, IOrderParametersProvider orderParametersProvider, IOrganizationParametersProvider organizationParametersProvider, ISalesReceiptsParametersProvider salesReceiptsParametersProvider, DateTime?startDate = null) { #region Aliases Restrictions Projections var paymentByCardFromNotToSendSalesReceipts = orderParametersProvider.PaymentsByCardFromNotToSendSalesReceipts; var vodovozSouthOrganizationId = organizationParametersProvider.VodovozSouthOrganizationId; ExtendedReceiptForOrderNode extendedReceiptForOrderNodeAlias = null; OrderItem orderItemAlias = null; VodovozOrder orderAlias = null; CashReceipt cashReceiptAlias = null; Nomenclature nomenclatureAlias = null; ProductGroup productGroupAlias = null; Counterparty counterpartyAlias = null; CounterpartyContract counterpartyContractAlias = null; Organization organizationAlias = null; var orderSumProjection = Projections.Sum( Projections.SqlFunction( new SQLFunctionTemplate(NHibernateUtil.Decimal, "CAST(IFNULL(?1 * ?2 - ?3, 0) AS DECIMAL(14,2))"), NHibernateUtil.Decimal, Projections.Property(() => orderItemAlias.Count), Projections.Property(() => orderItemAlias.Price), Projections.Property(() => orderItemAlias.DiscountMoney) ) ); var orderSumRestriction = Restrictions.Gt(orderSumProjection, 0); var alwaysSendOrdersRestriction = Restrictions.Disjunction() .Add(() => productGroupAlias.OnlineStore != null) .Add(() => counterpartyAlias.AlwaysSendReceitps) .Add(() => orderAlias.SelfDelivery) .Add(Restrictions.In(Projections.Property(() => orderAlias.PaymentType), new[] { PaymentType.ByCard, PaymentType.Terminal }.ToArray())); var orderDeliveredStatuses = Restrictions.In(Projections.Property(() => orderAlias.OrderStatus), new[] { OrderStatus.Shipped, OrderStatus.UnloadingOnStock }.ToArray()); var orderPaymentTypesRestriction = Restrictions.In(Projections.Property(() => orderAlias.PaymentType), new[] { PaymentType.cash, PaymentType.Terminal, PaymentType.ByCard }.ToArray()); var paidByCardRestriction = Restrictions.Disjunction() .Add(() => orderAlias.PaymentType != PaymentType.ByCard) .Add(() => organizationAlias.Id != vodovozSouthOrganizationId) .Add(Restrictions.On(() => orderAlias.PaymentByCardFrom.Id) .Not.IsIn(paymentByCardFromNotToSendSalesReceipts)); #endregion #region AlwaysSendOrders var alwaysSendOrdersQuery = uow.Session.QueryOver <VodovozOrder>(() => orderAlias) .JoinEntityAlias(() => cashReceiptAlias, () => cashReceiptAlias.Order.Id == orderAlias.Id, JoinType.LeftOuterJoin) .Left.JoinAlias(() => orderAlias.OrderItems, () => orderItemAlias) .Left.JoinAlias(() => orderItemAlias.Nomenclature, () => nomenclatureAlias) .Left.JoinAlias(() => nomenclatureAlias.ProductGroup, () => productGroupAlias) .Left.JoinAlias(() => orderAlias.Client, () => counterpartyAlias) .Left.JoinAlias(() => orderAlias.Contract, () => counterpartyContractAlias) .Left.JoinAlias(() => counterpartyContractAlias.Organization, () => organizationAlias) .Where(alwaysSendOrdersRestriction) .And(paidByCardRestriction) .And(Restrictions.Disjunction() .Add(orderDeliveredStatuses) .Add(Restrictions.Conjunction() .Add(() => orderAlias.SelfDelivery) .Add(() => orderAlias.IsSelfDeliveryPaid))) .And(orderSumRestriction) .And(orderPaymentTypesRestriction) .And(Restrictions.Disjunction() .Add(Restrictions.IsNull(Projections.Property(() => cashReceiptAlias.Id))) .Add(() => !cashReceiptAlias.Sent)); if (startDate.HasValue) { alwaysSendOrdersQuery.Where(() => orderAlias.DeliveryDate >= startDate.Value); } var alwaysSendOrders = alwaysSendOrdersQuery .SelectList(list => list .SelectGroup(() => orderAlias.Id).WithAlias(() => extendedReceiptForOrderNodeAlias.OrderId) .Select(() => orderAlias.PaymentType).WithAlias(() => extendedReceiptForOrderNodeAlias.PaymentType) .Select(orderSumProjection).WithAlias(() => extendedReceiptForOrderNodeAlias.OrderSum) .Select(() => cashReceiptAlias.Id).WithAlias(() => extendedReceiptForOrderNodeAlias.ReceiptId) .Select(() => cashReceiptAlias.Sent).WithAlias(() => extendedReceiptForOrderNodeAlias.WasSent)) .TransformUsing(Transformers.AliasToBean <ExtendedReceiptForOrderNode>()) .Future <ExtendedReceiptForOrderNode>(); //Здесь фильтрация идёт не на уровне запроса, т.к. не NHibernate упорно не хочет клась сложное условие в HAVING var result = alwaysSendOrders .Where(x => x.PaymentType != PaymentType.cash || x.PaymentType == PaymentType.cash && x.OrderSum < 20000) .Select(x => new ReceiptForOrderNode { OrderId = x.OrderId, ReceiptId = x.ReceiptId, WasSent = x.WasSent }); #endregion #region UniqueOrderSumOrders if (salesReceiptsParametersProvider.SendUniqueOrderSumOrders) { var uniqueOrderSumSendOrdersQuery = uow.Session.QueryOver <VodovozOrder>(() => orderAlias) .JoinEntityAlias(() => cashReceiptAlias, () => cashReceiptAlias.Order.Id == orderAlias.Id, JoinType.LeftOuterJoin) .Left.JoinAlias(() => orderAlias.OrderItems, () => orderItemAlias) .Left.JoinAlias(() => orderItemAlias.Nomenclature, () => nomenclatureAlias) .Left.JoinAlias(() => nomenclatureAlias.ProductGroup, () => productGroupAlias) .Left.JoinAlias(() => orderAlias.Client, () => counterpartyAlias) .Left.JoinAlias(() => orderAlias.Contract, () => counterpartyContractAlias) .Left.JoinAlias(() => counterpartyContractAlias.Organization, () => organizationAlias) .Where(Restrictions.Not(alwaysSendOrdersRestriction)) .And(paidByCardRestriction) .And(orderDeliveredStatuses) .And(orderSumRestriction) .And(orderPaymentTypesRestriction); if (startDate.HasValue) { uniqueOrderSumSendOrdersQuery.Where(() => orderAlias.DeliveryDate >= startDate.Value); } var notUniqueOrderSumSendOrdersTemp = uniqueOrderSumSendOrdersQuery .SelectList(list => list .SelectGroup(() => orderAlias.Id).WithAlias(() => extendedReceiptForOrderNodeAlias.OrderId) .Select(() => orderAlias.PaymentType).WithAlias(() => extendedReceiptForOrderNodeAlias.PaymentType) .Select(orderSumProjection).WithAlias(() => extendedReceiptForOrderNodeAlias.OrderSum) .Select(CustomProjections.Date(() => orderAlias.DeliveryDate)) .WithAlias(() => extendedReceiptForOrderNodeAlias.DeliveryDate) .Select(() => cashReceiptAlias.Id).WithAlias(() => extendedReceiptForOrderNodeAlias.ReceiptId) .Select(() => cashReceiptAlias.Sent).WithAlias(() => extendedReceiptForOrderNodeAlias.WasSent)) .TransformUsing(Transformers.AliasToBean <ExtendedReceiptForOrderNode>()) .Future <ExtendedReceiptForOrderNode>(); var notUniqueOrderSumSendOrders = notUniqueOrderSumSendOrdersTemp.Where(x => x.PaymentType != PaymentType.cash || x.PaymentType == PaymentType.cash && x.OrderSum < 20000).ToList(); var alreadySentOrders = new List <ExtendedReceiptForOrderNode>(notUniqueOrderSumSendOrders.Where(x => x.WasSent.HasValue && x.WasSent.Value)); var uniqueOrderSumSendNodes = new List <ExtendedReceiptForOrderNode>(); foreach (var node in notUniqueOrderSumSendOrders.Where(x => !x.WasSent.HasValue || !x.WasSent.Value)) { if (alreadySentOrders.All(x => x.OrderSum != node.OrderSum || x.DeliveryDate != node.DeliveryDate) && uniqueOrderSumSendNodes.All(x => x.OrderSum != node.OrderSum || x.DeliveryDate != node.DeliveryDate)) { uniqueOrderSumSendNodes.Add(node); } } var uniqueOrderSumSendOrderNodes = uniqueOrderSumSendNodes.Select(x => new ReceiptForOrderNode { OrderId = x.OrderId, ReceiptId = x.ReceiptId, WasSent = x.WasSent }); result = result.Union(uniqueOrderSumSendOrderNodes); } #endregion return(result); }
public IList <VodovozOrder> GetOrdersToExport1c8( IUnitOfWork uow, IOrderParametersProvider orderParametersProvider, Export1cMode mode, DateTime startDate, DateTime endDate, int?organizationId = null) { VodovozOrder orderAlias = null; OrderItem orderItemAlias = null; var export1CSubquerySum = QueryOver.Of(() => orderItemAlias) .Where(() => orderItemAlias.Order.Id == orderAlias.Id) .Select(Projections.Sum( Projections.SqlFunction(new VarArgsSQLFunction("", " * ", ""), NHibernateUtil.Decimal, Projections.Conditional( Restrictions.IsNotNull(Projections.Property <OrderItem>(x => x.ActualCount)), Projections.Property <OrderItem>(x => x.ActualCount), Projections.Property <OrderItem>(x => x.Count) ), Projections.Property <OrderItem>(x => x.Price), Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Decimal, "( 1 - ?1 / 100 )"), NHibernateUtil.Decimal, Projections.Property <OrderItem>(x => x.Discount) ) ) )) ; var query = uow.Session.QueryOver(() => orderAlias) .Where(() => orderAlias.OrderStatus.IsIn(VodovozOrder.StatusesToExport1c)) .Where(() => startDate <= orderAlias.DeliveryDate && orderAlias.DeliveryDate <= endDate); if (organizationId.HasValue) { CounterpartyContract counterpartyContractAlias = null; query.Left.JoinAlias(() => orderAlias.Contract, () => counterpartyContractAlias) .Where(() => counterpartyContractAlias.Organization.Id == organizationId); } switch (mode) { case Export1cMode.BuhgalteriaOOO: query.Where(o => o.PaymentType == PaymentType.cashless) .And(Subqueries.Le(0.01, export1CSubquerySum.DetachedCriteria)); break; case Export1cMode.BuhgalteriaOOONew: CashReceipt cashReceiptAlias = null; query.JoinEntityAlias(() => cashReceiptAlias, () => cashReceiptAlias.Order.Id == orderAlias.Id, JoinType.LeftOuterJoin) .Where(Restrictions.Disjunction() .Add(() => orderAlias.PaymentType == PaymentType.cashless) .Add(Restrictions.Conjunction() .Add(Restrictions.On(() => orderAlias.PaymentType) .IsIn(new[] { PaymentType.Terminal, PaymentType.cash })) .Add(Restrictions.IsNotNull(Projections.Property(() => cashReceiptAlias.Id)))) .Add(Restrictions.Conjunction() .Add(() => orderAlias.PaymentType == PaymentType.ByCard) .Add(Restrictions.Disjunction() .Add(Restrictions.On(() => orderAlias.PaymentByCardFrom.Id) .IsIn(orderParametersProvider.PaymentsByCardFromNotToSendSalesReceipts)) .Add(Restrictions.IsNotNull(Projections.Property(() => cashReceiptAlias.Id)))) ) ); break; case Export1cMode.IPForTinkoff: query.Where(o => o.PaymentType == PaymentType.ByCard) .And(o => o.OnlineOrder != null) .And(Subqueries.Le(0.01, export1CSubquerySum.DetachedCriteria)); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } return(query.List()); }