Esempio n. 1
0
        /// <summary>
        /// Override the parent method to add additional conditions to control the quantity round-up logic.
        /// </summary>
        protected override AMMultiLevelBomData CreateDetailRow(AMBomMatl amBomMatl, AMBomOper amBomOper, AMBomItem amBomItem, InventoryItem inventoryItem, AMBomItem parentBomItem,
                                                               int lineID, int level, decimal totalQtyReq, AMMultiLevelBomFilter filter, string levelBomid, string levelRevisionID)
        {
            var itemExt = inventoryItem.GetExtension <JAMS.AEF.InventoryItemAMExtension>();

            var qtyRequired = amBomMatl.QtyReq.GetValueOrDefault() * (1 + amBomMatl.ScrapFactor.GetValueOrDefault()) *
                              (amBomMatl.BatchSize.GetValueOrDefault() == 0m ? 1m : 1 / amBomMatl.BatchSize.GetValueOrDefault());

            var totalQtyRequired = amBomMatl.QtyReq.GetValueOrDefault() * (1 + amBomMatl.ScrapFactor.GetValueOrDefault()) *
                                   (amBomMatl.BatchSize.GetValueOrDefault() == 0m ? 1m : totalQtyReq / amBomMatl.BatchSize.GetValueOrDefault());

            var baseTotalQtyRequired = amBomMatl.BaseQty.GetValueOrDefault() * (1 + amBomMatl.ScrapFactor.GetValueOrDefault()) *
                                       (amBomMatl.BatchSize.GetValueOrDefault() == 0m ? 1m : totalQtyReq / amBomMatl.BatchSize.GetValueOrDefault());

            // Add one custom field to determine the round-up logic.
            AMMultiLevelBomFilterExt filterExt = filter.GetExtension <AMMultiLevelBomFilterExt>();

            if (filterExt.UsrEnblItemRoundUp == true)
            {
                qtyRequired          = itemExt.AMQtyRoundUp == false ? qtyRequired : Math.Ceiling(qtyRequired);
                totalQtyRequired     = itemExt.AMQtyRoundUp == false ? totalQtyRequired : Math.Ceiling(totalQtyRequired);
                baseTotalQtyRequired = itemExt.AMQtyRoundUp == false ? baseTotalQtyRequired : Math.Ceiling(baseTotalQtyRequired);
            }

            var row = new AMMultiLevelBomData
            {
                ParentBOMID       = parentBomItem.BOMID,
                RevisionID        = parentBomItem.RevisionID,
                LineID            = lineID,
                Level             = level,
                InventoryID       = amBomMatl.InventoryID,
                Descr             = amBomMatl.Descr,
                ParentInventoryID = parentBomItem.InventoryID,
                ParentSubItemID   = parentBomItem.SubItemID,
                ParentDescr       = parentBomItem.Descr,
                SubItemID         = amBomMatl.SubItemID,
                UOM                  = amBomMatl.UOM,
                ScrapFactor          = amBomMatl.ScrapFactor.GetValueOrDefault(),
                BatchSize            = amBomMatl.BatchSize.GetValueOrDefault(),
                BOMQtyReq            = amBomMatl.QtyReq.GetValueOrDefault(),
                BaseQtyReq           = amBomMatl.BaseQty.GetValueOrDefault(),
                QtyReq               = qtyRequired,
                TotalQtyReq          = totalQtyRequired,
                BaseTotalQtyReq      = baseTotalQtyRequired,
                UnitCost             = amBomMatl.UnitCost.GetValueOrDefault(),
                ExtCost              = qtyRequired * amBomMatl.UnitCost.GetValueOrDefault(),
                TotalExtCost         = totalQtyRequired * amBomMatl.UnitCost.GetValueOrDefault(),
                LineBOMID            = amBomMatl.BOMID,
                LineRevisionID       = amBomMatl.RevisionID,
                OperationID          = amBomOper.OperationID,
                OperationCD          = amBomOper.OperationCD,
                EffStartDate         = parentBomItem.EffStartDate,
                EffEndDate           = parentBomItem.EffEndDate,
                SiteID               = parentBomItem.SiteID,
                Status               = parentBomItem.Status,
                LineStatus           = amBomItem.Status,
                MaterialStatus       = amBomItem.Status,
                OperationDescription = amBomOper.Descr,
                WcID                 = amBomOper.WcID,
                IsHeaderRecord       = false,
                SortOrder            = amBomMatl.SortOrder
            };

            var materialSiteID = amBomMatl.SiteID ?? amBomItem.SiteID;

            if (filter.IgnoreReplenishmentSettings.GetValueOrDefault() ||
                JAMS.AM.InventoryHelper.GetReplenishmentSource(this, row.InventoryID, materialSiteID) == INReplenishmentSource.Manufactured)
            {
                levelBomid      = amBomMatl.CompBOMID;
                levelRevisionID = amBomMatl.CompBOMRevisionID;

                if (!string.IsNullOrWhiteSpace(levelBomid) && !string.IsNullOrWhiteSpace(levelRevisionID))
                {
                    AMBomItem bomItem = null;

                    if (Filter.Current.IncludeBomsOnHold.GetValueOrDefault())
                    {
                        bomItem = PXSelect <AMBomItem, Where <AMBomItem.bOMID, Equal <Required <AMBomItem.bOMID> >,
                                                              And <AMBomItem.revisionID, Equal <Required <AMBomItem.revisionID> >,
                                                                   And2 <Where <AMBomItem.status, Equal <AMBomStatus.hold>,
                                                                                Or <AMBomItem.status, Equal <AMBomStatus.active> > >,
                                                                         And <Where <Required <AMBomItem.effStartDate>, Between <AMBomItem.effStartDate, AMBomItem.effEndDate>,
                                                                                     Or <Where <AMBomItem.effStartDate, LessEqual <Required <AMBomItem.effStartDate> >,
                                                                                                And <AMBomItem.effEndDate, IsNull> > > > > > > > >
                                  .Select(this, levelBomid, levelRevisionID, Filter.Current.BOMDate.GetValueOrDefault(), Filter.Current.BOMDate.GetValueOrDefault());
                    }
                    else
                    {
                        bomItem = PXSelect <AMBomItem, Where <AMBomItem.bOMID, Equal <Required <AMBomItem.bOMID> >,
                                                              And <AMBomItem.revisionID, Equal <Required <AMBomItem.revisionID> >,
                                                                   And <AMBomItem.status, Equal <AMBomStatus.active>,
                                                                        And <Where <Required <AMBomItem.effStartDate>, Between <AMBomItem.effStartDate, AMBomItem.effEndDate>,
                                                                                    Or <Where <AMBomItem.effStartDate, LessEqual <Required <AMBomItem.effStartDate> >,
                                                                                               And <AMBomItem.effEndDate, IsNull> > > > > > > > >
                                  .Select(this, levelBomid, levelRevisionID, Filter.Current.BOMDate.GetValueOrDefault(), Filter.Current.BOMDate.GetValueOrDefault());
                    }

                    if (bomItem == null)
                    {
                        PXTrace.WriteWarning(JAMS.AM.Messages.GetLocal(JAMS.AM.Messages.ComponentBOMRevisionNotActive, levelBomid, levelRevisionID, inventoryItem.InventoryCD));
                        return(row);
                    }
                }

                if (!string.IsNullOrWhiteSpace(levelBomid) && string.IsNullOrWhiteSpace(levelRevisionID))
                {
                    var compBomItem = filter.IncludeBomsOnHold == false
                                      ? PrimaryBomIDManager.GetActiveRevisionBomItemByDate(this, levelBomid, filter.BOMDate.GetValueOrDefault())
                                      : PrimaryBomIDManager.GetNotArchivedRevisionBomItemByDate(this, levelBomid, filter.BOMDate.GetValueOrDefault());

                    if (compBomItem == null)
                    {
                        PXTrace.WriteWarning(JAMS.AM.Messages.GetLocal(JAMS.AM.Messages.NoActiveRevisionForBom, parentBomItem.BOMID));
                        return(row);
                    }

                    levelRevisionID = compBomItem.RevisionID;
                }

                if (string.IsNullOrWhiteSpace(levelBomid))
                {
                    var bomItem = filter.IncludeBomsOnHold == false
                                  ? PrimaryBomIDManager.GetActiveRevisionBomItemByDate(this, new PrimaryBomIDManager(this).GetPrimaryAllLevels(row.InventoryID,
                                                                                                                                               materialSiteID, row.SubItemID), filter.BOMDate.GetValueOrDefault())
                                  : PrimaryBomIDManager.GetNotArchivedRevisionBomItemByDate(this, new PrimaryBomIDManager(this).GetPrimaryAllLevels(row.InventoryID,
                                                                                                                                                    materialSiteID, row.SubItemID), filter.BOMDate.GetValueOrDefault());

                    if (bomItem == null)
                    {
                        PXTrace.WriteWarning(JAMS.AM.Messages.GetLocal(JAMS.AM.Messages.NoActiveRevisionForBom, parentBomItem.BOMID));
                        return(row);
                    }

                    levelBomid      = bomItem.BOMID;
                    levelRevisionID = bomItem.RevisionID;
                }

                row.ManufacturingBOMID      = levelBomid;
                row.ManufacturingRevisionID = levelRevisionID;
            }

            return(row);
        }
