private IList <FastDeliverySalesReportRow> GenerateReportRows()
        {
            if (!IsHasDates)
            {
                return(new List <FastDeliverySalesReportRow>());
            }

            RouteList                  routeListAlias        = null;
            RouteListItem              routeListItemAlias    = null;
            Order                      orderAlias            = null;
            OrderItem                  orderItemAlias        = null;
            Nomenclature               nomenclatureAlias     = null;
            DeliverySchedule           deliveryScheduleAlias = null;
            Employee                   driverAlias           = null;
            DeliveryPoint              deliveryPointAlias    = null;
            District                   districtAlias         = null;
            FastDeliverySalesReportRow resultAlias           = null;

            var itemsQuery = UoW.Session.QueryOver(() => orderItemAlias)
                             .JoinAlias(() => orderItemAlias.Order, () => orderAlias)
                             .JoinEntityAlias(() => routeListItemAlias, () => routeListItemAlias.Order.Id == orderAlias.Id)
                             .JoinAlias(() => routeListItemAlias.RouteList, () => routeListAlias)
                             .JoinAlias(() => routeListAlias.Driver, () => driverAlias)
                             .JoinAlias(() => orderItemAlias.Nomenclature, () => nomenclatureAlias)
                             .JoinAlias(() => orderAlias.DeliveryPoint, () => deliveryPointAlias)
                             .JoinAlias(() => orderAlias.DeliverySchedule, () => deliveryScheduleAlias)
                             .JoinAlias(() => deliveryPointAlias.District, () => districtAlias)
                             .Where(() => orderAlias.IsFastDelivery)
                             .And(() => orderAlias.CreateDate >= CreateDateFrom.Value.Date &&
                                  orderAlias.CreateDate <= CreateDateTo.Value.Date.Add(new TimeSpan(0, 23, 59, 59)));

            var amountPrjection = Projections.Conditional(Restrictions.IsNull(
                                                              Projections.Property(() => orderItemAlias.ActualCount)),
                                                          Projections.Property(() => orderItemAlias.Count),
                                                          Projections.Property(() => orderItemAlias.ActualCount));

            var sumProjection = Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Decimal, "(?1 * ?2 - ?3)"),
                                                        NHibernateUtil.Decimal, Projections.Property(() => orderItemAlias.Price),
                                                        amountPrjection,
                                                        Projections.Property(() => orderItemAlias.DiscountMoney));

            return(itemsQuery
                   .SelectList(list => list
                               .Select(() => orderAlias.Id).WithAlias(() => resultAlias.OrderId)
                               .Select(() => orderAlias.CreateDate).WithAlias(() => resultAlias.OrderCreateDateTime)
                               .Select(() => routeListItemAlias.RouteList.Id).WithAlias(() => resultAlias.RouteListId)
                               .Select(() => driverAlias.LastName).WithAlias(() => resultAlias.DriverLastName)
                               .Select(() => driverAlias.Name).WithAlias(() => resultAlias.DriverName)
                               .Select(() => driverAlias.Patronymic).WithAlias(() => resultAlias.DriverPatronymic)
                               .Select(() => districtAlias.DistrictName).WithAlias(() => resultAlias.District)
                               .Select(() => orderAlias.TimeDelivered).WithAlias(() => resultAlias.DeliveredDateTime)
                               .Select(() => nomenclatureAlias.Name).WithAlias(() => resultAlias.Nomenclature)
                               .Select(amountPrjection).WithAlias(() => resultAlias.Amount)
                               .Select(sumProjection).WithAlias(() => resultAlias.Sum)
                               ).OrderBy(() => orderAlias.CreateDate).Desc
                   .TransformUsing(Transformers.AliasToBean <FastDeliverySalesReportRow>())
                   .List <FastDeliverySalesReportRow>());
        }
Пример #2
0
        public void OptimizeDeliveries(IJobCancellationToken canellationToken, OptimizeDeliveriesRequest optimizeDeliveriesRequest)
        {
            var request    = GetRequest(optimizeDeliveriesRequest.RequestID);
            var customers  = GetCustomers(request);
            var deliveries = GetDeliveries(request);
            var drivers    = GetDrivers(request);

            var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>();
            var deliverySchedule = new DeliverySchedule()
            {
                OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate
            };

            _uof.DeliverySchedules.Add(deliverySchedule);
            request.Status = RequestStatus.Processing;
            _uof.SaveChanges();
            var deliveryNo = 0;

            try
            {
                foreach (var c in customers)
                {
                    canellationToken.ThrowIfCancellationRequested();

                    var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c);
                    deliveryNo = 0;

                    foreach (var d in deliveries.Where(d => d.CustomerID == c.ID))
                    {
                        var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse);

                        deliveryNo++;

                        if (idealDriver != null)
                        {
                            optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry()
                            {
                                CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo
                            });
                        }
                    }
                }

                request.Status = RequestStatus.Scheduled;
                _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries);
                _uof.SaveChanges();
            }
            catch (OperationCanceledException ex)
            {
                request.Status = RequestStatus.Failed;
                _uof.SaveChanges();
                Debug.Print("OperationCanceledException Thrown");
                Debug.Print(ex.Message);
            }
        }
Пример #3
0
        public ActionResult Edit(DeliverySchedule DeliveryScheduleEdit)
        {
            if (ModelState.IsValid)
            {
                _uof.DeliverySchedules.Update(DeliveryScheduleEdit);
                _uof.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(DeliveryScheduleEdit));
        }
Пример #4
0
        public ActionResult Create(DeliverySchedule newDeliverySchedules)
        {
            if (ModelState.IsValid)
            {
                _uof.DeliverySchedules.Add(newDeliverySchedules);
                _uof.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(newDeliverySchedules));
        }
        public DeliveryRulesService(
            IDeliveryRepository deliveryRepository,
            IBackupDistrictService backupDistrictService,
            IDeliveryRulesParametersProvider deliveryRulesParametersProvider)
        {
            _deliveryRepository              = deliveryRepository ?? throw new ArgumentNullException(nameof(deliveryRepository));
            _backupDistrictService           = backupDistrictService ?? throw new ArgumentNullException(nameof(backupDistrictService));
            _deliveryRulesParametersProvider =
                deliveryRulesParametersProvider ?? throw new ArgumentNullException(nameof(deliveryRulesParametersProvider));

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot("Получение графика быстрой доставки"))
            {
                _fastDeliverySchedule = uow.GetById <DeliverySchedule>(deliveryRulesParametersProvider.FastDeliveryScheduleId);
            }
        }
