Пример #1
0
        /// <summary>
        /// Проверка на возможность создания нового недовоза
        /// </summary>
        /// <returns><c>true</c>, если можем создать, <c>false</c> если создать недовоз не можем,
        /// при этом добавляется автокомментарий к существующему недовозу с содержимым
        /// нового (но не добавленного) недовоза.</returns>
        bool CanCreateUndelivery()
        {
            var otherUndelivery = UndeliveredOrdersRepository.GetListOfUndeliveriesForOrder(UoW, order).FirstOrDefault();

            if (otherUndelivery == null)
            {
                return(true);
            }
            otherUndelivery.AddCommentToTheField(UoW, CommentedFields.Reason, undelivery.GetUndeliveryInfo());
            return(false);
        }
Пример #2
0
        void ConfigureMenu()
        {
            if (ViewModel.SelectedItem == null)
            {
                return;
            }

            var menu = new Menu();

            var openOrder = new MenuItem($"Открыть заказ №{ViewModel.SelectedItem.Order.Id}");

            openOrder.Activated += (s, args) => ViewModel.OpenOrderCommand.Execute();
            menu.Add(openOrder);

            var openNotDeliveredOrder = new MenuItem($"Открыть недовоз");

            openNotDeliveredOrder.Activated += (s, args) => ViewModel.OpenUndeliveredOrderCommand.Execute();
            openNotDeliveredOrder.Sensitive  = ViewModel.SelectedItem.Status == RouteListItemStatus.Canceled &&
                                               UndeliveredOrdersRepository.GetListOfUndeliveriesForOrder(ViewModel.UoW, ViewModel.SelectedItem.Order.Id).Any();
            menu.Add(openNotDeliveredOrder);

            var createFine = new MenuItem($"Создать штраф");

            createFine.Activated += (s, args) => ViewModel.CreateFineCommand.Execute();
            menu.Add(createFine);

            var attachFine = new MenuItem($"Прикрепить штраф");

            attachFine.Activated += (s, args) => ViewModel.AttachFineCommand.Execute();
            menu.Add(attachFine);

            var detachAllFines = new MenuItem("Открепить все штрафы");

            detachAllFines.Activated += (s, args) => ViewModel.DetachAllFinesCommand.Execute();
            detachAllFines.Sensitive  = ViewModel.SelectedItem.Fines.Any();

            var detachFine = new MenuItem("Открепить определенный штраф");

            detachFine.Activated += (s, args) => ViewModel.DetachFineCommand.Execute();
            detachFine.Sensitive  = ViewModel.SelectedItem.Fines.Any();

            menu.Add(detachAllFines);
            menu.Add(detachFine);

            menu.ShowAll();
            menu.Popup();
        }
 private UndeliveredOrder GetUndeliveredOrder() =>
 UndeliveredOrdersRepository.GetListOfUndeliveriesForOrder(UoW, SelectedItem.Order.Id).SingleOrDefault();
