شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » OntSipInfo

Public general use code classes and xml files that we've compiled and used over the years:

Huawei's EMS ONT SIP INFO support class of Optical Fiber Network (OFN) data model.

   1:  using Microsoft.EntityFrameworkCore;
   2:  using System;
   3:  using System.Collections.Generic;
   4:  using System.Data;
   5:  using System.Linq;
   6:  using System.Text;
   7:   
   8:  namespace Ia.Ngn.Cl.Model.Data.Huawei
   9:  {
  10:      ////////////////////////////////////////////////////////////////////////////
  11:   
  12:      /// <summary publish="true">
  13:      /// Huawei's EMS ONT SIP INFO support class of Optical Fiber Network (OFN) data model.
  14:      /// </summary>
  15:      /// 
  16:      /// <remarks> 
  17:      /// Copyright © 2016-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  18:      ///
  19:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  20:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  21:      ///
  22:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  23:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  24:      /// 
  25:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  26:      /// 
  27:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  28:      /// </remarks> 
  29:      public class OntSipInfo
  30:      {
  31:          /// <summary/>
  32:          public OntSipInfo() { }
  33:   
  34:          ////////////////////////////////////////////////////////////////////////////
  35:   
  36:          /// <summary>
  37:          /// Update a single EmsOntSipInfo item
  38:          /// </summary>
  39:          public static bool Update(Ia.Ngn.Cl.Model.Business.Huawei.Ems.Response response, out string updatedService, out Ia.Cl.Model.Result result)
  40:          {
  41:              bool isUpdated;
  42:              int queryFn, querySn, queryPn, queryOntId, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount, tableRowIndex, tel;
  43:              string id, ontId, queryCommand, queryDev, sipUserName, sipName;
  44:              DataColumnCollection columns;
  45:              DataRow columnDataRow;
  46:              Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Pon pon;
  47:              Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo ontSipInfo, newOntSipInfo;
  48:              Ia.Ngn.Cl.Model.Huawei.EmsOnt emsOnt;
  49:              List<string> itemIdList;
  50:              List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> ontSipInfoList;
  51:   
  52:              isUpdated = false;
  53:              updatedService = string.Empty;
  54:              tableRowIndex = 0;
  55:              readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
  56:              result = new Ia.Cl.Model.Result();
  57:   
  58:              if (response.CompletionCode == "COMPLD" || response.CompletionCode == "DENY")
  59:              {
  60:                  queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
  61:   
  62:                  // ADD-VOIPPSTNUSER::DEV=MDU-JBA-943-002,FN=0,SN=3,PN=10:{ctag}::MGID=0,TID=1,DN=96524602285;
  63:                  queryDev = Ia.Cl.Model.Default.Match(queryCommand, @"DEV=(.+?),");
  64:                  queryFn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"FN=(\d+)"));
  65:                  querySn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"SN=(\d+)"));
  66:                  queryPn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"PN=(\d+)"));
  67:                  queryOntId = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"ONTID=(\d+)"));
  68:   
  69:                  pon = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.PonByOltEmsNameAndSnAndPnAndOptionallyOntId(queryDev, querySn, queryPn, queryOntId);
  70:   
  71:                  if (pon != null)
  72:                  {
  73:                      ontId = Ia.Ngn.Cl.Model.Business.Huawei.Ont.OntId(pon.Id, queryOntId);
  74:   
  75:                      using (var db = new Ia.Ngn.Cl.Model.Ngn())
  76:                      {
  77:                          emsOnt = (from eo in db.EmsOnts where eo.Id == ontId select eo).SingleOrDefault();
  78:   
  79:                          if (emsOnt != null)
  80:                          {
  81:                              if (response.CompletionCode == "COMPLD")
  82:                              {
  83:                                  ontSipInfoList = (from eo in db.EmsOntSipInfoes where eo.EmsOnt.Id == emsOnt.Id select eo).ToList();
  84:   
  85:                                  existingItemCount = ontSipInfoList.Count;
  86:   
  87:                                  if (response.QueryDataTable != null)
  88:                                  {
  89:                                      if (response.QueryDataTable.Rows.Count >= 1)
  90:                                      {
  91:                                          itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
  92:   
  93:                                          columns = response.QueryDataTable.Columns;
  94:                                          readItemCount = response.QueryDataTable.Rows.Count;
  95:   
  96:                                          columnDataRow = response.QueryDataTable.Rows[0];
  97:   
  98:                                          foreach (DataRow dataRow in response.QueryDataTable.Rows)
  99:                                          {
 100:                                              tableRowIndex++;
 101:   
 102:                                              sipUserName = columns.Contains("SIPUSERNAME") ? dataRow[columns.IndexOf("SIPUSERNAME")].ToString() : string.Empty;
 103:                                              sipName = columns.Contains("SIPNAME") ? dataRow[columns.IndexOf("SIPNAME")].ToString() : string.Empty;
 104:   
 105:                                              // we will check that the records is for a real number, otherwise we will not send it to the database
 106:                                              if ((Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToImpi(sipName) || Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToPridUser(sipName)) && Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToImpuAid(sipUserName))
 107:                                              {
 108:                                                  tel = tableRowIndex;
 109:   
 110:                                                  id = Ia.Ngn.Cl.Model.Business.Huawei.OntSipInfo.OntSipInfoId(ontId, tel);
 111:   
 112:                                                  ontSipInfo = (from eo in ontSipInfoList where eo.Id == id select eo).SingleOrDefault();
 113:   
 114:                                                  newOntSipInfo = new Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo()
 115:                                                  {
 116:                                                      Id = id,
 117:                                                      SIPUSERNAME = sipUserName,
 118:                                                      SIPUSERPWD = columns.Contains("SIPUSERPWD") ? dataRow[columns.IndexOf("SIPUSERPWD")].ToString() : string.Empty,
 119:                                                      SIPNAME = sipName,
 120:                                                      TEL = tel,
 121:                                                      EmsOnt = (from eo in db.EmsOnts where eo.Id == ontId select eo).SingleOrDefault()
 122:                                                  };
 123:   
 124:                                                  if (ontSipInfo == null)
 125:                                                  {
 126:                                                      newOntSipInfo.Created = newOntSipInfo.Updated = DateTime.UtcNow.AddHours(3);
 127:   
 128:                                                      db.EmsOntSipInfoes.Add(newOntSipInfo);
 129:   
 130:                                                      insertedItemCount++;
 131:                                                  }
 132:                                                  else // update
 133:                                                  {
 134:                                                      // below: copy values from newOntSipInfo to ontSipInfo
 135:   
 136:                                                      if (ontSipInfo.Update(newOntSipInfo))
 137:                                                      {
 138:                                                          db.EmsOntSipInfoes.Attach(ontSipInfo);
 139:                                                          db.Entry(ontSipInfo).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 140:   
 141:                                                          updatedItemCount++;
 142:                                                      }
 143:                                                  }
 144:   
 145:                                                  itemIdList.Add(id); // keep at the end
 146:   
 147:                                                  updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(sipUserName);
 148:                                              }
 149:                                          }
 150:   
 151:                                          // below: this function will remove values that were not present in the reading
 152:                                          if (ontSipInfoList.Count > 0)
 153:                                          {
 154:                                              foreach (Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo o in ontSipInfoList)
 155:                                              {
 156:                                                  if (!itemIdList.Contains(o.Id))
 157:                                                  {
 158:                                                      ontSipInfo = (from osi in db.EmsOntSipInfoes where osi.Id == o.Id select osi).SingleOrDefault();
 159:   
 160:                                                      db.EmsOntSipInfoes.Remove(ontSipInfo);
 161:   
 162:                                                      deletedItemCount++;
 163:   
 164:                                                      updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(ontSipInfo.SIPUSERNAME);
 165:                                                  }
 166:                                              }
 167:                                          }
 168:                                      }
 169:                                      else //if (dataTable.Rows.Count == 0)
 170:                                      {
 171:                                          if (ontSipInfoList.Count > 0)
 172:                                          {
 173:                                              foreach (Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo o in ontSipInfoList)
 174:                                              {
 175:                                                  ontSipInfo = (from osi in db.EmsOntSipInfoes where osi.Id == o.Id select osi).SingleOrDefault();
 176:   
 177:                                                  db.EmsOntSipInfoes.Remove(ontSipInfo);
 178:   
 179:                                                  deletedItemCount++;
 180:   
 181:                                                  updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(ontSipInfo.SIPUSERNAME);
 182:                                              }
 183:                                          }
 184:                                      }
 185:   
 186:                                      db.SaveChanges();
 187:                                  }
 188:                                  else
 189:                                  {
 190:                                      if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.OntIsOffline || response.ResultCode == Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.SystemIsBusy2)
 191:                                      {
 192:                                          var emsOntResultCodeIsUpdated = Ia.Ngn.Cl.Model.Data.Huawei.Ont.UpdateResultCode(emsOnt, response.ResultCode);
 193:   
 194:                                          result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ") EmsOnt.ResultCode updated?: " + emsOntResultCodeIsUpdated.ToString().ToLower());
 195:                                      }
 196:                                      else
 197:                                      {
 198:                                          result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
 199:                                      }
 200:                                  }
 201:                              }
 202:                              else if (response.CompletionCode == "DENY")
 203:                              {
 204:                                  if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
 205:                                  {
 206:                                      var emsOntResultCodeIsUpdated = Ia.Ngn.Cl.Model.Data.Huawei.Ont.UpdateResultCode(emsOnt, response.ResultCode);
 207:   
 208:                                      result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ") EmsOnt.ResultCode updated?: " + emsOntResultCodeIsUpdated.ToString().ToLower());
 209:                                  }
 210:                                  else
 211:                                  {
 212:                                      result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): QueryDataTable is null, (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
 213:                                  }
 214:                              }
 215:                          }
 216:                          else
 217:                          {
 218:                              result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): EmsOnt is null for ontId: " + ontId);
 219:                          }
 220:                      }
 221:   
 222:                      if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
 223:                      else isUpdated = false;
 224:   
 225:                      result.AddSuccess("LST-ONTSIPINFO (" + response.Ctag + "): " + response.CompletionCode + ", " + response.ResultCode.ToString() + " (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
 226:                  }
 227:                  else
 228:                  {
 229:                      result.AddError("LST-ONTSIPINFO (" + response.Ctag + "): NDD PON is null");
 230:                  }
 231:              }
 232:              else
 233:              {
 234:                  result.AddWarning("LST-ONTSIPINFO (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
 235:              }
 236:   
 237:              return isUpdated;
 238:          }
 239:   
 240:          ////////////////////////////////////////////////////////////////////////////
 241:   
 242:          /// <summary>
 243:          ///
 244:          /// </summary>
 245:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> List()
 246:          {
 247:              List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> list;
 248:   
 249:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 250:              {
 251:                  list = (from eosi in db.EmsOntSipInfoes select eosi).ToList();
 252:              }
 253:   
 254:              return list;
 255:          }
 256:   
 257:          ////////////////////////////////////////////////////////////////////////////
 258:   
 259:          /// <summary>
 260:          ///
 261:          /// </summary>
 262:          public static List<string> ServiceList()
 263:          {
 264:              List<string> list;
 265:   
 266:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 267:              {
 268:                  var list0 = (from eosi in db.EmsOntSipInfoes select eosi.SIPUSERNAME).AsNoTracking().ToList();
 269:   
 270:                  list = (from l in list0 select Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l)).Distinct().ToList();
 271:              }
 272:   
 273:              return list;
 274:          }
 275:   
 276:          ////////////////////////////////////////////////////////////////////////////
 277:   
 278:          /// <summary>
 279:          ///
 280:          /// </summary>
 281:          public static List<string> DuplicateSipUserNameServiceList()
 282:          {
 283:              List<string> list;
 284:   
 285:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 286:              {
 287:                  var list0 = (from eosi1 in db.EmsOntSipInfoes
 288:                               join eosi2 in db.EmsOntSipInfoes on eosi1.SIPUSERNAME equals eosi2.SIPUSERNAME
 289:                               where eosi1.Id != eosi2.Id
 290:                               select new { Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(eosi1.SIPUSERNAME) }).Distinct().ToList();
 291:   
 292:                  list = (from l in list0 select l.Service).ToList();
 293:              }
 294:   
 295:              return list;
 296:          }
 297:   
 298:          ////////////////////////////////////////////////////////////////////////////
 299:   
 300:          /// <summary>
 301:          ///
 302:          /// </summary>
 303:          public static List<string> ServiceIdWithinSipOltList()
 304:          {
 305:              int serviceType;
 306:              string service, serviceId;
 307:              List<int> sipOltIdList;
 308:              List<string> list, serviceIdList;
 309:   
 310:              serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 311:              sipOltIdList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SipOltIdList;
 312:   
 313:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 314:              {
 315:                  list = (from o in db.EmsOntSipInfoes
 316:                          where o.EmsOnt.Access != null && sipOltIdList.Contains(o.EmsOnt.Access.Olt)
 317:                          select o.SIPUSERNAME).AsNoTracking().ToList();
 318:              }
 319:   
 320:              if (list != null && list.Count > 0)
 321:              {
 322:                  serviceIdList = new List<string>(list.Count);
 323:   
 324:                  foreach (string s in list)
 325:                  {
 326:                      service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
 327:   
 328:                      serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
 329:   
 330:                      serviceIdList.Add(serviceId);
 331:                  }
 332:              }
 333:              else
 334:              {
 335:                  serviceIdList = new List<string>();
 336:              }
 337:   
 338:              return serviceIdList;
 339:          }
 340:   
 341:          ////////////////////////////////////////////////////////////////////////////
 342:   
 343:          /// <summary>
 344:          ///
 345:          /// </summary>
 346:          public static List<string> ServiceWithinEmsOntSipInfoWhereEmsOntResultCodeOntIsOfflineOrDeviceOfflineErrorList()
 347:          {
 348:              string service;
 349:              List<string> list, serviceList;
 350:   
 351:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 352:              {
 353:                  list = (from o in db.EmsOntSipInfoes
 354:                          where o.EmsOnt.Access != null && (o.EmsOnt.ResultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.OntIsOffline || o.EmsOnt.ResultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
 355:                          select o.SIPUSERNAME).AsNoTracking().ToList();
 356:              }
 357:   
 358:              if (list != null && list.Count > 0)
 359:              {
 360:                  serviceList = new List<string>(list.Count);
 361:   
 362:                  foreach (var s in list)
 363:                  {
 364:                      service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
 365:   
 366:                      serviceList.Add(service);
 367:                  }
 368:              }
 369:              else
 370:              {
 371:                  serviceList = new List<string>();
 372:              }
 373:   
 374:              return serviceList;
 375:          }
 376:   
 377:          ////////////////////////////////////////////////////////////////////////////
 378:   
 379:          /// <summary>
 380:          ///
 381:          /// </summary>
 382:          public static List<string> AccessNameWithinEmsOntSipInfoWhereEmsOntResultCodeOntIsOfflineOrDeviceOfflineErrorList()
 383:          {
 384:              string accessName;
 385:              List<string> list, accessNameList;
 386:   
 387:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 388:              {
 389:                  list = (from o in db.EmsOntSipInfoes
 390:                          where o.EmsOnt.Access != null && (o.EmsOnt.ResultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.OntIsOffline || o.EmsOnt.ResultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
 391:                          select o.EmsOnt.Access.Id).AsNoTracking().ToList();
 392:              }
 393:   
 394:              if (list != null && list.Count > 0)
 395:              {
 396:                  accessNameList = new List<string>(list.Count);
 397:   
 398:                  var ontAccessIdToOntAccessNameDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntAccessNameDictionary;
 399:   
 400:                  foreach (var accessId in list)
 401:                  {
 402:                      if (ontAccessIdToOntAccessNameDictionary.ContainsKey(accessId))
 403:                      {
 404:                          accessName = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntAccessNameDictionary[accessId];
 405:   
 406:                          if (!accessNameList.Contains(accessName))
 407:                          {
 408:                              accessNameList.Add(accessName);
 409:                          }
 410:                      }
 411:                  }
 412:              }
 413:              else
 414:              {
 415:                  accessNameList = new List<string>();
 416:              }
 417:   
 418:              return accessNameList;
 419:          }
 420:   
 421:          ////////////////////////////////////////////////////////////////////////////
 422:   
 423:          /// <summary>
 424:          /// List of service number ids within EmsOntSipInfos within a SIP allowed to be provisioned or migrated OLT
 425:          /// </summary>
 426:          public static List<string> ServiceIdWithinAllowedSipOltToBeProvisionedOrMigratedList()
 427:          {
 428:              int serviceType;
 429:              string service, serviceId;
 430:              List<int> sipOltIdList;
 431:              List<string> list, serviceIdList;
 432:   
 433:              serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 434:              sipOltIdList = Ia.Ngn.Cl.Model.Data.Service.AllowedToBeProvisionedSipOltIdList.Union(Ia.Ngn.Cl.Model.Data.Service.AllowedToBeMigratedSipOltIdList).ToList();
 435:   
 436:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 437:              {
 438:                  list = (from o in db.EmsOntSipInfoes where o.EmsOnt.Access != null && sipOltIdList.Contains(o.EmsOnt.Access.Olt) select o.SIPUSERNAME).ToList();
 439:              }
 440:   
 441:              if (list != null && list.Count > 0)
 442:              {
 443:                  serviceIdList = new List<string>(list.Count);
 444:   
 445:                  foreach (string s in list)
 446:                  {
 447:                      service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
 448:   
 449:                      serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
 450:   
 451:                      serviceIdList.Add(serviceId);
 452:                  }
 453:              }
 454:              else
 455:              {
 456:                  serviceIdList = new List<string>();
 457:              }
 458:   
 459:              return serviceIdList;
 460:          }
 461:   
 462:          ////////////////////////////////////////////////////////////////////////////
 463:   
 464:          /// <summary>
 465:          ///
 466:          /// </summary>
 467:          public static List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated> ServiceOntWithinAllowedSipOltToBeProvisionedOrMigratedList()
 468:          {
 469:              int serviceType;
 470:              string service, serviceId;
 471:              List<int> sipOltIdList;
 472:              List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated> tempSipUserNameList, serviceOntList;
 473:   
 474:              serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 475:              sipOltIdList = Ia.Ngn.Cl.Model.Data.Service.AllowedToBeProvisionedSipOltIdList.Union(Ia.Ngn.Cl.Model.Data.Service.AllowedToBeMigratedSipOltIdList).ToList();
 476:   
 477:              var ontAccessIdToOntForOltIdListDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntForOltIdListDictionary(sipOltIdList);
 478:   
 479:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 480:              {
 481:                  tempSipUserNameList = (from eosi in db.EmsOntSipInfoes
 482:                                         where eosi.EmsOnt.Access != null && sipOltIdList.Contains(eosi.EmsOnt.Access.Olt)
 483:                                         //                        select o.SIPUSERNAME).ToList();
 484:                                         select new Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated { Service = eosi.SIPUSERNAME, AccessId = eosi.EmsOnt.Access.Id, CreatedDateTime = eosi.Created }).AsNoTracking().ToList();
 485:              }
 486:   
 487:              if (tempSipUserNameList != null && tempSipUserNameList.Count > 0)
 488:              {
 489:                  serviceOntList = new List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated>(tempSipUserNameList.Count);
 490:   
 491:                  foreach (var tsun in tempSipUserNameList)
 492:                  {
 493:                      service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(tsun.Service); // so.Service here is o.SIPUSERNAME
 494:   
 495:                      serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
 496:   
 497:                      serviceOntList.Add(new Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated
 498:                      {
 499:                          ServiceId = serviceId,
 500:                          Service = service,
 501:                          AccessId = tsun.AccessId,
 502:                          Ont = ontAccessIdToOntForOltIdListDictionary.ContainsKey(tsun.AccessId) ? ontAccessIdToOntForOltIdListDictionary[tsun.AccessId] : null,
 503:                          CreatedDateTime = tsun.CreatedDateTime
 504:                      });
 505:                  }
 506:              }
 507:              else
 508:              {
 509:                  serviceOntList = new List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated>();
 510:              }
 511:   
 512:              return serviceOntList;
 513:          }
 514:   
 515:          ////////////////////////////////////////////////////////////////////////////
 516:   
 517:          /// <summary>
 518:          ///
 519:          /// </summary>
 520:          public static Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo Read(string id)
 521:          {
 522:              Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo item;
 523:   
 524:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 525:              {
 526:                  item = (from o in db.EmsOntSipInfoes
 527:                          where o.Id == id
 528:                          select o).Include(o => o.EmsOnt).AsNoTracking().SingleOrDefault();
 529:              }
 530:   
 531:              return item;
 532:          }
 533:   
 534:          ////////////////////////////////////////////////////////////////////////////
 535:   
 536:          /// <summary>
 537:          ///
 538:          /// </summary>
 539:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> ReadByService(string service)
 540:          {
 541:              string huaweiSipName, nokiaSipName;
 542:              List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> list;
 543:   
 544:              huaweiSipName = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Impi(service);
 545:              nokiaSipName = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PrividUser(service);
 546:   
 547:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 548:              {
 549:                  list = (from o in db.EmsOntSipInfoes
 550:                          where o.SIPNAME == huaweiSipName || o.SIPNAME == nokiaSipName
 551:                          select o).AsNoTracking().ToList();
 552:              }
 553:   
 554:              return list;
 555:          }
 556:   
 557:          ////////////////////////////////////////////////////////////////////////////
 558:   
 559:          /// <summary>
 560:          ///
 561:          /// </summary>
 562:          public static List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> ReadByServiceIncludeEmsOntAndAccess(string service) //, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt)
 563:          {
 564:              string huaweiSipName, nokiaSipName;
 565:              List<Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo> list;
 566:   
 567:              // send priv_96525212254 for Nokia switch and +96524602283@ims.moc.kw for Huawei switch
 568:              //if (nddOnt.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei)
 569:              //{
 570:              huaweiSipName = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Impi(service);
 571:              //}
 572:              //else //if(ont.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia)
 573:              //{
 574:              nokiaSipName = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PrividUser(service);
 575:              //}
 576:   
 577:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 578:              {
 579:                  list = (from o in db.EmsOntSipInfoes
 580:                          where o.SIPNAME == huaweiSipName || o.SIPNAME == nokiaSipName
 581:                          select o).Include(o => o.EmsOnt).ThenInclude(o => o.Access).ToList(); //.FirstOrDefault(); //.SingleOrDefault();
 582:              }
 583:   
 584:              return list;
 585:          }
 586:   
 587:          ////////////////////////////////////////////////////////////////////////////
 588:   
 589:          /// <summary>
 590:          ///
 591:          /// </summary>
 592:          public static Dictionary<string, string> IdToOntIdDictionary
 593:          {
 594:              get
 595:              {
 596:                  Dictionary<string, string> dictionary;
 597:   
 598:                  using (var db = new Ia.Ngn.Cl.Model.Ngn())
 599:                  {
 600:                      dictionary = (from s in db.EmsOntSipInfoes select new { s.Id, OntId = s.EmsOnt.Id }).ToDictionary(u => u.Id, u => u.OntId);
 601:                  }
 602:   
 603:                  return dictionary.ToDictionary(u => u.Key, u => u.Value);
 604:              }
 605:          }
 606:   
 607:          ////////////////////////////////////////////////////////////////////////////
 608:          ////////////////////////////////////////////////////////////////////////////
 609:   
 610:          /// <summary>
 611:          ///
 612:          /// </summary>
 613:          public static string ToSimpleTextString(Ia.Ngn.Cl.Model.Huawei.EmsOntSipInfo emsOntSipInfo)
 614:          {
 615:              StringBuilder sb;
 616:   
 617:              sb = new StringBuilder();
 618:   
 619:              //sb.AppendLine("Vendor: " + Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei.Name);
 620:              sb.AppendLine("TEL: " + emsOntSipInfo.TEL);
 621:              sb.AppendLine("SIPUSERNAME: " + emsOntSipInfo.SIPUSERNAME);
 622:              sb.AppendLine("SIPUSERPWD: " + emsOntSipInfo.SIPUSERPWD);
 623:              sb.AppendLine("SIPNAME: " + emsOntSipInfo.SIPNAME);
 624:   
 625:              return sb.ToString();
 626:          }
 627:   
 628:          ////////////////////////////////////////////////////////////////////////////
 629:          ////////////////////////////////////////////////////////////////////////////
 630:      }
 631:   
 632:      ////////////////////////////////////////////////////////////////////////////
 633:      ////////////////////////////////////////////////////////////////////////////
 634:  }