Пример #6
0
        private async Task <DeliverySchedule> GetDeliveryDateAsync()
        {
            var deliverySchedule = new DeliverySchedule();

            using (var httpClient = new HttpClient())
            {
                var deliveryApiUri = Settings.GetDeliveryApiUri();
                var url            = string.Format("{0}delivery/1", deliveryApiUri);

                var response = await httpClient.GetStringAsync(new Uri(url));

                deliverySchedule = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <DeliverySchedule>(response));
            }

            return(deliverySchedule);
        }
        public IList <NotFullyPaidOrderNode> GetAllNotFullyPaidOrdersByClientAndOrg(
            IUnitOfWork uow, int counterpartyId, int organizationId, int closingDocumentDeliveryScheduleId)
        {
            VodovozOrder              orderAlias                     = null;
            OrderItem                 orderItemAlias                 = null;
            PaymentItem               paymentItemAlias               = null;
            CounterpartyContract      counterpartyContractAlias      = null;
            Organization              orderOrganizationAlias         = null;
            DeliverySchedule          deliveryScheduleAlias          = null;
            CashlessMovementOperation cashlessMovementOperationAlias = null;
            NotFullyPaidOrderNode     resultAlias                    = null;

            var orderSumProjection     = GetOrderSumProjection(orderItemAlias);
            var allocatedSumProjection = QueryOver.Of(() => paymentItemAlias)
                                         .JoinAlias(pi => pi.CashlessMovementOperation, () => cashlessMovementOperationAlias)
                                         .Where(pi => pi.Order.Id == orderAlias.Id)
                                         .Where(pi => pi.PaymentItemStatus != AllocationStatus.Cancelled)
                                         .Select(Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Decimal, "IFNULL(?1, ?2)"),
                                                                         NHibernateUtil.Decimal,
                                                                         Projections.Sum(() => cashlessMovementOperationAlias.Expense),
                                                                         Projections.Constant(0)));

            return(uow.Session.QueryOver(() => orderAlias)
                   .Inner.JoinAlias(o => o.OrderItems, () => orderItemAlias)
                   .Inner.JoinAlias(o => o.Contract, () => counterpartyContractAlias)
                   .Inner.JoinAlias(() => counterpartyContractAlias.Organization, () => orderOrganizationAlias)
                   .Inner.JoinAlias(o => o.DeliverySchedule, () => deliveryScheduleAlias)
                   .Where(() => orderAlias.Client.Id == counterpartyId)
                   .And(() => orderOrganizationAlias.Id == organizationId)
                   .And(() => orderAlias.OrderStatus == OrderStatus.Shipped ||
                        orderAlias.OrderStatus == OrderStatus.UnloadingOnStock ||
                        orderAlias.OrderStatus == OrderStatus.Closed)
                   .And(() => orderAlias.PaymentType == PaymentType.cashless)
                   .And(() => orderAlias.OrderPaymentStatus != OrderPaymentStatus.Paid)
                   .And(() => deliveryScheduleAlias.Id != closingDocumentDeliveryScheduleId)
                   .SelectList(list =>
                               list.SelectGroup(o => o.Id).WithAlias(() => resultAlias.Id)
                               .Select(o => o.DeliveryDate).WithAlias(() => resultAlias.OrderDeliveryDate)
                               .Select(o => o.CreateDate).WithAlias(() => resultAlias.OrderCreationDate)
                               .Select(orderSumProjection).WithAlias(() => resultAlias.OrderSum)
                               .SelectSubQuery(allocatedSumProjection).WithAlias(() => resultAlias.AllocatedSum))
                   .Where(Restrictions.Gt(orderSumProjection, 0))
                   .TransformUsing(Transformers.AliasToBean <NotFullyPaidOrderNode>())
                   .OrderBy(o => o.DeliveryDate).Asc
                   .OrderBy(o => o.CreateDate).Asc
                   .List <NotFullyPaidOrderNode>());
        }
Пример #8
0
        private DeliverySchedule CreateDeliverySchedule(Delivery deliveryRequest, string droneId)
        {
            DeliverySchedule scheduleDelivery = new DeliverySchedule
            {
                Id    = deliveryRequest.DeliveryId,
                Owner = new UserAccount {
                    AccountId = Guid.NewGuid().ToString(), UserId = deliveryRequest.OwnerId
                },
                Pickup               = LocationRandomizer.GetRandomLocation(),
                Dropoff              = LocationRandomizer.GetRandomLocation(),
                Deadline             = deliveryRequest.Deadline,
                Expedited            = deliveryRequest.Expedited,
                ConfirmationRequired = (ConfirmationType)deliveryRequest.ConfirmationRequired,
                DroneId              = droneId,
            };

            return(scheduleDelivery);
        }
        public void OptimizeDeliveries(OptimizeDeliveriesRequest optimizeDeliveriesRequest)
        {
            var request    = GetRequest(optimizeDeliveriesRequest.RequestID);
            var customers  = GetCustomers(request);
            var deliveries = GetDeliveries(request);
            var drivers    = GetDrivers(request);

            var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>();
            var deliverySchedule = new DeliverySchedule()
            {
                OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate
            };

            _uof.DeliverySchedules.Add(deliverySchedule);
            request.Status = RequestStatus.Processing;
            _uof.SaveChanges();
            var deliveryNo = 0;

            foreach (var c in customers)
            {
                var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c);
                deliveryNo = 0;

                foreach (var d in deliveries.Where(d => d.CustomerID == c.ID))
                {
                    var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse);

                    deliveryNo++;

                    if (idealDriver != null)
                    {
                        optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry()
                        {
                            CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo
                        });
                    }
                }
            }

            //throw new Exception("Some Job ending error");
            request.Status = RequestStatus.Scheduled;
            _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries);
            _uof.SaveChanges();
        }
        public async Task WhenSchedulingDelivery_ThenInvokesDeliveryAPI()
        {
            string           actualDeliveryId       = null;
            DeliverySchedule actualDeliverySchedule = null;

            _handleHttpRequest = ctx =>
            {
                if (ctx.Request.Path.Value.StartsWith(DeliveryPath))
                {
                    actualDeliveryId       = ctx.Request.Path;
                    actualDeliverySchedule =
                        new JsonSerializer().Deserialize <DeliverySchedule>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));
                    ctx.Response.StatusCode = StatusCodes.Status201Created;
                }
                else
                {
                    ctx.Response.StatusCode = StatusCodes.Status500InternalServerError;
                }

                return(Task.CompletedTask);
            };

            var delivery =
                new Delivery
            {
                DeliveryId  = "someDeliveryId",
                PackageInfo = new PackageInfo {
                    PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                }
            };
            await _caller.ScheduleDeliveryAsync(delivery, "someDroneId");

            Assert.NotNull(actualDeliveryId);
            Assert.Equal($"{DeliveryPath}/api/deliveries/{delivery.DeliveryId}", actualDeliveryId);

            Assert.NotNull(actualDeliverySchedule);
            Assert.Equal(delivery.DeliveryId, actualDeliverySchedule.Id);
            Assert.Equal((int)delivery.ConfirmationRequired, (int)actualDeliverySchedule.ConfirmationRequired);
            Assert.Equal(delivery.Expedited, actualDeliverySchedule.Expedited);
            Assert.Equal(delivery.OwnerId, actualDeliverySchedule.Owner.UserId);
            Assert.Equal("someDroneId", actualDeliverySchedule.DroneId);
        }
Пример #11
0
        public async Task ScheduleDelivery(IDialogContext context, LuisResult result)
        {
            EntityRecommendation deliveryDate;

            if (result.TryFindEntity(EntityDateTime, out deliveryDate))
            {
                var dateparser = new Chronic.Parser();
                var datetime   = dateparser.Parse(deliveryDate.Entity).ToTime();

                var schedule = new DeliverySchedule()
                {
                    Id           = 1,
                    DeliveryDate = datetime
                };

                await UpdateDeliveryDateAsync(schedule);

                string resultMessage = $"We'll schedule a delivery date for {datetime.ToLongDateString()}";
                await context.PostAsync(resultMessage);
            }
        }
