)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Ims (Ia.Ftn.Cl.Models.Data.Nokia)

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

Fixed Telecommunications Network's Operations Support System Management Intranet (FTN OSS) support class for Nokia's Fixed Telecommunications Network (FTN) data model.

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