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."));
        }
示例#2
0
        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());
        }