Example #1
0
        public override void Merge(MaintenanceObject entity, IRepository repository)
        {
            entity.TechIndex = TechIndex;
            entity.Plant     = repository.Get <Plant>(PlantId.Value);
            entity.Site      = Site;
            entity.Group     = repository.Get <ObjectGroup>(GroupId);
            SetSpecifications(entity, repository);

            //Если введена дата ввода в эксплуатацию, то вводим в эксплуатацию
            if (entity.CurrentOperatingState == OperatingState.Mounted && StartOperating != null)
            {
                var period = Period == null ? new Period(DateTime.Now) : new Period(Period.Value);
                entity.PutIntoOperating(StartOperating.Value, period);
            }

            //Если родитель был
            if (entity.Parent != null)
            {
                //Если родитель получен
                if (ParentId != null)
                {
                    //Если полученный родитель не равен тому, который был
                    if (ParentId != entity.Parent.Id)
                    {
                        var newParent = repository.Get <MaintenanceObject>(ParentId.Value);
                        entity.ClearParent();
                        newParent.AddChild(entity);
                        repository.Save(newParent);
                    }
                }
                //Если родитель был, но его убрали
                else
                {
                    entity.ClearParent();
                }
            }
            //Если родителя небыло
            else
            {
                //Если родитель был установлен
                if (ParentId != null)
                {
                    var parent = repository.Get <MaintenanceObject>(ParentId.Value);
                    parent.AddChild(entity);

                    repository.Save(parent);
                }
            }

            var dtoMap = LastMaintenance.ToDictionary(x => x.MaintenanceTypeId);

            entity.LastMaintenance.ToList().ForEach(last =>
            {
                if (dtoMap.ContainsKey(last.MaintenanceType.Id))
                {
                    var _dto = dtoMap[last.MaintenanceType.Id];
                    last.LastMaintenanceDate      = _dto.LastMaintenanceDate;
                    last.UsageFromLastMaintenance = _dto.UsageFromLastMaintenance;
                }
            });

            entity.SetNextMaintenance();
        }