public static IQueryable <PROJECT_Dashboard> SummarizePROJECTDashboard(IQueryable <PROJECT> PROJECTS, Func <IQueryable <PROGRESS> > getLivePROGRESSESFunc, Func <IQueryable <BASELINE> > getLiveBASELINESFunc, Func <IQueryable <RATE> > getRATESFunc, Func <IQueryable <VARIATION> > getApprovedVARIATIONFunc = null)
        {
            IEnumerable <BASELINE>  LiveBASELINES  = getLiveBASELINESFunc().ToArray().AsEnumerable();
            IEnumerable <PROGRESS>  LivePROGRESSES = getLivePROGRESSESFunc().ToArray().AsEnumerable();
            IEnumerable <VARIATION> ApprovedVARIATIONS;

            if (getApprovedVARIATIONFunc != null)
            {
                ApprovedVARIATIONS = getApprovedVARIATIONFunc().ToArray().AsEnumerable();
            }
            else
            {
                ApprovedVARIATIONS = new List <VARIATION>();
            }

            IEnumerable <RATE>       AllRATES                = getRATESFunc();
            IEnumerable <PROJECT>    localPROJECTS           = PROJECTS.Where(x => x.STATUS == ProjectStatus.Active).ToArray().AsEnumerable(); //process only active PROJECTS
            List <PROJECT_Dashboard> returnPROJECT_Dashboard = new List <PROJECT_Dashboard>();

            IBluePrintsEntitiesUnitOfWork bluePrintsUnitOfWork = BluePrintsEntitiesUnitOfWorkSource.GetUnitOfWorkFactory().CreateUnitOfWork();
            IP6EntitiesUnitOfWork         p6UnitOfWork         = P6EntitiesUnitOfWorkSource.GetUnitOfWorkFactory().CreateUnitOfWork();

            foreach (PROJECT localPROJECT in localPROJECTS)
            {
                BASELINE currentPROJECTLiveBASELINE = LiveBASELINES.FirstOrDefault(x => x.GUID_PROJECT == localPROJECT.GUID);
                if (currentPROJECTLiveBASELINE == null)
                {
                    continue;
                }

                PROGRESS currentPROJECTLivePROGRESS = LivePROGRESSES.FirstOrDefault(x => x.GUID_PROJECT == localPROJECT.GUID);
                if (currentPROJECTLivePROGRESS == null)
                {
                    continue;
                }

                IQueryable <PROGRESS_ITEM> LivePROGRESS_ITEMS          = currentPROJECTLivePROGRESS.PROGRESS_ITEM.AsQueryable();
                IQueryable <BASELINE_ITEM> LiveBASELINE_ITEMS          = currentPROJECTLiveBASELINE.BASELINE_ITEM.AsQueryable();
                IQueryable <RATE>          RATESByProject              = AllRATES.Where(x => x.GUID_PROJECT == localPROJECT.GUID).AsQueryable();
                IEnumerable <VARIATION>    ApprovedVARIATIONSByProject = ApprovedVARIATIONS.Where(x => x.GUID_PROJECT == localPROJECT.GUID).AsEnumerable();

                IEnumerable <ReportableObject> PROJECTInfos = PROGRESS_ITEMProjectionQueries.JoinRATESAndPROGRESS_ITEMSOnBASELINE_ITEMS(
                    LiveBASELINE_ITEMS, () => currentPROJECTLivePROGRESS, () => currentPROJECTLiveBASELINE, () => LivePROGRESS_ITEMS, () => RATESByProject).ToArray().AsEnumerable();

                PROJECT_Dashboard currentPROJECT_Dashboard = new PROJECT_Dashboard()
                {
                    GUID = localPROJECT.GUID, PROJECT = localPROJECT, VARIATIONS = ApprovedVARIATIONSByProject
                };
                currentPROJECT_Dashboard.InitializeBuilder(PROJECTInfos, currentPROJECTLivePROGRESS, currentPROJECTLiveBASELINE, bluePrintsUnitOfWork, p6UnitOfWork);
                returnPROJECT_Dashboard.Add(currentPROJECT_Dashboard);
            }

            foreach (PROJECT_Dashboard project in returnPROJECT_Dashboard)
            {
                BuildProjectStats summaryManufacturer = new BuildProjectStats();
                summaryManufacturer.Manufacture(project.SummaryBuilder);
            }

            return(returnPROJECT_Dashboard.AsQueryable());
        }
 public void AssignProperties(PROJECT PROJECT, BASELINE BASELINE, IEnumerable <BASELINE_ITEMProjection> BASELINE_ITEMS)
 {
     objectDataSource1.DataSource = BASELINE_ITEMS;
     title1.Value      = BASELINE.NAME;
     projectName.Value = PROJECT.NAME;
     date1.Value       = DateTime.Now;
 }
        public static IQueryable <BASELINE_ITEMProjection> JoinRATESOnBASELINE_ITEMS(IQueryable <BASELINE_ITEM> BASELINE_ITEMS, Func <BASELINE> getBASELINEFunc, Func <IQueryable <RATE> > getRATES_ByProjectFunc = null, bool isBASELINEQueryProcessed = false)
        {
            BASELINE BASELINE = getBASELINEFunc();
            IQueryable <BASELINE_ITEM> contextBASELINE_ITEMS;

            if (BASELINE == null)
            {
                contextBASELINE_ITEMS = BASELINE_ITEMS.Where(x => x.GUID == Guid.Empty);
            }
            else
            {
                if (isBASELINEQueryProcessed)
                {
                    contextBASELINE_ITEMS = BASELINE_ITEMS;
                }
                else
                {
                    contextBASELINE_ITEMS = BASELINE_ITEMS.Where(x => x.GUID_BASELINE == BASELINE.GUID);
                }
            }


            IQueryable <RATE> RATES = getRATES_ByProjectFunc();

            return(contextBASELINE_ITEMS.ToArray().AsQueryable().Select(x => new BASELINE_ITEMProjection()
            {
                GUID = x.GUID, BASELINE_ITEM = x, RATE = RATES.FirstOrDefault(y => y.GUID_DEPARTMENT == x.GUID_DEPARTMENT && y.GUID_DISCIPLINE == x.GUID_DISCIPLINE)
            }));
        }
        public static IQueryable <VARIATION_ITEMProjection> JoinRATESAndPROGRESS_ITEMSAndVARIATION_ITEMSOnBASELINE_ITEMS(IQueryable <BASELINE_ITEM> BASELINE_ITEMS, Func <PROGRESS> getPROGRESSFunc, Func <BASELINE> getBASELINEFunc, Func <VARIATION> getVARIATIONFunc, Func <IQueryable <PROGRESS_ITEM> > getPROGRESS_ITEMSFunc, Func <IQueryable <VARIATION_ITEM> > getVARIATION_ITEMSFunc, Func <IQueryable <RATE> > getRATESFunc, bool IsLocked)
        {
            BASELINE          BASELINE  = getBASELINEFunc();
            PROGRESS          PROGRESS  = getPROGRESSFunc();
            VARIATION         VARIATION = getVARIATIONFunc();
            IQueryable <RATE> RATES     = getRATESFunc();

            IQueryable <VARIATION_ITEM> LoadVARIATION_ITEMS;

            if (VARIATION == null)
            {
                LoadVARIATION_ITEMS = getVARIATION_ITEMSFunc().Where(x => x.GUID_VARIATION == Guid.Empty).ToArray().AsQueryable();
            }
            else
            {
                LoadVARIATION_ITEMS = getVARIATION_ITEMSFunc().ToArray().AsQueryable();
            }

            IQueryable <PROGRESS_ITEM> LoadPROGRESS_ITEMS;

            if (PROGRESS == null)
            {
                LoadPROGRESS_ITEMS = getPROGRESS_ITEMSFunc().Where(x => x.GUID_PROGRESS == Guid.Empty).ToArray().AsQueryable();
            }
            else
            {
                LoadPROGRESS_ITEMS = getPROGRESS_ITEMSFunc().ToArray().AsQueryable();
            }

            IQueryable <PROGRESS_ITEMProjection> BASELINE_ITEMJoinRATESJoinPROGRESS_ITEMS;

            if (PROGRESS == null || VARIATION == null)
            {
                BASELINE_ITEMJoinRATESJoinPROGRESS_ITEMS = PROGRESS_ITEMProjectionQueries.JoinRATESAndPROGRESS_ITEMSOnBASELINE_ITEMS(BASELINE_ITEMS.Where(x => x.GUID == Guid.Empty), getPROGRESSFunc, getBASELINEFunc, getPROGRESS_ITEMSFunc, getRATESFunc, true);
            }
            else
            {
                if (VARIATION.SUBMITTED != null)
                {
                    BASELINE_ITEMJoinRATESJoinPROGRESS_ITEMS = PROGRESS_ITEMProjectionQueries.JoinRATESAndPROGRESS_ITEMSOnBASELINE_ITEMS(BASELINE_ITEMS.Where(x => x.GUID_VARIATION == VARIATION.GUID && x.GUID_BASELINE != null), getPROGRESSFunc, getBASELINEFunc, getPROGRESS_ITEMSFunc, getRATESFunc, true);
                }
                else
                {
                    BASELINE_ITEMJoinRATESJoinPROGRESS_ITEMS = PROGRESS_ITEMProjectionQueries.JoinRATESAndPROGRESS_ITEMSOnBASELINE_ITEMS(BASELINE_ITEMS.Where(x => x.GUID_BASELINE == BASELINE.GUID || (x.GUID_VARIATION == VARIATION.GUID && x.GUID_BASELINE == null)), getPROGRESSFunc, getBASELINEFunc, getPROGRESS_ITEMSFunc, getRATESFunc, true);
                }
            }

            return(BASELINE_ITEMJoinRATESJoinPROGRESS_ITEMS.ToArray().AsQueryable().Select(x => new VARIATION_ITEMProjection()
            {
                GUID = x.GUID,
                VARIATION_ITEM = LoadVARIATION_ITEMS.Where(y => y.GUID_ORIBASEITEM == x.BASELINE_ITEMJoinRATE.BASELINE_ITEM.GUID_ORIGINAL).FirstOrDefault(),
                BASELINE_ITEMJoinRATE = x.BASELINE_ITEMJoinRATE,
                ISLOCKED = IsLocked
            }));
        }
