public ActionResult AddItems(int id, string value)
        {
            var entity = FiscalDocument.Find (id);
            SalesOrder sales_order = null;
            int sales_order_id = 0;
            int count = 0;

            if (entity.IsCompleted || entity.IsCancelled) {
                Response.StatusCode = 400;
                return Content (Resources.ItemAlreadyCompletedOrCancelled);
            }

            if (int.TryParse (value, out sales_order_id)) {
                sales_order = SalesOrder.TryFind (sales_order_id);
            }

            if (sales_order == null) {
                Response.StatusCode = 400;
                return Content (Resources.SalesOrderNotFound);
            }

            if (!sales_order.IsCompleted || sales_order.IsCancelled) {
                Response.StatusCode = 400;
                return Content (Resources.SalesOrderIsNotInvoiceable);
            }

            using (var scope = new TransactionScope ()) {
                foreach (var x in sales_order.Details) {
                    if (!x.Product.IsInvoiceable)
                        continue;

                    decimal max_qty = GetInvoiceableQuantity (x.Id);

                    if (max_qty <= 0)
                        continue;

                    var item = new FiscalDocumentDetail {
                        Document = entity,
                        Product = x.Product,
                        OrderDetail = x,
                        ProductCode = x.ProductCode,
                        ProductName = x.ProductName,
                        UnitOfMeasurement = x.Product.UnitOfMeasurement,
                        Discount = x.Discount,
                        TaxRate = x.TaxRate,
                        IsTaxIncluded = x.IsTaxIncluded,
                        Quantity = max_qty,
                        Price = x.Price,
                        ExchangeRate = entity.ExchangeRate,
                        Currency = entity.Currency,
                        Comment = x.Comment
                    };

                    if (x.Currency != entity.Currency) {
                        item.Price = x.Price * CashHelpers.GetTodayExchangeRate (x.Currency, entity.Currency);
                    }

                    item.Create ();
                    count++;
                }
            }

            if (count == 0) {
                Response.StatusCode = 400;
                return Content (Resources.InvoiceableItemsNotFound);
            }

            return Json (new { id = id, value = string.Empty, itemsChanged = count });
        }