public async Task <long> CreateAsync(ProductModifyRequest request) { var modifiedDate = DateTimeOffset.UtcNow; request.CreatedDate = modifiedDate; request.UpdatedDate = modifiedDate; var id = await _productRepository.CreateAsync(request); if (id <= 0) { return(-1); } if (request.Pictures.Any()) { await _productPictureRepository.CreateAsync(new ProductPicturesModifyRequest { CreatedById = request.CreatedById, CreatedDate = request.CreatedDate, ProductId = id, Pictures = request.Pictures, UpdatedById = request.UpdatedById, UpdatedDate = request.UpdatedDate }); } if (request.ProductAttributes == null || !request.ProductAttributes.Any()) { return(id); } var groupOfAttributes = new List <ProductAttributeRelationRequest>(); foreach (var attributeRelation in request.ProductAttributes) { var existAttribute = groupOfAttributes.FirstOrDefault(x => x.ProductAttributeId == attributeRelation.ProductAttributeId); if (existAttribute != null) { var attributeValues = existAttribute.AttributeRelationValues.ToList(); attributeValues.AddRange(attributeRelation.AttributeRelationValues); existAttribute.AttributeRelationValues = attributeValues; } else { groupOfAttributes.Add(attributeRelation); } } foreach (var attributeRelation in groupOfAttributes) { attributeRelation.ProductId = id; await _productAttributeRepository.CreateAttributeRelationAsync(attributeRelation); } return(id); }
public async Task <bool> ActiveAsync(ProductModifyRequest request) { await _productRepository.Get(x => x.Id == request.Id) .Set(x => x.StatusId, (int)ProductStatus.Actived) .Set(x => x.UpdatedById, request.UpdatedById) .Set(x => x.UpdatedDate, DateTimeOffset.UtcNow) .UpdateAsync(); return(true); }
public async Task <bool> ActiveAsync(ProductModifyRequest request) { await _productPictureRepository.UpdateStatusByProductIdAsync(new ProductPicturesModifyRequest { UpdatedById = request.UpdatedById, ProductId = request.Id }, PictureStatus.Actived); return(await _productRepository.ActiveAsync(request)); }
public async Task <long> CreateAsync(ProductModifyRequest request) { var modifiedDate = DateTimeOffset.UtcNow; var newProduct = new Product() { CreatedById = request.CreatedById, UpdatedById = request.UpdatedById, CreatedDate = modifiedDate, UpdatedDate = modifiedDate, Description = request.Description, Name = request.Name, StatusId = ProductStatus.Pending.GetCode() }; var id = await _productRepository.AddWithInt64EntityAsync(newProduct); if (id > 0) { foreach (var category in request.Categories) { _productCategoryRelationRepository.Add(new ProductCategoryRelation() { ProductCategoryId = category.Id, ProductId = id }); } foreach (var farm in request.Farms) { _farmProductRepository.Add(new FarmProduct() { FarmId = farm.FarmId, ProductId = id, IsLinked = true, LinkedById = request.CreatedById, LinkedDate = modifiedDate }); } _productPriceRepository.Add(new ProductPrice() { PricedDate = modifiedDate, ProductId = id, Price = request.Price, IsCurrent = true }); } return(id); }
public async Task <ProductModel> CreateProductAsync(ClaimsPrincipal claimsPrincipal, ProductModel criterias) { var currentUserId = GetCurrentUserId(claimsPrincipal); var product = new ProductModifyRequest() { CreatedById = currentUserId, UpdatedById = currentUserId, Name = criterias.Name, Description = criterias.Description, Price = criterias.Price, Pictures = criterias.Pictures.Select(x => new PictureRequest { Base64Data = x.Base64Data, FileName = x.FileName, ContentType = x.ContentType, }), Categories = criterias.Categories.Select(x => new ProductCategoryRequest { Id = x.Id }), Farms = criterias.Farms.Select(x => new ProductFarmRequest { FarmId = x.Id }), ProductAttributes = criterias.ProductAttributes.Select(x => new ProductAttributeRelationRequest { ControlTypeId = x.ControlTypeId, DisplayOrder = x.DisplayOrder, ProductAttributeId = x.AttributeId, AttributeRelationValues = x.AttributeRelationValues.Select(c => new ProductAttributeRelationValueRequest { DisplayOrder = c.DisplayOrder, Name = c.Name, PriceAdjustment = c.PriceAdjustment, PricePercentageAdjustment = c.PricePercentageAdjustment, Quantity = c.Quantity }) }) }; criterias.Id = await _productService.CreateAsync(product); return(criterias); }
public async Task <ProductModel> UpdateProductAsync(ClaimsPrincipal claimsPrincipal, ProductModel criterias) { var exist = await _productService.FindAsync(new IdRequestFilter <long> { Id = criterias.Id, CanGetInactived = true }); if (exist == null) { throw new CaminoApplicationException("No article found"); } var currentUserId = GetCurrentUserId(claimsPrincipal); if (currentUserId != exist.CreatedById) { throw new UnauthorizedAccessException(); } var product = new ProductModifyRequest() { Id = criterias.Id, CreatedById = currentUserId, UpdatedById = currentUserId, Name = criterias.Name, Description = criterias.Description, Price = criterias.Price, Pictures = criterias.Pictures.Select(x => new PictureRequest() { Base64Data = x.Base64Data, FileName = x.FileName, ContentType = x.ContentType, Id = x.PictureId }), Categories = criterias.Categories.Select(x => new ProductCategoryRequest() { Id = x.Id }), Farms = criterias.Farms.Select(x => new ProductFarmRequest() { FarmId = x.Id }), ProductAttributes = criterias.ProductAttributes?.Select(x => new ProductAttributeRelationRequest { Id = x.Id, ControlTypeId = x.ControlTypeId, DisplayOrder = x.DisplayOrder, ProductAttributeId = x.AttributeId, AttributeRelationValues = x.AttributeRelationValues?.Select(c => new ProductAttributeRelationValueRequest { Id = c.Id, DisplayOrder = c.DisplayOrder, Name = c.Name, PriceAdjustment = c.PriceAdjustment, PricePercentageAdjustment = c.PricePercentageAdjustment, Quantity = c.Quantity }) }) }; await _productService.UpdateAsync(product); return(criterias); }
public async Task <bool> UpdateAsync(ProductModifyRequest request) { var modifiedDate = DateTimeOffset.UtcNow; var product = _productRepository.FirstOrDefault(x => x.Id == request.Id); product.Description = request.Description; product.Name = request.Name; product.UpdatedById = request.UpdatedById; product.UpdatedDate = modifiedDate; // Update Category var categoryIds = request.Categories.Select(x => x.Id); await _productCategoryRelationRepository .Get(x => x.ProductId == request.Id && x.ProductCategoryId.NotIn(categoryIds)) .DeleteAsync(); var linkedCategoryIds = _productCategoryRelationRepository .Get(x => x.ProductId == request.Id && x.ProductCategoryId.In(categoryIds)) .Select(x => x.ProductCategoryId) .ToList(); var unlinkedCategories = request.Categories.Where(x => x.Id.NotIn(linkedCategoryIds)); if (unlinkedCategories != null && unlinkedCategories.Any()) { foreach (var category in unlinkedCategories) { _productCategoryRelationRepository.Add(new ProductCategoryRelation() { ProductCategoryId = category.Id, ProductId = request.Id }); } } // Update Farm var farmIds = request.Farms.Select(x => x.FarmId); await _farmProductRepository .Get(x => x.ProductId == request.Id && x.FarmId.NotIn(farmIds)) .DeleteAsync(); var linkedFarmIds = _farmProductRepository .Get(x => x.ProductId == request.Id && x.FarmId.In(farmIds)) .Select(x => x.FarmId) .ToList(); var unlinkedFarms = request.Farms.Where(x => x.FarmId.NotIn(linkedFarmIds)); if (unlinkedFarms != null && unlinkedFarms.Any()) { foreach (var farm in unlinkedFarms) { _farmProductRepository.Add(new FarmProduct() { FarmId = farm.FarmId, ProductId = request.Id, IsLinked = true, LinkedById = product.CreatedById, LinkedDate = modifiedDate }); } } // Unlink all price var totalPriceUpdated = await _productPriceRepository.Get(x => x.ProductId == request.Id && x.IsCurrent && x.Price != request.Price) .Set(x => x.IsCurrent, false) .UpdateAsync(); if (totalPriceUpdated > 0) { await _productPriceRepository.AddAsync(new ProductPrice() { PricedDate = modifiedDate, ProductId = request.Id, Price = request.Price, IsCurrent = true }); } _productRepository.Update(product); return(true); }
public async Task <IActionResult> Update(ProductModel model) { if (!ModelState.IsValid) { return(RedirectToErrorPage()); } var attributeValues = model.ProductAttributes?.SelectMany(x => x.AttributeRelationValues); var product = new ProductModifyRequest() { Id = model.Id, UpdatedById = LoggedUserId, CreatedById = LoggedUserId, Name = model.Name, Description = model.Description, Price = model.Price, Categories = model.ProductCategoryIds.Select(id => new ProductCategoryRequest() { Id = id }), Farms = model.ProductFarmIds.Select(id => new ProductFarmRequest() { FarmId = id }), ProductAttributes = model.ProductAttributes?.Select(x => new ProductAttributeRelationRequest { Id = x.Id, ControlTypeId = x.ControlTypeId, DisplayOrder = x.DisplayOrder, ProductAttributeId = x.AttributeId, AttributeRelationValues = attributeValues .Where(v => v.AttributeRelationId == x.Id && v.AttributeId == x.AttributeId)?.Select(c => new ProductAttributeRelationValueRequest { Id = c.Id, DisplayOrder = c.DisplayOrder, Name = c.Name, PriceAdjustment = c.PriceAdjustment, PricePercentageAdjustment = c.PricePercentageAdjustment, Quantity = c.Quantity }) }) }; if (product.Id <= 0) { return(RedirectToErrorPage()); } var exist = await _productService.FindAsync(new IdRequestFilter <long> { Id = model.Id, CanGetDeleted = true, CanGetInactived = true }); if (exist == null) { return(RedirectToErrorPage()); } if (model.Pictures != null && model.Pictures.Any()) { product.Pictures = model.Pictures.Select(x => new PictureRequest() { Base64Data = x.Base64Data, ContentType = x.ContentType, FileName = x.FileName, Id = x.PictureId }); } product.UpdatedById = LoggedUserId; await _productService.UpdateAsync(product); return(RedirectToAction(nameof(Detail), new { id = product.Id })); }
public async Task <bool> UpdateAsync(ProductModifyRequest request) { var modifiedDate = DateTimeOffset.UtcNow; request.UpdatedDate = modifiedDate; var isUpdated = await _productRepository.UpdateAsync(request); if (!isUpdated) { return(false); } await _productPictureRepository.UpdateAsync(new ProductPicturesModifyRequest { ProductId = request.Id, CreatedById = request.CreatedById, UpdatedById = request.UpdatedById, CreatedDate = modifiedDate, UpdatedDate = modifiedDate, Pictures = request.Pictures }); // Delete all product attributes in cases no product attributes from the request if (request.ProductAttributes == null || !request.ProductAttributes.Any()) { await _productAttributeRepository.DeleteAttributeRelationByProductIdAsync(request.Id); return(isUpdated); } var groupOfAttributes = new List <ProductAttributeRelationRequest>(); foreach (var attributeRelation in request.ProductAttributes) { var existAttribute = groupOfAttributes.FirstOrDefault(x => x.ProductAttributeId == attributeRelation.ProductAttributeId); if (existAttribute != null) { var attributeValues = existAttribute.AttributeRelationValues.ToList(); attributeValues.AddRange(attributeRelation.AttributeRelationValues); existAttribute.AttributeRelationValues = attributeValues; } else { groupOfAttributes.Add(attributeRelation); } } var productAttributeIds = request.ProductAttributes.Where(x => x.Id != 0).Select(x => x.Id); await _productAttributeRepository.DeleteAttributeRelationNotInIdsAsync(request.Id, productAttributeIds); foreach (var attributeRelation in request.ProductAttributes) { attributeRelation.ProductId = request.Id; var isAttributeRelationExist = attributeRelation.Id != 0 && await _productAttributeRepository.IsAttributeRelationExistAsync(attributeRelation.Id); if (!isAttributeRelationExist) { await _productAttributeRepository.CreateAttributeRelationAsync(attributeRelation); } else { await _productAttributeRepository.UpdateAttributeRelationAsync(attributeRelation); } } return(isUpdated); }