Esempio n. 2
0
        /// <summary>
        /// Override the parent method to add additional conditions to control the cost round-up logic.
        /// </summary>
        public override List <AMMultiLevelBomData> RollCostUpdate(List <AMMultiLevelBomData> multiLevelBomRecs)
        {
            List <AMMultiLevelBomData> list = new List <AMMultiLevelBomData>();
            RollBomList      rollBomList    = new RollBomList();
            HashSet <string> hashSet        = new HashSet <string>();

            using (List <AMMultiLevelBomData> .Enumerator enumerator = multiLevelBomRecs.GetEnumerator())
            {
                for (; ;)
                {
                    AMMultiLevelBomData ammultiLevelBomData;
                    if (4 != 0)
                    {
                        if (!enumerator.MoveNext())
                        {
                            break;
                        }
                        ammultiLevelBomData = enumerator.Current;
                        string item = string.Join(":", new string[]
                        {
                            ammultiLevelBomData.LineBOMID,
                            ammultiLevelBomData.LineRevisionID
                        });
                        if (!hashSet.Add(item))
                        {
                            continue;
                        }
                    }
                    bool?isHeaderRecord = ammultiLevelBomData.IsHeaderRecord;
                    bool flag           = true;
                    bool flag2          = isHeaderRecord.GetValueOrDefault() == flag & isHeaderRecord != null;
                    while (!flag2 && ammultiLevelBomData.InventoryID != null)
                    {
                        AMBomItem ambomItem = (AMBomItem)this.Caches <AMBomItem>().Locate(new AMBomItem
                        {
                            BOMID      = ammultiLevelBomData.LineBOMID,
                            RevisionID = ammultiLevelBomData.LineRevisionID
                        });
                        if (ambomItem == null)
                        {
                            if (false)
                            {
                                goto IL_136;
                            }
                            ambomItem = PXSelect <AMBomItem, Where <AMBomItem.bOMID, Equal <Required <AMBomItem.bOMID> >,
                                                                    And <AMBomItem.revisionID, Equal <Required <AMBomItem.revisionID> > > > > .Select(this, new object[] {
                                ammultiLevelBomData.LineBOMID,
                                ammultiLevelBomData.LineRevisionID
                            });
                        }
                        flag2 = rollBomList.Add(ambomItem, ammultiLevelBomData.Level.GetValueOrDefault(), false);
                        if (!false)
                        {
                            break;
                        }
                    }
                }
                IL_136 :;
            }
            LumCostRoll bomcostRoll = PXGraph.CreateInstance <LumCostRoll>();

            RollupSettings value = new RollupSettings
            {
                SnglMlti                  = "M",
                SiteID                    = null,
                InventoryID               = this.Filter.Current.InventoryID,
                SubItemID                 = null,
                BOMID                     = this.Filter.Current.BOMID,
                RevisionID                = this.Filter.Current.RevisionID,
                EffectiveDate             = this.Filter.Current.BOMDate,
                IncMatScrp                = new bool?(true),
                IncFixed                  = new bool?(true),
                UpdateMaterial            = new bool?(false),
                UsePending                = new bool?(false),
                IgnoreMinMaxLotSizeValues = this.Filter.Current.IgnoreMinMaxLotSizeValues
            };

            bomcostRoll.Settings.Current = value;
            bomcostRoll.RollCosts(rollBomList, Filter.Current.GetExtension <AMMultiLevelBomFilterExt>().UsrEnblItemRoundUp.GetValueOrDefault());

            foreach (AMMultiLevelBomData ammultiLevelBomData2 in multiLevelBomRecs)
            {
                AMBomCost bomCostRec = null;
                if (!string.IsNullOrWhiteSpace(ammultiLevelBomData2.ManufacturingBOMID) && (6 == 0 || !string.IsNullOrWhiteSpace(ammultiLevelBomData2.ManufacturingRevisionID)))
                {
                    bomCostRec = (AMBomCost)bomcostRoll.Caches <AMBomCost>().Locate(new AMBomCost
                    {
                        BOMID      = ammultiLevelBomData2.ManufacturingBOMID,
                        RevisionID = ammultiLevelBomData2.ManufacturingRevisionID,
                        UserID     = new Guid?(bomcostRoll.Accessinfo.UserID)
                    });
                }
                AMMultiLevelBomData ammultiLevelBomData3 = this.RollCostUpdate(ammultiLevelBomData2, bomCostRec);

                if (ammultiLevelBomData3 != null)
                {
                    list.Add(ammultiLevelBomData3);
                }
            }
            return(list);
        }