Пример #12
0
        private async Task <DeliverySchedule> UpdateDeliveryDateAsync(DeliverySchedule schedule)
        {
            using (var httpClient = new HttpClient())
            {
                var deliveryApiUri = Settings.GetDeliveryApiUri();
                var url            = string.Format("{0}delivery/1", deliveryApiUri);

                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, "relativeAddress");
                request.Content = new StringContent(JsonConvert.SerializeObject(schedule),
                                                    Encoding.UTF8,
                                                    "application/json");


                httpClient.BaseAddress = new Uri(url);

                await httpClient.SendAsync(request)
                .ContinueWith(responseTask =>
                {
                    Console.WriteLine("Response: {0}", responseTask.Result);
                });
            }

            return(schedule);
        }
Пример #13
0
        public void TestSetup()
        {
            DeliveryFactory deliveryFactory = new DeliveryFactoryImpl();

            // Create some local deliveries
            var localDeliveryList = new List <Delivery>();

            localDeliveryList.Add(deliveryFactory.CreateDelivery(10));
            localDeliveryList.Add(deliveryFactory.CreateDelivery(20));
            localDeliveryList.Add(deliveryFactory.CreateDelivery(30));
            localDeliveryList.Add(deliveryFactory.CreateDelivery(40));
            localDeliveryList.Add(deliveryFactory.CreateDelivery(50));
            localDeliverySchedule = new DeliverySchedule(localDeliveryList);

            // Create some long distance deliveries
            var longDistanceDeliveryList = new List <Delivery>();

            longDistanceDeliveryList.Add(deliveryFactory.CreateDelivery(101));
            longDistanceDeliveryList.Add(deliveryFactory.CreateDelivery(200));
            longDistanceDeliveryList.Add(deliveryFactory.CreateDelivery(300));
            longDistanceDeliveryList.Add(deliveryFactory.CreateDelivery(400));
            longDistanceDeliveryList.Add(deliveryFactory.CreateDelivery(500));
            longDistanceDeliverySchedule = new DeliverySchedule(longDistanceDeliveryList);
        }
        /// <summary>
        /// Run the code example.
        /// </summary>
        /// <param name="service">An initialized Dfa Reporting service object
        /// </param>
        public override void Run(DfareportingService service)
        {
            long campaignId = long.Parse(_T("INSERT_CAMPAIGN_ID_HERE"));
              long creativeId = long.Parse(_T("INSERT_CREATIVE_ID_HERE"));
              long placementId = long.Parse(_T("INSERT_PLACEMENT_ID_HERE"));
              long profileId = long.Parse(_T("INSERT_PROFILE_ID_HERE"));

              String adName = _T("INSERT_AD_NAME_HERE");

              // Retrieve the campaign.
              Campaign campaign = service.Campaigns.Get(profileId, campaignId).Execute();

              // Create a click-through URL.
              ClickThroughUrl clickThroughUrl = new ClickThroughUrl();
              clickThroughUrl.DefaultLandingPage = true;

              // Create a creative assignment.
              CreativeAssignment creativeAssignment = new CreativeAssignment();
              creativeAssignment.Active = true;
              creativeAssignment.CreativeId = creativeId;
              creativeAssignment.ClickThroughUrl = clickThroughUrl;

              // Create a placement assignment.
              PlacementAssignment placementAssignment = new PlacementAssignment();
              placementAssignment.Active = true;
              placementAssignment.PlacementId = placementId;

              // Create a creative rotation.
              CreativeRotation creativeRotation = new CreativeRotation();
              creativeRotation.CreativeAssignments = new List<CreativeAssignment>() {
              creativeAssignment
              };

              // Create a delivery schedule.
              DeliverySchedule deliverySchedule = new DeliverySchedule();
              deliverySchedule.ImpressionRatio = 1;
              deliverySchedule.Priority = "AD_PRIORITY_01";

              DateTime startDate = DateTime.Now;
              DateTime endDate = Convert.ToDateTime(campaign.EndDate);

              // Create a rotation group.
              Ad rotationGroup = new Ad();
              rotationGroup.Active = true;
              rotationGroup.CampaignId = campaignId;
              rotationGroup.CreativeRotation = creativeRotation;
              rotationGroup.DeliverySchedule = deliverySchedule;
              rotationGroup.StartTime = startDate;
              rotationGroup.EndTime = endDate;
              rotationGroup.Name = adName;
              rotationGroup.PlacementAssignments = new List<PlacementAssignment>() {
              placementAssignment
              };
              rotationGroup.Type = "AD_SERVING_STANDARD_AD";

              // Insert the rotation group.
              Ad result = service.Ads.Insert(rotationGroup, profileId).Execute();

              // Display the new ad ID.
              Console.WriteLine("Ad with ID {0} was created.", result.Id);
        }
Пример #15
0
        public ActionResult Create()
        {
            var DeliverySchedule = new DeliverySchedule();

            return(View(DeliverySchedule));
        }
