public async Task <JsonResult> Create([FromBody] NonTrasparentBuildingElemetDto dto) { var mapperDtoNonTransparentBulidingElement = _mapper.GetMapper <NonTrasparentBuildingElemet, NonTrasparentBuildingElemetDto>(); var mapperDtoMaterialThickness = _mapper.GetMapper <MaterialThickness, MaterialThicknessDto>(); NonTrasparentBuildingElemet entity = mapperDtoNonTransparentBulidingElement.MapToEntity(dto, new NonTrasparentBuildingElemet()); entity.MaterialsUsed = entity.MaterialsUsed ?? new List <MaterialThickness>(); foreach (var item in dto.MaterialsUsed) { entity.MaterialsUsed.Add(mapperDtoMaterialThickness.MapToEntity(item, new MaterialThickness())); } //entity.MaterialsUsed = dto.MaterialsUsed.Select(mapperDtoMaterialThickness.MapToEntity).ToList();// (go,new MaterialThickness())); Project project = (await GetUserAsync()).Projects.FirstOrDefault(); //TODO take passed project id when there is support for more then one project if (project != null) { entity.ProjectId = project.Id; if (entity.Id == new Int32()) { //NEW entity = await _nonTrasparentBuildingElemetService.CreateAndAssignToUser(entity); } else { //UPDATE entity = await _nonTrasparentBuildingElemetService.Update(entity); } } return(Json((mapperDtoNonTransparentBulidingElement.MapToDto(entity)))); }
public async Task <JsonResult> Update([FromBody] NonTrasparentBuildingElemetDto dto) { var mapperDtoNonTransparentBulidingElement = _mapper.GetMapper <NonTrasparentBuildingElemet, NonTrasparentBuildingElemetDto>(); var mapperDtoMaterialThickness = _mapper.GetMapper <MaterialThickness, MaterialThicknessDto>(); //Extract user and project ApplicationUser user = await GetUserAsync(); Project project = user.Projects.FirstOrDefault(); //TODO take passed project id when there is support for more then one project if (project == null) { return(Json(null)); } NonTrasparentBuildingElemet buildingELement = _nonTrasparentBuildingElemetService.Get(dto.Id, project.Id); NonTrasparentBuildingElemet entity = mapperDtoNonTransparentBulidingElement.MapToEntity(dto, buildingELement); entity.ProjectId = buildingELement.Project.Id; //DEAL with MAterial Thickness children foreach (var item in dto.MaterialsUsed ?? new List <MaterialThicknessDto>()) { if (item.Id == new int()) { //new entity.MaterialsUsed.Add(mapperDtoMaterialThickness.MapToEntity(item, new MaterialThickness())); } else { //updated var tmp = entity.MaterialsUsed.FirstOrDefault(x => x.Id == item.Id); entity.MaterialsUsed.Remove(tmp); entity.MaterialsUsed.Add(mapperDtoMaterialThickness.MapToEntity(item, tmp)); } } List <int> idsToBeRemoved = entity.MaterialsUsed.Select(go => go.Id).Except(dto.MaterialsUsed.Select(go1 => go1.Id)).ToList(); foreach (var item in idsToBeRemoved) { //DELETED entity.MaterialsUsed.Remove(entity.MaterialsUsed.FirstOrDefault(go => go.Id == item)); } entity = await _nonTrasparentBuildingElemetService.Update(entity); return(Json((mapperDtoNonTransparentBulidingElement.MapToDto(entity)))); }