Beispiel #1
0
 void CheckCarLoadDocuments()
 {
     if (Entity.Id > 0 && RouteListRepository.GetCarLoadDocuments(UoW, Entity.Id).Any())
     {
         IsEditable = false;
     }
 }
Beispiel #2
0
        protected void OnButtonAcceptClicked(object sender, EventArgs e)
        {
            if (buttonAccept.Label == "Подтвердить" && Entity.HasOverweight())
            {
                if (QSMain.User.Permissions["can_confirm_routelist_with_overweight"])
                {
                    if (
                        !MessageDialogHelper.RunQuestionDialog(
                            String.Format(
                                "Вы перегрузили '{0}' на {1} кг.\nВы уверены что хотите подтвердить маршрутный лист?",
                                Entity.Car.Title,
                                Entity.Overweight()
                                )
                            )
                        )
                    {
                        return;
                    }
                }
                else
                {
                    MessageDialogHelper.RunWarningDialog(
                        String.Format(
                            "Вы перегрузили '{0}' на {1} кг.\nПодтвердить маршрутный лист нельзя.",
                            Entity.Car.Title,
                            Entity.Overweight()
                            )
                        );
                    return;
                }
            }

            if (UoWGeneric.Root.Status == RouteListStatus.New)
            {
                var valid = new QSValidator <RouteList>(UoWGeneric.Root,
                                                        new Dictionary <object, object> {
                    { "NewStatus", RouteListStatus.InLoading }
                });
                if (valid.RunDlgIfNotValid((Window)this.Toplevel))
                {
                    return;
                }

                UoWGeneric.Root.ChangeStatus(RouteListStatus.InLoading);

                foreach (var address in UoWGeneric.Root.Addresses)
                {
                    if (address.Order.OrderStatus < Domain.Orders.OrderStatus.OnLoading)
                    {
                        address.Order.ChangeStatus(Domain.Orders.OrderStatus.OnLoading);
                    }
                }

                //Строим маршрут для МЛ.
                if (!Entity.Printed || MessageDialogHelper.RunQuestionWithTitleDialog("Перестроить маршрут?", "Этот маршрутный лист уже был когда-то напечатан. При новом построении маршрута порядок адресов может быть другой. При продолжении обязательно перепечатайте этот МЛ.\nПерестроить маршрут?"))
                {
                    RouteOptimizer optimizer = new RouteOptimizer();
                    var            newRoute  = optimizer.RebuidOneRoute(Entity);
                    if (newRoute != null)
                    {
                        createroutelistitemsview1.DisableColumnsUpdate = true;
                        newRoute.UpdateAddressOrderInRealRoute(Entity);
                        //Рассчитываем расстояние
                        Entity.RecalculatePlanedDistance(new Tools.Logistic.RouteGeometryCalculator(Tools.Logistic.DistanceProvider.Osrm));
                        createroutelistitemsview1.DisableColumnsUpdate = false;
                        var noPlan = Entity.Addresses.Count(x => !x.PlanTimeStart.HasValue);
                        if (noPlan > 0)
                        {
                            MessageDialogHelper.RunWarningDialog($"Для маршрута незапланировано {noPlan} адресов.");
                        }
                    }
                    else
                    {
                        MessageDialogHelper.RunWarningDialog($"Маршрут не был перестроен.");
                    }
                }

                Save();

                if (UoWGeneric.Root.Car.TypeOfUse == CarTypeOfUse.Truck)
                {
                    if (MessageDialogHelper.RunQuestionDialog("Маршрутный лист для транспортировки на склад, перевести машрутный лист сразу в статус '{0}'?", RouteListStatus.OnClosing.GetEnumTitle()))
                    {
                        Entity.ChangeStatus(RouteListStatus.OnClosing);
                        foreach (var item in UoWGeneric.Root.Addresses)
                        {
                            item.Order.OrderStatus = Domain.Orders.OrderStatus.OnTheWay;
                        }
                        Entity.CompleteRoute();
                    }
                }
                else
                {
                    //Проверяем нужно ли маршрутный лист грузить на складе, если нет переводим в статус в пути.
                    var forShipment = Repository.Store.WarehouseRepository.WarehouseForShipment(UoW, Entity.Id);
                    if (forShipment.Count == 0)
                    {
                        if (MessageDialogHelper.RunQuestionDialog("Для маршрутного листа, нет необходимости грузится на складе. Перевести машрутный лист сразу в статус '{0}'?", RouteListStatus.EnRoute.GetEnumTitle()))
                        {
                            valid = new QSValidator <RouteList>(
                                UoWGeneric.Root,
                                new Dictionary <object, object> {
                                { "NewStatus", RouteListStatus.EnRoute }
                            }
                                );

                            Entity.ChangeStatus(valid.RunDlgIfNotValid((Window)this.Toplevel) ? RouteListStatus.New : RouteListStatus.EnRoute);
                        }
                        else
                        {
                            Entity.ChangeStatus(RouteListStatus.New);
                        }
                    }
                }
                Save();
                UpdateButtonStatus();
                return;
            }
            if (UoWGeneric.Root.Status == RouteListStatus.InLoading)
            {
                if (RouteListRepository.GetCarLoadDocuments(UoW, Entity.Id).Any())
                {
                    MessageDialogHelper.RunErrorDialog("Для маршрутного листа были созданы документы погрузки. Сначала необходимо удалить их.");
                }
                else
                {
                    UoWGeneric.Root.ChangeStatus(RouteListStatus.New);
                }
                UpdateButtonStatus();
                return;
            }
        }