public async Task <ActionResult> Create(ClassificationDefectModel model)
        {
            if (!_permissionService.Authorize(PermissionProvider.ClassificationDefectManagement))
            {
                return(AccessDeniedView());
            }

            if (ModelState.IsValid)
            {
                if (_classificationDefectService.CheckNameHasExisted(model.Name).Result)
                {
                    return(Content("Classification Defect Name has existed."));
                }

                if (model.Materials.FirstOrDefault() == null)
                {
                    model.Materials = null;
                }

                try
                {
                    var classificationDefect = new ClassificationDefect()
                    {
                        Name         = model.Name,
                        Note         = model.Note,
                        DisplayOrder = model.DisplayOrder,
                        Materials    = ConvertMaterialModelsToStringMaterialIds(model.Materials)
                    };

                    await _classificationDefectService.InsertAsync(classificationDefect);

                    foreach (var supplier in model.Suppliers)
                    {
                        var supplierEntity = await _supplierService.GetByIdAsync(supplier.Id);

                        if (supplierEntity == null)
                        {
                            await _classificationDefectService.UpdateAsync(classificationDefect);

                            return(Content("Identity of Supplier Defect is invalid."));
                        }

                        classificationDefect.Suppliers.Add(supplierEntity);
                    }

                    await _classificationDefectService.UpdateAsync(classificationDefect);
                }
                catch (Exception ex)
                {
                    return(Content(ex.Message));
                }

                return(Json(new { status = "success" }));
            }

            // If we got this far, something failed, redisplay form
            return(Content(GetErrorMessageFromModelState()));
        }
        public async Task <ActionResult> Update(ClassificationDefectModel model)
        {
            if (!_permissionService.Authorize(PermissionProvider.ClassificationDefectManagement))
            {
                return(AccessDeniedView());
            }

            if (ModelState.IsValid)
            {
                if (model.Id <= 0)
                {
                    return(Content("Identity of Classification Defect is invalid."));
                }

                var classificationDefect = await _classificationDefectService.GetByIdAsync(model.Id);

                if (classificationDefect == null)
                {
                    return(Content("Can not found Classification Defect."));
                }

                var exiestedClassificationDefect = await _classificationDefectService.GetClassificationDefectByNameAsync(model.Name);

                if (exiestedClassificationDefect != null && exiestedClassificationDefect.Id != classificationDefect.Id)
                {
                    return(Content("Classification Defect Name has existed."));
                }

                try
                {
                    classificationDefect.Name         = model.Name;
                    classificationDefect.Note         = model.Note;
                    classificationDefect.DisplayOrder = model.DisplayOrder;
                    classificationDefect.Materials    = ConvertMaterialModelsToStringMaterialIds(model.Materials);

                    var listRemove = classificationDefect.Suppliers.Select(x => x.Id).Where(x => model.Suppliers.All(y => y.Id != x)).ToList();

                    foreach (var supplierId in listRemove)
                    {
                        var supplierEntity = await _supplierService.GetByIdAsync(supplierId);

                        if (supplierEntity == null)
                        {
                            await _classificationDefectService.UpdateAsync(classificationDefect);

                            return(Content("Identity of Supplier Defect is invalid."));
                        }

                        classificationDefect.Suppliers.Remove(supplierEntity);
                    }

                    var listAdd = model.Suppliers.Where(x => classificationDefect.Suppliers.All(y => y.Id != x.Id));

                    foreach (var supplier in listAdd)
                    {
                        //get testing sample identity
                        var supplierEntity = await _supplierService.GetByIdAsync(supplier.Id);

                        //check if it not existed
                        if (supplierEntity == null)
                        {
                            await _classificationDefectService.UpdateAsync(classificationDefect);

                            return(Content("Identity of Supplier Defect is invalid."));
                        }

                        classificationDefect.Suppliers.Add(supplierEntity);
                    }

                    await _classificationDefectService.UpdateAsync(classificationDefect);
                }
                catch (Exception ex)
                {
                    return(Content(ex.Message));
                }

                return(Json(new { status = "success" }));
            }

            // If we got this far, something failed, redisplay form
            return(Content(GetErrorMessageFromModelState()));
        }