Пример #16
0
        public void OptimizeDeliveries(IJobCancellationToken canellationToken, OptimizeDeliveriesRequest optimizeDeliveriesRequest)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Optimization Deliveries started for requestId {0}", optimizeDeliveriesRequest.RequestID);
            Console.ResetColor();

            var request          = GetRequest(optimizeDeliveriesRequest.RequestID);
            var deliverySchedule = new DeliverySchedule()
            {
                OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate
            };

            try
            {
                var customers  = GetCustomers(request);
                var deliveries = GetDeliveries(request);
                var drivers    = GetDrivers(request);

                var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>();

                _uof.DeliverySchedules.Add(deliverySchedule);

                request.Status = RequestStatus.Processing;
                _uof.SaveChanges();

                var deliveryNo = 0;
                foreach (var c in customers)
                {
                    canellationToken.ThrowIfCancellationRequested();

                    var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c);

                    deliveryNo = 0;
                    foreach (var d in deliveries.Where(d => d.CustomerID == c.ID))
                    {
                        var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse);

                        deliveryNo++;

                        if (idealDriver != null)
                        {
                            optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry()
                            {
                                CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo
                            });
                        }
                    }
                }

                //throw new Exception("Fake Error");

                _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries);
                _uof.SaveChanges();
                OptimizeDeliveriesComplete(request.ID);
            }
            catch (OperationCanceledException ex)
            {
                _uof.DeliverySchedules.Remove(deliverySchedule);
                request.Status = RequestStatus.Stopped;
                _uof.SaveChanges();
            }
            catch (Exception ex)
            {
                _uof.DeliverySchedules.Remove(deliverySchedule);
                request.Status = RequestStatus.Failed;
                _uof.SaveChanges();
            }
        }
        private IQueryOver <VodovozOrder> GetOrdersQuery(IUnitOfWork uow)
        {
            RetailOrderJournalNode resultAlias         = null;
            VodovozOrder           orderAlias          = null;
            Nomenclature           nomenclatureAlias   = null;
            OrderItem            orderItemAlias        = null;
            Counterparty         counterpartyAlias     = null;
            DeliveryPoint        deliveryPointAlias    = null;
            DeliverySchedule     deliveryScheduleAlias = null;
            Employee             authorAlias           = null;
            Employee             lastEditorAlias       = null;
            District             districtAlias         = null;
            CounterpartyContract contractAlias         = null;

            Nomenclature sanitizationNomenclature = _nomenclatureRepository.GetSanitisationNomenclature(uow);

            var query = uow.Session.QueryOver <VodovozOrder>(() => orderAlias);

            if (FilterViewModel != null && FilterViewModel.IsForRetail != null)
            {
                query.JoinEntityAlias(
                    () => counterpartyAlias,
                    () => counterpartyAlias.Id == orderAlias.Client.Id &&
                    counterpartyAlias.IsForRetail == FilterViewModel.IsForRetail,
                    NHibernate.SqlCommand.JoinType.InnerJoin);
            }
            else
            {
                query.Left.JoinAlias(o => o.Client, () => counterpartyAlias);
            }

            if (FilterViewModel.ViewTypes != ViewTypes.Order && FilterViewModel.ViewTypes != ViewTypes.All)
            {
                query.Where(o => o.Id == -1);
            }

            if (FilterViewModel.RestrictStatus != null)
            {
                query.Where(o => o.OrderStatus == FilterViewModel.RestrictStatus);
            }

            if (FilterViewModel.RestrictPaymentType != null)
            {
                query.Where(o => o.PaymentType == FilterViewModel.RestrictPaymentType);
            }

            if (FilterViewModel.HideStatuses != null)
            {
                query.WhereRestrictionOn(o => o.OrderStatus).Not.IsIn(FilterViewModel.HideStatuses);
            }

            if (FilterViewModel.RestrictOnlySelfDelivery != null)
            {
                query.Where(o => o.SelfDelivery == FilterViewModel.RestrictOnlySelfDelivery);
            }

            if (FilterViewModel.RestrictWithoutSelfDelivery != null)
            {
                query.Where(o => o.SelfDelivery != FilterViewModel.RestrictWithoutSelfDelivery);
            }

            if (FilterViewModel.RestrictCounterparty != null)
            {
                query.Where(o => o.Client == FilterViewModel.RestrictCounterparty);
            }

            if (FilterViewModel.DeliveryPoint != null)
            {
                query.Where(o => o.DeliveryPoint == FilterViewModel.DeliveryPoint);
            }

            if (FilterViewModel.RestrictStartDate != null)
            {
                query.Where(o => o.DeliveryDate >= FilterViewModel.RestrictStartDate);
            }

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

            if (FilterViewModel.RestrictLessThreeHours == true)
            {
                query.Where(Restrictions
                            .GtProperty(Projections.SqlFunction(
                                            new SQLFunctionTemplate(NHibernateUtil.Time, "ADDTIME(?1, ?2)"),
                                            NHibernateUtil.Time,
                                            Projections.Property(() => deliveryScheduleAlias.From),
                                            Projections.Constant("3:0:0")),
                                        Projections.Property(() => deliveryScheduleAlias.To)));
            }

            if (FilterViewModel.RestrictHideService != null)
            {
                if (FilterViewModel.RestrictHideService.Value)
                {
                    query.Where(o => o.OrderAddressType != OrderAddressType.Service);
                }
                else
                {
                    query.Where(o => o.OrderAddressType == OrderAddressType.Service);
                }
            }

            if (FilterViewModel.RestrictOnlyService != null)
            {
                if (FilterViewModel.RestrictOnlyService.Value)
                {
                    query.Where(o => o.OrderAddressType == OrderAddressType.Service);
                }
                else
                {
                    query.Where(o => o.OrderAddressType != OrderAddressType.Service);
                }
            }

            if (FilterViewModel.OrderPaymentStatus != null)
            {
                query.Where(o => o.OrderPaymentStatus == FilterViewModel.OrderPaymentStatus);
            }

            if (FilterViewModel.Organisation != null)
            {
                query.Where(() => contractAlias.Organization.Id == FilterViewModel.Organisation.Id);
            }

            if (FilterViewModel.PaymentByCardFrom != null)
            {
                query.Where(o => o.PaymentByCardFrom.Id == FilterViewModel.PaymentByCardFrom.Id);
            }

            var bottleCountSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                      .Where(() => orderAlias.Id == orderItemAlias.Order.Id)
                                      .JoinAlias(() => orderItemAlias.Nomenclature, () => nomenclatureAlias)
                                      .Where(() => nomenclatureAlias.Category == NomenclatureCategory.water && nomenclatureAlias.TareVolume == TareVolume.Vol19L)
                                      .Select(Projections.Sum(() => orderItemAlias.Count));

            var sanitisationCountSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                            .Where(() => orderAlias.Id == orderItemAlias.Order.Id)
                                            .Where(() => orderItemAlias.Nomenclature.Id == sanitizationNomenclature.Id)
                                            .Select(Projections.Sum(() => orderItemAlias.Count));

            var orderSumSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                   .Where(() => orderItemAlias.Order.Id == orderAlias.Id)
                                   .Select(
                Projections.Sum(
                    Projections.SqlFunction(
                        new SQLFunctionTemplate(NHibernateUtil.Decimal, "ROUND(IFNULL(?1, ?2) * ?3 - ?4, 2)"),
                        NHibernateUtil.Decimal,
                        Projections.Property <OrderItem>(x => x.ActualCount),
                        Projections.Property <OrderItem>(x => x.Count),
                        Projections.Property <OrderItem>(x => x.Price),
                        Projections.Property <OrderItem>(x => x.DiscountMoney)
                        )
                    )
                );

            query.Left.JoinAlias(o => o.DeliveryPoint, () => deliveryPointAlias)
            .Left.JoinAlias(o => o.DeliverySchedule, () => deliveryScheduleAlias)
            .Left.JoinAlias(o => o.Author, () => authorAlias)
            .Left.JoinAlias(o => o.LastEditor, () => lastEditorAlias)
            .Left.JoinAlias(() => deliveryPointAlias.District, () => districtAlias)
            .Left.JoinAlias(o => o.Contract, () => contractAlias);

            query.Where(GetSearchCriterion(
                            () => orderAlias.Id,
                            () => counterpartyAlias.Name,
                            () => deliveryPointAlias.CompiledAddress,
                            () => authorAlias.LastName,
                            () => orderAlias.DriverCallId,
                            () => orderAlias.OnlineOrder,
                            () => orderAlias.EShopOrder,
                            () => orderAlias.OrderPaymentStatus
                            ));

            var resultQuery = query
                              .SelectList(list => list
                                          .Select(() => orderAlias.Id).WithAlias(() => resultAlias.Id)
                                          .Select(() => orderAlias.SelfDelivery).WithAlias(() => resultAlias.IsSelfDelivery)
                                          .Select(() => orderAlias.DeliveryDate).WithAlias(() => resultAlias.Date)
                                          .Select(() => orderAlias.CreateDate).WithAlias(() => resultAlias.CreateDate)
                                          .Select(() => deliveryScheduleAlias.Name).WithAlias(() => resultAlias.DeliveryTime)
                                          .Select(() => orderAlias.OrderStatus).WithAlias(() => resultAlias.StatusEnum)
                                          .Select(() => orderAlias.Address1c).WithAlias(() => resultAlias.Address1c)
                                          .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorLastName)
                                          .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                          .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                          .Select(() => lastEditorAlias.LastName).WithAlias(() => resultAlias.LastEditorLastName)
                                          .Select(() => lastEditorAlias.Name).WithAlias(() => resultAlias.LastEditorName)
                                          .Select(() => lastEditorAlias.Patronymic).WithAlias(() => resultAlias.LastEditorPatronymic)
                                          .Select(() => orderAlias.LastEditedTime).WithAlias(() => resultAlias.LastEditedTime)
                                          .Select(() => orderAlias.DriverCallId).WithAlias(() => resultAlias.DriverCallId)
                                          .Select(() => orderAlias.OnlineOrder).WithAlias(() => resultAlias.OnlineOrder)
                                          .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Counterparty)
                                          .Select(() => districtAlias.DistrictName).WithAlias(() => resultAlias.DistrictName)
                                          .Select(() => deliveryPointAlias.CompiledAddress).WithAlias(() => resultAlias.CompilledAddress)
                                          .Select(() => deliveryPointAlias.City).WithAlias(() => resultAlias.City)
                                          .Select(() => deliveryPointAlias.Street).WithAlias(() => resultAlias.Street)
                                          .Select(() => deliveryPointAlias.Building).WithAlias(() => resultAlias.Building)
                                          .Select(() => orderAlias.EShopOrder).WithAlias(() => resultAlias.EShopOrder)
                                          .Select(() => orderAlias.OrderPaymentStatus).WithAlias(() => resultAlias.OrderPaymentStatus)
                                          .SelectSubQuery(orderSumSubquery).WithAlias(() => resultAlias.Sum)
                                          .SelectSubQuery(bottleCountSubquery).WithAlias(() => resultAlias.BottleAmount)
                                          .SelectSubQuery(sanitisationCountSubquery).WithAlias(() => resultAlias.SanitisationAmount)
                                          )
                              .OrderBy(x => x.CreateDate).Desc
                              .SetTimeout(60)
                              .TransformUsing(Transformers.AliasToBean <RetailOrderJournalNode <VodovozOrder> >());

            return(resultQuery);
        }
        public ActionResult CreateSchedule(string deliveryManID)
        {
            List <int> listOrderID = new List <int>();

            if (Session["ListOrderID"] != null)
            {
                var schedule = new DeliverySchedule();
                listOrderID          = (List <int>)Session["ListOrderID"];
                schedule.DeliveryMan = unitOfWork.DeliverymanRepository.GetByID(int.Parse(deliveryManID));
                //schedule.DueDate = DateTime.Parse(dueDate);
                schedule.CreateDate = DateTime.Now;
                var   scheduleDetail = new DeliveryScheduleDetail();
                var   order          = new DrugOrder();
                Point startPoint     = new Point();
                startPoint.x = 10.7972388;
                startPoint.y = 106.6803467;
                List <Point> listOrder = new List <Point>();
                for (int i = 0; i < listOrderID.Count; i++)
                {
                    Point drugOrderPoint = new Point();
                    drugOrderPoint.DrugOrder = unitOfWork.DrugOrderRepository.GetByID(listOrderID[i]);
                    var      drugstoreCoordinate  = drugOrderPoint.DrugOrder.Drugstore.Coordinate;
                    string[] drugstoreCoordinates = drugstoreCoordinate.Split(',');
                    drugOrderPoint.x = double.Parse(drugstoreCoordinates[0]);
                    drugOrderPoint.y = double.Parse(drugstoreCoordinates[1]);
                    listOrder.Add(drugOrderPoint);
                }
                var          tempPoint   = new Point();
                List <Point> resuledList = new List <Point>();
                bool         flag        = true;
                tempPoint = startPoint;
                for (int i = listOrder.Count - 1; i >= 0; i--)
                {
                    if (listOrder.Count > 0)
                    {
                        tempPoint = NearestPoint(tempPoint, listOrder);
                        resuledList.Add(tempPoint);
                        listOrder.Remove(tempPoint);
                    }
                }
                for (int i = 0; i < resuledList.Count; i++)
                {
                    scheduleDetail             = new DeliveryScheduleDetail();
                    order                      = new DrugOrder();
                    scheduleDetail.DrugOrderID = resuledList[i].DrugOrder.DrugOrderID;
                    scheduleDetail.Status      = (int)Status.StatusEnum.Inprogress;
                    order                      = resuledList[i].DrugOrder;
                    order.Status               = (int)Status.StatusEnum.Inprogress;
                    unitOfWork.DrugOrderRepository.Update(order);
                    schedule.DeliveryScheduleDetails.Add(scheduleDetail);
                }
                schedule.Status = (int)Status.StatusEnum.Inprogress;
                bool check = unitOfWork.DeliveryScheduleRepository.Insert(schedule);
                if (check)
                {
                    Session["ListOrderID"] = null;
                }
                unitOfWork.DeliveryScheduleRepository.SaveChanges();
                unitOfWork.DeliveryScheduleDetailsRepository.SaveChanges();
                unitOfWork.DrugOrderRepository.SaveChanges();
            }

            return(Json(listOrderID));
        }
