public ActionResult AddItem(int id, int product) { var p = Product.Find (product); var entity = FiscalDocument.Find (id); int pl = entity.Customer.PriceList.Id; var price = (from x in ProductPrice.Queryable where x.Product.Id == product && x.List.Id == pl select x).SingleOrDefault (); if (entity.IsCompleted || entity.IsCancelled) { Response.StatusCode = 400; return Content (Resources.ItemAlreadyCompletedOrCancelled); } var item = new FiscalDocumentDetail { Document = FiscalDocument.Find (id), Product = p, ProductCode = p.Code, ProductName = p.Name, UnitOfMeasurement = p.UnitOfMeasurement, Discount = 0, TaxRate = p.TaxRate, IsTaxIncluded = p.IsTaxIncluded, Quantity = 1, Price = price.Value, ExchangeRate = entity.ExchangeRate, Currency = entity.Currency }; if (p.Currency != entity.Currency) { item.Price = price.Value * CashHelpers.GetTodayExchangeRate (p.Currency, entity.Currency); } using (var scope = new TransactionScope ()) { item.CreateAndFlush (); } return Json (new { id = item.Id }); }
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 }); }