)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » Ims

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

Optical Fiber Network's Operations Support System Management Intranet (OFN OSS) support class for Nokia's 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: using System.Web;
    8:  
    9: namespace Ia.Ngn.Cl.Model.Data.Nokia
   10: {
   11:     ////////////////////////////////////////////////////////////////////////////
   12:  
   13:     /// <summary publish="true">
   14:     /// Optical Fiber Network's Operations Support System Management Intranet (OFN OSS) support class for Nokia's Optical Fiber Network (OFN) data model.
   15:     /// </summary>
   16:     /// 
   17:     /// <remarks> 
   18:     /// Copyright © 2014-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   19:     ///
   20:     /// 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
   21:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   22:     ///
   23:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   24:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   25:     /// 
   26:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   27:     /// 
   28:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   29:     /// </remarks> 
   30:     public class Ims
   31:     {
   32:         private static List<string> agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList, agcfGatewayRecordIp1sThatIndicateFsdb0List;
   33:  
   34:         private static readonly object objectLock = new object();
   35:  
   36:         ////////////////////////////////////////////////////////////////////////////
   37:  
   38:         /// <summary>
   39:         ///
   40:         /// </summary>
   41:         public Ims() { }
   42:  
   43:         ////////////////////////////////////////////////////////////////////////////
   44:  
   45:         /// <summary>
   46:         ///
   47:         /// </summary>
   48:         public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> AgcfGatewayRecordsWithinNddOntListWithWrongSecondaryIpList()
   49:         {
   50:             string ip;
   51:             Dictionary<string, string> agcfGatewayRecordIpToMateExternalIPAddrDictionary;
   52:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
   53:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntList;
   54:             List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList, agcfGatewayRecordList2;
   55:  
   56:             ngnOntList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList;
   57:             agcfGatewayRecordList = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.List();
   58:  
   59:             agcfGatewayRecordIpToMateExternalIPAddrDictionary = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.IpToMateExternalIPAddrDictionary;
   60:  
   61:             agcfGatewayRecordList2 = new List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord>();
   62:  
   63:             foreach (var v in ngnOntList)
   64:             {
   65:                 if (agcfGatewayRecordIpToMateExternalIPAddrDictionary.ContainsKey(v.Ip))
   66:                 {
   67:                     ip = agcfGatewayRecordIpToMateExternalIPAddrDictionary[v.Ip];
   68:  
   69:                     if (ip != v.MgcSecondaryIp)
   70:                     {
   71:                         agcfGatewayRecord = (from gr in agcfGatewayRecordList
   72:                                              where gr.IP1 == v.Ip
   73:                                              select gr).SingleOrDefault();
   74:  
   75:                         if (agcfGatewayRecord != null)
   76:                         {
   77:                             agcfGatewayRecordList2.Add(agcfGatewayRecord);
   78:                         }
   79:                     }
   80:                 }
   81:             }
   82:  
   83:             return agcfGatewayRecordList2;
   84:         }
   85:  
   86:         ////////////////////////////////////////////////////////////////////////////
   87:  
   88:         /// <summary>
   89:         ///
   90:         /// </summary>
   91:         public static List<string> ServiceWhereSubscriberAlternateOtasRealmGroupNumberDoesNotEqualSubPartyAssocOtasRealmGroupNumberList()
   92:         {
   93:             List<string> list;
   94:  
   95:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
   96:             {
   97:                 list = (from su in db.Subscribers
   98:                         join sp in db.SubParties on su.SubParty.Id equals sp.Id
   99:                         //join ep in db.AgcfEndpoints on sp.AgcfEndpoint.Id equals ep.Id
  100:                         where sp.AssocOtasRealm.Substring(0, 26) != su.AlternateOtasRealm.Substring(0, 26)
  101:                         // "stas-stdn.fsimsgroup0-001." length = 26
  102:                         select su.PartyId).AsNoTracking().ToList();
  103:             }
  104:  
  105:             return list;
  106:         }
  107:  
  108:         ////////////////////////////////////////////////////////////////////////////
  109:  
  110:         /// <summary>
  111:         ///
  112:         /// </summary>
  113:         public static void CreateH248SubscriberAndSubPartyAndAgcfEndpoint(Ia.Ngn.Cl.Model.Client.Nokia.Ims ims, int gwId, string service, int flatTermId, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  114:         {
  115:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response entNgfsSubscriberResponse, entNgfsAgcfEndpointResponse;
  116:  
  117:             ims.EntNgfsSubscriberAndNgfsSubPartyV2_H248(service, gwId, nddOnt, out entNgfsSubscriberResponse);
  118:  
  119:             if (entNgfsSubscriberResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful)
  120:             {
  121:                 ims.EntNgfsAgcfEndpointV2(service, gwId, flatTermId, nddOnt, out entNgfsAgcfEndpointResponse);
  122:  
  123:                 // remove number if creation of endpoint failed
  124:                 if (entNgfsAgcfEndpointResponse.ResultCode != Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful)
  125:                 {
  126:                     ims.DltNgfsSubscriberAndNgfsSubPartyV2(service, nddOnt, out entNgfsSubscriberResponse);
  127:                 }
  128:                 else
  129:                 {
  130:  
  131:                 }
  132:             }
  133:             else
  134:             {
  135:                 entNgfsAgcfEndpointResponse = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response();
  136:  
  137:                 entNgfsAgcfEndpointResponse.ResultCode = Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Null;
  138:             }
  139:  
  140:             result = service + "," + gwId + "," + flatTermId + "," + entNgfsSubscriberResponse.ResultCode.ToString() + "," + entNgfsAgcfEndpointResponse.ResultCode.ToString();
  141:         }
  142:  
  143:         ////////////////////////////////////////////////////////////////////////////
  144:  
  145:         /// <summary>
  146:         ///
  147:         /// </summary>
  148:         public static void CreateSipSubscriber(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  149:         {
  150:             alIms.EntNgfsSubscriberAndNgfsSubPartyV2_Sip(service, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  151:  
  152:             result = service + "," + response.ResultCode.ToString();
  153:         }
  154:  
  155:         ////////////////////////////////////////////////////////////////////////////
  156:  
  157:         /// <summary>
  158:         ///
  159:         /// </summary>
  160:         public static void Modify248SubscriberAndSubPartyAndDeleteAgcfEndpointToSip(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  161:         {
  162:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response edNgfsSubscriberResponse, dltNgfsAgcfEndpointResponse;
  163:  
  164:             alIms.EdNgfsSubscriberAndNgfsSubPartyV2_H248ToSip(service, nddOnt, out edNgfsSubscriberResponse);
  165:  
  166:             if (edNgfsSubscriberResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful)
  167:             {
  168:                 alIms.DltNgfsAgcfEndpointV2(service, nddOnt, out dltNgfsAgcfEndpointResponse);
  169:             }
  170:             else
  171:             {
  172:                 dltNgfsAgcfEndpointResponse = new Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response();
  173:  
  174:                 dltNgfsAgcfEndpointResponse.ResultCode = Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Null;
  175:             }
  176:  
  177:             result = service + "," + edNgfsSubscriberResponse.ResultCode.ToString() + "," + dltNgfsAgcfEndpointResponse.ResultCode.ToString();
  178:         }
  179:  
  180:         ////////////////////////////////////////////////////////////////////////////
  181:  
  182:         /// <summary>
  183:         ///
  184:         /// </summary>
  185:         public static void DeleteAgcfEndpointAndH248SubscriberAndSubParty(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  186:         {
  187:             alIms.DltNgfsAgcfEndpointV2(service, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsAgcfEndpointResponse);
  188:  
  189:             alIms.DltNgfsSubscriberAndNgfsSubPartyV2(service, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsSubscriberResponse);
  190:  
  191:             result = service + "," + dltNgfsSubscriberResponse.ResultCode.ToString() + "," + dltNgfsAgcfEndpointResponse.ResultCode.ToString();
  192:         }
  193:  
  194:         ////////////////////////////////////////////////////////////////////////////
  195:  
  196:         /// <summary>
  197:         ///
  198:         /// </summary>
  199:         public static void DeleteAgcfEndpointAndH248SubscriberAndSubParty(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, string primarySwitch, string fsdb, out string result)
  200:         {
  201:             alIms.DltNgfsAgcfEndpointV2(service, primarySwitch, fsdb, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsAgcfEndpointResponse);
  202:  
  203:             alIms.DltNgfsSubscriberAndNgfsSubPartyV2(service, primarySwitch, fsdb, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsSubscriberResponse);
  204:  
  205:             result = service + "," + dltNgfsSubscriberResponse.ResultCode.ToString() + "," + dltNgfsAgcfEndpointResponse.ResultCode.ToString();
  206:         }
  207:  
  208:         ////////////////////////////////////////////////////////////////////////////
  209:  
  210:         /// <summary>
  211:         ///
  212:         /// </summary>
  213:         public static void DeleteH248SubscriberAndSubParty(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  214:         {
  215:             // I use this function sometimes to delete wrong subscriber entries by staff
  216:  
  217:             alIms.DltNgfsSubscriberAndNgfsSubPartyV2(service, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsSubscriberResponse);
  218:  
  219:             result = service + "," + dltNgfsSubscriberResponse.ResultCode.ToString();
  220:         }
  221:  
  222:         ////////////////////////////////////////////////////////////////////////////
  223:  
  224:         /// <summary>
  225:         ///
  226:         /// </summary>
  227:         public static void DeleteSipSubscriber(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  228:         {
  229:             alIms.DltNgfsSubscriberAndNgfsSubPartyV2(service, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response dltNgfsSubscriberResponse);
  230:  
  231:             result = service + "," + dltNgfsSubscriberResponse.ResultCode.ToString();
  232:         }
  233:  
  234:         ////////////////////////////////////////////////////////////////////////////
  235:         ////////////////////////////////////////////////////////////////////////////
  236:  
  237:  
  238:  
  239:  
  240:  
  241:  
  242:         ////////////////////////////////////////////////////////////////////////////
  243:         ////////////////////////////////////////////////////////////////////////////
  244:  
  245:         /// <summary>
  246:         ///
  247:         /// </summary>
  248:         public static void UpdateSupplementaryService(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, Ia.Ngn.Cl.Model.Business.Service.SupplementaryService supplementaryService, bool supplementaryServiceState, out string result)
  249:         {
  250:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response;
  251:  
  252:             switch (supplementaryService)
  253:             {
  254:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallerId):
  255:                     {
  256:                         alIms.EdNgfsSubscriberV2_CallingLineId(service, nddOnt, supplementaryServiceState, out response);
  257:                         result = service + "," + nddOnt.Access.Name + ",CallerId: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  258:                         break;
  259:                     }
  260:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.AbbriviatedCalling):
  261:                     {
  262:                         alIms.EdNgfsSubscriberV2_OneDigitSpeedDial(service, nddOnt, supplementaryServiceState, out response);
  263:                         result = service + "," + nddOnt.Access.Name + ",AbbriviatedCalling: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  264:                         break;
  265:                     }
  266:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallForwarding):
  267:                     {
  268:                         alIms.EdNgfsSubscriberV2_CallForwardingVari(service, nddOnt, supplementaryServiceState, out response);
  269:                         result = service + "," + nddOnt.Access.Name + ",CallForwarding: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  270:                         break;
  271:                     }
  272:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallWaiting):
  273:                     {
  274:                         alIms.EdNgfsSubscriberV2_CallWaiting(service, nddOnt, supplementaryServiceState, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response subscriberResponse);
  275:  
  276:                         if (nddOnt.Pon.PonGroup.Olt.IsSip == false) // if H.248
  277:                         {
  278:                             result = service + "," + nddOnt.Access.Name + ",CallWaiting: " + supplementaryServiceState.ToString().ToLower() + ", subscriber: " + subscriberResponse.ResultCode.ToString();
  279:                         }
  280:                         else
  281:                         {
  282:                             alIms.EdNgfsAgcfEndpointV2_CallWaiting(service, nddOnt, supplementaryServiceState, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response agcfEndpointResponse);
  283:  
  284:                             result = service + "," + nddOnt.Access.Name + ",CallWaiting: " + supplementaryServiceState.ToString().ToLower() + ", subscriber: " + subscriberResponse.ResultCode.ToString() + ", agcfEndpoint: " + agcfEndpointResponse.ResultCode.ToString();
  285:                         }
  286:  
  287:                         break;
  288:                     }
  289:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ConferenceCall):
  290:                     {
  291:                         alIms.EdNgfsSubscriberV2_ConferenceCall(service, nddOnt, supplementaryServiceState, out response);
  292:                         result = service + "," + nddOnt.Access.Name + ",ConferenceCall: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  293:                         break;
  294:                     }
  295:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.WakeupCall):
  296:                     {
  297:                         alIms.EdNgfsSubscriberV2_ReminderCall(service, nddOnt, supplementaryServiceState, out response);
  298:                         result = service + "," + nddOnt.Access.Name + ",WakeupCall: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  299:                         break;
  300:                     }
  301:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCallingUserControlled):
  302:                     {
  303:                         alIms.EdNgfsSubscriberV2_InternationalCallingUserControlled(service, nddOnt, supplementaryServiceState, out response);
  304:                         result = service + "," + nddOnt.Access.Name + ",InternationalCallingUserControlled: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  305:                         break;
  306:                     }
  307:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCalling):
  308:                     {
  309:                         alIms.EdNgfsSubscriberV2_InternationalCalling(service, nddOnt, supplementaryServiceState, out response);
  310:                         result = service + "," + nddOnt.Access.Name + ",InternationalCalling: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  311:                         break;
  312:                     }
  313:                 case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ServiceSuspension):
  314:                     {
  315:                         alIms.EdNgfsSubscriberV2_ServiceSuspension(service, nddOnt, supplementaryServiceState, out response);
  316:                         result = service + "," + nddOnt.Access.Name + ",ServiceSuspension: " + supplementaryServiceState.ToString().ToLower() + "," + response.ResultCode.ToString();
  317:                         break;
  318:                     }
  319:                 default:
  320:                     {
  321:                         result = service + ",unknown SupplementaryService: " + supplementaryServiceState.ToString().ToLower();
  322:                         break;
  323:                     }
  324:             }
  325:         }
  326:  
  327:         ////////////////////////////////////////////////////////////////////////////
  328:  
  329:         /// <summary>
  330:         ///
  331:         /// </summary>
  332:         public static void AssignServiceSuspensionStateToServiceSubscriber(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, string service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, bool serviceSuspensionState, out string result)
  333:         {
  334:             alIms.EdNgfsSubscriberV2_ServiceSuspension(service, nddOnt, serviceSuspensionState, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  335:  
  336:             result = service + "," + nddOnt.Access.Name + ",service suspension: " + serviceSuspensionState.ToString().ToLower() + "," + response.ResultCode.ToString();
  337:         }
  338:  
  339:         ////////////////////////////////////////////////////////////////////////////
  340:  
  341:         /// <summary>
  342:         ///
  343:         /// </summary>
  344:         public static Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord ReadAgcfGatewayRecordForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, int gwId, out string result)
  345:         {
  346:             bool b;
  347:             string r;
  348:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  349:  
  350:             r = string.Empty;
  351:  
  352:             agcfGatewayRecord = alIms.RtrvNgfsAgcfGatewayRecordV2(gwId, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  353:  
  354:             if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
  355:             {
  356:                 b = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateAgcfGatewayRecord(gwId, response, agcfGatewayRecord, out r);
  357:             }
  358:  
  359:             result = "GatewayRecord: " + gwId + ": " + response.ResultCode.ToString() + ": " + r;
  360:  
  361:             return agcfGatewayRecord;
  362:         }
  363:  
  364:         ////////////////////////////////////////////////////////////////////////////
  365:  
  366:         /// <summary>
  367:         ///
  368:         /// </summary>
  369:         public static Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecordTemp ReadAgcfGatewayRecordFromSkbForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, int gwId, out string result)
  370:         {
  371:             bool b;
  372:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecordTemp agcfGatewayRecord;
  373:  
  374:             agcfGatewayRecord = alIms.RtrvNgfsAgcfGatewayRecordFromSkbV2(gwId, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  375:  
  376:             if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
  377:             {
  378:                 b = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateAgcfGatewayRecordForSkb(gwId, response, agcfGatewayRecord);
  379:             }
  380:  
  381:             result = "GatewayRecord: " + gwId + ": " + response.ResultCode.ToString();
  382:  
  383:             return agcfGatewayRecord;
  384:         }
  385:  
  386:         /*
  387:         ////////////////////////////////////////////////////////////////////////////
  388: 
  389:         /// <summary>
  390:         ///
  391:         /// </summary>
  392:         public static void ReadAgcfEndpointListForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, int gwId, out string result)
  393:         {
  394:             bool b;
  395:             int agcfGatewayRecordId;
  396:             Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
  397:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  398:             List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> agcfEndpointList;
  399: 
  400:             // below: read the AgcfGatewayRecord
  401:             agcfGatewayRecordId = Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord.AgcfGatewayRecordId(Ia.Ngn.Cl.Model.Business.Nokia.AgcfGatewayTable.NgfsAgcfGatewayTableAid, gwId);
  402:             agcfGatewayRecord = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.Read(agcfGatewayRecordId);
  403: 
  404:             if (agcfGatewayRecord != null)
  405:             {
  406:                 nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpToOntDictionary.ContainsKey(agcfGatewayRecord.IP1) ? Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpToOntDictionary[agcfGatewayRecord.IP1] : null;
  407: 
  408:                 if (nddOnt != null)
  409:                 {
  410:                     agcfEndpointList = alIms.RtrvNgfsAgcfEndpointV2List(agcfGatewayRecord.GwId, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  411: 
  412:                     if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.SuccessfulButNoParameters)
  413:                     {
  414:                         b = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsAgcfEndpointList(gwId, agcfGatewayRecordId, response, agcfEndpointList);
  415:                     }
  416:                     else if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.SessionInvalid) 
  417:                     { 
  418:                     }
  419:                     else throw new Exception(@"Undefined result code """ + response + @""" seen in Ia.Ngn.Cl.Model.Data.Nokia.Ims.ResultCode");
  420: 
  421:                     result = "Endpoint: GwId:" + gwId + ", " + response.ResultCode.ToString();
  422:                 }
  423:                 else
  424:                 {
  425:                     result = "Endpoint: " + "Error: nddOnt == null, GwId:" + gwId;
  426:                 }
  427:             }
  428:             else
  429:             {
  430:                 result = "Endpoint: " + "GwId:" + gwId + ", Exception: " + @"agcfGatewayRecord is null, agcfGatewayRecordsId=" + agcfGatewayRecordId;
  431:             }
  432:         }
  433:         */
  434:  
  435:         ////////////////////////////////////////////////////////////////////////////
  436:  
  437:         /// <summary>
  438:         ///
  439:         /// </summary>
  440:         public static void CreateAgcfGatewayRecordForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms, int gwId, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  441:         {
  442:             nokiaIms.EntNgfsAgcfGwCombinedRecV2(gwId, nddOnt, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  443:  
  444:             result = response.ResultCode.ToString();
  445:         }
  446:  
  447:         ////////////////////////////////////////////////////////////////////////////
  448:  
  449:         /// <summary>
  450:         ///
  451:         /// </summary>
  452:         public static void ReadUpdateAgcfGatewayRecordAndAgcfEndpointListAndSubPartyAndSubscriberAndServiceForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms/*, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt*/, int gwId, out string result)
  453:         {
  454:             bool agcfGatewayRecordUpdated, agcfEndpointListUpdated, ngfsSubPartyUpdated, ngfsSubscriberUpdated;
  455:             int agcfGatewayRecordId, imsService;
  456:             string service, primarySwitch, partyId, prividUser, subPartyId, r;
  457:             //Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
  458:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  459:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
  460:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
  461:             List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> agcfEndpointList;
  462:  
  463:             // Read GwId->Ep(s)->Sp->Sub, and ask about non FSDB sub search on XML
  464:  
  465:             result = "gwId: " + gwId;
  466:  
  467:             agcfGatewayRecordId = Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord.AgcfGatewayRecordId(Ia.Ngn.Cl.Model.Business.Nokia.AgcfGatewayTable.NgfsAgcfGatewayTableAid, gwId);
  468:             agcfGatewayRecord = nokiaIms.RtrvNgfsAgcfGatewayRecordV2(gwId, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response);
  469:  
  470:             if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
  471:             {
  472:                 agcfGatewayRecordUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateAgcfGatewayRecord(gwId, response, agcfGatewayRecord, out r);
  473:  
  474:                 if (!string.IsNullOrEmpty(r)) result += ", UpdateAgcfGatewayRecord: " + r;
  475:  
  476:                 if (agcfGatewayRecord != null)
  477:                 {
  478:                     imsService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsServiceFromAgcfSipIaPort(agcfGatewayRecord.AgcfSipIaPort);
  479:                     primarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.PrimarySwitchFromAgcfGatewayRecord(agcfGatewayRecord.IsPrimary);
  480:  
  481:                     //if (nddOnt != null) result += " " + nddOnt.Access.Name;
  482:                     //else result += " warning: nddOnt is null for IP: " + agcfGatewayRecord.IP1;
  483:  
  484:                     agcfEndpointList = nokiaIms.RtrvNgfsAgcfEndpointV2List(agcfGatewayRecord.GwId, primarySwitch, imsService, out response);
  485:  
  486:                     if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.SuccessfulButNoParameters)
  487:                     {
  488:                         agcfEndpointListUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsAgcfEndpointList(gwId, agcfGatewayRecordId, response, agcfEndpointList);
  489:  
  490:                         agcfEndpointList = Ia.Ngn.Cl.Model.Data.Nokia.AgcfEndpoint.List(gwId);
  491:  
  492:                         if (agcfEndpointList != null)
  493:                         {
  494:                             foreach (Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint agcfEndpoint in agcfEndpointList)
  495:                             {
  496:                                 prividUser = agcfEndpoint.PrividUser;
  497:                                 partyId = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PartyId(prividUser);
  498:  
  499:                                 subParty = nokiaIms.RtrvNgfsSubPartyV2(partyId, primarySwitch, imsService, out response);
  500:  
  501:                                 if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
  502:                                 {
  503:                                     ngfsSubPartyUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubParty(partyId, agcfEndpoint.Id, response, subParty);
  504:  
  505:                                     // below: read the SubParty
  506:                                     subPartyId = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
  507:                                     subParty = Ia.Ngn.Cl.Model.Data.Nokia.SubParty.Read(subPartyId);
  508:  
  509:                                     if (subParty != null)
  510:                                     {
  511:                                         subscriber = nokiaIms.RtrvNgfsSubscriberV2(partyId, primarySwitch, imsService, out response);
  512:  
  513:                                         if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
  514:                                         {
  515:                                             service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(partyId);
  516:  
  517:                                             ngfsSubscriberUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubscriber(partyId, subPartyId, response, subscriber);
  518:  
  519:                                             Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateServiceFromAgcfGatewayRecordAndAgcfEndpointAndSubPartyAndSubscriber(service, agcfGatewayRecord, agcfEndpoint, subParty, subscriber);
  520:  
  521:                                             result += "," + service;
  522:                                         }
  523:                                         else
  524:                                         {
  525:                                             result += " error: subscriber: " + response.ResultCode.ToString();
  526:                                         }
  527:                                     }
  528:                                     else
  529:                                     {
  530:                                         result += " subParty is null";
  531:                                     }
  532:                                 }
  533:                                 else
  534:                                 {
  535:                                     result += " error: subParty: " + response.ResultCode.ToString();
  536:                                 }
  537:                             }
  538:                         }
  539:                         else
  540:                         {
  541:                             result += " agcfEndpointList is null";
  542:                         }
  543:                     }
  544:                     else
  545:                     {
  546:                         result += " error: agcfEndpointList: " + response.ResultCode.ToString();
  547:                     }
  548:                 }
  549:                 else
  550:                 {
  551:                     result += " agcfGatewayRecord is null";
  552:                 }
  553:             }
  554:             else
  555:             {
  556:                 result += " error: agcfGatewayRecord: " + response.ResultCode.ToString();
  557:             }
  558:  
  559:             // temp
  560:             //Ia.Ngn.Cl.Model.Data.Nokia.Ims.ReadAgcfGatewayRecordFromSkbForGwId(nokiaIms, gwId, out r2);
  561:             //result += ". AgcfGatewayRecord (SKB): " + r2;
  562:         }
  563:  
  564:         ////////////////////////////////////////////////////////////////////////////
  565:  
  566:         /// <summary>
  567:         ///
  568:         /// </summary>
  569:         public static void ReadUpdateSubPartyAndSubscriberAndServiceForService(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms, string _service, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt, out string result)
  570:         {
  571:             bool updated;
  572:             int imsService;
  573:             string service, primarySwitch, partyId, subPartyId;
  574:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
  575:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
  576:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response subPartyResponse, subscriberResponse;
  577:  
  578:             result = string.Empty;
  579:  
  580:             partyId = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PartyId(_service);
  581:             subPartyId = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
  582:             service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(partyId);
  583:  
  584:             if (nddOnt != null)
  585:             {
  586:                 imsService = nddOnt.ImsService;
  587:                 primarySwitch = nddOnt.PrimarySwitch;
  588:  
  589:                 subParty = nokiaIms.RtrvNgfsSubPartyV2(subPartyId, primarySwitch, imsService, out subPartyResponse);
  590:                 subscriber = nokiaIms.RtrvNgfsSubscriberV2(partyId, primarySwitch, imsService, out subscriberResponse);
  591:  
  592:                 updated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubPartyAndNgfsSubscriberWithoutEndPoint(subPartyId, subParty, subPartyResponse, partyId, subscriber, subscriberResponse);
  593:                 Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateServiceFromSubPartyAndSubscriber(service, nddOnt.Access.Id);
  594:             }
  595:             else
  596:             {
  597:                 /*
  598:                 foreach (Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicService ibs in Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsBasicServiceList)
  599:                 {
  600:                     Ia.Ngn.Cl.Model.Data.Nokia.Ims.ReadSubPartyAndSubscriber(nokiaIms, service, ibs.PrimarySwitch, ibs.Fsdb, ibs.Service, out string r);
  601: 
  602:                     result += r + ",";
  603:                 }
  604:                 */
  605:             }
  606:         }
  607:  
  608:         ////////////////////////////////////////////////////////////////////////////
  609:  
  610:         /// <summary>
  611:         ///
  612:         /// </summary>
  613:         public static void ReadSubPartyAndSubscriber(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms, string _service, string primarySwitch, string fsdb, int imsService, out string result)
  614:         {
  615:             bool updated;
  616:             string service, partyId, subPartyId;
  617:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
  618:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
  619:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response subPartyResponse, subscriberResponse;
  620:  
  621:             result = string.Empty;
  622:  
  623:             partyId = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PartyId(_service);
  624:             subPartyId = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
  625:             service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(partyId);
  626:  
  627:             subParty = nokiaIms.RtrvNgfsSubPartyV2(subPartyId, primarySwitch, imsService, out subPartyResponse);
  628:             subscriber = nokiaIms.RtrvNgfsSubscriberV2(partyId, primarySwitch, imsService, out subscriberResponse);
  629:  
  630:             updated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubPartyAndNgfsSubscriberWithoutEndPoint(subPartyId, subParty, subPartyResponse, partyId, subscriber, subscriberResponse);
  631:             Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateServiceFromSubPartyAndSubscriber(service, string.Empty);
  632:         }
  633:  
  634:         ////////////////////////////////////////////////////////////////////////////
  635:  
  636:         /// <summary>
  637:         ///
  638:         /// </summary>
  639:         public static void DeleteAgcfGatewayRecordForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms, Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord, out string result)
  640:         {
  641:             string primarySwitch, secondarySwitch;
  642:  
  643:             primarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.PrimarySwitchFromAgcfGatewayRecord(agcfGatewayRecord.IsPrimary);
  644:             secondarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.SecondarySwitchFromAgcfGatewayRecord(agcfGatewayRecord.IsPrimary);
  645:  
  646:             nokiaIms.DltNgfsAgcfGwCombinedRecV2(agcfGatewayRecord.GwId, primarySwitch, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response primarySwitchDeleteResponse);
  647:             nokiaIms.DltNgfsAgcfGwCombinedRecV2(agcfGatewayRecord.GwId, secondarySwitch, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response secondarySwitchDeleteResponse);
  648:  
  649:             result = "Primary: " + primarySwitchDeleteResponse.ResultCode.ToString() + " (FailureReason: " + primarySwitchDeleteResponse.FailureReason.ToString() + "), Secondary: " + secondarySwitchDeleteResponse.ResultCode.ToString() + " (FailureReason: " + secondarySwitchDeleteResponse.FailureReason.ToString() + "). ";
  650:         }
  651:  
  652:         ////////////////////////////////////////////////////////////////////////////
  653:  
  654:         /// <summary>
  655:         ///
  656:         /// </summary>
  657:         public static void DeleteAgcfGatewayRecordForGwId(Ia.Ngn.Cl.Model.Client.Nokia.Ims nokiaIms, int gwId, out string result)
  658:         {
  659:             string firstSwitch, secondSwitch;
  660:  
  661:             firstSwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.TEC;
  662:             secondSwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.SKB;
  663:  
  664:             nokiaIms.DltNgfsAgcfGwCombinedRecV2(gwId, firstSwitch, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response primarySwitchDeleteResponse);
  665:             nokiaIms.DltNgfsAgcfGwCombinedRecV2(gwId, secondSwitch, out Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response secondarySwitchDeleteResponse);
  666:  
  667:             result = "First: " + primarySwitchDeleteResponse.ResultCode.ToString() + ", Second: " + secondarySwitchDeleteResponse.ResultCode.ToString() + ". ";
  668:         }
  669:  
  670:         /*
  671:         ////////////////////////////////////////////////////////////////////////////
  672: 
  673:         /// <summary>
  674:         ///
  675:         /// </summary>
  676:         public static void ReadAgcfEndpointAndSubPartyAndSubscriberForService(Ia.Ngn.Cl.Model.Client.Nokia.Ims alIms, int gwId, string service, out string result)
  677:         {
  678:             bool ngfsSubPartyUpdated, ngfsSubscriberUpdated;
  679:             int imsService;
  680:             string primarySwitch, partyId, prividUser, subPartyId;
  681:             Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
  682:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  683:             Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint agcfEndpoint;
  684:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
  685:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
  686:             Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response;
  687: 
  688:             result = "service: " + service + ", gwId: " + gwId;
  689: 
  690:             prividUser = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PrividUser(service);
  691:             partyId = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PartyId(service);
  692: 
  693:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  694: 
  695:             agcfEndpoint = alIms.RtrvNgfsAgcfEndpointV2(prividUser, primarySwitch, imsService, out response);
  696: 
  697:             if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PLX_SERVICE_OBJECT_DOES_NOT_EXIST || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.SuccessfulButNoParameters)
  698:             {
  699:                 agcfEndpoint = Ia.Ngn.Cl.Model.Data.Nokia.AgcfEndpoint.Read(prividUser);
  700: 
  701:                 if (agcfEndpoint != null)
  702:                 {
  703:                     nddOnt = (from q in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList where q.Ip == agcfEndpoint.AgcfGatewayRecord.IP1 select q).SingleOrDefault();
  704:                     imsService = Ia.Ngn.Cl.Model.Business.Nokia.Ims.ImsServiceFromAgcfSipIaPort(agcfEndpoint.AgcfGatewayRecord.AgcfSipIaPort);
  705:                     primarySwitch = Ia.Ngn.Cl.Model.Business.Nokia.Ims.PrimarySwitchFromAgcfGatewayRecord(agcfEndpoint.AgcfGatewayRecord.IsPrimary);
  706: 
  707:                     if (nddOnt != null) result += " " + nddOnt.Access.Name;
  708:                     else result += " warning: nddOnt is null for IP: " + agcfEndpoint.AgcfGatewayRecord.IP1;
  709: 
  710:                     subParty = alIms.RtrvNgfsSubPartyV2(partyId, primarySwitch, imsService, out response);
  711: 
  712:                     if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PLX_SERVICE_OBJECT_DOES_NOT_EXIST)
  713:                     {
  714:                         ngfsSubPartyUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubParty(partyId, agcfEndpoint.Id, response, subParty);
  715: 
  716:                         // below: read the SubParty
  717:                         subPartyId = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
  718:                         subParty = Ia.Ngn.Cl.Model.Nokia.SubParty.Read(subPartyId);
  719: 
  720:                         if (subParty != null)
  721:                         {
  722:                             subscriber = alIms.RtrvNgfsSubscriberV2(partyId, primarySwitch, imsService, out response);
  723: 
  724:                             if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful || response.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PLX_SERVICE_OBJECT_DOES_NOT_EXIST)
  725:                             {
  726:                                 service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(partyId);
  727: 
  728:                                 ngfsSubscriberUpdated = Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateNgfsSubscriber(partyId, subPartyId, response, subscriber);
  729: 
  730:                                 Ia.Ngn.Cl.Model.Data.Nokia.Ims.UpdateServiceFromAgcfEndpointAndSubPartyAndSubscriber(service, agcfEndpoint, subParty, subscriber);
  731: 
  732:                                 result += "," + service;
  733:                             }
  734:                             else
  735:                             {
  736:                                 result += " error: subscriber: " + response.ResultCode.ToString();
  737:                             }
  738:                         }
  739:                         else
  740:                         {
  741:                             result += " subParty is null";
  742:                         }
  743:                     }
  744:                     else
  745:                     {
  746:                         result += " error: subParty: " + response.ResultCode.ToString();
  747:                     }
  748:                 }
  749:                 else
  750:                 {
  751:                     result += " agcfEndpoint is null";
  752:                 }
  753:             }
  754:             else
  755:             {
  756:                 result += " error: agcfEndpointList: " + response.ResultCode.ToString();
  757:             }
  758:         }
  759:         */
  760:  
  761:         ////////////////////////////////////////////////////////////////////////////
  762:  
  763:         /// <summary>
  764:         ///
  765:         /// </summary>
  766:         public static bool UpdateAgcfGatewayRecord(int gwId, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord newAgcfGatewayRecord, out string result)
  767:         {
  768:             bool updated;
  769:             int id, tableId;
  770:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  771:  
  772:             tableId = Ia.Ngn.Cl.Model.Business.Nokia.AgcfGatewayTable.NgfsAgcfGatewayTableAid;
  773:  
  774:             result = string.Empty;
  775:  
  776:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  777:             {
  778:                 id = Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord.AgcfGatewayRecordId(tableId, gwId);
  779:  
  780:                 agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.Id == id select gr).Include(gr => gr.AgcfEndpoints).SingleOrDefault();
  781:  
  782:                 switch (response.ResultCode)
  783:                 {
  784:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
  785:                         {
  786:                             if (agcfGatewayRecord == null)
  787:                             {
  788:                                 newAgcfGatewayRecord.Created = newAgcfGatewayRecord.Updated = DateTime.UtcNow.AddHours(3);
  789:                                 db.AgcfGatewayRecords.Add(newAgcfGatewayRecord);
  790:  
  791:                                 updated = true;
  792:                             }
  793:                             else
  794:                             {
  795:                                 if (agcfGatewayRecord.Update(newAgcfGatewayRecord))
  796:                                 {
  797:                                     db.AgcfGatewayRecords.Attach(agcfGatewayRecord);
  798:                                     db.Entry(agcfGatewayRecord).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  799:  
  800:                                     updated = true;
  801:                                 }
  802:                                 else updated = false;
  803:                             }
  804:  
  805:                             break;
  806:                         }
  807:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
  808:                         {
  809:                             if (agcfGatewayRecord != null)
  810:                             {
  811:                                 // below: delete if foreign key is not null or zero
  812:                                 if (agcfGatewayRecord.AgcfEndpoints == null || agcfGatewayRecord.AgcfEndpoints.Count == 0)
  813:                                 {
  814:                                     db.AgcfGatewayRecords.Remove(agcfGatewayRecord);
  815:  
  816:                                     updated = true;
  817:                                 }
  818:                                 else
  819:                                 {
  820:                                     updated = false;
  821:  
  822:                                     result = "AGCF gateway record for GwId " + gwId + " does not exist in IMS, but agcfGatewayRecord.AgcfEndpoints != null && agcfGatewayRecord.AgcfEndpoints.Count > 0. ";
  823:                                 }
  824:                             }
  825:                             else updated = false;
  826:  
  827:                             break;
  828:                         }
  829:                     default: updated = false; break;
  830:                 }
  831:  
  832:                 db.SaveChanges();
  833:             }
  834:  
  835:             return updated;
  836:         }
  837:  
  838:         ////////////////////////////////////////////////////////////////////////////
  839:  
  840:         /// <summary>
  841:         ///
  842:         /// </summary>
  843:         public static bool UpdateAgcfGatewayRecordForSkb(int gwId, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecordTemp newAgcfGatewayRecord)
  844:         {
  845:             bool updated;
  846:             int id, tableId;
  847:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecordTemp agcfGatewayRecord;
  848:  
  849:             tableId = Ia.Ngn.Cl.Model.Business.Nokia.AgcfGatewayTable.NgfsAgcfGatewayTableAid;
  850:  
  851:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  852:             {
  853:                 id = Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord.AgcfGatewayRecordId(tableId, gwId);
  854:  
  855:                 agcfGatewayRecord = (from gr in db.AgcfGatewayRecordTemps where gr.Id == id select gr).SingleOrDefault();
  856:  
  857:                 switch (response.ResultCode)
  858:                 {
  859:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
  860:                         {
  861:                             if (agcfGatewayRecord == null)
  862:                             {
  863:                                 newAgcfGatewayRecord.Created = newAgcfGatewayRecord.Updated = DateTime.UtcNow.AddHours(3);
  864:                                 db.AgcfGatewayRecordTemps.Add(newAgcfGatewayRecord);
  865:  
  866:                                 updated = true;
  867:                             }
  868:                             else
  869:                             {
  870:                                 if (agcfGatewayRecord.Update(newAgcfGatewayRecord, out string result))
  871:                                 {
  872:                                     db.AgcfGatewayRecordTemps.Attach(agcfGatewayRecord);
  873:                                     db.Entry(agcfGatewayRecord).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  874:  
  875:                                     updated = true;
  876:                                 }
  877:                                 else updated = false;
  878:                             }
  879:  
  880:                             break;
  881:                         }
  882:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
  883:                         {
  884:                             if (agcfGatewayRecord != null)
  885:                             {
  886:                                 // below: delete if foreign key is not null or zero
  887:                                 if (agcfGatewayRecord.AgcfEndpoints == null || agcfGatewayRecord.AgcfEndpoints.Count == 0)
  888:                                 {
  889:                                     db.AgcfGatewayRecordTemps.Remove(agcfGatewayRecord);
  890:  
  891:                                     updated = true;
  892:                                 }
  893:                                 else updated = false;
  894:                             }
  895:                             else updated = false;
  896:  
  897:                             break;
  898:                         }
  899:                     default: updated = false; break;
  900:                 }
  901:  
  902:                 db.SaveChanges();
  903:             }
  904:  
  905:             return updated;
  906:         }
  907:  
  908:         ////////////////////////////////////////////////////////////////////////////
  909:  
  910:         /// <summary>
  911:         ///
  912:         /// </summary>
  913:         public static bool UpdateNgfsAgcfEndpoint(string prividUser, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint newAgcfEndpoint)
  914:         {
  915:             bool isOk;
  916:             int agcfGatewayRecordsId;
  917:             string id;
  918:             Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint agcfEndpoint;
  919:  
  920:             isOk = false;
  921:  
  922:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  923:             {
  924:                 id = Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint.AgcfEndpointId(prividUser);
  925:  
  926:                 agcfEndpoint = (from ep in db.AgcfEndpoints where ep.Id == id select ep).SingleOrDefault();
  927:  
  928:                 switch (response.ResultCode)
  929:                 {
  930:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
  931:                         {
  932:                             if (agcfEndpoint == null)
  933:                             {
  934:                                 newAgcfEndpoint.Created = newAgcfEndpoint.Updated = DateTime.UtcNow.AddHours(3);
  935:                                 db.AgcfEndpoints.Add(newAgcfEndpoint);
  936:                             }
  937:                             else
  938:                             {
  939:                                 // below: reference
  940:                                 agcfGatewayRecordsId = Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord.AgcfGatewayRecordId(Ia.Ngn.Cl.Model.Business.Nokia.AgcfGatewayTable.NgfsAgcfGatewayTableAid, newAgcfEndpoint.GwId);
  941:                                 newAgcfEndpoint.AgcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.Id == agcfGatewayRecordsId select gr).SingleOrDefault();
  942:  
  943:                                 if (agcfEndpoint.Update(newAgcfEndpoint))
  944:                                 {
  945:                                     db.AgcfEndpoints.Attach(agcfEndpoint);
  946:                                     db.Entry(agcfEndpoint).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  947:                                 }
  948:                             }
  949:  
  950:                             break;
  951:                         }
  952:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
  953:                         {
  954:                             if (agcfEndpoint != null)
  955:                             {
  956:                                 // below: skip delete if the foreign key is not null
  957:                                 if (agcfEndpoint.SubParties == null)
  958:                                 {
  959:                                     db.AgcfEndpoints.Remove(agcfEndpoint);
  960:                                 }
  961:                             }
  962:                             break;
  963:                         }
  964:                 }
  965:  
  966:                 db.SaveChanges();
  967:  
  968:                 isOk = true;
  969:             }
  970:  
  971:             return isOk;
  972:         }
  973:  
  974:         ////////////////////////////////////////////////////////////////////////////
  975:  
  976:         /// <summary>
  977:         ///
  978:         /// </summary>
  979:         public static bool UpdateNgfsAgcfEndpointList(int gwId, int agcfGatewayRecordId, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> newAgcfEndpointList)
  980:         {
  981:             bool updated;
  982:             Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord;
  983:             Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint agcfEndpoint;
  984:             List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> agcfEndpointList;
  985:  
  986:             updated = false;
  987:  
  988:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  989:             {
  990:                 agcfEndpointList = (from ep in db.AgcfEndpoints where ep.GwId == gwId select ep).Include(ep => ep.SubParties).ToList();
  991:  
  992:                 switch (response.ResultCode)
  993:                 {
  994:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
  995:                         {
  996:                             // below: add or update read endpoints
  997:                             foreach (Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint newAgcfEndpoint in newAgcfEndpointList)
  998:                             {
  999:                                 // below: reference
 1000:                                 agcfGatewayRecord = (from gr in db.AgcfGatewayRecords where gr.Id == agcfGatewayRecordId select gr).SingleOrDefault();
 1001:                                 agcfEndpoint = (from ep in db.AgcfEndpoints where ep.Id == newAgcfEndpoint.Id select ep).SingleOrDefault();
 1002:                                 newAgcfEndpoint.AgcfGatewayRecord = agcfGatewayRecord;
 1003:  
 1004:                                 if (agcfEndpoint == null)
 1005:                                 {
 1006:                                     newAgcfEndpoint.Created = newAgcfEndpoint.Updated = DateTime.UtcNow.AddHours(3);
 1007:                                     db.AgcfEndpoints.Add(newAgcfEndpoint);
 1008:  
 1009:                                     updated = updated || true;
 1010:                                 }
 1011:                                 else
 1012:                                 {
 1013:                                     if (agcfEndpoint.Update(newAgcfEndpoint))
 1014:                                     {
 1015:                                         db.AgcfEndpoints.Attach(agcfEndpoint);
 1016:                                         db.Entry(agcfEndpoint).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1017:  
 1018:                                         updated = updated || true;
 1019:                                     }
 1020:                                     else updated = updated || false;
 1021:                                 }
 1022:                             }
 1023:  
 1024:                             // below: remove stored endpoint that do not exist in read
 1025:                             if (agcfEndpointList != null && agcfEndpointList.Count > 0)
 1026:                             {
 1027:                                 foreach (Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint storedAgcfEndpoint in agcfEndpointList)
 1028:                                 {
 1029:                                     agcfEndpoint = (from a in newAgcfEndpointList where a.Id == storedAgcfEndpoint.Id select a).SingleOrDefault();
 1030:  
 1031:                                     if (agcfEndpoint == null && (storedAgcfEndpoint.SubParties == null || storedAgcfEndpoint.SubParties.Count == 0))
 1032:                                     {
 1033:                                         db.AgcfEndpoints.Remove(storedAgcfEndpoint);
 1034:  
 1035:                                         updated = updated || true;
 1036:                                     }
 1037:                                 }
 1038:                             }
 1039:  
 1040:                             break;
 1041:                         }
 1042:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.SuccessfulButNoParameters:
 1043:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
 1044:                         {
 1045:                             if (agcfEndpointList != null && agcfEndpointList.Count > 0)
 1046:                             {
 1047:                                 foreach (Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint deletedAgcfEndpoint in agcfEndpointList)
 1048:                                 {
 1049:                                     // below: delete if foreign key is not null or zero
 1050:                                     if (deletedAgcfEndpoint.SubParties == null || deletedAgcfEndpoint.SubParties.Count == 0)
 1051:                                     {
 1052:                                         db.AgcfEndpoints.Remove(deletedAgcfEndpoint);
 1053:  
 1054:                                         updated = updated || true;
 1055:                                     }
 1056:                                     else updated = updated || false;
 1057:  
 1058:                                 }
 1059:                             }
 1060:                             break;
 1061:                         }
 1062:                     default: updated = updated || false; break;
 1063:                 }
 1064:  
 1065:                 db.SaveChanges();
 1066:             }
 1067:  
 1068:             return updated;
 1069:         }
 1070:  
 1071:         ////////////////////////////////////////////////////////////////////////////
 1072:  
 1073:         /// <summary>
 1074:         ///
 1075:         /// </summary>
 1076:         public static bool UpdateNgfsSubParty(string partyId, string agcfEndpointId, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, Ia.Ngn.Cl.Model.Nokia.SubParty newSubParty)
 1077:         {
 1078:             bool updated;
 1079:             string id;
 1080:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
 1081:  
 1082:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1083:             {
 1084:                 id = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
 1085:  
 1086:                 subParty = (from sp in db.SubParties where sp.Id == id select sp).Include(sp => sp.Subscribers).SingleOrDefault();
 1087:  
 1088:                 switch (response.ResultCode)
 1089:                 {
 1090:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
 1091:                         {
 1092:                             // below: reference
 1093:                             agcfEndpointId = Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint.AgcfEndpointId(agcfEndpointId);
 1094:                             newSubParty.AgcfEndpoint = (from ep in db.AgcfEndpoints where ep.Id == agcfEndpointId select ep).SingleOrDefault();
 1095:  
 1096:                             if (subParty == null)
 1097:                             {
 1098:                                 newSubParty.Created = newSubParty.Updated = DateTime.UtcNow.AddHours(3);
 1099:                                 db.SubParties.Add(newSubParty);
 1100:  
 1101:                                 updated = true;
 1102:                             }
 1103:                             else
 1104:                             {
 1105:                                 // below: they don't
 1106:                                 // <PrimaryPUID>icsSubAgcfpuid</PrimaryPUID> in <SubParty> element of ent-ngfs-subscriber-v2 has to match <Dn>icsSubAgcfpuid</Dn> in ent-ngfs-agcfendpoint-v2
 1107:  
 1108:                                 if (subParty.Update(newSubParty))
 1109:                                 {
 1110:                                     db.SubParties.Attach(subParty);
 1111:                                     db.Entry(subParty).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1112:  
 1113:                                     updated = true;
 1114:                                 }
 1115:                                 else updated = false;
 1116:                             }
 1117:  
 1118:                             break;
 1119:                         }
 1120:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
 1121:                         {
 1122:                             if (subParty != null)
 1123:                             {
 1124:                                 // below: delete if foreign key is not null or zero
 1125:                                 if (subParty.Subscribers == null || subParty.Subscribers.Count == 0)
 1126:                                 {
 1127:                                     db.SubParties.Remove(subParty);
 1128:  
 1129:                                     updated = true;
 1130:                                 }
 1131:                                 else updated = false;
 1132:                             }
 1133:                             else updated = false;
 1134:                             break;
 1135:                         }
 1136:                     default: updated = false; break;
 1137:                 }
 1138:  
 1139:                 db.SaveChanges();
 1140:             }
 1141:  
 1142:             return updated;
 1143:         }
 1144:  
 1145:         ////////////////////////////////////////////////////////////////////////////
 1146:  
 1147:         /// <summary>
 1148:         ///
 1149:         /// </summary>
 1150:         public static bool UpdateNgfsSubPartyAndNgfsSubscriberWithoutEndPoint(string subPartyId, Ia.Ngn.Cl.Model.Nokia.SubParty retrievedSubParty, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response retrievedSubPartyResponse, string partyId, Ia.Ngn.Cl.Model.Nokia.Subscriber retrievedSubscriber, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response retrievedSubscriberResponse)
 1151:         {
 1152:             bool updated;
 1153:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
 1154:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
 1155:  
 1156:             updated = false;
 1157:  
 1158:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1159:             {
 1160:                 subParty = (from sp in db.SubParties where sp.Id == subPartyId select sp).SingleOrDefault();
 1161:                 subscriber = (from s in db.Subscribers where s.Id == partyId select s).SingleOrDefault();
 1162:  
 1163:                 if (retrievedSubParty != null && retrievedSubPartyResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful && retrievedSubscriber != null && retrievedSubscriberResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful)
 1164:                 {
 1165:                     if (subParty == null)
 1166:                     {
 1167:                         retrievedSubParty.Created = retrievedSubParty.Updated = DateTime.UtcNow.AddHours(3);
 1168:                         db.SubParties.Add(retrievedSubParty);
 1169:  
 1170:                         updated = true;
 1171:                     }
 1172:                     else
 1173:                     {
 1174:                         if (subParty.Update(retrievedSubParty))
 1175:                         {
 1176:                             db.SubParties.Attach(subParty);
 1177:                             db.Entry(subParty).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1178:  
 1179:                             updated = true;
 1180:                         }
 1181:                     }
 1182:  
 1183:                     // below: reference
 1184:                     retrievedSubscriber.SubParty = (from sp in db.SubParties where sp.Id == retrievedSubParty.Id select sp).SingleOrDefault();
 1185:  
 1186:                     if (subscriber == null)
 1187:                     {
 1188:                         retrievedSubscriber.Created = retrievedSubscriber.Updated = DateTime.UtcNow.AddHours(3);
 1189:                         db.Subscribers.Add(retrievedSubscriber);
 1190:  
 1191:                         updated = true;
 1192:                     }
 1193:                     else
 1194:                     {
 1195:                         if (subscriber.Update(retrievedSubscriber))
 1196:                         {
 1197:                             db.Subscribers.Attach(subscriber);
 1198:                             db.Entry(subscriber).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1199:  
 1200:                             updated = true;
 1201:                         }
 1202:                     }
 1203:                 }
 1204:                 else if (retrievedSubParty == null && retrievedSubPartyResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist && retrievedSubscriber == null && retrievedSubscriberResponse.ResultCode == Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist)
 1205:                 {
 1206:                     if (subscriber != null)
 1207:                     {
 1208:                         db.Subscribers.Remove(subscriber);
 1209:  
 1210:                         updated = true;
 1211:                     }
 1212:  
 1213:                     if (subParty != null)
 1214:                     {
 1215:                         db.SubParties.Remove(subParty);
 1216:  
 1217:                         updated = true;
 1218:                     }
 1219:                 }
 1220:                 else
 1221:                 {
 1222:  
 1223:                 }
 1224:  
 1225:                 db.SaveChanges();
 1226:             }
 1227:  
 1228:             return updated;
 1229:         }
 1230:  
 1231:         ////////////////////////////////////////////////////////////////////////////
 1232:  
 1233:         /// <summary>
 1234:         ///
 1235:         /// </summary>
 1236:         public static bool UpdateNgfsSubscriber(string partyId, string subPartyId, Ia.Ngn.Cl.Model.Business.Nokia.Ims.Response response, Ia.Ngn.Cl.Model.Nokia.Subscriber newSubscriber)
 1237:         {
 1238:             bool updated;
 1239:             string id;
 1240:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
 1241:  
 1242:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1243:             {
 1244:                 id = Ia.Ngn.Cl.Model.Nokia.Subscriber.SubscriberId(partyId);
 1245:  
 1246:                 subscriber = (from s in db.Subscribers where s.Id == id select s).SingleOrDefault();
 1247:  
 1248:                 switch (response.ResultCode)
 1249:                 {
 1250:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.Successful:
 1251:                         {
 1252:                             // below: reference
 1253:                             newSubscriber.SubParty = (from s in db.SubParties where s.Id == subPartyId select s).SingleOrDefault();
 1254:  
 1255:                             if (subscriber == null)
 1256:                             {
 1257:                                 newSubscriber.Created = newSubscriber.Updated = DateTime.UtcNow.AddHours(3);
 1258:                                 db.Subscribers.Add(newSubscriber);
 1259:  
 1260:                                 updated = true;
 1261:                             }
 1262:                             else
 1263:                             {
 1264:                                 if (subscriber.Update(newSubscriber))
 1265:                                 {
 1266:                                     db.Subscribers.Attach(subscriber);
 1267:                                     db.Entry(subscriber).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1268:  
 1269:                                     updated = true;
 1270:                                 }
 1271:                                 else updated = false;
 1272:                             }
 1273:  
 1274:                             break;
 1275:                         }
 1276:                     case Ia.Ngn.Cl.Model.Client.Nokia.Ims.ResultCode.PlxServiceObjectDoesNotExist:
 1277:                         {
 1278:                             if (subscriber != null)
 1279:                             {
 1280:                                 db.Subscribers.Remove(subscriber);
 1281:  
 1282:                                 updated = true;
 1283:                             }
 1284:                             else updated = false;
 1285:  
 1286:                             break;
 1287:                         }
 1288:                     default: updated = false; break;
 1289:                 }
 1290:  
 1291:                 db.SaveChanges();
 1292:             }
 1293:  
 1294:             return updated;
 1295:         }
 1296:  
 1297:         ////////////////////////////////////////////////////////////////////////////
 1298:  
 1299:         /// <summary>
 1300:         ///
 1301:         /// </summary>
 1302:         public static bool UpdateServiceFromAgcfGatewayRecordAndAgcfEndpointAndSubPartyAndSubscriber(string service, Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord agcfGatewayRecord, Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint agcfEndpoint, Ia.Ngn.Cl.Model.Nokia.SubParty subParty, Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber)
 1303:         {
 1304:             bool insert, update, delete;
 1305:             int serviceType;
 1306:             string serviceId;
 1307:             Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
 1308:             Ia.Ngn.Cl.Model.Service2 service2, newService;
 1309:  
 1310:             insert = update = delete = false;
 1311:             //result = new Ia.Cl.Model.Result();
 1312:  
 1313:             serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 1314:             serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(service, serviceType);
 1315:  
 1316:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1317:             {
 1318:                 if (agcfGatewayRecord != null && agcfEndpoint != null && subParty != null && subscriber != null)
 1319:                 {
 1320:                     newService = new Ia.Ngn.Cl.Model.Service2();
 1321:  
 1322:                     newService.Id = serviceId;
 1323:                     newService.AreaCode = Ia.Ngn.Cl.Model.Business.Service.CountryCode;
 1324:                     newService.Service = service;
 1325:                     newService.ServiceType = serviceType;
 1326:  
 1327:                     newService.CallerId = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallingLineIdIsAssigned(subscriber._CallingLineId);
 1328:                     newService.AbbriviatedCalling = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.OneDigitSpeedDialIsAssigned(subscriber._OneDigitSpeedDial);
 1329:                     newService.CallForwarding = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallForwardingIsAssigned(subscriber._CallForwardingVari);
 1330:                     newService.CallWaiting = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallWaitingIsAssigned(subscriber._CallWaiting, agcfEndpoint.CallWaitingLc);
 1331:                     newService.ConferenceCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ConferenceCallIsAssigned(subscriber._ConferenceCalling);
 1332:                     newService.InternationalCalling = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.InternationalCallingIsAssigned(subscriber._CallBarring);
 1333:                     newService.InternationalCallingUserControlled = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.InternationalCallingUserControlledIsAssigned(subscriber._OutgoingCallBarring);
 1334:  
 1335:                     newService.AlarmCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ReminderCallIsAssigned(subscriber._ReminderCall);
 1336:                     newService.WakeupCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ReminderCallIsAssigned(subscriber._ReminderCall);
 1337:  
 1338:                     newService.ServiceSuspension = subParty.ServiceSuspension;
 1339:                     //newService.CallBarring = subParty.ServiceSuspension;
 1340:  
 1341:                     newService.Pin = int.TryParse(subParty.Pin, out int i) ? i : 0;
 1342:  
 1343:                     nddOnt = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpToOntDictionary.ContainsKey(agcfGatewayRecord.IP1) ? Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntIpToOntDictionary[agcfGatewayRecord.IP1] : null;
 1344:  
 1345:                     if (nddOnt != null) newService.Access = (from a in db.Accesses where a.Id == nddOnt.Access.Id select a).SingleOrDefault();
 1346:                     else newService.Access = null;
 1347:  
 1348:                     service2 = (from s in db.Service2
 1349:                                 where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == newService.Id
 1350:                                 select s).SingleOrDefault();
 1351:  
 1352:                     if (service2 == null)
 1353:                     {
 1354:                         newService.Created = newService.Updated = DateTime.UtcNow.AddHours(3);
 1355:                         db.Service2.Add(newService);
 1356:  
 1357:                         insert = true;
 1358:                     }
 1359:                     else
 1360:                     {
 1361:                         if (service2.Update(newService))
 1362:                         {
 1363:                             db.Service2.Attach(service2);
 1364:                             db.Entry(service2).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1365:  
 1366:                             update = true;
 1367:                         }
 1368:                         else update = false;
 1369:                     }
 1370:                 }
 1371:                 else
 1372:                 {
 1373:                     service2 = (from s in db.Service2
 1374:                                 where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == serviceId
 1375:                                 select s).SingleOrDefault();
 1376:  
 1377:                     if (service2 != null)
 1378:                     {
 1379:                         db.Service2.Remove(service2);
 1380:  
 1381:                         delete = true;
 1382:                     }
 1383:                 }
 1384:  
 1385:                 db.SaveChanges();
 1386:             }
 1387:  
 1388:             //result.AddSuccess(service + ": state: " + Ia.Ngn.Cl.Model.Ui.Text.ExpressionOfInsertOrUpdateOrDelete(insert, update, delete));
 1389:  
 1390:             return insert || update || delete;
 1391:         }
 1392:  
 1393:         ////////////////////////////////////////////////////////////////////////////
 1394:  
 1395:         /// <summary>
 1396:         ///
 1397:         /// </summary>
 1398:         public static bool UpdateServiceFromSubPartyAndSubscriber(string service, string accessId)
 1399:         {
 1400:             bool insert, update, delete;
 1401:             int serviceType;
 1402:             string serviceId;
 1403:             Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
 1404:             Ia.Ngn.Cl.Model.Nokia.Subscriber subscriber;
 1405:             Ia.Ngn.Cl.Model.Service2 service2, newService;
 1406:  
 1407:             insert = update = delete = false;
 1408:             //result = new Ia.Cl.Model.Result();
 1409:  
 1410:             serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 1411:             serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(service, serviceType);
 1412:  
 1413:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1414:             {
 1415:                 var partyId = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.PartyId(service);
 1416:                 var subPartyId = Ia.Ngn.Cl.Model.Nokia.SubParty.SubPartyId(partyId);
 1417:  
 1418:                 subParty = (from sp in db.SubParties where sp.Id == subPartyId select sp).SingleOrDefault();
 1419:                 subscriber = (from s in db.Subscribers where s.Id == partyId select s).SingleOrDefault();
 1420:  
 1421:                 if (subParty != null && subscriber != null)
 1422:                 {
 1423:                     newService = new Ia.Ngn.Cl.Model.Service2();
 1424:  
 1425:                     newService.Id = serviceId;
 1426:                     newService.AreaCode = Ia.Ngn.Cl.Model.Business.Service.CountryCode;
 1427:                     newService.Service = service;
 1428:                     newService.ServiceType = serviceType;
 1429:  
 1430:                     newService.CallerId = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallingLineIdIsAssigned(subscriber._CallingLineId);
 1431:                     newService.AbbriviatedCalling = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.OneDigitSpeedDialIsAssigned(subscriber._OneDigitSpeedDial);
 1432:                     newService.CallForwarding = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallForwardingIsAssigned(subscriber._CallForwardingVari);
 1433:                     newService.CallWaiting = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.CallWaitingIsAssigned(subscriber._CallWaiting, false);// agcfEndpoint.CallWaitingLc);
 1434:                     newService.ConferenceCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ConferenceCallIsAssigned(subscriber._ConferenceCalling);
 1435:                     newService.InternationalCalling = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.InternationalCallingIsAssigned(subscriber._CallBarring);
 1436:                     newService.InternationalCallingUserControlled = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.InternationalCallingUserControlledIsAssigned(subscriber._OutgoingCallBarring);
 1437:  
 1438:                     newService.AlarmCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ReminderCallIsAssigned(subscriber._ReminderCall);
 1439:                     newService.WakeupCall = Ia.Ngn.Cl.Model.Business.Nokia.Subscriber.ReminderCallIsAssigned(subscriber._ReminderCall);
 1440:  
 1441:                     newService.ServiceSuspension = subParty.ServiceSuspension;
 1442:                     //newService.CallBarring = subParty.ServiceSuspension;
 1443:  
 1444:                     newService.Pin = int.TryParse(subParty.Pin, out int i) ? i : 0;
 1445:  
 1446:                     if (!string.IsNullOrEmpty(accessId)) newService.Access = (from a in db.Accesses where a.Id == accessId select a).SingleOrDefault();
 1447:                     else newService.Access = null;
 1448:  
 1449:                     service2 = (from s in db.Service2
 1450:                                 where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == newService.Id
 1451:                                 select s).SingleOrDefault();
 1452:  
 1453:                     if (service2 == null)
 1454:                     {
 1455:                         newService.Created = newService.Updated = DateTime.UtcNow.AddHours(3);
 1456:                         db.Service2.Add(newService);
 1457:  
 1458:                         insert = true;
 1459:                     }
 1460:                     else
 1461:                     {
 1462:                         if (service2.Update(newService))
 1463:                         {
 1464:                             db.Service2.Attach(service2);
 1465:                             db.Entry(service2).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1466:  
 1467:                             update = true;
 1468:                         }
 1469:                         else update = false;
 1470:                     }
 1471:                 }
 1472:                 else
 1473:                 {
 1474:                     service2 = (from s in db.Service2
 1475:                                 where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == serviceId
 1476:                                 select s).SingleOrDefault();
 1477:  
 1478:                     if (service2 != null)
 1479:                     {
 1480:                         db.Service2.Remove(service2);
 1481:  
 1482:                         delete = true;
 1483:                     }
 1484:                 }
 1485:  
 1486:                 db.SaveChanges();
 1487:             }
 1488:  
 1489:             //result.AddSuccess(service + ": state: " + Ia.Ngn.Cl.Model.Ui.Text.ExpressionOfInsertOrUpdateOrDelete(insert, update, delete));
 1490:  
 1491:             return insert || update || delete;
 1492:         }
 1493:  
 1494:         /*
 1495:         ////////////////////////////////////////////////////////////////////////////
 1496: 
 1497:         /// <summary>
 1498:         ///
 1499:         /// </summary>
 1500:         public static bool UpdateServiceList(Dictionary<long, Ia.Ngn.Cl.Model.Service> dnServiceDictionary)
 1501:         {
 1502:             bool isOk;
 1503:             int serviceType;
 1504:             long dn;
 1505:             string serviceId;
 1506:             Ia.Ngn.Cl.Model.Service service;
 1507:             Ia.Ngn.Cl.Model.Service2 service2, newService2;
 1508: 
 1509:             isOk = false;
 1510: 
 1511:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1512:             {
 1513:                 // below:
 1514:                 foreach (KeyValuePair<long, Ia.Ngn.Cl.Model.Service> u in dnServiceDictionary)
 1515:                 {
 1516:                     dn = u.Key;
 1517:                     service = u.Value;
 1518: 
 1519:                     serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.Ngn;
 1520:                     serviceId = Ia.Ngn.Cl.Model.Service2.ServiceId(dn.ToString().Remove(0, 3), serviceType); // temp: remove 3 digits
 1521: 
 1522:                     // below:
 1523:                     if (service != null)
 1524:                     {
 1525:                         newService2 = new Ia.Ngn.Cl.Model.Service2();
 1526: 
 1527:                         newService2.Id = serviceId;
 1528:                         newService2.AreaCode = Ia.Ngn.Cl.Model.Data.Service.CountryCode;
 1529:                         newService2.Service = dn.ToString();
 1530:                         newService2.ServiceType = serviceType;
 1531: 
 1532:                         //newService2.ServiceSuspension = ??
 1533:                         newService2.CallBarring = service.OCBUC_ass;
 1534:                         newService2.CallForwarding = service.CFU_ass;
 1535:                         newService2.ConferenceCall = service.CONF;
 1536:                         //newService2.ConferenceCall = service.TPS_ass;
 1537: 
 1538:                         newService2.AlarmCall = service.ALM_ass;
 1539:                         newService2.CallWaiting = service.CW_ass;
 1540:                         newService2.Pin = service.PIN_code;
 1541: 
 1542:                         newService2.CallerId = service.CLIP;
 1543: 
 1544:                         service2 = (from q in db.Service2s where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.NgnService && q.Id == newService2.Id select q).SingleOrDefault();
 1545: 
 1546:                         if (service2 == null)
 1547:                         {
 1548:                             newService2.Created = newService2.Updated = DateTime.UtcNow.AddHours(3);
 1549:                             db.Service2s.Add(newService2);
 1550:                         }
 1551:                         else
 1552:                         {
 1553:                             if (service2.Update(newService2))
 1554:                             {
 1555:                                 db.Service2s.Attach(service2);
 1556:                                 db.Entry(service2).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 1557:                             }
 1558:                         }
 1559:                     }
 1560:                     else
 1561:                     {
 1562:                         service2 = (from q in db.Service2s where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.NgnService && q.Id == serviceId select q).SingleOrDefault();
 1563: 
 1564:                         if (service2 != null) db.Service2s.Remove(service2);
 1565:                     }
 1566:                 }
 1567: 
 1568:                 db.SaveChanges();
 1569: 
 1570:                 isOk = true;
 1571:             }
 1572: 
 1573:             return isOk;
 1574:         }
 1575:          */
 1576:  
 1577:         ////////////////////////////////////////////////////////////////////////////
 1578:  
 1579:         /// <summary>
 1580:         ///
 1581:         /// </summary>
 1582:         public static List<int> AllPossibleGatewayIdList
 1583:         {
 1584:             get
 1585:             {
 1586:                 // below: GwId are defined by Nokia
 1587:  
 1588:                 List<int> allPossibleGatewayIdList;
 1589:  
 1590:                 allPossibleGatewayIdList = new List<int>(Ia.Ngn.Cl.Model.Business.Nokia.Ims.LastGatewayId - Ia.Ngn.Cl.Model.Business.Nokia.Ims.FirstGatewayId);
 1591:  
 1592:                 //allPossibleGatewayIdList = Ia.Ngn.Cl.Model.Data.Nokia.Default.GatewayIdList;
 1593:  
 1594:                 for (int i = Ia.Ngn.Cl.Model.Business.Nokia.Ims.FirstGatewayId; i <= Ia.Ngn.Cl.Model.Business.Nokia.Ims.LastGatewayId; i++)
 1595:                 {
 1596:                     allPossibleGatewayIdList.Add(i);
 1597:                 }
 1598:  
 1599:                 return allPossibleGatewayIdList;
 1600:             }
 1601:         }
 1602:  
 1603:         ////////////////////////////////////////////////////////////////////////////
 1604:  
 1605:         /// <summary>
 1606:         ///
 1607:         /// </summary>
 1608:         public static List<Ia.Ngn.Cl.Model.Ont> AllPossibleOntNotInAgcfGatewayRecordList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
 1609:         {
 1610:             DiscrepancyBetweenOntListAndAgctGatewayRecordList(olt, out List<Ia.Ngn.Cl.Model.Ont> ontsNotInAgcfGatewayRecordsList, out List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordsNoInOntsList);
 1611:  
 1612:             return ontsNotInAgcfGatewayRecordsList;
 1613:         }
 1614:  
 1615:         ////////////////////////////////////////////////////////////////////////////
 1616:  
 1617:         /// <summary>
 1618:         ///
 1619:         /// </summary>
 1620:         public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddOntNotInAgcfGatewayRecordList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
 1621:         {
 1622:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntList;
 1623:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntsNotInAgcfGatewayRecordsList;
 1624:             List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
 1625:  
 1626:             // below: NGN ONT list
 1627:             ngnOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 1628:                           where o.Pon.PonGroup.Olt.Id == olt.Id
 1629:                           select o).ToList();
 1630:  
 1631:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1632:             {
 1633:                 // below: AgcfGatewayRecord list
 1634:                 agcfGatewayRecordList = (from a in db.AgcfGatewayRecords select a).AsNoTracking().ToList();
 1635:             }
 1636:  
 1637:             // below: ONTs not in AgcfGatewayRecord list
 1638:             ngnOntsNotInAgcfGatewayRecordsList = (from no in ngnOntList
 1639:                                                   join a in agcfGatewayRecordList on no.Ip equals a.IP1
 1640:                                                   into gj
 1641:                                                   from sub in gj.DefaultIfEmpty()
 1642:                                                   where sub == null
 1643:                                                   select no).ToList();
 1644:  
 1645:             return ngnOntsNotInAgcfGatewayRecordsList;
 1646:         }
 1647:  
 1648:         ////////////////////////////////////////////////////////////////////////////
 1649:  
 1650:         /// <summary>
 1651:         ///
 1652:         /// </summary>
 1653:         public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddNokiaSwitchOntInNonSipOltWithAccessButNoAgcfGatewayRecordList()
 1654:         {
 1655:             var accessIdDictionary = Ia.Ngn.Cl.Model.Data.Access.IdDictionary;
 1656:  
 1657:             var ontList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList;
 1658:  
 1659:             var nddOntWithinAccessList = (from o in ontList
 1660:                                           where o.Pon.PonGroup.Olt.IsSip == false
 1661:                                           && o.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
 1662:                                           && accessIdDictionary.ContainsKey(o.Access.Id)
 1663:                                           //&& accessIdList.Contains(o.Access.Id) // very slow
 1664:                                           select o).ToList();
 1665:  
 1666:             var agcfGatewayRecordIp1List = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.IpList();
 1667:  
 1668:             // below: ONTs in Accesses but not in AgcfGatewayRecord list
 1669:             var nddOntList = (from no in nddOntWithinAccessList
 1670:                               join grip1 in agcfGatewayRecordIp1List on no.Ip equals grip1
 1671:                               into gj
 1672:                               from sub in gj.DefaultIfEmpty()
 1673:                               where sub == null
 1674:                               select no).ToList();
 1675:  
 1676:             return nddOntList;
 1677:         }
 1678:  
 1679:         ////////////////////////////////////////////////////////////////////////////
 1680:  
 1681:         /// <summary>
 1682:         ///
 1683:         /// </summary>
 1684:         public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> AgcfGatewayRecordWithNoNddNokiaSwitchOntInNonSipOltAndNullOrEmptyAgcfEndpointList()
 1685:         {
 1686:             List<string> accessIdList;
 1687:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ontList, nddOntWithNoAccessList;
 1688:             List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList, agcfGatewayRecordWithNoNddOntList, agcfGatewayRecordWithNoNddOntAccessList;
 1689:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nokiaSwitchOntInNonSipOltList;
 1690:  
 1691:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1692:             {
 1693:                 accessIdList = (from a in db.Accesses select a.Id).AsNoTracking().ToList();
 1694:  
 1695:                 agcfGatewayRecordList = (from a in db.AgcfGatewayRecords
 1696:                                          select a)/*.Include(u => u.AgcfEndpoints)*/.AsNoTracking().ToList();
 1697:  
 1698:                 ontList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList;
 1699:  
 1700:                 nokiaSwitchOntInNonSipOltList = (from o in ontList
 1701:                                                  where o.Pon.PonGroup.Olt.IsSip == false
 1702:                                                  && o.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
 1703:                                                  select o).ToList();
 1704:  
 1705:                 // below: AgcfGatewayRecord with no corresponding NDD ONT entries
 1706:                 agcfGatewayRecordWithNoNddOntList = (from gr in agcfGatewayRecordList
 1707:                                                      join no in nokiaSwitchOntInNonSipOltList
 1708:                                                      on gr.IP1 equals no.Ip
 1709:                                                      into gj
 1710:                                                      from sub in gj.DefaultIfEmpty()
 1711:                                                      where sub == null
 1712:                                                      select gr).ToList();
 1713:  
 1714:                 // below: NDD ONTs with no access
 1715:                 nddOntWithNoAccessList = (from o in nokiaSwitchOntInNonSipOltList
 1716:                                           join a in accessIdList on o.Access.Id equals a
 1717:                                           into gj
 1718:                                           from sub in gj.DefaultIfEmpty()
 1719:                                           where sub == null
 1720:                                           select o).ToList();
 1721:  
 1722:                 // below: AgcfGatewayRecord with no corresponding NDD ONT access entries
 1723:                 agcfGatewayRecordWithNoNddOntAccessList = (from gr in agcfGatewayRecordList
 1724:                                                            join no in nddOntWithNoAccessList
 1725:                                                            on gr.IP1 equals no.Ip
 1726:                                                            select gr).ToList();
 1727:             }
 1728:  
 1729:             return agcfGatewayRecordWithNoNddOntList.Union(agcfGatewayRecordWithNoNddOntAccessList).ToList();
 1730:         }
 1731:  
 1732:         ////////////////////////////////////////////////////////////////////////////
 1733:  
 1734:         /// <summary>
 1735:         ///
 1736:         /// </summary>
 1737:         public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddOntWithAgcfGatewayRecordAndNotEmptyAgcfEndpointAndNullAccessList()
 1738:         {
 1739:             List<string> accessIdList;
 1740:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nddOntWithNoAccessList, nddOntWithAgcfGatewayRecordAndNotEmptyAgcfEndpointAndNullAccessList;
 1741:             List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList, agcfGatewayRecordWithNddOntAndNotEmptyAgcfEndpointList;
 1742:  
 1743:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1744:             {
 1745:                 accessIdList = (from a in db.Accesses select a.Id).AsNoTracking().ToList();
 1746:  
 1747:                 agcfGatewayRecordList = (from a in db.AgcfGatewayRecords select a).Include(u => u.AgcfEndpoints).AsNoTracking().ToList();
 1748:  
 1749:                 // below: AgcfGatewayRecord with corresponding NDD ONT entries and not empty AgcfEndpoints
 1750:                 agcfGatewayRecordWithNddOntAndNotEmptyAgcfEndpointList = (from gr in agcfGatewayRecordList
 1751:                                                                           join no in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 1752:                                                                           on gr.IP1 equals no.Ip
 1753:                                                                           where gr.AgcfEndpoints != null && gr.AgcfEndpoints.Count > 0
 1754:                                                                           select gr).ToList();
 1755:  
 1756:                 // below: NDD ONTs with no access
 1757:                 nddOntWithNoAccessList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 1758:                                           join a in accessIdList on o.Access.Id equals a
 1759:                                           into gj
 1760:                                           from sub in gj.DefaultIfEmpty()
 1761:                                           where sub == null
 1762:                                           select o).ToList();
 1763:  
 1764:                 // below: AgcfGatewayRecord with corresponding NDD ONT entries and not empty AgcfEndpoints, but with no corresponding NDD ONT access entries
 1765:                 nddOntWithAgcfGatewayRecordAndNotEmptyAgcfEndpointAndNullAccessList = (from no in nddOntWithNoAccessList
 1766:                                                                                        join gr in agcfGatewayRecordList
 1767:                                                                                        on no.Ip equals gr.IP1
 1768:                                                                                        select no).ToList();
 1769:             }
 1770:  
 1771:             return nddOntWithAgcfGatewayRecordAndNotEmptyAgcfEndpointAndNullAccessList.ToList();
 1772:         }
 1773:  
 1774:         ////////////////////////////////////////////////////////////////////////////
 1775:  
 1776:         /// <summary>
 1777:         ///
 1778:         /// </summary>
 1779:         public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddOntWithNoAccessList()
 1780:         {
 1781:             List<string> accessIdList;
 1782:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nddOntList;
 1783:  
 1784:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1785:             {
 1786:                 accessIdList = (from a in db.Accesses select a.Id).AsNoTracking().ToList();
 1787:  
 1788:                 // below:
 1789:                 nddOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 1790:                               join a in accessIdList on o.Access.Id equals a
 1791:                               into gj
 1792:                               from sub in gj.DefaultIfEmpty()
 1793:                               where sub == null
 1794:                               select o).ToList();
 1795:             }
 1796:  
 1797:             return nddOntList;
 1798:         }
 1799:  
 1800:         ////////////////////////////////////////////////////////////////////////////
 1801:  
 1802:         /// <summary>
 1803:         ///
 1804:         /// </summary>
 1805:         public static List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> AllPossibleAgcfGatewayRecordsNoInOntsList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt)
 1806:         {
 1807:             DiscrepancyBetweenOntListAndAgctGatewayRecordList(olt, out List<Ia.Ngn.Cl.Model.Ont> ontsNotInAgcfGatewayRecordsList, out List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordsNoInOntsList);
 1808:  
 1809:             return agcfGatewayRecordsNoInOntsList;
 1810:         }
 1811:  
 1812:         ////////////////////////////////////////////////////////////////////////////
 1813:  
 1814:         /// <summary>
 1815:         ///
 1816:         /// </summary>
 1817:         private static void DiscrepancyBetweenOntListAndAgctGatewayRecordList(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Olt olt, out List<Ia.Ngn.Cl.Model.Ont> ontsNotInAgcfGatewayRecordsList, out List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordsNoInOntsList)
 1818:         {
 1819:             List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> ngnOntList;
 1820:             List<Ia.Ngn.Cl.Model.Ont> ontList;
 1821:             List<Ia.Ngn.Cl.Model.Nokia.AgcfGatewayRecord> agcfGatewayRecordList;
 1822:  
 1823:             // below: NGN ONT list
 1824:             ngnOntList = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 1825:                           where o.Pon.PonGroup.Olt.Id == olt.Id
 1826:                           select o).ToList();
 1827:  
 1828:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1829:             {
 1830:                 // below: ONT list
 1831:                 ontList = (from o in db.Onts
 1832:                            where o.Access != null && o.Access.Olt == olt.Id
 1833:                            select o).AsNoTracking().ToList();
 1834:  
 1835:                 // below: AgcfGatewayRecord list
 1836:                 agcfGatewayRecordList = (from a in db.AgcfGatewayRecords select a).AsNoTracking().ToList();
 1837:             }
 1838:  
 1839:             // below: ONTs not in AgcfGatewayRecord list
 1840:             ontsNotInAgcfGatewayRecordsList = (from o in ontList
 1841:                                                join no in ngnOntList on o.Id equals no.Id
 1842:                                                join a in agcfGatewayRecordList on no.Ip equals a.IP1
 1843:                                                into gj
 1844:                                                from sub in gj.DefaultIfEmpty()
 1845:                                                where sub == null
 1846:                                                select o).ToList();
 1847:  
 1848:             // below: AgcfGatewayRecords with IPs that are not in NGN ONT list
 1849:             agcfGatewayRecordsNoInOntsList = (from a in agcfGatewayRecordList
 1850:                                               join no in ngnOntList on a.IP1 equals no.Ip
 1851:                                               into gj
 1852:                                               from sub in gj.DefaultIfEmpty()
 1853:                                               where sub == null
 1854:                                               select a).ToList();
 1855:  
 1856:         }
 1857:  
 1858:         ////////////////////////////////////////////////////////////////////////////
 1859:  
 1860:         /// <summary>
 1861:         ///
 1862:         /// </summary>
 1863:         private static List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> AgcfEndpointsWithNoSubPartyReferenceList
 1864:         {
 1865:             get
 1866:             {
 1867:                 List<Ia.Ngn.Cl.Model.Nokia.AgcfEndpoint> agcfEndpointList;
 1868:  
 1869:                 using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1870:                 {
 1871:                     agcfEndpointList = (from e in db.AgcfEndpoints
 1872:                                         join s in db.SubParties on e equals s.AgcfEndpoint
 1873:                                         into gj
 1874:                                         from u in gj.DefaultIfEmpty()
 1875:                                         where u == null
 1876:                                         select e).ToList();
 1877:                 }
 1878:  
 1879:                 return agcfEndpointList;
 1880:             }
 1881:         }
 1882:  
 1883:         ////////////////////////////////////////////////////////////////////////////
 1884:  
 1885:         /// <summary>
 1886:         ///
 1887:         /// </summary>
 1888:         public static List<string> ServiceProvisionedManuallyWithNonStandardHenceNotFunctionalPartyIdNames
 1889:         {
 1890:             get
 1891:             {
 1892:                 List<string> list;
 1893:  
 1894:                 list = new List<string>();
 1895:  
 1896:                 using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1897:                 {
 1898:                     // exclude 1-800 numbers and numbers without AgcfEndpoints
 1899:  
 1900:                     // select Id from Subscribers where Id not like '+965________'
 1901:                     var subscriberSubpartyIdList = (from s in db.Subscribers where !(s.Id.StartsWith("+965") && s.Id.Length == 12) && !s.Id.StartsWith("+96518") select s.SubParty.Id).ToList();
 1902:  
 1903:                     // select DisplayName,PartyId from SubParties where AgcfEndpoint_Id not like 'priv____________'
 1904:                     var subPartyIdList = (from sp in db.SubParties where !(sp.AgcfEndpoint.Id.StartsWith("priv") && sp.AgcfEndpoint.Id.Length == 16) && !sp.Id.StartsWith("+96518") && sp.AgcfEndpoint != null select sp.Id).ToList();
 1905:  
 1906:                     // select PrividUser, GwId from AgcfEndpoints where Id not like 'priv____________'
 1907:                     var agcfEndpointDnList = (from ep in db.AgcfEndpoints where !(ep.Id.StartsWith("priv") && ep.Id.Length == 16) && !ep.Dn.StartsWith("+96518") select ep.Dn).ToList();
 1908:  
 1909:                     list.AddRange(subscriberSubpartyIdList);
 1910:                     list.AddRange(subPartyIdList);
 1911:                     list.AddRange(agcfEndpointDnList);
 1912:                 }
 1913:  
 1914:                 return list;
 1915:             }
 1916:         }
 1917:  
 1918:         ////////////////////////////////////////////////////////////////////////////
 1919:         ////////////////////////////////////////////////////////////////////////////
 1920:  
 1921:         /// <summary>
 1922:         ///
 1923:         /// </summary>
 1924:         public static List<string> AgcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList
 1925:         {
 1926:             get
 1927:             {
 1928:                 if (agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList == null || agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList.Count == 0)
 1929:                 {
 1930:                     lock (objectLock)
 1931:                     {
 1932:                         agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList = Ia.Ngn.Cl.Model.Data.Nokia.Ims._AgcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList;
 1933:                     }
 1934:                 }
 1935:  
 1936:                 return agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList;
 1937:             }
 1938:         }
 1939:  
 1940:         ////////////////////////////////////////////////////////////////////////////
 1941:  
 1942:         /// <summary>
 1943:         ///
 1944:         /// </summary>
 1945:         private static List<string> _AgcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList
 1946:         {
 1947:             get
 1948:             {
 1949:                 using (var db = new Ia.Ngn.Cl.Model.Ngn())
 1950:                 {
 1951:                     agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList = (from sp in db.SubParties
 1952:                                                                                                 where sp.Category == "SERVICEBUNDLE2"
 1953:                                                                                                 join e in db.AgcfEndpoints on sp.AgcfEndpoint.Id equals e.Id
 1954:                                                                                                 join gr in db.AgcfGatewayRecords on e.AgcfGatewayRecord.Id equals gr.Id
 1955:                                                                                                 select gr.IP1).Distinct().ToList();
 1956:  
 1957:                     /*
 1958: select distinct gr.IP1 from AgcfGatewayRecords gr 
 1959: left outer join AgcfEndpoints ep on ep.AgcfGatewayRecord_Id = gr.Id
 1960: left outer join SubParties sp on sp.AgcfEndpoint_Id = ep.Id
 1961: where sp.Category = 'SERVICEBUNDLE2'
 1962: */
 1963:                 }
 1964:  
 1965:                 return agcfGatewayRecordIp1sWithinWhichSubPartiesHaveServiceBundle2CategoryList;
 1966:             }
 1967:         }
 1968:  
 1969:         ////////////////////////////////////////////////////////////////////////////
 1970:         ////////////////////////////////////////////////////////////////////////////
 1971:  
 1972:         /// <summary>
 1973:         ///
 1974:         /// </summary>
 1975:         public static List<string> AgcfGatewayRecordIp1sThatIndicateFsdb0List
 1976:         {
 1977:             get
 1978:             {
 1979:                 if (agcfGatewayRecordIp1sThatIndicateFsdb0List == null || agcfGatewayRecordIp1sThatIndicateFsdb0List.Count == 0)
 1980:                 {
 1981:                     lock (objectLock)
 1982:                     {
 1983:                         agcfGatewayRecordIp1sThatIndicateFsdb0List = Ia.Ngn.Cl.Model.Data.Nokia.Ims._AgcfGatewayRecordIp1sThatIndicateFsdb0List;
 1984:                     }
 1985:                 }
 1986:  
 1987:                 return agcfGatewayRecordIp1sThatIndicateFsdb0List;
 1988:             }
 1989:         }
 1990:  
 1991:         ////////////////////////////////////////////////////////////////////////////
 1992:  
 1993:         /// <summary>
 1994:         ///
 1995:         /// </summary>
 1996:         private static List<string> _AgcfGatewayRecordIp1sThatIndicateFsdb0List
 1997:         {
 1998:             get
 1999:             {
 2000:                 using (var db = new Ia.Ngn.Cl.Model.Ngn())
 2001:                 {
 2002:                     agcfGatewayRecordIp1sThatIndicateFsdb0List = (from gr in db.AgcfGatewayRecords where gr.AgcfSipIaPort == "agcf-stdn.imsgroup0-000" select gr.IP1).Distinct().ToList();
 2003:  
 2004:                     // select distinct IP1 from AgcfGatewayRecords where AgcfSipIaPort = 'agcf-stdn.imsgroup0-000'
 2005:                 }
 2006:  
 2007:                 return agcfGatewayRecordIp1sThatIndicateFsdb0List;
 2008:             }
 2009:         }
 2010:  
 2011:         ////////////////////////////////////////////////////////////////////////////
 2012:         ////////////////////////////////////////////////////////////////////////////
 2013:     }
 2014:  
 2015:     ////////////////////////////////////////////////////////////////////////////
 2016:     ////////////////////////////////////////////////////////////////////////////   
 2017: }