Esempio n. 1
0
 /// <summary>
 /// Добавить расчет ПЗ
 /// </summary>
 /// <param name="item">расчет ПЗ</param>
 public void Add(PriceItem item)
 {
     this.Remove(item.PriceCalculationItem);
     _items.Add(item.PriceCalculationItem.Id, item);
 }
        public PriceService(IUnityContainer container)
        {
            _container = container;

            //синхронизация завершения расчетов
            container.Resolve <IEventAggregator>().GetEvent <AfterFinishPriceCalculationEvent>().Subscribe(
                calculation =>
            {
                //добавляем только данные из завершенных расчетов
                if (!calculation.TaskCloseMoment.HasValue)
                {
                    return;
                }

                foreach (var priceCalculationItem in calculation.PriceCalculationItems)
                {
                    foreach (var salesUnit in priceCalculationItem.SalesUnits)
                    {
                        var priceItem = new PriceItem(calculation, priceCalculationItem);

                        if (SalesUnitsCalculationsDictionary.ContainsKey(salesUnit.Id))
                        {
                            SalesUnitsCalculationsDictionary[salesUnit.Id].Add(priceItem);
                        }
                        else
                        {
                            SalesUnitsCalculationsDictionary.Add(salesUnit.Id, new PriceItems(new[] { priceItem }));
                        }
                    }
                }
            });

            //синхронизация остановки расчетов
            container.Resolve <IEventAggregator>().GetEvent <AfterStopPriceCalculationEvent>().Subscribe(
                calculation =>
            {
                if (calculation.TaskCloseMoment.HasValue)
                {
                    return;
                }

                foreach (var priceCalculationItem in calculation.PriceCalculationItems)
                {
                    foreach (var salesUnit in priceCalculationItem.SalesUnits)
                    {
                        if (SalesUnitsCalculationsDictionary.ContainsKey(salesUnit.Id))
                        {
                            var priceItems = SalesUnitsCalculationsDictionary[salesUnit.Id];

                            if (priceItems.Remove(priceCalculationItem) && priceItems.IsEmpty)
                            {
                                SalesUnitsCalculationsDictionary.Remove(salesUnit.Id);
                            }
                        }
                    }
                }
            });

            _container.Resolve <IModelsStore>().IsRefreshed += Reload;

            Reload();
        }