Ejemplo n.º 1
0
        public async Task <Data.Vessel> AddOrUpdateVesselAsync(VesselViewModel model)
        {
            if (model == null)
            {
                throw new NullReferenceException("VesselViewModel is null");
            }

            Data.Vessel entity   = null;
            var         existing = new List <Data.Vessel>();

            // няма търсене по уникален номер на кораб в Regix
            //string identifier = model.RegistrationData != null ? model.RegistrationData.RegistrationNumber : "";
            //var existing = await _context.Vessel
            //    .Include(x => x.VesselEngine)
            //    .Include(x => x.VesselOwner)
            //    .Include(x => x.VesselRegistrationData)
            //    .Include(x => x.VesselRegistrationData).ThenInclude(x => x.StatusNavigation)
            //    .Where(x => x.VesselRegistrationData.Any() &&
            //        x.VesselRegistrationData.Where(a => a.RegistrationNumber.ToLower() == identifier.ToLower()).Any() &&
            //        x.VesselExtension != null &&
            //        x.VesselExtension.Deactivated == false)
            //    .ToListAsync();

            if (!existing.Any())
            {
                entity    = model.ToEntity();
                entity.Id = 0;
                entity.VesselExtension.VesselId = entity.Id;
                await _context.Vessel.AddAsync(entity);
            }
            else
            {
                foreach (Data.Vessel item in existing)
                {
                    item.VesselExtension.Deactivated = true;
                    _context.VesselEngine.RemoveRange(item.VesselEngine);
                    _context.VesselOwner.RemoveRange(item.VesselOwner);
                    _context.VesselRegistrationData.RemoveRange(item.VesselRegistrationData);
                }

                existing[0].UpdateEntity(model);
                existing[0].VesselExtension.Deactivated = false;
                existing[0].VesselExtension.UpdatedAt   = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc);
                existing[0].VesselExtension.RequestId   = model.ExtensionRequestId;

                _context.Vessel.Update(existing[0]);
                entity = existing[0];
            }

            await _context.SaveChangesAsync();

            return(entity);
        }
        public static void UpdateEntity(this Data.Vessel entity, VesselViewModel model)
        {
            if (model == null || entity == null)
            {
                return;
            }

            entity.Id        = model.Id;
            entity.Bt        = model.Bt;
            entity.Nt        = model.Nt;
            entity.MaxLength = model.MaxLength;
            entity.LengthBetweenPerpendiculars = model.LengthBetweenPerpendiculars;
            entity.MaxWidth        = model.MaxWidth;
            entity.Waterplane      = model.Waterplane;
            entity.ShipboardHeight = model.ShipboardHeight;
            entity.Deadweight      = model.Deadweight;
            entity.NumberOfEngines = model.NumberOfEngines;
            entity.EnginesFuel     = model.EnginesFuel;
            entity.SumEnginePower  = model.SumEnginePower;
            entity.BodyNumber      = model.BodyNumber;

            entity.VesselEngine = new List <VesselEngine>();
            if (model.Engines != null && model.Engines.Any())
            {
                entity.VesselEngine = model.Engines
                                      .Select(x => x.ToEntity()).ToList();
            }

            entity.VesselOwner = new List <VesselOwner>();
            if (model.Owners != null && model.Owners.Any())
            {
                entity.VesselOwner = model.Owners
                                     .Select(x => x.ToEntity()).ToList();
            }

            entity.VesselRegistrationData = new List <VesselRegistrationData>();
            if (model.RegistrationData != null)
            {
                entity.VesselRegistrationData.Add(model.RegistrationData.ToEntity());
            }

            return;
        }