Пример #19
0
        /// <summary>
        /// Run the code example.
        /// </summary>
        /// <param name="service">An initialized Dfa Reporting service object
        /// </param>
        public override void Run(DfareportingService service)
        {
            long campaignId  = long.Parse(_T("INSERT_CAMPAIGN_ID_HERE"));
            long creativeId  = long.Parse(_T("INSERT_CREATIVE_ID_HERE"));
            long placementId = long.Parse(_T("INSERT_PLACEMENT_ID_HERE"));
            long profileId   = long.Parse(_T("INSERT_PROFILE_ID_HERE"));

            String adName = _T("INSERT_AD_NAME_HERE");

            // Retrieve the campaign.
            Campaign campaign = service.Campaigns.Get(profileId, campaignId).Execute();

            // Create a click-through URL.
            ClickThroughUrl clickThroughUrl = new ClickThroughUrl();

            clickThroughUrl.DefaultLandingPage = true;

            // Create a creative assignment.
            CreativeAssignment creativeAssignment = new CreativeAssignment();

            creativeAssignment.Active          = true;
            creativeAssignment.CreativeId      = creativeId;
            creativeAssignment.ClickThroughUrl = clickThroughUrl;

            // Create a placement assignment.
            PlacementAssignment placementAssignment = new PlacementAssignment();

            placementAssignment.Active      = true;
            placementAssignment.PlacementId = placementId;

            // Create a creative rotation.
            CreativeRotation creativeRotation = new CreativeRotation();

            creativeRotation.CreativeAssignments = new List <CreativeAssignment>()
            {
                creativeAssignment
            };

            // Create a delivery schedule.
            DeliverySchedule deliverySchedule = new DeliverySchedule();

            deliverySchedule.ImpressionRatio = 1;
            deliverySchedule.Priority        = "AD_PRIORITY_01";

            DateTime startDate = DateTime.Now;
            DateTime endDate   = Convert.ToDateTime(campaign.EndDate);

            // Create a rotation group.
            Ad rotationGroup = new Ad();

            rotationGroup.Active               = true;
            rotationGroup.CampaignId           = campaignId;
            rotationGroup.CreativeRotation     = creativeRotation;
            rotationGroup.DeliverySchedule     = deliverySchedule;
            rotationGroup.StartTime            = startDate;
            rotationGroup.EndTime              = endDate;
            rotationGroup.Name                 = adName;
            rotationGroup.PlacementAssignments = new List <PlacementAssignment>()
            {
                placementAssignment
            };
            rotationGroup.Type = "AD_SERVING_STANDARD_AD";

            // Insert the rotation group.
            Ad result = service.Ads.Insert(rotationGroup, profileId).Execute();

            // Display the new ad ID.
            Console.WriteLine("Ad with ID {0} was created.", result.Id);
        }
        private IQueryOver <VodovozOrder> GetOrdersQuery(IUnitOfWork uow)
        {
            OrderForRouteListJournalNode resultAlias = null;
            VodovozOrder     orderAlias            = null;
            Nomenclature     nomenclatureAlias     = null;
            OrderItem        orderItemAlias        = null;
            Counterparty     counterpartyAlias     = null;
            DeliveryPoint    deliveryPointAlias    = null;
            DeliverySchedule deliveryScheduleAlias = null;
            Employee         authorAlias           = null;
            Employee         lastEditorAlias       = null;
            District         districtAlias         = null;

            Nomenclature sanitizationNomenclature =
                new NomenclatureParametersProvider(new ParametersProvider()).GetSanitisationNomenclature(uow);

            var query = uow.Session.QueryOver <VodovozOrder>(() => orderAlias);

            if (FilterViewModel.ViewTypes != ViewTypes.Order && FilterViewModel.ViewTypes != ViewTypes.All)
            {
                query.Where(o => o.Id == -1);
            }

            if (FilterViewModel.RestrictStatus != null)
            {
                query.Where(o => o.OrderStatus == FilterViewModel.RestrictStatus);
            }

            if (FilterViewModel.RestrictPaymentType != null)
            {
                query.Where(o => o.PaymentType == FilterViewModel.RestrictPaymentType);
            }

            if (FilterViewModel.HideStatuses != null)
            {
                query.WhereRestrictionOn(o => o.OrderStatus).Not.IsIn(FilterViewModel.HideStatuses);
            }

            if (FilterViewModel.RestrictOnlySelfDelivery != null)
            {
                query.Where(o => o.SelfDelivery == FilterViewModel.RestrictOnlySelfDelivery);
            }

            if (FilterViewModel.RestrictWithoutSelfDelivery != null)
            {
                query.Where(o => o.SelfDelivery != FilterViewModel.RestrictWithoutSelfDelivery);
            }

            if (FilterViewModel.RestrictCounterparty != null)
            {
                query.Where(o => o.Client == FilterViewModel.RestrictCounterparty);
            }

            if (FilterViewModel.DeliveryPoint != null)
            {
                query.Where(o => o.DeliveryPoint == FilterViewModel.DeliveryPoint);
            }

            if (FilterViewModel.RestrictStartDate != null)
            {
                query.Where(o => o.DeliveryDate >= FilterViewModel.RestrictStartDate);
            }

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

            if (FilterViewModel.RestrictLessThreeHours == true)
            {
                query.Where(Restrictions
                            .GtProperty(Projections.SqlFunction(
                                            new SQLFunctionTemplate(NHibernateUtil.Time, "ADDTIME(?1, ?2)"),
                                            NHibernateUtil.Time,
                                            Projections.Property(() => deliveryScheduleAlias.From),
                                            Projections.Constant("3:0:0")),
                                        Projections.Property(() => deliveryScheduleAlias.To)));
            }

            if (FilterViewModel.RestrictHideService != null)
            {
                if (FilterViewModel.RestrictHideService.Value)
                {
                    query.Where(o => o.OrderAddressType != OrderAddressType.Service);
                }
                else
                {
                    query.Where(o => o.OrderAddressType == OrderAddressType.Service);
                }
            }

            if (FilterViewModel.RestrictOnlyService != null)
            {
                if (FilterViewModel.RestrictOnlyService.Value)
                {
                    query.Where(o => o.OrderAddressType == OrderAddressType.Service);
                }
                else
                {
                    query.Where(o => o.OrderAddressType != OrderAddressType.Service);
                }
            }

            if (FilterViewModel.OrderPaymentStatus != null)
            {
                query.Where(o => o.OrderPaymentStatus == FilterViewModel.OrderPaymentStatus);
            }

            var bottleCountSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                      .Where(() => orderAlias.Id == orderItemAlias.Order.Id)
                                      .JoinAlias(() => orderItemAlias.Nomenclature, () => nomenclatureAlias)
                                      .Where(() => nomenclatureAlias.Category == NomenclatureCategory.water && nomenclatureAlias.TareVolume == TareVolume.Vol19L)
                                      .Select(Projections.Sum(() => orderItemAlias.Count));

            var sanitisationCountSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                            .Where(() => orderAlias.Id == orderItemAlias.Order.Id)
                                            .Where(() => orderItemAlias.Nomenclature.Id == sanitizationNomenclature.Id)
                                            .Select(Projections.Sum(() => orderItemAlias.Count));

            var orderSumSubquery = QueryOver.Of <OrderItem>(() => orderItemAlias)
                                   .Where(() => orderItemAlias.Order.Id == orderAlias.Id)
                                   .Select(
                Projections.Sum(
                    Projections.SqlFunction(
                        new SQLFunctionTemplate(NHibernateUtil.Decimal, "?1 * ?2 - IF(?3 IS NULL OR ?3 = 0, IFNULL(?4, 0), ?3)"),
                        NHibernateUtil.Decimal,
                        Projections.Property <OrderItem>(x => x.Count),
                        Projections.Property <OrderItem>(x => x.Price),
                        Projections.Property <OrderItem>(x => x.DiscountMoney),
                        Projections.Property <OrderItem>(x => x.OriginalDiscountMoney)
                        )
                    )
                );

            query.Left.JoinAlias(o => o.DeliveryPoint, () => deliveryPointAlias)
            .Left.JoinAlias(o => o.DeliverySchedule, () => deliveryScheduleAlias)
            .Left.JoinAlias(o => o.Client, () => counterpartyAlias)
            .Left.JoinAlias(o => o.Author, () => authorAlias)
            .Left.JoinAlias(o => o.LastEditor, () => lastEditorAlias)
            .Left.JoinAlias(() => deliveryPointAlias.District, () => districtAlias);

            query.Where(GetSearchCriterion(
                            () => orderAlias.Id,
                            () => counterpartyAlias.Name,
                            () => deliveryPointAlias.CompiledAddress,
                            () => authorAlias.LastName,
                            () => orderAlias.DriverCallId,
                            () => orderAlias.OnlineOrder,
                            () => orderAlias.EShopOrder,
                            () => orderAlias.OrderPaymentStatus
                            ));

            if (FilterViewModel.IncludeDistrictsIds != null && FilterViewModel.IncludeDistrictsIds.Any())
            {
                query = query.Where(() => deliveryPointAlias.District.Id.IsIn(FilterViewModel.IncludeDistrictsIds));
            }

            // Для того чтобы уже добавленные в МЛ заказы больше не появлялись
            if (FilterViewModel.ExceptIds != null && FilterViewModel.ExceptIds.Any())
            {
                query.Where(o => !RestrictionExtensions.IsIn(o.Id, FilterViewModel.ExceptIds));
            }

            var resultQuery = query
                              .SelectList(list => list
                                          .Select(() => orderAlias.Id).WithAlias(() => resultAlias.Id)
                                          .Select(() => orderAlias.SelfDelivery).WithAlias(() => resultAlias.IsSelfDelivery)
                                          .Select(() => deliveryScheduleAlias.Name).WithAlias(() => resultAlias.DeliveryTime)
                                          .Select(() => orderAlias.OrderStatus).WithAlias(() => resultAlias.StatusEnum)
                                          .Select(() => orderAlias.Address1c).WithAlias(() => resultAlias.Address1c)
                                          .Select(() => authorAlias.LastName).WithAlias(() => resultAlias.AuthorLastName)
                                          .Select(() => authorAlias.Name).WithAlias(() => resultAlias.AuthorName)
                                          .Select(() => authorAlias.Patronymic).WithAlias(() => resultAlias.AuthorPatronymic)
                                          .Select(() => counterpartyAlias.Name).WithAlias(() => resultAlias.Counterparty)
                                          .Select(() => districtAlias.DistrictName).WithAlias(() => resultAlias.DistrictName)
                                          .Select(() => deliveryPointAlias.CompiledAddress).WithAlias(() => resultAlias.CompilledAddress)
                                          .Select(() => deliveryPointAlias.City).WithAlias(() => resultAlias.City)
                                          .Select(() => deliveryPointAlias.Street).WithAlias(() => resultAlias.Street)
                                          .Select(() => deliveryPointAlias.Building).WithAlias(() => resultAlias.Building)
                                          .SelectSubQuery(orderSumSubquery).WithAlias(() => resultAlias.Sum)
                                          .SelectSubQuery(bottleCountSubquery).WithAlias(() => resultAlias.BottleAmount)
                                          .SelectSubQuery(sanitisationCountSubquery).WithAlias(() => resultAlias.SanitisationAmount)
                                          )
                              .OrderBy(x => x.CreateDate).Desc
                              .TransformUsing(Transformers.AliasToBean <OrderForRouteListJournalNode <VodovozOrder> >());

            return(resultQuery);
        }
