public async Task <ActionResultResponse> Update(string tenantId, string id, CutomerSubjectMeta customerSubjectMeta)
        {
            if (!customerSubjectMeta.CustomerSubjectTranslations.Any())
            {
                return(new ActionResultResponse(-1, _sharedResourceService.GetString("Please enter at least one language.")));
            }

            var customersubjectInfo = await _customersubjectRepository.GetInfo(id, tenantId);

            if (customersubjectInfo == null)
            {
                return(new ActionResultResponse(-2, _customerResourceService.GetString("CustomerSubject does not exists.")));
            }

            if (customersubjectInfo.ConcurrencyStamp != customerSubjectMeta.ConcurrencyStamp)
            {
                return(new ActionResultResponse(-3, _customerResourceService.GetString("The CustomerSubject already updated by other people. You can not update this CustomerSubject.")));
            }

            customersubjectInfo.LastUpdate       = DateTime.Now;
            customersubjectInfo.IsActive         = customerSubjectMeta.IsActive;
            customersubjectInfo.Order            = customerSubjectMeta.Order;
            customersubjectInfo.TotalReduction   = customerSubjectMeta.TotalReduction;
            customersubjectInfo.ConcurrencyStamp = Guid.NewGuid().ToString();

            foreach (var CustomersubjectTranslation in customerSubjectMeta.CustomerSubjectTranslations)
            {
                var isNameExists = await _customersubjectTranslationRepository.CheckUserNameExists(customersubjectInfo.Id,
                                                                                                   CustomersubjectTranslation.LanguageId, CustomersubjectTranslation.Name);

                if (isNameExists)
                {
                    return(new ActionResultResponse(-5, _customerResourceService.GetString("Name: \"{0}\" already exists.", CustomersubjectTranslation.Name)));
                }

                var customersubjectCustomerTranslationInfo = await _customersubjectTranslationRepository.GetInfo(customersubjectInfo.Id,
                                                                                                                 CustomersubjectTranslation.LanguageId);

                if (customersubjectCustomerTranslationInfo != null)
                {
                    customersubjectCustomerTranslationInfo.Name        = CustomersubjectTranslation.Name.Trim();
                    customersubjectCustomerTranslationInfo.Description = CustomersubjectTranslation.Description?.Trim();
                    customersubjectCustomerTranslationInfo.UnsignName  = CustomersubjectTranslation.Name.StripVietnameseChars().ToUpper();
                    await _customersubjectTranslationRepository.Update(customersubjectCustomerTranslationInfo);
                }
                else
                {
                    CustomersubjectTranslation.CustomerSubjectId = customersubjectInfo.Id;
                    CustomersubjectTranslation.Name        = CustomersubjectTranslation.Name.Trim();
                    CustomersubjectTranslation.Description = CustomersubjectTranslation.Description?.Trim();
                    CustomersubjectTranslation.UnsignName  = CustomersubjectTranslation.Name.StripVietnameseChars().ToUpper();
                    await _customersubjectTranslationRepository.Insert(CustomersubjectTranslation);
                }
            }

            await _customersubjectRepository.Update(customersubjectInfo);

            return(new ActionResultResponse(1, _customerResourceService.GetString("Update Customer Subject successful.")));
        }
        public async Task <IActionResult> Update(string id, [FromBody] CutomerSubjectMeta customerSubjectMeta)
        {
            var result = await _customerSubjectService.Update(CurrentUser.TenantId, id, customerSubjectMeta);

            //var result = await _patientsubjectService.Update("MaKH", id, patientsubjectMeta);
            if (result.Code < 0)
            {
                return(BadRequest(result));
            }

            return(Ok(result));
        }
        public async Task <ActionResultResponse> Insert(string tenantId, CutomerSubjectMeta customersubjectMeta)
        {
            if (!customersubjectMeta.CustomerSubjectTranslations.Any())
            {
                return(new ActionResultResponse(-1, _sharedResourceService.GetString("Please enter at least one language.")));
            }

            var customersubjectId = Guid.NewGuid().ToString();
            var customersubject   = new CustomerSubject
            {
                Id = customersubjectId,
                //ConcurrencyStamp = CustomersubjectId,
                IsActive = customersubjectMeta.IsActive,
                //CreateTime = DateTime.Now,
                Order          = customersubjectMeta.Order,
                TotalReduction = customersubjectMeta.TotalReduction,
                //IsDelete = false,
                TenantId = tenantId,
            };

            var result = await _customersubjectRepository.Insert(customersubject);

            if (result <= 0)
            {
                return(new ActionResultResponse(result, _sharedResourceService.GetString("Something went wrong. Please contact with administrator.")));
            }

            var customersubjectTranslations = new List <CustomerSubjectTranslation>();

            foreach (var customersubjectTranslationMeta in customersubjectMeta.CustomerSubjectTranslations)
            {
                var isNameExists = await _customersubjectTranslationRepository.CheckUserNameExists(customersubjectTranslationMeta.CustomerSubjectId,
                                                                                                   customersubjectTranslationMeta.LanguageId, customersubjectTranslationMeta.Name);

                if (isNameExists)
                {
                    await RollbackInsert(customersubjectId);

                    return(new ActionResultResponse(-3, _customerResourceService.GetString("Name: \"{0}\" already exists.", customersubjectTranslationMeta.Name)));
                }


                customersubjectTranslations.Add(new CustomerSubjectTranslation
                {
                    CustomerSubjectId = customersubjectId,
                    LanguageId        = customersubjectTranslationMeta.LanguageId.Trim(),
                    Name        = customersubjectTranslationMeta.Name.Trim(),
                    UnsignName  = customersubjectTranslationMeta.Name.Trim().StripVietnameseChars().ToUpper(),
                    Description = customersubjectTranslationMeta.Description?.Trim(),
                });
            }

            // Insert CustomerSubject translations.
            var resultInsertTranslation = await _customersubjectTranslationRepository.Inserts(customersubjectTranslations);

            if (resultInsertTranslation > 0)
            {
                return(new ActionResultResponse(resultInsertTranslation, _customerResourceService.GetString("Add new CustomerSubject successful.")));
            }

            await RollbackInsert(customersubjectId);

            return(new ActionResultResponse(-5, _customerResourceService.GetString("Can not insert new CustomerSubject. Please contact with administrator.")));
        }