public ActionResult GenerateNewOrder([FromBody] InvoiceModel invoice)
 {
     _logger.LogInformation("Generating invoice");
     data.models.SalesOrder order = OrderMapper.InvoiceViewToOrderData(invoice);
     order.Customer = _customerService.GetById(invoice.CustomerId);
     return(Ok(_orderService.GenerateOpenOrderAndReturnResponse(order)));
 }
        public ServiceResponse <bool> GenerateOpenOrderAndReturnResponse(data.models.SalesOrder orders)
        {
            foreach (data.models.SalesOrderItem order in orders.SalesOrderItems)
            {
                data.models.Product product = _productService.GetproductById(order.productId);

                if (product == null)
                {
                    return(ServiceResponse <bool> .Failed(false, $"Product represented as index {order.productId} was not found"));
                }

                data.models.ProductInventory inventory = _inventoryService.GetByProductId(product.id);
                int inventoryId = inventory.id;

                if (_inventoryService.UpdateUnitsAvailableAndReturnResponse(inventoryId, -(order.quantity)).IsSuccess == false)
                {
                    return(ServiceResponse <bool> .Failed(false, "Updating inventory was fail"));
                }
            }

            try {
                _db.SalesOrders.Add(orders);
                _db.SaveChanges();

                return(ServiceResponse <bool> .Successed(true, "Open order created"));
            } catch (Exception e) {
                return(ServiceResponse <bool> .Failed(false, e.StackTrace));
            }
        }
        public ServiceResponse <bool> MarkFulfilledAndReturnResponse(int id)
        {
            data.models.SalesOrder targetOrder = _db.SalesOrders.Find(id);

            if (targetOrder == null)
            {
                return(ServiceResponse <bool> .Failed(false, "Order to mark as paid not found"));
            }

            targetOrder.updatedOn = DateTime.UtcNow;
            targetOrder.isPaid    = true;

            try {
                _db.SalesOrders.Update(targetOrder);
                _db.SaveChanges();

                return(ServiceResponse <bool> .Successed(true, $"Order {id} closed!: Invoice paid in full"));
            } catch (Exception e) {
                return(ServiceResponse <bool> .Failed(true, e.StackTrace));
            }
        }