public async Task <SellOpportunityHeader> AddOpportunityAsync(SellOpportunityHeader opportunity) { using (var transact = _context.Database.BeginTransaction()) { try { await _context.SellOpportunityPositions.AddRangeAsync(opportunity.Positions); await _context.SellOpportunityHeaders.AddAsync(opportunity); await _context.SaveChangesAsync(); transact.Commit(); } catch (Exception ex) { await _context.Logs.AddAsync(new Log { LogMessage = ex.Message, ModuleName = "OpportunityRepository/AddOpportunityAsync" }); transact.Rollback(); throw; } } return(opportunity); }
public async Task <SellOpportunityHeader> UpdateAsync(SellOpportunityHeader opportunityHeader) { using (var transact = _context.Database.BeginTransaction()) { try { foreach (var position in opportunityHeader.Positions) { if (position.Id == 0) { await _context.SellOpportunityPositions.AddAsync(position); } else { _context.SellOpportunityPositions.Update(position); } } _context.SellOpportunityHeaders.Update(opportunityHeader); await _context.SaveChangesAsync(); transact.Commit(); } catch (Exception ex) { await _context.Logs.AddAsync(new Log { LogMessage = ex.Message, ModuleName = "OpportunityRepository/UpdateAsync" }); transact.Rollback(); throw; } } return(opportunityHeader); }
public async Task <IActionResult> Handle(UpsertOpportunityCommand request, CancellationToken cancellationToken) { try { var validator = new SellOpportunityDetailsValidator(); var result = validator.Validate(request.SellOpportunity); if (!result.IsValid) { var errorMsg = ""; foreach (var err in result.Errors) { errorMsg += err.ErrorMessage + "\r\n"; } return(new JsonResult(new ApiResponse <object> { Data = null, Code = 406, ErrorMessage = errorMsg })); } var opportunity = await _opportunityRepository.GetOpportunityAsync(request.SellOpportunity.Id, request.CompanyId); if (opportunity == null) { opportunity = new SellOpportunityHeader(); opportunity.Id = 0; opportunity.CreateDate = DateTime.Now; opportunity.ModificationDate = opportunity.CreateDate; opportunity.Positions = new List <SellOpportunityPosition>(); opportunity.CompanyId = request.CompanyId; } if (opportunity.Id > 0) { opportunity.ModificationDate = DateTime.Now; } opportunity.Status = (await _opportunityStatusRepository.GetOpportunityStatusesAsync()).FirstOrDefault(x => x.Name == request.SellOpportunity.Status); opportunity.Lead = await _leadRepository.GetLeadByNameAsync(request.SellOpportunity.Lead, request.CompanyId); opportunity.SumGrossValue = 0; opportunity.SumMarkupValue = 0; opportunity.SumNetValue = 0; opportunity.SumVatValue = 0; opportunity.Trader = await _userRepository.GetUserByNameAsync(request.SellOpportunity.Trader, request.CompanyId); foreach (var positionDto in request.SellOpportunity.Positions) { if (!positionDto.Deleted) { if (positionDto.Id > 0) { opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].ModificationDate = opportunity.ModificationDate; opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].NetValue = positionDto.NetValue; opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].Product = await _productRepository.GetProductByNameAsync(positionDto.Product, request.CompanyId); opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].Quantity = positionDto.Quantity; opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].VatValue = positionDto.VatValue; opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].Markup = positionDto.Markup; opportunity.Positions[opportunity.Positions.FindIndex(x => x.Id == positionDto.Id)].GrossValue = positionDto.GrossValue; } else { var position = new SellOpportunityPosition { Id = 0, CreateDate = opportunity.CreateDate, GrossValue = positionDto.GrossValue, Markup = positionDto.Markup, VatValue = positionDto.VatValue, ModificationDate = opportunity.CreateDate, NetValue = positionDto.NetValue, OpportunityHeader = opportunity, Product = await _productRepository.GetProductByNameAsync(positionDto.Product, request.CompanyId), Quantity = positionDto.Quantity }; opportunity.Positions.Add(position); } opportunity.SumNetValue += positionDto.NetValue; opportunity.SumGrossValue += positionDto.GrossValue; opportunity.SumMarkupValue += positionDto.Markup; opportunity.SumVatValue += positionDto.VatValue; } else { await _opportunityRepository.RemoveOpportunityPositionAsync(positionDto.Id); } } if (opportunity.Id == 0) { opportunity = await _opportunityRepository.AddOpportunityAsync(opportunity); } else { opportunity = await _opportunityRepository.UpdateAsync(opportunity); } if (opportunity != null) { return(new JsonResult(new ApiResponse <object> { Data = null, Code = 201, ErrorMessage = "" })); } else { return(new JsonResult(new ApiResponse <object> { Data = null, Code = 400, ErrorMessage = "Coś poszło nie tak, sprawdź dane i spróbuj ponownie." })); } } catch { return(new JsonResult(new ApiResponse <object> { Data = null, Code = 500, ErrorMessage = "Nastąpił problem z serwerem, skontaktuj się z działem IT." })); } }