예제 #1
0
        public async Task <IHttpActionResult> Post(SupplierTransactionDTO transactionDTO)
        {
            if (transactionDTO == null)
            {
                return(BadRequest("TransactionDTO cannot be null, on creating transaction for supplier"));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (transactionDTO.IsCredit == true)
            {
                throw new Exception("Currently transaction of type credit is not supported through this API");
            }

            try
            {
                var transaction = await transactionDTO.CreateNewTransactionAsync(db);

                await db.SaveChangesAsync();

                return(Ok(transaction));
            }
            catch (DbUpdateException)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> Post(SupplierOrderDTO orderDetail)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (orderDetail == null)
            {
                throw new Exception("OrderDetails should not have been null while placing the supplier order");
            }
            if (orderDetail.DueDate < DateTime.Now)
            {
                return(BadRequest(String.Format("DueDate {0} cannot be before current Date {1}", orderDetail.DueDate, DateTime.Now.Date)));
            }
            var payingAmount = orderDetail.PayingAmount;
            var billAmount   = orderDetail.SupplierBillingSummary.BillAmount;

            if (payingAmount > billAmount)
            {
                return(BadRequest(String.Format("Paying Amount {0} should be less than Bill Amount {1}", payingAmount, billAmount)));
            }
            //TODO: Verify bill amount.
            try
            {
                var supplierOrder = await CreateNewSupplierOrderAsync(orderDetail);

                SupplierTransactionDTO transactionDTO = new SupplierTransactionDTO
                {
                    IsCredit          = true,
                    SupplierId        = orderDetail.SupplierId,
                    TransactionAmount = billAmount - payingAmount,
                    Description       = supplierOrder.SupplierOrderNo,
                };
                var transaction = await transactionDTO.CreateNewTransactionAsync(db);

                var supplierOrderTransaction = CreateNewSupplierOrderTransaction(supplierOrder, transaction);

                var products = await UpdateStockOfProductsAsync(orderDetail.ProductsPurchased);

                AddIntoSupplierOrderProduct(orderDetail.ProductsPurchased, supplierOrder.SupplierOrderId);

                await db.SaveChangesAsync();

                return(Ok(transactionDTO.TransactionAmount));
            }
            catch (DbUpdateException)
            {
                throw;
            }
        }