Esempio n. 5
0
        bool isContinueLoadingAfterBASELINE(IEnumerable <BASELINE> entities)
        {
            if (entities.Count() == 0)
            {
                mainThreadDispatcher.BeginInvoke(new Action(() => MessageBoxService.ShowMessage(string.Format(CommonResources.Notify_View_Removed, "BASELINE"))));
                return(false);
            }

            this.loadBASELINE = entities.First();
            return(true);
        }
Esempio n. 6
0
        protected override void InitializeParameters(object parameter)
        {
            OptionalEntitiesParameter <PROJECT, BASELINE> receiveParameter = (OptionalEntitiesParameter <PROJECT, BASELINE>)parameter;

            this.loadPROJECT  = receiveParameter.GetFirstEntity();
            this.loadBASELINE = receiveParameter.GetSecondEntity();

            if (this.loadPROJECT != null)
            {
                isQueryForLiveStatus = true;
            }
        }
Esempio n. 7
0
        protected override void InitializeParameters(object parameter)
        {
            object[] obj = (object[])parameter;

            if (isFromPROGRESS)
            {
                loadPROGRESS = (PROGRESS)obj[0];
            }
            else
            {
                loadBASELINE = (BASELINE)obj[0];
            }

            mappingType = (BaselineMappingSelectionType)obj[1];
        }
        public static IQueryable <PROGRESS_ITEMProjection> JoinRATESAndPROGRESS_ITEMSOnBASELINE_ITEMS(IQueryable <BASELINE_ITEM> BASELINE_ITEMS, Func <PROGRESS> getPROGRESSFunc, Func <BASELINE> getBASELINEFunc, Func <IQueryable <PROGRESS_ITEM> > getPROGRESS_ITEMSFunc, Func <IQueryable <RATE> > getRATESFunc, bool isBASELINEQueryProcessed = false)
        {
            BASELINE BASELINE = getBASELINEFunc();
            PROGRESS PROGRESS = getPROGRESSFunc();

            IQueryable <RATE> RATES = getRATESFunc();

            IQueryable <PROGRESS_ITEM> LoadPROGRESS_ITEMS;

            if (PROGRESS == null)
            {
                LoadPROGRESS_ITEMS = getPROGRESS_ITEMSFunc().Where(x => x.GUID_PROGRESS == Guid.Empty).ToArray().AsQueryable();
            }
            else
            {
                LoadPROGRESS_ITEMS = getPROGRESS_ITEMSFunc().ToArray().AsQueryable();
            }

            IQueryable <BASELINE_ITEMProjection> BASELINE_ITEMJoinRATES;

            if (PROGRESS == null)
            {
                BASELINE_ITEMJoinRATES = BASELINE_ITEMProjectionQueries.JoinRATESOnBASELINE_ITEMS(BASELINE_ITEMS.Where(x => x.GUID == Guid.Empty), getBASELINEFunc, getRATESFunc, true);
            }
            else
            {
                BASELINE_ITEMJoinRATES = BASELINE_ITEMProjectionQueries.JoinRATESOnBASELINE_ITEMS(BASELINE_ITEMS, getBASELINEFunc, getRATESFunc, isBASELINEQueryProcessed);
            }

            DateTime reportingDate = PROGRESS == null ? new DateTime() : PROGRESS.DATA_DATE;

            return(BASELINE_ITEMJoinRATES.ToArray().AsQueryable().Select(x => new PROGRESS_ITEMProjection()
            {
                GUID = x.GUID, BASELINE_ITEMJoinRATE = x, ReportingDataDate = reportingDate, PROGRESS_ITEMS = LoadPROGRESS_ITEMS.Where(y => y.GUID_ORIBASEITEM == x.BASELINE_ITEM.GUID_ORIGINAL).ToArray().AsEnumerable()
            }));
        }
        public void InitializeBuilder(IEnumerable <ReportableObject> reportableObjects, PROGRESS livePROGRESS, BASELINE liveBASELINE, IBluePrintsEntitiesUnitOfWork bluePrintsUnitOfWork, IP6EntitiesUnitOfWork p6UnitOfWork)
        {
            this.ReportableObjects = reportableObjects;
            this.LiveBASELINE      = liveBASELINE;
            this.LivePROGRESS      = livePROGRESS;

            SummaryBuilder = new PROJECTSummaryBuilder(this, bluePrintsUnitOfWork, p6UnitOfWork);
        }
        /// <summary>
        /// Approves an entity.
        /// Since CollectionViewModelBase is a POCO view model, an the instance of this class will also expose the ApproveCommand property that can be used as a binding source in views.
        /// </summary>
        /// <param name="projectionEntity">An entity to approve.</param>
        public void Approve(VARIATION entity)
        {
            string errorMessage = string.Empty;

            if (entity == null)
            {
                errorMessage = "Nothing within variation to approve";
            }
            else if (loadPROJECT == null)
            {
                errorMessage = "Project doesn't exists";
            }
            else if (loadBASELINE == null)
            {
                errorMessage = "Live baseline doesn't exists";
            }
            else if (loadPROGRESS == null)
            {
                errorMessage = "Live progress doesn't exists";
            }

            if (errorMessage != string.Empty)
            {
                MessageBoxService.ShowMessage(errorMessage);
                return;
            }

            IBluePrintsEntitiesUnitOfWork unitOfWork = bluePrintsUnitOfWorkFactory.CreateUnitOfWork();
            BASELINE LiveBASELINE = loadBASELINE;
            IEnumerable <VARIATION_ITEM> editVARIATION_ITEMS = unitOfWork.VARIATION_ITEMS.Where(x => x.GUID_VARIATION == entity.GUID).ToArray().AsEnumerable();
            IEnumerable <BASELINE_ITEM>  addBASELINE_ITEMS   = unitOfWork.BASELINE_ITEMS.Where(x => x.GUID_VARIATION == entity.GUID && x.GUID_BASELINE == null).ToArray().AsEnumerable();
            IQueryable <BASELINE_ITEM>   editBASELINE_ITEMS  = loaderCollection.GetCollection <BASELINE_ITEM>();
            IEnumerable <PROGRESS_ITEM>  livePROGRESS_ITEMS  = loaderCollection.GetCollection <PROGRESS_ITEM>();

            BASELINE newBASELINE = new BASELINE();

            DataUtils.ShallowCopy(newBASELINE, LiveBASELINE);
            newBASELINE.GUID     = Guid.Empty;
            newBASELINE.REVISION = ((char)(LiveBASELINE.REVISION.Last() + 1)).ToString();
            //not saving new baseline as live yet because editBASELINE_ITEMS still depends on the current live baseline for copying BASELINE_ITEMS
            newBASELINE.STATUS = BaselineStatus.Superseded;

            CollectionViewModel <BASELINE, BASELINE, Guid, IBluePrintsEntitiesUnitOfWork>           BASELINECollectionViewModel      = (CollectionViewModel <BASELINE, BASELINE, Guid, IBluePrintsEntitiesUnitOfWork>)loaderCollection.GetViewModel <BASELINE>();
            CollectionViewModel <BASELINE_ITEM, BASELINE_ITEM, Guid, IBluePrintsEntitiesUnitOfWork> BASELINE_ITEMCollectionViewModel = (CollectionViewModel <BASELINE_ITEM, BASELINE_ITEM, Guid, IBluePrintsEntitiesUnitOfWork>)loaderCollection.GetViewModel <BASELINE_ITEM>();

            BASELINECollectionViewModel.Save(newBASELINE);

            entity.APPROVED         = DateTime.Now;
            entity.GUID_ORIBASELINE = LiveBASELINE.GUID;
            entity.GUID_BASELINE    = newBASELINE.GUID;
            MainViewModel.Save(entity);

            ObservableCollection <BASELINE_ITEM> newBASELINE_ITEMS = new ObservableCollection <BASELINE_ITEM>();

            foreach (BASELINE_ITEM editBASELINE_ITEM in editBASELINE_ITEMS)
            {
                BASELINE_ITEM copyBASELINE_ITEM = new BASELINE_ITEM();
                DataUtils.ShallowCopy(copyBASELINE_ITEM, editBASELINE_ITEM);

                VARIATION_ITEM editVARIATION_ITEM = editVARIATION_ITEMS.FirstOrDefault(x => x.GUID_ORIBASEITEM == editBASELINE_ITEM.GUID_ORIGINAL);
                if (editVARIATION_ITEM != null)
                {
                    if (editVARIATION_ITEM.ACTION == VariationAction.Cancel)
                    {
                        decimal progressItemEARNED_UNITS = livePROGRESS_ITEMS.Where(x => x.GUID_ORIBASEITEM == editBASELINE_ITEM.GUID_ORIGINAL).Sum(y => y.EARNED_UNITS);
                        if (progressItemEARNED_UNITS == 0)
                        {
                            copyBASELINE_ITEM.DC_HOURS = -1 * copyBASELINE_ITEM.ESTIMATED_HOURS;
                        }
                        else
                        {
                            copyBASELINE_ITEM.DC_HOURS = -1 * (copyBASELINE_ITEM.TOTAL_HOURS - progressItemEARNED_UNITS);
                        }
                    }
                    else if (editVARIATION_ITEM.ACTION == VariationAction.Append)
                    {
                        copyBASELINE_ITEM.DC_HOURS += editVARIATION_ITEM.VARIATION_UNITS;
                    }

                    if (editVARIATION_ITEM.ACTION != VariationAction.NoAction)
                    {
                        copyBASELINE_ITEM.GUID_VARIATION = entity.GUID;
                    }
                }

                copyBASELINE_ITEM.GUID          = Guid.Empty;
                copyBASELINE_ITEM.GUID_BASELINE = newBASELINE.GUID;
                newBASELINE_ITEMS.Add(copyBASELINE_ITEM);
            }

            foreach (BASELINE_ITEM addBASELINE_ITEM in addBASELINE_ITEMS)
            {
                BASELINE_ITEM newBASELINE_ITEM = new BASELINE_ITEM();
                DataUtils.ShallowCopy(newBASELINE_ITEM, addBASELINE_ITEM);
                newBASELINE_ITEM.GUID          = Guid.Empty;
                newBASELINE_ITEM.GUID_BASELINE = newBASELINE.GUID;
                newBASELINE_ITEM.INTERNAL_NUM  = BluePrintDataUtils.BASELINEITEM_Generate_InternalNumber(this.loadPROJECT, newBASELINE_ITEM, newBASELINE_ITEMS, addBASELINE_ITEM.AREA, addBASELINE_ITEM.DISCIPLINE, addBASELINE_ITEM.DOCTYPE);
                VARIATION_ITEM editVARIATION_ITEM = editVARIATION_ITEMS.First(x => x.GUID_ORIBASEITEM == newBASELINE_ITEM.GUID_ORIGINAL);
                newBASELINE_ITEM.DC_HOURS       = editVARIATION_ITEM.VARIATION_UNITS;
                newBASELINE_ITEM.GUID_VARIATION = entity.GUID;

                newBASELINE_ITEMS.Add(newBASELINE_ITEM);
            }

            foreach (BASELINE_ITEM newBASELINE_ITEM in newBASELINE_ITEMS)
            {
                BASELINE_ITEMCollectionViewModel.Save(newBASELINE_ITEM);
            }

            LiveBASELINE.STATUS = BaselineStatus.Superseded;
            BASELINECollectionViewModel.Save(LiveBASELINE);
            newBASELINE.STATUS = BaselineStatus.Live;
            BASELINECollectionViewModel.Save(newBASELINE);
        }