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