/// <summary>Загружает лимиты договора</summary>
 public bool Load()
 {
     try
       {
     using (var PFL = new PerfomanceLogger(Contract.SessionLog, "ContractLimits.Load"))
     {
       if (Contract.LimitsCursor != null)
       {
     var Data = new QueryResult(Contract.LimitsCursor.GetDataReader());
     this.Clear();
     // загружаем все лимиты (online, offline и комбинированные)
     /*QueryResult Data = OraQuery.Execute(Connection, "select cl.ID, cl.Limit, cl.Duration, cl.PurseID, p.Name as PurseName, p.Type as PurseType from ContractLimits cl, Purses p where cl.PurseID = p.ID and cl.ContractID = :ContractID order by PurseType, PurseID, Duration",
       new string[] { "ContractID" }, new object[] { Contract.ID });*/
     foreach (DataRow row in Data.Rows)
       Add(new LimitInfo(this, row));
       }
     }
       }
       catch (Exception e)
       {
     ErrorMessage.Add("Ошибка при получении лимитов карты\n{0}", e.Message);
       }
       return ErrorMessage.IsEmpty;
 }
        public bool Load()
        {
            PerfomanceLogger PFL = new PerfomanceLogger(SessionLog, "Contract.Load");
              if (IsValid)
              {
            /*QueryResult Data = OraQuery.Execute(Connection,
              @"select ClientID, ContractNumber, Name, ContractComment, DateStart, DateFinish, Type, State, CurrencyID, OwnerID,
               opsOnlineRestrictions.CheckContract(:ContractID, :TerminalID, :ServicePointID, :RegionID, :NetworkID, :NetworkOwnerID, Type, ClientID, OwnerID) ContractRestriction,
               opsOnlineRestrictions.CheckContractOwner(OwnerID, :TerminalID, :ServicePointID, :RegionID, :NetworkID, :NetworkOwnerID, :ContractID, Type, ClientID) ContractOwnerRestriction,
               opsOnlineRestrictions.CheckNetworkOwner(:NetworkOwnerID, :TerminalID, :ServicePointID, :RegionID, :NetworkID, :ContractID, Type, ClientID, OwnerID) NetworkOwnerRestriction,
               (select count(1) from ContractLimits z where z.ContractID = c.id) LimitsCount
             * --,
              -- (select count(1) from ContractAccounts z where z.ContractID = c.id) AccountsCount,
             --  (select count(1) from OwnerAccounts z where z.OwnerID = c.OwnerID) OwnerAccountsCount
              from Contracts c where c.id = :ContractID",
              new string[] { "ContractID", "TerminalID", "ServicePointID", "RegionID", "NetworkID", "NetworkOwnerID" },
              new object[] { ID, Terminal.ID, Terminal.ServicePoint.ID, Terminal.ServicePoint.Region.ID, Terminal.ServicePoint.Network.ID, Terminal.ServicePoint.Network.GlobalOwner.ID }, 1);*/

            if (DataObject != null)
            {
              Number = Cvt.ToString(DataObject["ContractNumber"]);
              /*Name = Cvt.ToString(Data[0, "Name"]);
              Comment = Cvt.ToString(Data[0, "ContractComment"]);*/
              DateStart = Cvt.ToDateTime(DataObject["DateStart"], DateTime.MinValue);
              DateFinish = Cvt.ToDateTime(DataObject["DateFinish"], DateTime.MinValue);
              Type = (ContractTypes)Cvt.ToByte(DataObject["Type"]);
              State = (ContractStates)Cvt.ToByte(DataObject["State"]);
              Restriction = (Restrictions)Cvt.ToByte(DataObject["ContractRestriction"]);
              ContractOwnerRestriction = (Restrictions)Cvt.ToByte(DataObject["ContractOwnerRestriction"]);
              NetworkOwnerRestriction = (Restrictions)Cvt.ToByte(DataObject["NetworkOwnerRestriction"]);
              CurrencyID = Cvt.ToUInt32(DataObject["CurrencyID"]);
              OwnerID = Cvt.ToUInt32(DataObject["OwnerID"]);
              HasTariffs = Cvt.ToInt32(DataObject["TariffsCount"]) > 0;
              HasLimits = Cvt.ToInt32(DataObject["LimitsCount"]) > 0;
              HasAccounts = Cvt.ToInt32(DataObject["AccountsCount"]) > 0;
              HasOwnerAccounts = Cvt.ToInt32(DataObject["OwnerAccountsCount"]) > 0;

              // получаем данные по клиенту, привязанному к договору
              ClientID = Cvt.ToUInt64(DataObject["ClientID"]); // контракт ВСЕГДА привязан к клиенту. Если это не так - генерируем ошибку
              /*switch (Type)
              {
            case ContractTypes.Loyalty:
              LoyaltyClient = new LoyaltyClientInfo(this);
              LoyaltyClient.ID = ClientID;
              LoyaltyClient.Load(); // получаем из БД информацию по клиенту лояльности
              break;
            case ContractTypes.Corporate:
              CorporateClient = new CorporateClientInfo(this);
              CorporateClient.ID = ClientID;
              CorporateClient.Load(); // получаем из БД информацию по корпоративному клиенту
              break;
            default:
              ErrorMessage.Add("Неизвестный тип '{0}' клиентского договора ID='{1}'", Type, ID);
              break;
              }*/

              if (ErrorMessage.IsEmpty)
              {
            /*Accounts = new ContractAccountsInfo(this);  счета загружаются по требованию
            Accounts.Load(); // загружаем счета договора*/

            /*TariffPeriods = new ContractTariffPeriodsInfo(this); активные периоды тарифов загружаются по требованию
            TariffPeriods.Load(); // загружаем действующие периоды тарифов            */

            //OwnerAccounts.Load(); // загружаем счета владельца договора
              }

              /*if (ErrorMessage.IsEmpty && Accounts.Count == 0) /*наличие счетов не проверяем...
            ErrorMessage.Add("Отсутствуют активные счета у договора {0}-{1}", Number, Name);*/
              // PA:07.08.2014 счета договора не проверяем после ввода ICardScript.DataScope

              if (ErrorMessage.IsEmpty && !Card.Transaction.Script.AvoidChecks && Card.Transaction.Source != TransactionSources.Offline)
              {
            if (ErrorMessage.IsEmpty && ContractOwnerRestriction == Restrictions.Forbidden)
              ErrorMessage.Add("Владелец договора\nзапретил обслуживание на\nданной точке продаж.");
            if (ErrorMessage.IsEmpty && NetworkOwnerRestriction == Restrictions.Forbidden)
              ErrorMessage.Add("Владелец сети ТО\nзапретил обслуживание\nдоговора на данной\nточке продаж.");

            if (ErrorMessage.IsEmpty && State != ContractStates.Allowed)
              ErrorMessage.Add("Обслуживание договора\nзапрещено");

            if (ErrorMessage.IsEmpty && Card.Transaction.TerminalDateTime < DateStart)
              ErrorMessage.Add("Договор не начал\nдействовать. Дата начала\nдействия договора:\n{0}\nТекущая дата:\n{1}", DateStart.ToString("dd.MM.yyyy HH:mm:ss"), Card.Transaction.TerminalDateTime.ToString("dd.MM.yyyy HH:mm:ss"));

            if (ErrorMessage.IsEmpty && Card.Transaction.TerminalDateTime > DateFinish)
              ErrorMessage.Add("Срок действия договора\nистёк. Дата окончания\nдействия договора:\n{0}.\nТекущая дата:\n{1}", DateFinish.ToString("dd.MM.yyyy HH:mm:ss"), Card.Transaction.TerminalDateTime.ToString("dd.MM.yyyy HH:mm:ss"));
              }
            }
            else
              ErrorMessage.Add("Договор ID = {0} не найден");
              }
              PFL.Stop();
              return ErrorMessage.IsEmpty;
        }