Beispiel #1
0
        public override async Task <CustomerDto> Update(CustomerUpdateDto input)
        {
            //var output = await base.Update(input);
            //return output;

            CheckUpdatePermission();
            var entity = await GetEntityByIdAsync(input.Id);

            MapToEntity(input, entity);

            #region Customer Category Setting
            // Assemble category.
            entity.CustomerCategorySettings = new List <CustomerCategorySetting>();

            // 1. Get old category.
            List <CustomerCategorySetting> settings
                = customerCategorySettingRepository.GetAll()
                  .Where(t => t.CustomerId == input.Id)
                  .ToList();

            // Get the category from database that had already existed.
            foreach (var item in settings)
            {
                if (input.CategorySettings.Contains(item.CategoryCode))
                {
                    // this category still alive. and ignore it for add.
                    input.CategorySettings.Remove(item.CategoryCode);
                }
                else
                {
                    // remove from local list object.
                    // xx settings.Remove(item);
                    // remove from database.
                    customerCategorySettingRepository.Delete(item.Id);
                }
            }

            // Get the surplus category from input, that need to be added in database.
            foreach (var code in input.CategorySettings)
            {
                CustomerCategory category
                    = customerCategoryRepository.FirstOrDefault(t => t.Code == code);

                customerCategorySettingRepository.Insert(new CustomerCategorySetting {
                    CustomerCategoryId = category.Id,
                    CustomerId         = entity.Id,
                    TenantId           = this.AbpSession.TenantId,
                    CreatorUserId      = this.AbpSession.UserId,
                    IsActive           = true,
                    Status             = 0
                });
            }

            #endregion

            await CurrentUnitOfWork.SaveChangesAsync();

            return(MapToEntityDto(entity));
        }
Beispiel #2
0
        public void UpdateCategory(long id, List<long> ids)
        {
            List<long> categoryIds = ids;

            /* TODO: 验证了一下下面的写法,结果删除上有问题

           
            foreach (var key in ids)
            {
                categoryIds.Add(long.Parse(key));
            }

            // Delete all setting
            customerCategorySettingRepository.Delete(t => t.CustomerId == id);
            // Insert new setting
            foreach(var key in categoryIds)
            {
                customerCategorySettingRepository.Insert(new CustomerCategorySetting
                {
                    CustomerId = id,
                    CustomerCategoryId = key
                });
            }


            // Delete the removed.
            customerCategorySettingRepository.Delete(
                t => t.CustomerId == id 
                && categoryIds.Contains(t.CustomerCategoryId) == false
                );

            // Add new.
            foreach(var key in categoryIds)
            {
                if (customerCategorySettingRepository.Count(t => t.CustomerId == id && t.CustomerCategoryId == key) == 0)
                {
                    customerCategorySettingRepository.Insert(new CustomerCategorySetting
                    {
                        CustomerId = id,
                        CustomerCategoryId = key
                    });
                }
            }

            */


            var list = customerCategorySettingRepository.GetAllList(t => t.CustomerId == id);

            foreach(var item in list)
            {
                if (categoryIds.Contains(item.CustomerCategoryId))
                {
                    categoryIds.Remove(item.CustomerCategoryId);     // 去掉已经存在的
                    continue;
                }
                else
                {
                    // If old item is not exist, delete it from database.
                    customerCategorySettingRepository.Delete(item);
                }
            }

            // categoryIds will only exist new creation items, add them to database.
            foreach(var item in categoryIds)
            {
                customerCategorySettingRepository.Insert(new CustomerCategorySetting
                {
                    CustomerId = id,
                    CustomerCategoryId = item
                });
            }
        }