public async Task <ServiceResponse <int> > CreateAsync(SaleDto sale, int userId) { if (sale == null) { throw new ArgumentNullException(nameof(sale)); } var entity = sale.ToEntity(); entity.UpdateCreatedFields(userId).UpdateModifiedFields(userId); var location = await UnitOfWork.Get <Location>().GetAsync(entity.LocationID); location.UpdateModifiedFields(userId); if (entity.ClientID.HasValue) { var client = await UnitOfWork.Get <Client>().GetAsync(entity.ClientID.Value); client.UpdateModifiedFields(userId); } entity.Recommendations?.UpdateCreatedFields(userId).UpdateModifiedFields(userId); entity.Attachments?.UpdateCreatedFields(userId).UpdateModifiedFields(userId); var added = UnitOfWork.Get <Sale>().Add(entity); await UnitOfWork.SaveAsync(); return(new SuccessResponse <int>(added.ID)); }
public async Task <ServiceResponse <SaleDto> > UpdateAsync(SaleDto sale, int userId) { if (sale == null) { throw new ArgumentNullException(nameof(sale)); } var existentSale = await UnitOfWork.Get <Sale>().GetAsync(sale.ID); if (existentSale == null) { return(new ServiceResponse <SaleDto>(ServiceResponseStatus.NotFound)); } var goods = UnitOfWork.Get <Goods>() .GetAll(g => g.SaleID == sale.ID, g => g.Storages) .ToList(); existentSale.Goods = goods; foreach (var good in existentSale.Goods) { if (sale.IsSubmitted && !existentSale.IsSubmitted) { good.IsSold = true; good.Storages.OrderBy(st => st.FromDate).Last().ToDate = DateTime.Now; } if (sale.IsWriteOff) { good.Price = 0.0M; } good.UpdateModifiedFields(userId); UnitOfWork.Get <Goods>().Update(good); } var entity = sale.ToEntity(); existentSale.TotalPrice = sale.IsWriteOff ? 0.0M : existentSale.Goods.Sum(g => g.Price); existentSale.Attachments = GetAttachments(existentSale.ID).ToList(); existentSale.Recommendations = GetRecommendations(existentSale.ID).ToList(); existentSale .UpdateFields(entity) .UpdateAttachments(entity, UnitOfWork, userId) .UpdateRecommendations(entity, UnitOfWork, userId) .UpdateModifiedFields(userId); UnitOfWork.Get <Sale>().Update(existentSale); await UnitOfWork.SaveAsync(); return(new SuccessResponse <SaleDto>()); }