Пример #21
0
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            if (CostCalculation == null || CostCalculation.Id == 0)
            {
                yield return(new ValidationResult("Sales Contract harus di isi", new List <string> {
                    "CostCalculation"
                }));
            }
            else
            {
                if (CostCalculation.PreSalesContract.Buyer.Type.ToLower().Equals("ekspor") || CostCalculation.PreSalesContract.Buyer.Type.ToLower().Equals("export"))
                {
                    if (string.IsNullOrWhiteSpace(TermOfShipment))
                    {
                        yield return(new ValidationResult("Term of Shipment harus diisi", new List <string> {
                            "TermOfShipment"
                        }));
                    }
                    if (Amount <= 0)
                    {
                        yield return(new ValidationResult("Amount harus lebih besar dari 0", new List <string> {
                            "Amount"
                        }));
                    }
                    if (Agent != null && !Agent.Id.Equals(0))
                    {
                        if (string.IsNullOrWhiteSpace(Commission))
                        {
                            yield return(new ValidationResult("Komisi harus diisi", new List <string> {
                                "Commission"
                            }));
                        }
                    }
                }
            }


            if (Commodity == null || Commodity.Id.Equals(0))
            {
                yield return(new ValidationResult("Komoditas harus diisi", new List <string> {
                    "CommodityID"
                }));
            }


            if (MaterialConstruction == null || MaterialConstruction.Id.Equals(0))
            {
                yield return(new ValidationResult("Konstruksi Finish harus diisi", new List <string> {
                    "MaterialConstructionID"
                }));
            }

            if (YarnMaterial == null || YarnMaterial.Id.Equals(0))
            {
                yield return(new ValidationResult("Nomor Benang Material harus diisi", new List <string> {
                    "YarnMaterialID"
                }));
            }

            if (string.IsNullOrWhiteSpace(MaterialWidth))
            {
                yield return(new ValidationResult("Lebar Finish harus diisi", new List <string> {
                    "MaterialWidth"
                }));
            }


            if (Quality == null || Quality.Id.Equals(0))
            {
                yield return(new ValidationResult("Kualitas harus diisi", new List <string> {
                    "QualityID"
                }));
            }

            if (TermOfPayment == null || TermOfPayment.Id.Equals(0))
            {
                yield return(new ValidationResult("Syarat Pembayaran harus diisi", new List <string> {
                    "TermOfPaymentID"
                }));
            }

            if (AccountBank == null || AccountBank.Id.Equals(0))
            {
                yield return(new ValidationResult("Pembayaran ke Rekening harus diisi", new List <string> {
                    "AccountBankID"
                }));
            }

            if (string.IsNullOrWhiteSpace(DeliveredTo))
            {
                yield return(new ValidationResult("Tujuan Kirim harus diisi", new List <string> {
                    "DeliveredTo"
                }));
            }

            if (DeliverySchedule == null || DeliverySchedule.GetValueOrDefault().Date <= DateTimeOffset.Now.Date)
            {
                yield return(new ValidationResult("Jadwal Pengiriman harus diisi", new List <string> {
                    "DeliverySchedule"
                }));
            }

            if (PointSystem != 10 && PointSystem != 4)
            {
                yield return(new ValidationResult("Point sistem tidak valid", new List <string> {
                    "PointSystem"
                }));
            }
            else if (PointSystem == 4)
            {
                if (PointLimit <= 0)
                {
                    yield return(new ValidationResult("Point limit harus lebih besar dari 0", new List <string> {
                        "PointLimit"
                    }));
                }
            }

            if (Details == null || Details.Count.Equals(0))
            {
                yield return(new ValidationResult("Detail harus diisi", new List <string> {
                    "Details"
                }));
            }
            else
            {
                int    Count       = 0;
                string DetailError = "[";

                foreach (FinishingPrintingSalesContractDetailViewModel Detail in Details)
                {
                    if (string.IsNullOrWhiteSpace(Detail.Color))
                    {
                        Count++;
                        DetailError += "{ Color: 'Warna harus diisi' }, ";
                    }

                    if (Detail.Price <= 0)
                    {
                        Count++;
                        DetailError += "{ Price: 'Harga harus lebih besar dari 0' }, ";
                    }
                }

                if (Count > 0)
                {
                    yield return(new ValidationResult(DetailError, new List <string> {
                        "Details"
                    }));
                }
            }
        }
