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