public async Task <IActionResult> GetSubmittedFactorItems([FromQuery] string submittedFactorId) { try { SubmittedFactor sf = await _unitOfWork.SubmittedFactorRepository.GetDbSet().Include(s => s.Items).SingleOrDefaultAsync(s => s.Id == Guid.Parse(submittedFactorId)); if (sf == null) { return(NotFound("Factor not found")); } return(Ok(sf.Items)); } catch (Exception e) { _logger.LogError(e, e.Message); return(Problem(e.Message)); } }
public async Task <IActionResult> SubmitUserFactor([FromBody] SubmitUserFactorRequestModel model) { try { PreFactor preFactor = await _unitOfWork.PreFactorRepository.GetDbSet().Include(f => f.User).ThenInclude(u => u.Contacts).SingleOrDefaultAsync(f => f.Id == Guid.Parse(model.PreFactorId)); if (preFactor == null) { return(NotFound("preFactor not found")); } if (preFactor.SubmittedFactorId != null) { return(BadRequest("This preFactor already have a submitted factor")); } Contact contact = preFactor.User.Contacts.SingleOrDefault(c => c.Id == Guid.Parse(model.ContactId)); if (contact == null) { return(NotFound("user contact not found")); } long totalPrice = 0; List <FactorItem> factors = new List <FactorItem>(); foreach (FactorItemRequestModel item in model.FactorItems) { Product product = await _unitOfWork.ProductRepository.SingleOrDefaultAsync(p => p.Title == item.Product.Title); if (product == null) { return(NotFound(item.Product.Title + " not found")); } FactorItem factorItem = new FactorItem() { Price = item.Price, Product = product, TotalPrice = item.Quantity * item.Price }; factors.Add(factorItem); totalPrice += factorItem.TotalPrice; } SubmittedFactor sf = new SubmittedFactor { Contact = contact, FactorDate = model.FactorDate, TotalPrice = totalPrice, Items = factors, PreFactor = preFactor, State = new State(model.State.IsClear), Code = await CalculateCode(preFactor.User.Phone) }; try { _unitOfWork.SubmittedFactorRepository.Insert(sf); preFactor.IsDone = true; _unitOfWork.PreFactorRepository.Update(preFactor); _unitOfWork.Commit(); var x = new { sf.Id, sf.Items, sf.State, sf.TotalPrice }; return(Ok(x)); } catch (Exception e) { _unitOfWork.Rollback(); _logger.LogError(e, e.Message); return(Problem("database error")); } } catch (Exception e) { _logger.LogError(e, e.Message); return(Problem(e.Message)); } }