Пример #22
0
 protected void Page_UnLoad(object sender, EventArgs e)
 {
     objCommonClass      = null;
     objDeliverySchedule = null;
 }
        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);
        }
        public async Task ProcessingDelivery_InvokesPackageServiceAndDroneSchedulerService()
        {
            PackageGen       actualPackage          = null;
            DroneDelivery    actualDelivery         = null;
            DeliverySchedule actualDeliverySchedule = null;

            _handleHttpRequest = async ctx =>
            {
                var serializer = new JsonSerializer();

                if (ctx.Request.Path.Value.StartsWith(PackagePath))
                {
                    actualPackage = serializer.Deserialize <PackageGen>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(
                        new ObjectResult(
                            new PackageGen {
                        Id = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                    })
                    {
                        StatusCode = StatusCodes.Status201Created
                    });
                }
                else if (ctx.Request.Path.Value.StartsWith(DroneSchedulerPath))
                {
                    actualDelivery = serializer.Deserialize <DroneDelivery>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(new ContentResult { Content = "someDroneId", StatusCode = StatusCodes.Status201Created });
                }
                else if (ctx.Request.Path.Value.StartsWith(DeliveryPath))
                {
                    actualDeliverySchedule = serializer.Deserialize <DeliverySchedule>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(
                        new ObjectResult(new DeliverySchedule {
                        Id = "someDeliveryId"
                    })
                    {
                        StatusCode = StatusCodes.Status201Created
                    });
                }
                else
                {
                    ctx.Response.StatusCode = StatusCodes.Status500InternalServerError;
                }
            };

            var delivery =
                new Delivery
            {
                DeliveryId  = "someDeliveryId",
                PackageInfo = new PackageInfo {
                    PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                }
            };
            await _requestProcessor.ProcessDeliveryRequestAsync(delivery, new Dictionary <string, object>());

            Assert.NotNull(actualPackage);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualPackage.Size);
            Assert.Equal(delivery.PackageInfo.Tag, actualPackage.Tag);
            Assert.Equal(delivery.PackageInfo.Weight, actualPackage.Weight);

            Assert.NotNull(actualDelivery);
            Assert.Equal(delivery.DeliveryId, actualDelivery.DeliveryId);
            Assert.Equal(delivery.PackageInfo.PackageId, actualDelivery.PackageDetail.Id);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualDelivery.PackageDetail.Size);

            Assert.NotNull(actualDeliverySchedule);
            Assert.Equal(delivery.DeliveryId, actualDeliverySchedule.Id);
            Assert.Equal("someDroneId", actualDeliverySchedule.DroneId);
        }
