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

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

EWSD Subscriber support class for Optical Fiber Network (OFN) data model.

    1: using Microsoft.EntityFrameworkCore;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Data;
    5: using System.Linq;
    6: using System.Text;
    7:  
    8: namespace Ia.Ngn.Cl.Model.Data.Siemens
    9: {
   10:     ////////////////////////////////////////////////////////////////////////////
   11:  
   12:     /// <summary publish="true">
   13:     /// EWSD Subscriber support class for Optical Fiber Network (OFN) data model.
   14:     /// </summary>
   15:     /// 
   16:     /// <remarks> 
   17:     /// Copyright © 2018-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   18:     ///
   19:     /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
   20:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   21:     ///
   22:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   23:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   24:     /// 
   25:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   26:     /// 
   27:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   28:     /// </remarks> 
   29:     public class Subscriber
   30:     {
   31:         /// <summary/>
   32:         public Subscriber() { }
   33:  
   34:         ////////////////////////////////////////////////////////////////////////////
   35:  
   36:         /// <summary>
   37:         ///
   38:         /// </summary>
   39:         public static bool Update(Ia.Ngn.Cl.Model.Business.Siemens.Ewsd.Response response, out Ia.Cl.Model.Result result)
   40:         {
   41:             bool isUpdated;
   42:             int queryDn, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
   43:             string id, queryDnString, queryCommand;
   44:             Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber subscriber, newSubscriber;
   45:  
   46:             isUpdated = false;
   47:             readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
   48:             result = new Ia.Cl.Model.Result();
   49:  
   50:             queryCommand = response.CommandString;
   51:  
   52:             // DISPSUB:DN=25421113;
   53:             queryDnString = Ia.Cl.Model.Default.Match(queryCommand, @"DN=(\d{8})");
   54:  
   55:             queryDn = int.Parse(queryDnString);
   56:  
   57:             readItemCount = 1; // response.Count;
   58:  
   59:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
   60:             {
   61:                 id = Ia.Ngn.Cl.Model.Business.Siemens.Subscriber.SubscriberId(queryDn);
   62:  
   63:                 subscriber = (from es in db.EwsdSubscribers where es.Id == id select es).SingleOrDefault();
   64:                 //subscriber = (from es in db.EwsdSubscribers where es.DN == queryDn select es).SingleOrDefault(); very slow.
   65:  
   66:                 existingItemCount = (subscriber != null) ? 1 : 0;
   67:  
   68:                 if (response.IsSuccess) //.Count >= 1)
   69:                 {
   70:                     newSubscriber = new Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber()
   71:                     {
   72:                         Id = id,
   73:                         DN = response.Dn,
   74:                         LAC = response.Lac,
   75:                         EQN = response.Eqn,
   76:                         CAT = response.Cat,
   77:                         LTT = response.Ltt,
   78:                         OPTRCL = response.Optrcl,
   79:                         SUBTRCL = response.Subtrcl,
   80:                         NUMCAL = response.Numcal,
   81:                         ORIG1 = response.Orig1,
   82:                         TRARSTR = response.Trarstr,
   83:                         LNATT = response.Lnatt,
   84:                         DIV = response.Div,
   85:                         COS = response.Cos,
   86:                         ADDINF = response.Addinf,
   87:                         NUMBCH = response.Numbch,
   88:                         CTDIVI = response.Ctdivi,
   89:                         BLK = response.Blk,
   90:                         Content = string.Empty// response.Content
   91:                     };
   92:  
   93:                     if (subscriber == null)
   94:                     {
   95:                         newSubscriber.Created = newSubscriber.Updated = DateTime.UtcNow.AddHours(3);
   96:  
   97:                         db.EwsdSubscribers.Add(newSubscriber);
   98:  
   99:                         insertedItemCount++;
  100:                     }
  101:                     else
  102:                     {
  103:                         if (subscriber.Update(newSubscriber))
  104:                         {
  105:                             db.EwsdSubscribers.Attach(subscriber);
  106:                             db.Entry(subscriber).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  107:  
  108:                             updatedItemCount++;
  109:                         }
  110:                     }
  111:                 }
  112:                 else
  113:                 {
  114:                     // below: remove since reading was empty
  115:  
  116:                     if (subscriber != null)
  117:                     {
  118:                         subscriber = (from es in db.EwsdSubscribers where es.Id == id select es).SingleOrDefault();
  119:                         //subscriber = (from es in db.EwsdSubscribers where es.DN == queryDn select es).SingleOrDefault(); very slow.
  120:  
  121:                         db.EwsdSubscribers.Remove(subscriber);
  122:  
  123:                         deletedItemCount++;
  124:                     }
  125:                 }
  126:  
  127:                 db.SaveChanges();
  128:             }
  129:  
  130:             if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
  131:             else isUpdated = false;
  132:  
  133:             result.AddSuccess("(" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
  134:  
  135:             return isUpdated;
  136:         }
  137:  
  138:         ////////////////////////////////////////////////////////////////////////////
  139:  
  140:         /// <summary>
  141:         ///
  142:         /// </summary>
  143:         public static List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> List()
  144:         {
  145:             List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> list;
  146:  
  147:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  148:             {
  149:                 list = (from es in db.EwsdSubscribers select es).ToList();
  150:             }
  151:  
  152:             return list;
  153:         }
  154:  
  155:         ////////////////////////////////////////////////////////////////////////////
  156:  
  157:         /// <summary>
  158:         ///
  159:         /// </summary>
  160:         public static List<int> DnList()
  161:         {
  162:             List<int> list;
  163:  
  164:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  165:             {
  166:                 list = (from es in db.EwsdSubscribers select es.DN).ToList();
  167:             }
  168:  
  169:             return list;
  170:         }
  171:  
  172:         ////////////////////////////////////////////////////////////////////////////
  173:  
  174:         /// <summary>
  175:         ///
  176:         /// </summary>
  177:         public static List<int> ProvisionedDnList()
  178:         {
  179:             List<int> list;
  180:  
  181:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  182:             {
  183:                 list = (from es in db.EwsdSubscribers where es.LAC != null && es.EQN != null select es.DN).ToList();
  184:             }
  185:  
  186:             return list;
  187:         }
  188:  
  189:         ////////////////////////////////////////////////////////////////////////////
  190:  
  191:         /// <summary>
  192:         ///
  193:         /// </summary>
  194:         public static List<string> ProvisionedServiceList()
  195:         {
  196:             List<string> list;
  197:  
  198:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  199:             {
  200:                 list = (from es in db.EwsdSubscribers
  201:                         where es.LAC != null && es.EQN != null
  202:                         select es.DN.ToString()).AsNoTracking().ToList();
  203:             }
  204:  
  205:             return list;
  206:         }
  207:  
  208:         ////////////////////////////////////////////////////////////////////////////
  209:  
  210:         /// <summary>
  211:         /// 
  212:         /// </summary>
  213:         public static List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> List(List<string> serviceList)
  214:         {
  215:             List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> list;
  216:  
  217:             if (serviceList.Count > 0)
  218:             {
  219:                 var dnList = serviceList.ConvertAll(int.Parse);
  220:                 var idList = new List<string>();
  221:  
  222:                 foreach (var dn in dnList)
  223:                 {
  224:                     idList.Add(Ia.Ngn.Cl.Model.Business.Siemens.Subscriber.SubscriberId(dn));
  225:                 }
  226:  
  227:                 using (var db = new Ia.Ngn.Cl.Model.Ngn())
  228:                 {
  229:                     list = (from es in db.EwsdSubscribers
  230:                             where idList.Contains(es.Id)
  231:                             select es).ToList();
  232:                 }
  233:             }
  234:             else list = new List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber>();
  235:  
  236:             return list;
  237:         }
  238:  
  239:         ////////////////////////////////////////////////////////////////////////////
  240:  
  241:         /// <summary>
  242:         ///
  243:         /// </summary>
  244:         public static List<Ia.Ngn.Cl.Model.Ui.Siemens.Subscriber> ListWithoutContent()
  245:         {
  246:             List<Ia.Ngn.Cl.Model.Ui.Siemens.Subscriber> list;
  247:  
  248:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  249:             {
  250:                 list = (from es in db.EwsdSubscribers
  251:                         select new Ia.Ngn.Cl.Model.Ui.Siemens.Subscriber()
  252:                         {
  253:                             DN = es.DN,
  254:                             LAC = es.LAC,
  255:                             EQN = es.EQN,
  256:                             CAT = es.CAT,
  257:                             LTT = es.LTT,
  258:                             OPTRCL = es.OPTRCL,
  259:                             SUBTRCL = es.SUBTRCL,
  260:                             NUMCAL = es.NUMCAL,
  261:                             ORIG1 = es.ORIG1,
  262:                             TRARSTR = es.TRARSTR,
  263:                             LNATT = es.LNATT,
  264:                             DIV = es.DIV,
  265:                             COS = es.COS,
  266:                             ADDINF = es.ADDINF,
  267:                             NUMBCH = es.NUMBCH,
  268:                             CTDIVI = es.CTDIVI,
  269:                             BLK = es.BLK
  270:                         }).ToList();
  271:  
  272:                 return list;
  273:             }
  274:         }
  275:  
  276:         ////////////////////////////////////////////////////////////////////////////
  277:  
  278:         /// <summary>
  279:         ///
  280:         /// </summary>
  281:         public static List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> InServicePstnServiceList()
  282:         {
  283:             List<Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber> list;
  284:  
  285:             // select * from EwsdSubscribers a inner join Service2 s on a.DN = s.Service where s.ServiceType = 2
  286:  
  287:             var serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.PstnService;
  288:  
  289:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  290:             {
  291:                 list = (from es in db.EwsdSubscribers
  292:                         join s in db.Service2 on es.DN.ToString() equals s.Service
  293:                         where s.ServiceType == serviceType
  294:                         select es).ToList();
  295:             }
  296:  
  297:             return list;
  298:         }
  299:  
  300:         ////////////////////////////////////////////////////////////////////////////
  301:  
  302:         /// <summary>
  303:         ///
  304:         /// </summary>
  305:         public static List<string> InServiceImsServiceList()
  306:         {
  307:             List<string> list;
  308:  
  309:             // select DN from EwsdSubscribers a inner join Service2 s on a.DN = s.Service where s.ServiceType = 1
  310:  
  311:             var serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
  312:  
  313:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  314:             {
  315:                 list = (from es in db.EwsdSubscribers
  316:                         join s in db.Service2 on es.DN.ToString() equals s.Service
  317:                         where s.ServiceType == serviceType
  318:                         select es.DN.ToString()).ToList();
  319:             }
  320:  
  321:             return list;
  322:         }
  323:  
  324:         ////////////////////////////////////////////////////////////////////////////
  325:  
  326:         /// <summary>
  327:         ///
  328:         /// </summary>
  329:         public static List<string> ServiceNotWithinEwsdPstnDomainList()
  330:         {
  331:             var list = new List<string>();
  332:  
  333:             var ewsdPstnDomainList = Ia.Ngn.Cl.Model.Data.Service.EwsdPstnDomainList;
  334:  
  335:             var dnList = Ia.Ngn.Cl.Model.Data.Siemens.Subscriber.DnList();
  336:  
  337:             var serviceList = dnList.ConvertAll(delegate (int i) { return i.ToString(); });
  338:  
  339:             foreach (var s in serviceList)
  340:             {
  341:                 if (!ewsdPstnDomainList.Any(u => s.StartsWith(u.ToString()))) list.Add(s);
  342:             }
  343:  
  344:             list.Sort();
  345:  
  346:             return list;
  347:         }
  348:  
  349:         ////////////////////////////////////////////////////////////////////////////
  350:  
  351:         /// <summary>
  352:         ///
  353:         /// </summary>
  354:         public static List<string> DnWhereBlkIsNotEmptyList()
  355:         {
  356:             List<string> list;
  357:  
  358:             // select * from EwsdSubscribers where BLK <> ''
  359:  
  360:             using (var db = new Ia.Ngn.Cl.Model.Ngn())
  361:             {
  362:                 list = (from es in db.EwsdSubscribers
  363:                         where es.BLK != null && es.BLK != ""
  364:                         select es.DN.ToString()).ToList();
  365:             }
  366:  
  367:             return list;
  368:         }
  369:  
  370:         ////////////////////////////////////////////////////////////////////////////
  371:         ////////////////////////////////////////////////////////////////////////////
  372:  
  373:         /// <summary>
  374:         ///
  375:         /// </summary>
  376:         public static string ToSimpleTextString(Ia.Ngn.Cl.Model.Siemens.EwsdSubscriber subscriber)
  377:         {
  378:             StringBuilder sb;
  379:  
  380:             sb = new StringBuilder();
  381:  
  382:             sb.AppendLine("DN: " + subscriber.DN);
  383:             sb.AppendLine("LAC: " + subscriber.LAC);
  384:             sb.AppendLine("EQN: " + subscriber.EQN);
  385:             sb.AppendLine("CAT: " + subscriber.CAT);
  386:             sb.AppendLine("LTT: " + subscriber.LTT);
  387:             sb.AppendLine("OPTRCL: " + subscriber.OPTRCL);
  388:             sb.AppendLine("SUBTRCL: " + subscriber.SUBTRCL);
  389:             sb.AppendLine("NUMCAL: " + subscriber.NUMCAL);
  390:             sb.AppendLine("ORIG1: " + subscriber.ORIG1);
  391:             sb.AppendLine("TRARSTR: " + subscriber.TRARSTR);
  392:             sb.AppendLine("LNATT: " + subscriber.LNATT);
  393:             sb.AppendLine("DIV: " + subscriber.DIV);
  394:             sb.AppendLine("COS: " + subscriber.COS);
  395:             sb.AppendLine("ADDINF: " + subscriber.ADDINF);
  396:             sb.AppendLine("NUMBCH: " + subscriber.NUMBCH);
  397:             sb.AppendLine("CTDIVI: " + subscriber.CTDIVI);
  398:             sb.AppendLine("BLK: " + subscriber.BLK);
  399:             //sb.AppendLine("Content: " + subscriber.Content);
  400:  
  401:             return sb.ToString();
  402:         }
  403:  
  404:         ////////////////////////////////////////////////////////////////////////////
  405:         ////////////////////////////////////////////////////////////////////////////
  406:     }
  407:  
  408:     ////////////////////////////////////////////////////////////////////////////
  409:     ////////////////////////////////////////////////////////////////////////////
  410: }