Ejemplo n.º 1
0
 private void AddUnit(SalesUnitOrderItem unit)
 {
     //фиксируем заказ
     unit.Order = Item;
     //фиксируем дату действия и заказ
     unit.SignalToStartProductionDone = DateTime.Today;
     //ставим предполагаемую дату производства
     unit.EndProductionPlanDate = unit.EndProductionDateExpected;
     //заполняем позиции заказа
     unit.OrderPosition = "1";
     //добавляем группу в план производства
     GroupsInOrder.Add(new SalesUnitOrderGroup(new List <SalesUnitOrderItem> {
         unit
     }));
     //удаляем в подгруппах
     RemoveUnitFromGroup(GroupsPotential, unit);
 }
Ejemplo n.º 2
0
        private void AddGroup(SalesUnitOrderGroup unitsGroup)
        {
            //фиксируем заказ
            unitsGroup.Order = Item;
            //фиксируем дату действия и заказ
            unitsGroup.SignalToStartProductionDone = DateTime.Today;
            //ставим предполагаемую дату производства
            unitsGroup.EndProductionPlanDate = unitsGroup.Units.First().EndProductionDateExpected;
            unitsGroup.Units.ForEach(x => x.EndProductionPlanDate = x.EndProductionDateExpected);
            //заполняем позиции заказа
            int orderPosition = 1;

            unitsGroup.Units.ForEach(x => x.OrderPosition = orderPosition++.ToString());
            //переносим группу в план производства
            GroupsInOrder.Add(unitsGroup);
            GroupsPotential.Remove(unitsGroup);
            SaveOrderCommand.RaiseCanExecuteChanged();
        }
Ejemplo n.º 3
0
        private void RemoveGroupCommand_Execute()
        {
            var salesUnitOrder = GroupsInOrder.SelectedUnit ?? (ISalesUnitOrder)GroupsInOrder.SelectedGroup;

            salesUnitOrder.Order = null;
            salesUnitOrder.SignalToStartProductionDone = null;
            salesUnitOrder.EndProductionPlanDate       = null;

            if (GroupsInOrder.IsGroupSelected)
            {
                var salesUnitOrderGroup = GroupsInOrder.SelectedGroup;
                GroupsPotential.Add(salesUnitOrderGroup);
                GroupsInOrder.Remove(salesUnitOrderGroup);
            }

            if (GroupsInOrder.IsUnitSelected)
            {
                var unit = GroupsInOrder.SelectedUnit;
                GroupsPotential.Add(new SalesUnitOrderGroup(new List <SalesUnitOrderItem> {
                    unit
                }));
                RemoveUnitFromGroup(GroupsInOrder, unit);
            }
        }
Ejemplo n.º 4
0
        public OrderViewModel(IUnityContainer container) : base(container)
        {
            //сохранить заказ
            SaveOrderCommand = new DelegateLogCommand(
                () =>
            {
                if (UnitOfWork.SaveChanges().OperationCompletedSuccessfully)
                {
                    Item.AcceptChanges();
                    _unitsWrappers.AcceptChanges();

                    var changed = _unitsWrappers.ModifiedItems.ToList();
                    if (changed.Any())
                    {
                        Container.Resolve <IEventAggregator>().GetEvent <AfterSaveOrderItemsEvent>().Publish(changed.Select(salesUnitOrderItem => salesUnitOrderItem.Model));
                    }
                }

                SaveOrderCommand.RaiseCanExecuteChanged();
            },
                () =>
            {
                //юниты валидны
                var unitsIsValid = _unitsWrappers != null && _unitsWrappers.IsValid;
                if (!unitsIsValid)
                {
                    return(false);
                }

                //заказ валиден
                var orderIsValid = Item != null && Item.IsValid && GroupsInOrder.Any();
                if (!orderIsValid)
                {
                    return(false);
                }

                //если нет плановых дат производства
                if (GroupsInOrder.SelectMany(x => x.Units).Any(x => x.EndProductionPlanDate == null))
                {
                    return(false);
                }

                //если нет позиций заказа
                if (GroupsInOrder.SelectMany(x => x.Units).Any(x => string.IsNullOrEmpty(x.OrderPosition)))
                {
                    return(false);
                }

                //что-то изменилось
                return(_unitsWrappers.IsChanged || Item.IsChanged);
            });

            RemoveOrderCommand = new DelegateLogCommand(
                () =>
            {
                var dr = Container.Resolve <IMessageService>().ShowYesNoMessageDialog("Удаление", "Вы уверены, что хотите удалить этот заказ?");
                if (dr != MessageDialogResult.Yes)
                {
                    return;
                }

                var order = Item.Model;

                _unitsWrappers.ForEach(x => x.RejectChanges());

                foreach (var groupInOrder in GroupsInOrder)
                {
                    groupInOrder.EndProductionPlanDate       = null;
                    groupInOrder.SignalToStartProductionDone = null;
                    groupInOrder.Order = null;
                    groupInOrder.Units.ForEach(x => x.OrderPosition = string.Empty);
                }

                _unitsWrappers.ForEach(salesUnitOrderItem => salesUnitOrderItem.AcceptChanges());

                if (UnitOfWork.RemoveEntity(order).OperationCompletedSuccessfully)
                {
                    Container.Resolve <IEventAggregator>().GetEvent <AfterRemoveOrderEvent>().Publish(order);
                    GoBackCommand.Execute(null);
                }
            });

            AddGroupCommand = new DelegateLogCommand(AddGroupCommand_Execute, () => GroupsPotential.SelectedItem != null);

            RemoveGroupCommand = new DelegateLogCommand(RemoveGroupCommand_Execute, () => GroupsInOrder.SelectedItem != null);

            ShowProductStructureCommand = new DelegateLogCommand(
                () =>
            {
                var salesUnit = GroupsPotential.SelectedUnit?.Model ??
                                GroupsPotential.SelectedGroup.Unit;
                var productStructureViewModel = new ProductStructureViewModel(salesUnit);
                Container.Resolve <IDialogService>().Show(productStructureViewModel, "Структура продукта");
            },
                () => GroupsPotential.SelectedItem != null);
        }