Пример #25
0
        public IQueryOver <Payment, Payment> GetAllUnallocatedBalances(IUnitOfWork uow, int closingDocumentDeliveryScheduleId)
        {
            UnallocatedBalancesJournalNode resultAlias               = null;
            Order                     orderAlias                     = null;
            Order                     orderAlias2                    = null;
            OrderItem                 orderItemAlias                 = null;
            PaymentItem               paymentItemAlias               = null;
            Counterparty              counterpartyAlias              = null;
            Organization              organizationAlias              = null;
            CounterpartyContract      counterpartyContractAlias      = null;
            Organization              orderOrganizationAlias         = null;
            DeliverySchedule          deliveryScheduleAlias          = null;
            DeliverySchedule          deliveryScheduleAlias2         = null;
            CashlessMovementOperation cashlessMovementOperationAlias = null;

            var query = uow.Session.QueryOver <Payment>()
                        .Inner.JoinAlias(cmo => cmo.Counterparty, () => counterpartyAlias)
                        .Inner.JoinAlias(cmo => cmo.Organization, () => organizationAlias);

            var income = QueryOver.Of <CashlessMovementOperation>()
                         .Where(cmo => cmo.Counterparty.Id == counterpartyAlias.Id)
                         .And(cmo => cmo.Organization.Id == organizationAlias.Id)
                         .And(cmo => cmo.CashlessMovementOperationStatus != AllocationStatus.Cancelled)
                         .Select(Projections.Sum <CashlessMovementOperation>(cmo => cmo.Income));

            var expense = QueryOver.Of <CashlessMovementOperation>()
                          .Where(cmo => cmo.Counterparty.Id == counterpartyAlias.Id)
                          .And(cmo => cmo.Organization.Id == organizationAlias.Id)
                          .And(cmo => cmo.CashlessMovementOperationStatus != AllocationStatus.Cancelled)
                          .Select(Projections.Sum <CashlessMovementOperation>(cmo => cmo.Expense));

            var balanceProjection = Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Decimal, "?1 - ?2"),
                                                            NHibernateUtil.Decimal,
                                                            Projections.SubQuery(income),
                                                            Projections.SubQuery(expense));

            var orderSumProjection = OrderRepository.GetOrderSumProjection(orderItemAlias);

            var totalNotPaidOrders = QueryOver.Of(() => orderAlias)
                                     .Inner.JoinAlias(o => o.OrderItems, () => orderItemAlias)
                                     .Inner.JoinAlias(o => o.Contract, () => counterpartyContractAlias)
                                     .Inner.JoinAlias(() => counterpartyContractAlias.Organization, () => orderOrganizationAlias)
                                     .Inner.JoinAlias(o => o.DeliverySchedule, () => deliveryScheduleAlias)
                                     .Where(() => orderAlias.Client.Id == counterpartyAlias.Id)
                                     .And(() => orderOrganizationAlias.Id == organizationAlias.Id)
                                     .And(() => orderAlias.OrderStatus == OrderStatus.Shipped ||
                                          orderAlias.OrderStatus == OrderStatus.UnloadingOnStock ||
                                          orderAlias.OrderStatus == OrderStatus.Closed)
                                     .And(() => orderAlias.PaymentType == PaymentType.cashless)
                                     .And(() => orderAlias.OrderPaymentStatus != OrderPaymentStatus.Paid)
                                     .And(() => deliveryScheduleAlias.Id != closingDocumentDeliveryScheduleId)
                                     .Select(orderSumProjection)
                                     .Where(Restrictions.Gt(orderSumProjection, 0));

            var totalPayPartiallyPaidOrders = QueryOver.Of(() => paymentItemAlias)
                                              .JoinEntityAlias(() => orderAlias2, () => paymentItemAlias.Order.Id == orderAlias2.Id, JoinType.InnerJoin)
                                              .Inner.JoinAlias(() => orderAlias2.Contract, () => counterpartyContractAlias)
                                              .Inner.JoinAlias(() => counterpartyContractAlias.Organization, () => orderOrganizationAlias)
                                              .Inner.JoinAlias(() => paymentItemAlias.CashlessMovementOperation, () => cashlessMovementOperationAlias)
                                              .Inner.JoinAlias(() => orderAlias2.DeliverySchedule, () => deliveryScheduleAlias2)
                                              .Where(() => orderAlias2.Client.Id == counterpartyAlias.Id)
                                              .And(() => orderOrganizationAlias.Id == organizationAlias.Id)
                                              .And(() => cashlessMovementOperationAlias.CashlessMovementOperationStatus != AllocationStatus.Cancelled)
                                              .And(() => orderAlias2.OrderStatus == OrderStatus.Shipped ||
                                                   orderAlias2.OrderStatus == OrderStatus.UnloadingOnStock ||
                                                   orderAlias2.OrderStatus == OrderStatus.Closed)
                                              .And(() => orderAlias2.PaymentType == PaymentType.cashless)
                                              .And(() => orderAlias2.OrderPaymentStatus == OrderPaymentStatus.PartiallyPaid)
                                              .And(() => deliveryScheduleAlias2.Id != closingDocumentDeliveryScheduleId)
                                              .Select(Projections.Sum(() => cashlessMovementOperationAlias.Expense));

            var counterpartyDebtProjection = Projections.SqlFunction(new SQLFunctionTemplate(NHibernateUtil.Decimal, "?1 - IFNULL(?2, ?3)"),
                                                                     NHibernateUtil.Decimal,
                                                                     Projections.SubQuery(totalNotPaidOrders),
                                                                     Projections.SubQuery(totalPayPartiallyPaidOrders),
                                                                     Projections.Constant(0));

            return(query.SelectList(list => list
                                    .SelectGroup(() => counterpartyAlias.Id).WithAlias(() => resultAlias.CounterpartyId)
                                    .SelectGroup(() => organizationAlias.Id).WithAlias(() => resultAlias.OrganizationId)
                                    .Select(p => counterpartyAlias.INN).WithAlias(() => resultAlias.CounterpartyINN)
                                    .Select(p => counterpartyAlias.Name).WithAlias(() => resultAlias.CounterpartyName)
                                    .Select(p => organizationAlias.Name).WithAlias(() => resultAlias.OrganizationName)
                                    .Select(balanceProjection).WithAlias(() => resultAlias.CounterpartyBalance)
                                    .Select(counterpartyDebtProjection).WithAlias(() => resultAlias.CounterpartyDebt))
                   .Where(Restrictions.Gt(balanceProjection, 0))
                   .And(Restrictions.Gt(counterpartyDebtProjection, 0))
                   .OrderBy(balanceProjection).Desc
                   .TransformUsing(Transformers.AliasToBean <UnallocatedBalancesJournalNode>())
                   .SetTimeout(180));
        }