Пример #4
0
        protected override void CreatePopupActions()
        {
            bool IsOrder(object[] objs)
            {
                var selectedNodes = objs.Cast <RetailOrderJournalNode>();

                if (selectedNodes.Count() != 1)
                {
                    return(false);
                }

                return(selectedNodes.FirstOrDefault().EntityType == typeof(VodovozOrder));
            }

            PopupActionsList.Add(
                new JournalAction(
                    "Перейти в маршрутный лист",
                    selectedItems => selectedItems.Any(
                        x => AccessRouteListKeeping((x as RetailOrderJournalNode).Id)) && IsOrder(selectedItems),
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                var addresses     = UoW.Session.QueryOver <RouteListItem>()
                                    .Where(x => x.Order.Id.IsIn(selectedNodes.Select(n => n.Id).ToArray())).List();

                var routes = addresses.GroupBy(x => x.RouteList.Id);

                var tdiMain = MainClass.MainWin.TdiMain;

                foreach (var route in routes)
                {
                    tdiMain.OpenTab(
                        DialogHelper.GenerateDialogHashName <RouteList>(route.Key),
                        () => new RouteListKeepingDlg(route.Key, route.Select(x => x.Order.Id).ToArray())
                        );
                }
            }
                    )
                );
            PopupActionsList.Add(
                new JournalAction(
                    "Перейти в недовоз",
                    (selectedItems) => selectedItems.Any(
                        o => UndeliveredOrdersRepository.GetListOfUndeliveriesForOrder(UoW, (o as RetailOrderJournalNode).Id).Any()) && IsOrder(selectedItems),
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes    = selectedItems.Cast <RetailOrderJournalNode>();
                var order            = UoW.GetById <VodovozOrder>(selectedNodes.FirstOrDefault().Id);
                UndeliveriesView dlg = new UndeliveriesView();
                dlg.HideFilterAndControls();
                dlg.UndeliveredOrdersFilter.SetAndRefilterAtOnce(
                    x => x.ResetFilter(),
                    x => x.RestrictOldOrder          = order,
                    x => x.RestrictOldOrderStartDate = order.DeliveryDate,
                    x => x.RestrictOldOrderEndDate   = order.DeliveryDate
                    );
                MainClass.MainWin.TdiMain.AddTab(dlg);
            }
                    )
                );
            PopupActionsList.Add(
                new JournalAction(
                    "Открыть диалог закрытия",
                    (selectedItems) => selectedItems.Any(
                        x => AccessToRouteListClosing((x as RetailOrderJournalNode).Id)) && IsOrder(selectedItems),
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                var routeListIds  = selectedNodes.Select(x => x.Id).ToArray();
                var addresses     = UoW.Session.QueryOver <RouteListItem>()
                                    .Where(x => x.Order.Id.IsIn(routeListIds)).List();

                var routes  = addresses.GroupBy(x => x.RouteList.Id);
                var tdiMain = MainClass.MainWin.TdiMain;

                foreach (var rl in routes)
                {
                    tdiMain.OpenTab(
                        DialogHelper.GenerateDialogHashName <RouteList>(rl.Key),
                        () => new RouteListClosingDlg(rl.Key)
                        );
                }
            }
                    )
                );
            PopupActionsList.Add(
                new JournalAction(
                    "Открыть на Yandex картах(координаты)",
                    IsOrder,
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                foreach (var sel in selectedNodes)
                {
                    var order = UoW.GetById <VodovozOrder>(sel.Id);
                    if (order.DeliveryPoint == null || order.DeliveryPoint.Latitude == null || order.DeliveryPoint.Longitude == null)
                    {
                        continue;
                    }

                    System.Diagnostics.Process.Start(
                        string.Format(
                            CultureInfo.InvariantCulture,
                            "https://maps.yandex.ru/?ll={0},{1}&z=17",
                            order.DeliveryPoint.Longitude,
                            order.DeliveryPoint.Latitude
                            )
                        );
                }
            }
                    )
                );
            PopupActionsList.Add(
                new JournalAction(
                    "Открыть на Yandex картах(адрес)",
                    IsOrder,
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                foreach (var sel in selectedNodes)
                {
                    var order = UoW.GetById <VodovozOrder>(sel.Id);
                    if (order.DeliveryPoint == null)
                    {
                        continue;
                    }

                    System.Diagnostics.Process.Start(
                        string.Format(CultureInfo.InvariantCulture,
                                      "https://maps.yandex.ru/?text={0} {1} {2}",
                                      order.DeliveryPoint.City,
                                      order.DeliveryPoint.Street,
                                      order.DeliveryPoint.Building
                                      )
                        );
                }
            }
                    )
                );
            PopupActionsList.Add(
                new JournalAction(
                    "Открыть на карте OSM",
                    IsOrder,
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                foreach (var sel in selectedNodes)
                {
                    var order = UoW.GetById <VodovozOrder>(sel.Id);
                    if (order.DeliveryPoint == null || order.DeliveryPoint.Latitude == null || order.DeliveryPoint.Longitude == null)
                    {
                        continue;
                    }

                    System.Diagnostics.Process.Start(string.Format(CultureInfo.InvariantCulture, "http://www.openstreetmap.org/#map=17/{1}/{0}", order.DeliveryPoint.Longitude, order.DeliveryPoint.Latitude));
                }
            }
                    )
                );

            PopupActionsList.Add(
                new JournalAction(
                    "Повторить заказ",
                    IsOrder,
                    selectedItems => true,
                    (selectedItems) => {
                var selectedNodes = selectedItems.Cast <RetailOrderJournalNode>();
                var order         = UoW.GetById <VodovozOrder>(selectedNodes.FirstOrDefault().Id);

                var dlg = new OrderDlg();
                dlg.CopyLesserOrderFrom(order.Id);
                var tdiMain = MainClass.MainWin.TdiMain;
                tdiMain.OpenTab(
                    DialogHelper.GenerateDialogHashName <Domain.Orders.Order>(65656),
                    () => dlg
                    );
            }
                    )
                );
        }
        public IList <object[]> GetGuilties(UndeliveredOrdersFilter filter)
        {
            OrderItem    orderItemAlias    = null;
            Nomenclature nomenclatureAlias = null;

            UndeliveredOrder undeliveredOrderAlias = null;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            return(result);
        }