Exemple #1
0
 public RouteListClosingDocumentsController(
     IStandartNomenclatures standartNomenclaturesParameters,
     IEmployeeRepository employeeRepository,
     IRouteListRepository routeListRepository,
     ITerminalNomenclatureProvider terminalNomenclatureProvider)
 {
     this.standartNomenclaturesParameters = standartNomenclaturesParameters ?? throw new ArgumentNullException(nameof(standartNomenclaturesParameters));
     this.employeeRepository           = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository));
     this.routeListRepository          = routeListRepository ?? throw new ArgumentNullException(nameof(routeListRepository));
     this.terminalNomenclatureProvider = terminalNomenclatureProvider ?? throw new ArgumentNullException(nameof(terminalNomenclatureProvider));
 }
 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 abstract bool IsValidForOrder(Order order, IStandartNomenclatures standartNomenclatures);
Exemple #4
0
        public override bool IsValidForOrder(Order order, IStandartNomenclatures standartNomenclatures)
        {
            if (!IsForZeroDebt)
            {
                return(true);
            }

            var forfeitId = standartNomenclatures.GetForfeitId();

            BottlesRepository bottlesRepository = new BottlesRepository();

            BottlesMovementOperation bottlesMovementAlias = null;
            Order orderAlias = null;

            //Долг клиента
            var counterpartyDebtQuery = order.UoW.Session.QueryOver <BottlesMovementOperation>(() => bottlesMovementAlias)
                                        .Where(() => bottlesMovementAlias.DeliveryPoint == null)
                                        .Where(() => bottlesMovementAlias.Counterparty.Id == order.Client.Id)
                                        .Select(
                Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Int32, "( ?2 - ?1 )"),
                                        NHibernateUtil.Int32, new IProjection[] {
                Projections.Sum(() => bottlesMovementAlias.Returned),
                Projections.Sum(() => bottlesMovementAlias.Delivered)
            }
                                        )).SingleOrDefault <int>();

            if (counterpartyDebtQuery != 0)
            {
                return(false);
            }

            //Долг по точкам доставки
            foreach (var deliveryPoint in order.Client.DeliveryPoints)
            {
                if (bottlesRepository.GetBottlesDebtAtDeliveryPoint(order.UoW, deliveryPoint) != 0)
                {
                    return(false);
                }
            }

            //Возврат бутылей и(ничего или возврат залога или неустойка)
            var orders1 = order.UoW.Session.QueryOver(() => orderAlias)
                          .Where(() => orderAlias.Client.Id == order.Client.Id)
                          .Where(() => orderAlias.OrderStatus == OrderStatus.Closed)
                          .Where(() => orderAlias.BottlesReturn != 0)
                          .List <Order>();

            if (orders1.Count == 0)
            {
                return(false);
            }

            var orders2 = new List <Order>();

            foreach (var o in orders1)
            {
                if (o.OrderDepositItems != null && o.OrderItems == null)
                {
                    orders2.Add(o);
                }
                if (o.OrderItems.All(i => i.Nomenclature.Id == forfeitId))
                {
                    orders2.Add(o);
                }
                if (o.OrderItems == null)
                {
                    orders2.Add(o);
                }
            }

            if (orders2.Count == 0)
            {
                return(false);
            }

            //Ввод остатков
            foreach (var o in orders2)
            {
                if (o.DeliveryPoint == null)
                {
                    continue;
                }
                if (o.DeliveryPoint.HaveResidue.HasValue)
                {
                    if (!o.DeliveryPoint.HaveResidue.Value)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }