Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }