Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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.");
            }
        }