Ejemplo n.º 5
0
        protected override void AfterLoading()
        {
            //оставляем юниты без заказов либо с редактируемым заказом
            //исключаем юниты без сигнала к производству
            var salesUnits = ((ISalesUnitRepository)UnitOfWork.Repository <SalesUnit>()).GetAllForOrderView().ToList();

            //юниты из заказа
            var salesUnitsInOrder = ((ISalesUnitRepository)UnitOfWork.Repository <SalesUnit>()).GetByOrder(Item.Id).ToList();

            salesUnits.AddRange(salesUnitsInOrder);

            List <PriceCalculation>   calculations        = UnitOfWork.Repository <PriceCalculation>().GetAll();
            List <SalesUnitOrderItem> salesUnitOrderItems = salesUnits
                                                            .Select(salesUnit => new SalesUnitOrderItem(salesUnit, salesUnit.ActualPriceCalculationItem(calculations)))
                                                            .ToList();

            _unitsWrappers = new ValidatableChangeTrackingCollection <SalesUnitOrderItem>(salesUnitOrderItems);

            //юниты в заказе
            var unitsInOrder  = _unitsWrappers.Where(item => item.Order != null).ToList();
            var groupsInOrder = unitsInOrder.GroupBy(item => new
            {
                FacilityId      = item.Model.Facility.Id,
                ProductId       = item.Model.Product.Id,
                OrderId         = item.Order?.Id,
                ProjectId       = item.Model.Project.Id,
                SpecificationId = item.Model.Specification?.Id,
                item.Model.EndProductionPlanDate,
                item.Model.Cost
            }).OrderBy(x => x.Key.EndProductionPlanDate);

            GroupsInOrder.AddRange(groupsInOrder.Select(x => new SalesUnitOrderGroup(x)));

            //юниты для размещения в производстве
            var unitsToProduct  = _unitsWrappers.Where(item => !item.Model.IsLoosen).Except(unitsInOrder).ToList();
            var groupsToProduct = unitsToProduct.GroupBy(item => new
            {
                FacilityId      = item.Model.Facility.Id,
                ProductId       = item.Model.Product.Id,
                OrderId         = item.Order?.Id,
                ProjectId       = item.Model.Project.Id,
                SpecificationId = item.Model.Specification?.Id,
                item.Model.EndProductionDateCalculated,
                item.Model.Cost
            }).OrderBy(x => x.Key.EndProductionDateCalculated);

            GroupsPotential.AddRange(groupsToProduct.Select(x => new SalesUnitOrderGroup(x)));

            //подписка на смену выбранной потенциальной группы в производстве
            GroupsPotential.SelectedGroupChanged += group =>
            {
                (AddGroupCommand).RaiseCanExecuteChanged();
                (ShowProductStructureCommand).RaiseCanExecuteChanged();
            };

            //подписка на смену выбранной группы в производстве
            GroupsInOrder.SelectedGroupChanged += group =>
            {
                (RemoveGroupCommand).RaiseCanExecuteChanged();
            };

            //подписка на изменение свойств заказа и юнитов
            Item.PropertyChanged += OnPropertyChanged;
            _unitsWrappers?.ForEach(x => x.PropertyChanged += OnPropertyChanged);

            base.AfterLoading();
        }