Пример #1
0
        public virtual LUMStdBomCost RollCostUpdate(LUMStdBomCost multiLevelRecord, AMBomCost bomCostRec)
        {
            if (multiLevelRecord == null)
            {
                return(null);
            }

            var row = multiLevelRecord.Copy <LUMStdBomCost>();

            row.HasCostRoll = false;

            if (bomCostRec?.BOMID == null)
            {
                return(row);
            }

            row.HasCostRoll = true;
            row.LotSize     = bomCostRec.LotSize;
            //row.FixedLaborTime = bomCostRec.FixedLaborTime;
            //row.VariableLaborTime = (int?)(bomCostRec.VariableLaborTime * multiLevelRecord.TotalQtyReq);
            //row.MachineTime = (int?)(bomCostRec.MachineTime * multiLevelRecord.TotalQtyReq);
            row.UnitCost          = bomCostRec.UnitCost;
            row.ToolCost          = bomCostRec.ToolCost * multiLevelRecord.TotalQtyReq;
            row.CompMatlCost      = bomCostRec.MatlManufacturedCost * multiLevelRecord.TotalQtyReq;
            row.CompPurchMatl     = bomCostRec.MatlNonManufacturedCost * multiLevelRecord.TotalQtyReq;
            row.FixedLaborCost    = bomCostRec.FLaborCost;
            row.VariableLaborCost = bomCostRec.VLaborCost * multiLevelRecord.TotalQtyReq;
            row.FixedOvdCost      = bomCostRec.FOvdCost;
            row.VariableOvdCost   = bomCostRec.VOvdCost * multiLevelRecord.TotalQtyReq;
            row.MachineCost       = bomCostRec.MachCost * multiLevelRecord.TotalQtyReq;
            row.CompExtCost       = bomCostRec.UnitCost * multiLevelRecord.CompQtyReq;
            row.CompTotalExtCost  = bomCostRec.UnitCost * multiLevelRecord.TotalQtyReq;
            row.TotalCost         = bomCostRec.UnitCost * row.LotSize; // For MLB Report Header only
            row.SubcontractCost   = bomCostRec.SubcontractMaterialCost;

            return(row);
        }
Пример #2
0
        public virtual LUMStdBomCost 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());

            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 LUMStdBomCost
            {
                BOMID           = parentBomItem.BOMID,
                RevisionID      = parentBomItem.RevisionID,
                LineID          = lineID,
                Level           = level,
                CompInventoryID = amBomMatl.InventoryID,
                //Descr = amBomMatl.Descr,
                InventoryID = parentBomItem.InventoryID,
                SubItemID   = parentBomItem.SubItemID,
                //ParentDescr = parentBomItem.Descr,
                CompSubItemID = amBomMatl.SubItemID,
                UOM           = amBomMatl.UOM,
                ScrapFactor   = amBomMatl.ScrapFactor.GetValueOrDefault(),
                //BatchSize = amBomMatl.BatchSize.GetValueOrDefault(),
                //BOMQtyReq = amBomMatl.QtyReq.GetValueOrDefault(),
                //BaseQtyReq = amBomMatl.BaseQty.GetValueOrDefault(),
                CompQtyReq  = qtyRequired,
                TotalQtyReq = totalQtyRequired,
                //BaseTotalQtyReq = baseTotalQtyRequired,
                CompUnitCost     = amBomMatl.UnitCost.GetValueOrDefault(),
                CompExtCost      = qtyRequired * amBomMatl.UnitCost.GetValueOrDefault(),
                CompTotalExtCost = 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.CompInventoryID, 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.CompInventoryID,
                                                                                                                                               materialSiteID, row.SubItemID), filter.BOMDate.GetValueOrDefault())
                                  : PrimaryBomIDManager.GetNotArchivedRevisionBomItemByDate(this, new PrimaryBomIDManager(this).GetPrimaryAllLevels(row.CompInventoryID,
                                                                                                                                                    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.ManufBOMID      = levelBomid;
                row.ManufRevisionID = levelRevisionID;
            }

            return(row);
        }