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(); }
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); } }
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(); }