protected virtual void DocTransaction_ProductID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e) { DocTransaction line = (DocTransaction)e.Row; Product product = null; SupplierProduct supplierData = null; if (line.ProductID != null) { product = PXSelectorAttribute.Select <DocTransaction.productID>(sender, line) as Product; if (product != null) { line.Description = product.ProductName; line.StockUnit = product.StockUnit; supplierData = PXSelect <SupplierProduct, Where <SupplierProduct.supplierID, Equal <Current <Document.supplierID> >, And <SupplierProduct.productID, Equal <Required <Product.productID> > > > > .Select(this, product.ProductID); if (supplierData != null) { line.Unit = supplierData.SupplierUnit; line.ConversionFactor = supplierData.ConversionFactor; line.UnitPrice = supplierData.SupplierPrice; } } } if (product == null) { sender.SetDefaultExt <DocTransaction.tranQty>(line); line.Description = null; line.StockUnit = null; } if (supplierData == null) { line.Unit = null; sender.SetDefaultExt <DocTransaction.conversionFactor>(line); line.UnitPrice = null; } }
public static void ReorderProducts(List <ProductReorder> products) { ReceiptEntry graph = PXGraph.CreateInstance <ReceiptEntry>(); bool erroroccurred = false; List <ProductReorder> productsToProceed = products.OrderBy(item => item.SupplierID).ToList(); List <ProductReorder> pendingProducts = new List <ProductReorder>(); Document doc = null; int?pendingSupplierID = null; foreach (ProductReorder product in productsToProceed) { try { pendingProducts.Add(product); if (product.SupplierID == null) { throw new PXException("Supplier has not been specified."); } if (doc == null || product.SupplierID != pendingSupplierID) { doc = new Document(); doc.DocType = DocTypes.Recpt; doc.DocDate = graph.Accessinfo.BusinessDate; doc.SupplierID = product.SupplierID; doc = graph.Receipts.Insert(doc); pendingSupplierID = product.SupplierID; } DocTransaction tran = new DocTransaction(); tran.DocType = doc.DocType; tran.DocNbr = doc.DocNbr; tran.ProductID = product.ProductID; tran.TranQty = product.Discrepancy; graph.ReceiptTransactions.Insert(tran); int nextProductIndex = productsToProceed.IndexOf(product) + 1; if (productsToProceed.Count == nextProductIndex || productsToProceed[nextProductIndex].SupplierID != product.SupplierID) { graph.Actions.PressSave(); foreach (ProductReorder pendingProduct in pendingProducts) { PXProcessing <ProductReorder> .SetInfo( products.IndexOf(pendingProduct), String.Format("The receipt {0} has been created", doc.DocNbr)); } pendingProducts.Clear(); graph.Clear(); } } catch (Exception) { erroroccurred = true; foreach (ProductReorder pendingProduct in pendingProducts) { PXProcessing <ProductReorder> .SetError( products.IndexOf(pendingProduct), "A receipt cannot be created"); } pendingProducts.Clear(); graph.Clear(); doc = null; } } if (erroroccurred) { throw new PXException("At least one product hasn't been processed."); } }