// Методы создания главных объектов для финансового Stage и для ObligationUnit (DeliveryUnit и PaymentUnit)'' public crmStageMain CreateStageMain(crmStage stage) { if (stage.StageMain == null) { crmStageMain StageMain = new crmStageMain(this.Session); StageMain.Current = stage; StageMain.ContractDeal = ContractDeal; stage.StageMain = StageMain; } return(stage.StageMain); }
//private crmDealWithStageVersion _Current; //[Aggregated] //[ExpandObjectMembers(ExpandObjectMembers.InDetailView)] //public crmDealWithStageVersion Current { // get { return _Current; } // set { SetPropertyValue<crmDealWithStageVersion>("Current", ref _Current, value); } //} #endregion #region МЕТОДЫ #endregion #region IVersionBusinessLogicSupport public void ApproveVersion(crmDealWithStageVersion scVersion) { crmDealWithStageVersion newcur = null; foreach (crmDealWithStageVersion cont in this.DealVersions) //DealVersions) { if (cont == scVersion) { newcur = cont; } } if (newcur == null) { throw new Exception("Version is not in Version List"); } VersionHelper vHelper; if (scVersion.VersionState == VersionStates.VERSION_NEW) { vHelper = new VersionHelper(this.Session); vHelper.SetVersionStateExt(scVersion, VersionStates.VERSION_CURRENT); crmDealWithStage dealVersionMainObj = (crmDealWithStage)scVersion.MainObject; //scVersion.StageStructure.Stages[0].DeliveryPlan.DeliveryUnits[0].DeliveryItems[0] // Здесь вставить перебор FinanceDeal и прочее с целью добавления в коллекцию StageMains и ObligationUnitMains // В коллекциии scVersion.Stages находятся все этапы из полной их иерархии (т.е. рекурсия не нужна) IList <crmStage> stageList = GetStageList(scVersion); foreach (crmStage stage in stageList) { if (stage.StageType != StageType.FINANCE) { continue; } crmStageMain stageMain = scVersion.CreateStageMain(stage); if (dealVersionMainObj.StageMains.IndexOf(stageMain) == -1) { dealVersionMainObj.StageMains.Add(stageMain); } // Пополнение коллекции ObligationUnitMain (имеются две разновидности: Delivery и Payment) //foreach (crmObligationUnitMain obligationUnitMain in GetFinanceDeliveryList(stage.DeliveryPlan)) { foreach (crmObligationUnitMain obligationUnitMain in scVersion.CreateFinanceDeliveryList(stage.DeliveryPlan)) { if (dealVersionMainObj.ObligationUnitMains.IndexOf(obligationUnitMain) == -1) { dealVersionMainObj.ObligationUnitMains.Add(obligationUnitMain); } } //foreach (crmObligationUnitMain paymentUnitMain in GetFinancePaymentList(stage.PaymentPlan)) { foreach (crmObligationUnitMain paymentUnitMain in scVersion.CreateFinancePaymentList(stage.PaymentPlan)) { if (dealVersionMainObj.ObligationUnitMains.IndexOf(paymentUnitMain) == -1) { dealVersionMainObj.ObligationUnitMains.Add(paymentUnitMain); } } } // Отрабатывание регистров RegisterClear(scVersion); RegisterOperations(scVersion); } else if (scVersion.VersionState == VersionStates.VERSION_PROJECT) { foreach (crmDealWithStageVersion cont in this.DealVersions) //DealVersions) { { if (cont == scVersion) { continue; } if (cont.VersionState == VersionStates.VERSION_CURRENT) { vHelper = new VersionHelper(this.Session); vHelper.SetVersionStateExt(cont, VersionStates.VERSION_OLD); } else if (cont.VersionState == VersionStates.VERSION_PROJECT) { vHelper = new VersionHelper(this.Session); vHelper.SetVersionStateExt(cont, VersionStates.VERSION_DECLINE); } } vHelper = new VersionHelper(this.Session); vHelper.SetVersionStateExt(scVersion, VersionStates.VERSION_CURRENT); this.Current = scVersion; crmDealWithStage dealVersionMainObj = (crmDealWithStage)scVersion.MainObject; // -- Когда происходит Утверждение не новой версии, то старые этапы нельзя удалять, а можно только закрывать foreach (crmStageMain stageMaim in dealVersionMainObj.StageMains) { stageMaim.Closed = true; if (stageMaim.DateClosed == null || stageMaim.DateClosed == DateTime.MinValue) { stageMaim.DateClosed = System.DateTime.Now; } } foreach (crmObligationUnitMain obligationUnitMain in dealVersionMainObj.ObligationUnitMains) { obligationUnitMain.Closed = true; if (obligationUnitMain.DateClosed == null || obligationUnitMain.DateClosed == DateTime.MinValue) { obligationUnitMain.DateClosed = System.DateTime.Now; } } // -- // Здесь вставить перебор FinanceDeal и прочее с целью добавления в коллекцию StageMains и ObligationUnitMains // В коллекции scVersion.Stages находятся все этапы из полной их иерархии (т.е. рекурсия не нужна) foreach (crmStage stage in scVersion.Stages) { if (stage.StageType != StageType.FINANCE) { continue; } // SHU 2011-11-01 Создаём накрывающий объект для данного этапа с типом Finance if (stage.StageMain == null) { stage.StageMain = new crmStageMain(this.Session); stage.StageMain.Current = stage; } // Пополнение коллекции StageMains if (dealVersionMainObj.StageMains.IndexOf(stage.StageMain) == -1) { dealVersionMainObj.StageMains.Add(stage.StageMain); } // Пополнение коллекции ObligationUnitMain (имеются две разновидности: Delivery и Payment) foreach (crmObligationUnitMain obligationUnitMain in GetFinanceDeliveryList(stage.DeliveryPlan)) { if (dealVersionMainObj.ObligationUnitMains.IndexOf(obligationUnitMain) == -1) { dealVersionMainObj.ObligationUnitMains.Add(obligationUnitMain); } } foreach (crmObligationUnitMain paymentUnitMain in GetFinancePaymentList(stage.PaymentPlan)) { if (dealVersionMainObj.ObligationUnitMains.IndexOf(paymentUnitMain) == -1) { dealVersionMainObj.ObligationUnitMains.Add(paymentUnitMain); } } } // Отрабатывание регистров RegisterClear(scVersion); RegisterOperations(scVersion); } }