public async Task <IActionResult> Edit(BillingDto billingDto) { var billing = _mapper.Map <Billing>(billingDto); var validationResult = _validator.Validate(billing); if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage).ToList(); return(BadRequest(errors)); } else if (!validationResult.IsValid) { var validationErrors = validationResult.Errors.Select(x => $"{x.PropertyName} failed validation: ${x.ErrorMessage}."); return(BadRequest(string.Join(";", validationErrors))); } int result = await _billingRepository.Update(billing).ConfigureAwait(false); if (result == 1) { return(Ok("Billing updated.")); } return(BadRequest("There was an error updating billing.")); }
public async Task <IActionResult> AddBill([FromBody] BillingDto billingDto) { //verifying if product and user exists on database var existingBilling = await _unitOfWork.Billings.GetByVoucherNumberAsync(billingDto.VoucherNumber); if (existingBilling != null) { return(BadRequest($"Bill with Id: {billingDto.VoucherNumber} is already saved.")); } var user = await _unitOfWork.Users.GetAsync(1); //mapping BillingDto to Billing var bill = _mapper.Map <Billing>(billingDto); bill.CreatedDateTime = DateTime.Now; bill.CreatedBy = user; bill.RegisterStatus = RegisterStatus.Enabled; var billDetail = new List <BillingDetail>(); foreach (var item in bill.BillingDetails) { var product = await _unitOfWork.Products.GetAsync(item.ProductId); item.Product = product; product.Stock -= item.Quantity; billDetail.Add(item); if (product.Stock < 0) { return(BadRequest($"The product: {product.Name} has not enough stock.")); } } bill.BillingDetails = billDetail; //Adding bill if (!bill.BillingDetails.Any()) { return(BadRequest($"Bill does not contain valid products.")); } _unitOfWork.Billings.Add(bill); await _unitOfWork.Complete(); return(Ok()); }