示例#1
0
        /// <summary>
        /// Получение очередного абсолютного номера записи в базе
        /// </summary>
        public int getISN()
        {
            // Вариант с XPCollection

            Session ssn = this.Session;   // new Session(this.Session.Dictionary);

            XPCollection <RegistrationLogISNCounter> xpCounterCol = new XPCollection <RegistrationLogISNCounter>(ssn);

            if (!xpCounterCol.IsLoaded)
            {
                xpCounterCol.Load();
            }


            if (xpCounterCol.Count == 0)
            {
                // SHU 2011-11-03 ПЕРЕДЕЛАТЬ НА Session!
                using (UnitOfWork uow = new UnitOfWork(this.Session.DataLayer)) {
                    RegistrationLogISNCounter newCounter = new RegistrationLogISNCounter(uow);
                    newCounter.Save();
                    uow.CommitChanges();
                    xpCounterCol.Reload();
                    if (!xpCounterCol.IsLoaded)
                    {
                        xpCounterCol.Load();
                    }
                }
            }

            // Номер ISN
            return(xpCounterCol[0].ReserveNumber());
        }
示例#2
0
 private void UpdateTrwDeals()
 {
     //
     using (IObjectSpace os = ObjectSpace.CreateNestedObjectSpace()) {
         IList <crmContractDeal> deals = os.GetObjects <crmContractDeal>();
         foreach (crmContractDeal deal in deals)
         {
             if (deal.Contract == null)
             {
                 throw new InvalidDataException("Deal.Contract is Null");
             }
             if (deal.ContractKind == ContractKind.CONTRACT && deal.Contract.ContractDocument != deal.ContractDocument)
             {
                 throw new InvalidDataException("Invalid Contract Document");
             }
         }
         //
         IList <crmContractRegistrationLog> log_recs = os.GetObjects <crmContractRegistrationLog>();
         foreach (crmContractRegistrationLog log_rec in log_recs)
         {
             if (log_rec.ContractDeal.Contract == null)
             {
                 log_rec.ContractDeal.State = DealStates.DEAL_DELETED;
                 continue;
             }
             if (log_rec.ContractDeal.ContractKind == ContractKind.CONTRACT)
             {
                 if (log_rec.ContractDeal.Contract.IntNumber == 0)
                 {
                     log_rec.ContractDeal.Contract.IntNumber = log_rec.ISN;
                 }
                 else
                 {
                     throw new InvalidDataException("Contract already has int number");
                 }
             }
             else
             {
             }
         }
         //
         RegistrationLogISNCounter int_counter = os.GetObjects <RegistrationLogISNCounter>().FirstOrDefault();
         //
         IList <crmContract> contracts = os.GetObjects <crmContract>();
         foreach (crmContract contract in contracts)
         {
             if (contract.IntNumber == 0)
             {
                 int_counter.ISN++;
                 contract.IntNumber = int_counter.ISN;
             }
             crmContractDeal contract_deal = null;
             Int32           FailNumber    = 1;
             foreach (crmContractDeal deal in contract.ContractDeals)
             {
                 if (deal.State == DealStates.DEAL_DELETED)
                 {
                     continue;
                 }
                 if (deal.ContractKind == ContractKind.CONTRACT)
                 {
                     contract.IntCurDocNumber++;
                     deal.IntNumber = contract.IntCurDocNumber;
                     if (contract_deal != null)
                     {
                         contract_deal.FailNumber = FailNumber++;
                     }
                     //                                throw new InvalidDataException("Dublicate Contract Deal");
                     contract_deal = deal;
                 }
             }
             if (contract_deal == null)
             {
                 contract.FailNumber = 1;
             }
             foreach (crmContractDeal deal in contract.ContractDeals)
             {
                 if (deal.State == DealStates.DEAL_DELETED || deal.FailNumber != 0)
                 {
                     continue;
                 }
                 if (deal.ContractKind == ContractKind.ADDENDUM)
                 {
                     contract.IntCurDocNumber++;
                     deal.IntNumber = contract.IntCurDocNumber;
                     Int32           cur_fail_number = 1;
                     crmContractDeal cur_deal        = deal;
                     foreach (crmContractDeal sub_deal in contract.ContractDeals)
                     {
                         if (sub_deal.ContractKind != ContractKind.ADDENDUM || cur_deal == sub_deal || sub_deal.FailNumber != 0)
                         {
                             continue;
                         }
                         if (cur_deal.ContractDocument.Number == sub_deal.ContractDocument.Number)
                         {
                             cur_deal.FailNumber = cur_fail_number++;
                             cur_deal            = sub_deal;
                         }
                     }
                 }
             }
             //                        throw new InvalidDataException("Unknow Contract Deal");
             foreach (crmContractDeal deal in contract.ContractDeals)
             {
                 if (deal.State == DealStates.DEAL_DELETED || deal.FailNumber != 0)
                 {
                     continue;
                 }
                 deal.UpdateTrwNumbers();
             }
         }
         os.CommitChanges();
     }
 }