/// <summary> /// Inser Skill /// </summary> /// <param name="skillRequestModel"></param> /// <returns></returns> public async Task <SkillViewModel> InserSkill(SkillRequestModel skillRequestModel) { model.AppResult.Result = false; if (skillRequestModel.PersonId <= 0) { model.AppResult.Message = "PersonId not exist!"; } else if (skillRequestModel.CategoryId <= 0) { model.AppResult.Message = "CategoryId not exist!"; } else if (skillRequestModel.TechnologyId.Count <= 0) { model.AppResult.Message = "TechnologyId not exist!"; } else { model.SkillRequestModel = skillRequestModel; PersonCategory personCategory = await GetPersonCategory(skillRequestModel); List <PersonTechnology> personTechnologies = await GetListPersonTechnology(skillRequestModel); Category modelCategory = new Category(); int idPersonCategory = 0; int idPerson = 0; modelCategory = await _categoryRepository.FindAsync(personCategory.CategoryId); if (modelCategory == null) { model.AppResult.Message = "Create failure, Category not exists"; } else { if (personTechnologies.Count > 0) { if (await _skillRepository.CheckPersonCategoryAsync(personCategory)) { if (await _skillRepository.CheckNumberTechnology(personCategory)) { model.AppResult.Message = "Create failure, Skill already exists"; return(model); } else { personCategory.OrderIndex = await _skillRepository.GetMaxOrderIndex() + 1; personCategory.UpdatedAt = DateTime.Now; var resultNumberCategory = await _skillRepository.UpdatePersonCategoryToInsertAsync(personCategory); if (resultNumberCategory > 0) { idPerson = personCategory.PersonId; idPersonCategory = (await _skillRepository.GetPersonCategoryAsync(null, personCategory.PersonId, personCategory.CategoryId)).Id; var resultNumberTechnology = await InsertListPersonTechnology(personTechnologies); if (resultNumberTechnology <= 0) { model.AppResult.Message = "Create failure, Technology not exists"; } } else { model.AppResult.Message = "Create failure, Category not exists"; } } } else { PersonCategory modelPersonCategory = await _skillRepository.CheckPersonCategoryOnDeleteAsync(personCategory); if (modelPersonCategory == null) { idPersonCategory = await _skillRepository.InsertPersonCategoryAsync(personCategory); idPerson = skillRequestModel.PersonId; } else { modelPersonCategory.OrderIndex = await _skillRepository.GetMaxOrderIndex() + 1; modelPersonCategory.UpdatedAt = DateTime.Now; var resultNumberCategor = await _skillRepository.UpdatePersonCategoryToInsertAsync(modelPersonCategory); if (resultNumberCategor > 0) { idPersonCategory = modelPersonCategory.Id; idPerson = modelPersonCategory.PersonId; } else { model.AppResult.Message = "Create failure, Category not exists"; } } var resultNumberTechnology = await InsertListPersonTechnology(personTechnologies); if (resultNumberTechnology <= 0) { model.AppResult.Message = "Create failure, Technology not exists"; } } if (idPersonCategory > 0 && idPerson > 0) { List <Category> listResult = new List <Category>(); modelCategory = await _skillRepository.GetSkillInsertAsync(idPersonCategory, idPerson); if (modelCategory != null) { model.AppResult.Result = true; model.AppResult.Message = Constants.Constant.INSERT_SUCCESS; listResult.Add(modelCategory); model.AppResult.DataResult = GetListSkillResource(listResult).FirstOrDefault(); } } } else { model.AppResult.Message = "Create failure, Technology not exists"; } } } return(model); }