1: using Microsoft.EntityFrameworkCore;
2: using System;
3: using System.Collections.Generic;
4: using System.Data;
5: using System.Linq;
6:
7: namespace Ia.Ngn.Cl.Model.Data.Huawei
8: {
9: ////////////////////////////////////////////////////////////////////////////
10:
11: /// <summary publish="true">
12: /// Defaul general support class for Huawei's Optical Fiber Network (OFN) data model.
13: /// </summary>
14: ///
15: /// <remarks>
16: /// Copyright © 2014-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
17: ///
18: /// 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
19: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
20: ///
21: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
22: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
23: ///
24: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
25: ///
26: /// Copyright notice: This notice may not be removed or altered from any source distribution.
27: /// </remarks>
28: public class Default
29: {
30: private static string[] list;
31: private static List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> mduDevBoardList;
32: private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> mduDevList;
33: private static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> msanDevList;
34: private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> accessNameToMduDevDictionary, accessIdToMduDevDictionary, nddOntIdToMduDevDictionary;
35: private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> didToMduDevDictionary;
36:
37: private static readonly object objectLock = new object();
38:
39: ////////////////////////////////////////////////////////////////////////////
40:
41: /// <summary>
42: ///
43: /// </summary>
44: public Default() { }
45:
46: ////////////////////////////////////////////////////////////////////////////
47:
48: /// <summary>
49: ///
50: /// </summary>
51: public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> AccessNameToMduDevDictionary
52: {
53: get
54: {
55: if (accessNameToMduDevDictionary == null || accessNameToMduDevDictionary.Count == 0)
56: {
57: lock (objectLock)
58: {
59: accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._AccessNameToMduDevDictionary();
60: }
61: }
62:
63: return accessNameToMduDevDictionary;
64: }
65: }
66:
67: ////////////////////////////////////////////////////////////////////////////
68:
69: /// <summary>
70: ///
71: /// </summary>
72: private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessNameToMduDevDictionary()
73: {
74: accessNameToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
75:
76: var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
77:
78: foreach (var mduDev in mduDevList)
79: {
80: if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.NddOntId))
81: {
82: if (!accessNameToMduDevDictionary.ContainsKey(mduDev.AccessName))
83: {
84: accessNameToMduDevDictionary[mduDev.AccessName] = mduDev;
85: }
86: else
87: {
88:
89: }
90: }
91: else
92: {
93:
94: }
95: }
96:
97: return accessNameToMduDevDictionary;
98: }
99:
100: ////////////////////////////////////////////////////////////////////////////
101:
102: /// <summary>
103: ///
104: /// </summary>
105: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessName(string accessName)
106: {
107: Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
108:
109: var accessNameToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessNameToMduDevDictionary;
110:
111: if (accessNameToMduDevDictionary.ContainsKey(accessName))
112: {
113: mduDev = accessNameToMduDevDictionary[accessName];
114: }
115: else mduDev = null;
116:
117: return mduDev;
118: }
119:
120: ////////////////////////////////////////////////////////////////////////////
121:
122: /// <summary>
123: ///
124: /// </summary>
125: public static void AccessNameToMduDevDictionaryReset()
126: {
127: accessNameToMduDevDictionary = null;
128: mduDevList = null;
129: mduDevBoardList = null;
130: accessIdToMduDevDictionary = null;
131: nddOntIdToMduDevDictionary = null;
132: didToMduDevDictionary = null;
133: }
134:
135: ////////////////////////////////////////////////////////////////////////////
136: ////////////////////////////////////////////////////////////////////////////
137:
138: /// <summary>
139: ///
140: /// </summary>
141: public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> AccessIdToMduDevDictionary
142: {
143: get
144: {
145: if (accessIdToMduDevDictionary == null || accessIdToMduDevDictionary.Count == 0)
146: {
147: lock (objectLock)
148: {
149: accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._AccessIdToMduDevDictionary();
150: }
151: }
152:
153: return accessIdToMduDevDictionary;
154: }
155: }
156:
157: ////////////////////////////////////////////////////////////////////////////
158:
159: /// <summary>
160: ///
161: /// </summary>
162: private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _AccessIdToMduDevDictionary()
163: {
164: accessIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
165:
166: var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
167:
168: foreach (var mduDev in mduDevList)
169: {
170: if (!string.IsNullOrEmpty(mduDev.AccessName) && !string.IsNullOrEmpty(mduDev.AccessId) && !string.IsNullOrEmpty(mduDev.NddOntId))
171: {
172: if (!accessIdToMduDevDictionary.ContainsKey(mduDev.AccessId))
173: {
174: accessIdToMduDevDictionary[mduDev.AccessId] = mduDev;
175: }
176: else
177: {
178:
179: }
180: }
181: else
182: {
183:
184: }
185: }
186:
187: return accessIdToMduDevDictionary;
188: }
189:
190: ////////////////////////////////////////////////////////////////////////////
191:
192: /// <summary>
193: ///
194: /// </summary>
195: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByAccessId(string accessId)
196: {
197: Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
198:
199: var accessIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.AccessIdToMduDevDictionary;
200:
201: if (accessIdToMduDevDictionary.ContainsKey(accessId))
202: {
203: mduDev = accessIdToMduDevDictionary[accessId];
204: }
205: else mduDev = null;
206:
207: return mduDev;
208: }
209:
210: ////////////////////////////////////////////////////////////////////////////
211:
212: /// <summary>
213: ///
214: /// </summary>
215: public static int MduDevPortByAccessIdFnSnPn(string accessId, int fn, int sn, int pn)
216: {
217: var mduDev = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevByAccessId(accessId);
218:
219: var port = (mduDev != null) ? mduDev.PortByFnSnPn(fn, sn, pn) : Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown;
220:
221: return port;
222: }
223:
224: ////////////////////////////////////////////////////////////////////////////
225: ////////////////////////////////////////////////////////////////////////////
226:
227: /// <summary>
228: ///
229: /// </summary>
230: public static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> NddOntIdToMduDevDictionary
231: {
232: get
233: {
234: if (nddOntIdToMduDevDictionary == null || nddOntIdToMduDevDictionary.Count == 0)
235: {
236: lock (objectLock)
237: {
238: nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._NddOntIdToMduDevDictionary();
239: }
240: }
241:
242: return nddOntIdToMduDevDictionary;
243: }
244: }
245:
246: ////////////////////////////////////////////////////////////////////////////
247:
248: /// <summary>
249: ///
250: /// </summary>
251: private static Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _NddOntIdToMduDevDictionary()
252: {
253: nddOntIdToMduDevDictionary = new Dictionary<string, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
254:
255: var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
256:
257: foreach (var mduDev in mduDevList)
258: {
259: if (!string.IsNullOrEmpty(mduDev.NddOntId))
260: {
261: if (!nddOntIdToMduDevDictionary.ContainsKey(mduDev.NddOntId))
262: {
263: nddOntIdToMduDevDictionary[mduDev.NddOntId] = mduDev;
264: }
265: else
266: {
267:
268: }
269: }
270: else
271: {
272:
273: }
274: }
275:
276: return nddOntIdToMduDevDictionary;
277: }
278:
279: ////////////////////////////////////////////////////////////////////////////
280:
281: /// <summary>
282: ///
283: /// </summary>
284: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByNddOntId(string nddOntId)
285: {
286: Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
287:
288: var nddOntIdToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary;
289:
290: if (nddOntIdToMduDevDictionary.ContainsKey(nddOntId))
291: {
292: mduDev = nddOntIdToMduDevDictionary[nddOntId];
293: }
294: else mduDev = null;
295:
296: return mduDev;
297: }
298:
299: ////////////////////////////////////////////////////////////////////////////
300: ////////////////////////////////////////////////////////////////////////////
301:
302: /// <summary>
303: ///
304: /// </summary>
305: public static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> DidToMduDevDictionary
306: {
307: get
308: {
309: if (didToMduDevDictionary == null || didToMduDevDictionary.Count == 0)
310: {
311: lock (objectLock)
312: {
313: didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default._DidToMduDevDictionary();
314: }
315: }
316:
317: return didToMduDevDictionary;
318: }
319: }
320:
321: ////////////////////////////////////////////////////////////////////////////
322:
323: /// <summary>
324: ///
325: /// </summary>
326: private static Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> _DidToMduDevDictionary()
327: {
328: didToMduDevDictionary = new Dictionary<int, Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
329:
330: var mduDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevList;
331:
332: foreach (var mduDev in mduDevList)
333: {
334: if (mduDev.Did > -1)
335: {
336: if (!didToMduDevDictionary.ContainsKey(mduDev.Did))
337: {
338: didToMduDevDictionary[mduDev.Did] = mduDev;
339: }
340: else
341: {
342:
343: }
344: }
345: else
346: {
347:
348: }
349: }
350:
351: return didToMduDevDictionary;
352: }
353:
354: ////////////////////////////////////////////////////////////////////////////
355:
356: /// <summary>
357: ///
358: /// </summary>
359: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev MduDevByDid(int did)
360: {
361: Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev mduDev;
362:
363: var didToMduDevDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Default.DidToMduDevDictionary;
364:
365: if (didToMduDevDictionary.ContainsKey(did))
366: {
367: mduDev = didToMduDevDictionary[did];
368: }
369: else mduDev = null;
370:
371: return mduDev;
372: }
373:
374: ////////////////////////////////////////////////////////////////////////////
375: ////////////////////////////////////////////////////////////////////////////
376:
377: /// <summary>
378: ///
379: /// </summary>
380: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard> MduDevBoardList
381: {
382: get
383: {
384: if (mduDevBoardList == null || mduDevBoardList.Count == 0)
385: {
386: lock (objectLock)
387: {
388: mduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
389:
390: var boardList = Ia.Ngn.Cl.Model.Data.Huawei.Default.BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType();
391:
392: foreach (var board in boardList)
393: {
394: var mduDevBoard = new Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard(board.DID, board.BT, board.BNAME, board.BVER, board.EmsDev.Type, board.EmsDev.DEVIP, board.FN, board.SN);
395:
396: mduDevBoardList.Add(mduDevBoard);
397: }
398: }
399: }
400:
401: return mduDevBoardList;
402: }
403: }
404:
405: ////////////////////////////////////////////////////////////////////////////
406:
407: /// <summary>
408: ///
409: /// </summary>
410: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev> MduDevList
411: {
412: get
413: {
414: if (mduDevList == null || mduDevList.Count == 0)
415: {
416: lock (objectLock)
417: {
418: mduDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev>();
419:
420: var mduDevBoardList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MduDevBoardList;
421:
422: foreach (var mduDevBoard in mduDevBoardList)
423: {
424: var did = mduDevBoard.Did;
425:
426: var mduDev = (from m in mduDevList where m.Did == did select m).SingleOrDefault();
427:
428: if (mduDev != null)
429: {
430: mduDev.MduDevBoardList.Add(mduDevBoard);
431: }
432: else
433: {
434: mduDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MduDev(did)
435: {
436: DevType = mduDevBoard.EmsDevType,
437: DevIp = mduDevBoard.EmsDevIp,
438: };
439:
440: mduDev.MduDevBoardList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Board.MduDevBoard>();
441: mduDev.MduDevBoardList.Add(mduDevBoard);
442:
443: mduDevList.Add(mduDev);
444: }
445: }
446:
447: foreach (var mduDev in mduDevList)
448: {
449: mduDev.TelPortCount = mduDev.MduDevBoardList.Select(i => i.TelPortCount).Sum();
450: mduDev.EthernetPortCount = mduDev.MduDevBoardList.Select(i => i.EthernetPortCount).Sum();
451:
452: mduDev.PossibleFnSnPnPortList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMduDevList(mduDev);
453: mduDev.FirstFnSnPnPort = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMduDevList(mduDev);
454: }
455: }
456: }
457:
458: return mduDevList;
459: }
460: }
461:
462: ////////////////////////////////////////////////////////////////////////////
463:
464: /// <summary>
465: ///
466: /// </summary>
467: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev> MsanDevList
468: {
469: get
470: {
471: if (msanDevList == null || msanDevList.Count == 0)
472: {
473: lock (objectLock)
474: {
475: int did;
476: Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
477:
478: msanDevList = new List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev>();
479:
480: foreach (var dev in Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevList())
481: {
482: //if (dev.DEV == "SLM_MSAN_A01_F00");
483: //else
484: //{
485: did = dev.DID;
486:
487: msanDev = new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev(did);
488:
489: if (!string.IsNullOrEmpty(msanDev.Id)) msanDevList.Add(msanDev);
490: //}
491: }
492:
493: foreach (var msanDev0 in msanDevList)
494: {
495: msanDev0.PossibleFnSnPnList = Ia.Ngn.Cl.Model.Business.Huawei.Ems.PossibleFnSnPnForMsanDevList();
496: msanDev0.FirstFnSnPn = Ia.Ngn.Cl.Model.Business.Huawei.Ems.FirstFnSnPnForMsanDevList();
497: }
498: }
499: }
500:
501: return msanDevList;
502: }
503: }
504:
505: ////////////////////////////////////////////////////////////////////////////
506:
507: /// <summary>
508: ///
509: /// </summary>
510: public static Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int> MsanSiteToServiceCountDictionary()
511: {
512: int count;
513: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site site;
514: List<int> didList;
515:
516: var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
517:
518: var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
519:
520: var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, int>();
521:
522: foreach (KeyValuePair<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site, List<int>> kvp in msanSiteToDidListDictionary)
523: {
524: site = kvp.Key;
525: didList = kvp.Value;
526:
527: foreach (int did in didList)
528: {
529: count = msanDevDidToDnCountDictionary.ContainsKey(did) ? msanDevDidToDnCountDictionary[did] : 0;
530:
531: if (!dictionary.ContainsKey(site)) dictionary[site] = count;
532: else dictionary[site] += count;
533: }
534: }
535:
536: return dictionary;
537: }
538:
539: ////////////////////////////////////////////////////////////////////////////
540:
541: /// <summary>
542: ///
543: /// </summary>
544: public static Dictionary<string, int> MsanDevDevToDnCountDictionary
545: {
546: get
547: {
548: var msanDevList = Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList;
549:
550: var msanDevDidToDnCountDictionary = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevDidToDnCountDictionary;
551:
552: var dictionary = new Dictionary<string, int>();
553:
554: foreach (var msanDev in msanDevList)
555: {
556: dictionary[msanDev.Dev] = msanDevDidToDnCountDictionary.ContainsKey(msanDev.Did) ? msanDevDidToDnCountDictionary[msanDev.Did] : 0;
557: }
558:
559: return dictionary;
560: }
561: }
562:
563: ////////////////////////////////////////////////////////////////////////////
564:
565: /// <summary>
566: ///
567: /// </summary>
568: public static List<string> MsanServiceListBySiteId(int siteId)
569: {
570: var msanSiteToDidListDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanSiteToDidListDictionary();
571:
572: var didList = (from l in msanSiteToDidListDictionary
573: where l.Key.Id == siteId
574: select l.Value).SingleOrDefault();
575:
576: if (didList == null) didList = new List<int>();
577:
578: var dnServiceList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DnServiceListByMsanDevDidList(didList);
579:
580: return dnServiceList;
581: }
582:
583: ////////////////////////////////////////////////////////////////////////////
584:
585: /// <summary>
586: ///
587: /// </summary>
588: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
589: {
590: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
591: }
592:
593: ////////////////////////////////////////////////////////////////////////////
594:
595: /// <summary>
596: ///
597: /// </summary>
598: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet)
599: {
600: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinet(msan, cabinet);
601: }
602:
603: ////////////////////////////////////////////////////////////////////////////
604:
605: /// <summary>
606: ///
607: /// </summary>
608: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrame(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame)
609: {
610: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrame(msan, cabinet, frame);
611: }
612:
613: ////////////////////////////////////////////////////////////////////////////
614:
615: /// <summary>
616: ///
617: /// </summary>
618: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn)
619: {
620: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFn(msan, cabinet, frame, fn);
621: }
622:
623: ////////////////////////////////////////////////////////////////////////////
624:
625: /// <summary>
626: ///
627: /// </summary>
628: public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn)
629: {
630: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsanAndCabinetAndFrameAndFnAndSn(msan, cabinet, frame, fn, sn);
631: }
632:
633: ////////////////////////////////////////////////////////////////////////////
634:
635: /// <summary>
636: ///
637: /// </summary>
638: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
639: {
640: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByEmsVoipPstnUserId(emsVoipPstnUserId);
641: }
642:
643: ////////////////////////////////////////////////////////////////////////////
644:
645: /// <summary>
646: ///
647: /// </summary>
648: public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet, int frame, int fn, int sn, int pn)
649: {
650: return Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicByNddMsanAndCabinetAndFrameAndFnAndSnAndPn(msan, cabinet, frame, fn, sn, pn);
651: }
652:
653: ////////////////////////////////////////////////////////////////////////////
654:
655: /// <summary>
656: ///
657: /// </summary>
658: public static Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string> MsanDevLicToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
659: {
660: var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
661:
662: var dictionary = new Dictionary<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic, string>();
663:
664: foreach (var msanDevLic in msanDevLicList)
665: {
666: dictionary[msanDevLic] = msanDevLic.Service;
667: }
668:
669: return dictionary;
670: }
671:
672: ////////////////////////////////////////////////////////////////////////////
673:
674: /// <summary>
675: ///
676: /// </summary>
677: public static Dictionary<string, string> MsanDevLicCabinetFrameSnPnTextStringToServiceByMsanDictionary(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
678: {
679: string cabinetFrameSnPnTextString;
680:
681: var msanDevLicList = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanDevLicListByNddMsan(msan);
682:
683: var dictionary = new Dictionary<string, string>();
684:
685: foreach (var msanDevLic in msanDevLicList)
686: {
687: cabinetFrameSnPnTextString = msanDevLic.ToCabinetFrameSnPnTextString();
688:
689: dictionary[cabinetFrameSnPnTextString] = msanDevLic.Service;
690: }
691:
692: return dictionary;
693: }
694:
695: ////////////////////////////////////////////////////////////////////////////
696:
697: /// <summary>
698: ///
699: /// </summary>
700: public static List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> BoardListByPstnOrEthBoardTypeAndMA5616OrMA5878DevType()
701: {
702: List<Ia.Ngn.Cl.Model.Huawei.EmsBoard> list;
703:
704: using (var db = new Ia.Ngn.Cl.Model.Ngn())
705: {
706: list = (from ed in db.EmsDevs
707: join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
708: where (ed.DT == "MA5616" || ed.DT == "MA5878") && (eb.BT == "PSTN" || eb.BT == "ETH")
709: select eb).Include(u => u.EmsDev).ToList();
710:
711: /*
712: select distinct * from EmsDevs ed
713: left outer join EmsBoards eb on ed.Id = eb.EmsDev_Id
714: where (ed.DT = 'MA5616' or ed.DT = 'MA5878') and (eb.BT = 'PSTN' or eb.BT = 'ETH')
715: order by ed.DT, ed.DEV
716: */
717: }
718:
719: return list;
720: }
721:
722: ////////////////////////////////////////////////////////////////////////////
723:
724: /// <summary>
725: ///
726: /// </summary>
727: public static List<Ia.Ngn.Cl.Model.Access> AccessListBy5616Or5878OntEquipmentId()
728: {
729: List<Ia.Ngn.Cl.Model.Access> list;
730:
731: using (var db = new Ia.Ngn.Cl.Model.Ngn())
732: {
733: list = (from a in db.Accesses
734: join eo in db.EmsOnts on a equals eo.Access
735: join ed in db.EmsDevs on eo.NAME equals ed.DEVIP into gj
736: from sgj in gj.DefaultIfEmpty()
737: where eo.EQUIPMENTID == "5616" || eo.EQUIPMENTID == "5878"
738: select a).ToList(); //.Include(u => u.EmsDev).ToList();
739: /*
740: select a.Id, eo.NAME, eo.ALIAS, eo.EQUIPMENTID, ed.DEVIP, ed.DEV from Accesses a
741: inner join EmsOnts eo on a.Id = eo.Access_Id
742: left outer join EmsDevs ed on ed.DEVIP = eo.NAME
743: where eo.EQUIPMENTID = '5616' or eo.EQUIPMENTID = '5878'
744: */
745: }
746:
747: return list;
748: }
749:
750: ////////////////////////////////////////////////////////////////////////////
751:
752: /// <summary>
753: ///
754: /// </summary>
755: public static List<string> MsanPortIdList()
756: {
757: List<string> list;
758:
759: //var possibleSnList = Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.PossibleSnList; or just check if EmsBoard.BT = "PSTN"
760:
761: // var dev = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDidList();
762:
763: // The EmsPort list is about 230K big. I can't LINQ directly.
764:
765: using (var db = new Ia.Ngn.Cl.Model.Ngn())
766: {
767: var emsDevDidDevList = (from ed in db.EmsDevs select new { ed.DID, ed.DEV }).ToList();
768:
769: var emsMsanDevDidList = emsDevDidDevList.Where(u => u.DEV.Contains("_MSAN_")).Select(u => u.DID).ToList();
770:
771: /*
772: * too slow
773: list = (from ed in db.EmsDevs
774: join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
775: join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
776: where ed.DEV.Contains("_MSAN_") && eb.BT == "PSTN"
777: select ep).ToList();
778: */
779:
780: /*
781: * too slow
782: list = (from ed in db.EmsDevs
783: where emsMsanDevDidList.Contains(ed.DID)
784: join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
785: join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
786: select ep).ToList();
787: */
788:
789: var portIdDidList = (from ep in db.EmsPorts select new { ep.Id, ep.DID }).ToList();
790:
791: list = (from ep in portIdDidList where emsMsanDevDidList.Contains(ep.DID) select ep.Id).ToList();
792: }
793:
794: return list;
795: }
796:
797: ////////////////////////////////////////////////////////////////////////////
798:
799: /// <summary>
800: ///
801: /// </summary>
802: public static List<Ia.Ngn.Cl.Model.Huawei.EmsPort> MsanPortList(Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev)
803: {
804: List<Ia.Ngn.Cl.Model.Huawei.EmsPort> list;
805:
806: using (var db = new Ia.Ngn.Cl.Model.Ngn())
807: {
808: list = (from ed in db.EmsDevs
809: where ed.DID == msanDev.Did
810: join eb in db.EmsBoards on ed.Id equals eb.EmsDev.Id
811: join ep in db.EmsPorts on eb.Id equals ep.EmsBoard.Id
812: select ep).Include(ep => ep.EmsBoard).Include(ep => ep.EmsBoard.EmsDev).AsNoTracking().ToList();
813: }
814:
815: return list;
816: }
817:
818: ////////////////////////////////////////////////////////////////////////////
819:
820: /// <summary>
821: ///
822: /// </summary>
823: public static List<string> DuplicateEmsOntSipInfoSipUserNameAndEmsVoipPstnUserMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
824: {
825: var list0 = Ia.Ngn.Cl.Model.Data.Huawei.OntSipInfo.DuplicateSipUserNameServiceList();
826: var list1 = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList();
827:
828: var list = list0.Union(list1).Distinct().ToList();
829:
830: return list;
831: }
832:
833: ////////////////////////////////////////////////////////////////////////////
834:
835: /// <summary>
836: ///
837: /// </summary>
838: public static void UnrecognizedEmsDevAndEmsOntList(out List<string> unrecognizedDevList, out List<string> unrecognizedOntList)
839: {
840: string name;
841: unrecognizedDevList = new List<string>();
842: unrecognizedOntList = new List<string>();
843:
844: var devList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DevList();
845: var msanDevDevList = Ia.Ngn.Cl.Model.Data.Huawei.Dev.MsanDevDevList();
846: var nddOltList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OltList;
847:
848: foreach (var dev in devList)
849: {
850: name = Ia.Ngn.Cl.Model.Business.Huawei.Ems.HuaweiAccessNameFormatFromInaccurateHuaweiFileAndEmsNameFormat(dev);
851: name = Ia.Ngn.Cl.Model.Business.Default.StandardizeAccessNameInLegalFormatFromValue(name);
852:
853: if (string.IsNullOrEmpty(name))
854: {
855: if (msanDevDevList.Contains(dev))
856: {
857: }
858: else
859: {
860: if (nddOltList.Any(u => u.EmsName == dev))
861: {
862: }
863: else
864: {
865: unrecognizedDevList.Add(dev);
866: }
867: }
868: }
869: }
870:
871: var emsOntNullAccessList = Ia.Ngn.Cl.Model.Data.Huawei.Ont.ListWithNullAccess();
872:
873: foreach (var o in emsOntNullAccessList)
874: {
875: unrecognizedOntList.Add(o.ALIAS + ":" + o.NAME);
876: }
877: }
878:
879: ////////////////////////////////////////////////////////////////////////////
880:
881: /// <summary>
882: ///
883: /// </summary>
884: public static string[] ListOfHuaweiOntThatWereIntiallyInstalledAndProvisionedWithNokiaMgcIp10_16_5_37BeforeNewMgcIpToCableDistributionAgreement
885: {
886: get
887: {
888: if (list == null || list.Length == 0)
889: {
890: list = new string[] { "SAA.501.2","SAA.501.10","SAA.501.11","SAA.501.13","SAA.501.19","SAA.501.20","SAA.501.21","SAA.501.22","SAA.502.1","SAA.502.7","SAA.502.8","SAA.502.11","SAA.502.12","SAA.502.14","SAA.502.16","SAA.502.18","SAA.502.19","SAA.502.22","SAA.503.1","SAA.503.2","SAA.504.4","SAA.504.6","SAA.504.10","SAA.504.11","SAA.504.12","SAA.504.13","SAA.504.15","SAA.504.17","SAA.504.18","SAA.504.24","SAA.505.2","SAA.506.8","SAA.506.10","SAA.506.16","SAA.506.18","SAA.507.16","SAA.508.3","SAA.508.8","SAA.508.16","SAA.508.17","SAA.508.18","SAA.508.20","SAA.508.21","SAA.509.5","SAA.509.7","SAA.509.8","SAA.509.12","SAA.509.13","SAA.509.14","SAA.509.17","SAA.509.19","SAA.509.20","SAA.510.4","SAA.510.5","SAA.510.14","SAA.511.3","SAA.511.4","SAA.511.9","SAA.511.10","SAA.511.13","SAA.511.16","SAA.512.2","SAA.512.13","SAA.512.14","SAA.512.15","SAA.514.1","SAA.514.2","SAA.514.5","SAA.514.6","SAA.514.8","SAA.514.11","SAA.514.12","SAA.514.13","SAA.514.14","SAA.514.15","SAA.514.16","SAA.514.22","SAA.517.7","SAA.517.8","SAA.517.9","SAA.517.10","SAA.517.12","SAA.517.15","SAA.517.16","SAA.518.2","SAA.518.3","SAA.518.5","SAA.518.11","SAA.518.14","SAA.518.16","SAA.519.1","SAA.519.2","SAA.519.6","SAA.519.10","SAA.519.15","SAA.519.16","SAA.519.17","SAA.519.18","SAA.519.23","SAA.521.4","SAA.521.10",
891: "SAA.521.20","SAA.521.23","SAA.522.1","SAA.522.6","SAA.522.9","SAA.522.10","SAA.522.11","SAA.522.13","SAA.522.16","SAA.523.1","SAA.523.2","SAA.523.3","SAA.523.5","SAA.523.7","SAA.523.9","SAA.523.10","SAA.523.12","SAA.523.13","SAA.523.14","SAA.523.15","SAA.523.16","SAA.523.18","SAA.523.19","SAA.524.1","SAA.524.3","SAA.524.6","SAA.524.8","SAA.524.9","SAA.524.10","SAA.524.11","SAA.524.12","SAA.524.14","SAA.524.17","SAA.524.18","SAA.528.3","SAA.528.5","SAA.528.6","SAA.528.7","SAA.528.10","SAA.528.11","SAA.528.15","SAA.528.17","SAA.528.19","SAA.528.20","SAA.528.21","SAA.530.1","SAA.530.5","SAA.530.6","SAA.530.7","SAA.530.8","SAA.530.9","SAA.530.10","SAA.530.11","SAA.530.12","SAA.530.13","SAA.530.16","SAA.530.17","SAA.530.19","SAA.531.1","SAA.531.4","SAA.531.6","SAA.531.7","SAA.531.15","SAA.531.17","SAA.531.19","SAA.531.20","SAA.531.22","SAA.531.23","SAA.533.2","SAA.533.8","SAA.533.9","SAA.533.17","SAA.533.19","SAA.533.20","SAA.533.21","SAA.533.23","SAA.534.1","SAA.534.2","SAA.534.3","SAA.534.4","SAA.534.10","SAA.534.12","SAA.534.18","SAA.534.20","SAA.534.21","SAA.535.1","SAA.535.15","SAA.535.16","SAA.535.17","SAA.535.18",
892: "SAA.536.1","SAA.536.2","SAA.536.3","SAA.536.4","SAA.536.6","SAA.536.9","SAA.536.13","SAA.536.15","SAA.537.1","SAA.537.4","SAA.537.6","SAA.537.7","SAA.537.8","SAA.537.9","SAA.537.10","SAA.537.13","SAA.537.14","SAA.537.15","SAA.537.16","SAA.537.22","SAA.538.1","SAA.538.4","SAA.538.9","SAA.538.10","SAA.538.14","SAA.538.15","SAA.538.17","SAA.538.18","SAA.538.19","SAA.539.2","SAA.539.3","SAA.539.5","SAA.539.6","SAA.539.7","SAA.539.8","SAA.539.9","SAA.539.18","SAA.539.19","SAA.539.20","SAA.541.2","SAA.541.6","SAA.541.7","SAA.541.9","SAA.541.10","SAA.541.13","SAA.541.15","SAA.541.21","SAA.541.23","SAA.541.24","SAA.542.1","SAA.542.3","SAA.542.6","SAA.542.7","SAA.542.8","SAA.542.9","SAA.542.21","SAA.543.5","SAA.543.9","SAA.543.10","SAA.543.16","SAA.544.4","SAA.544.10","SAA.544.11","SAA.544.12","SAA.544.15","SAA.544.22","SAA.544.23","SAA.545.9","SAA.701.1","SAA.701.2","SAA.701.3","SAA.701.4","SAA.701.5","SAA.701.6","SAA.701.7","SAA.701.9","SAA.701.10","SAA.701.11","SAA.701.13","SAA.701.14","SAA.701.15","SAA.701.16","SAA.701.17","SAA.702.1","SAA.702.2","SAA.702.3","SAA.702.4","SAA.702.5","SAA.702.8","SAA.702.9","SAA.702.10","SAA.702.12","SAA.702.14","SAA.702.16","SAA.702.17","SAA.702.21","SAA.702.22","SAA.702.23","SAA.702.24","SAA.703.2","SAA.703.3","SAA.703.11","SAA.703.14","SAA.703.15",
893: "SAA.703.17","SAA.703.19","SAA.703.20","SAA.703.23","SAA.704.3","SAA.704.4","SAA.704.6","SAA.704.7","SAA.704.9","SAA.704.10","SAA.704.13","SAA.704.15","SAA.704.16","SAA.704.17","SAA.704.18","SAA.706.5","SAA.706.6","SAA.706.7","SAA.706.8","SAA.706.11","SAA.706.12","SAA.706.15","SAA.706.16","SAA.706.17","SAA.706.20","SAA.706.21","SAA.706.23","SAA.706.24","SAA.707.2","SAA.707.5","SAA.707.7","SAA.707.10","SAA.707.12","SAA.707.13","SAA.707.15","SAA.707.17","SAA.707.19","SAA.707.20","SAA.707.21","SAA.707.22","SAA.709.1","SAA.709.3","SAA.709.7","SAA.709.8","SAA.709.14","SAA.709.15","SAA.709.18","SAA.709.19","SAA.709.23","SAA.709.24","SAA.710.3","SAA.710.4","SAA.710.12","SAA.710.15","SAA.710.16","SAA.710.19","SAA.710.21","SAA.710.22","SAA.710.24","SAA.711.1","SAA.711.3","SAA.711.5","SAA.711.9","SAA.711.11","SAA.711.12","SAA.711.13","SAA.711.14","SAA.711.16","SAA.711.18","SAA.711.19","SAA.711.20","SAA.711.23","SAA.711.24","SAA.712.2","SAA.712.3","SAA.712.4","SAA.712.6","SAA.712.7","SAA.712.9","SAA.712.12",
894: "SAA.712.16","SAA.712.18","SAA.712.19","SAA.712.20","SAA.712.21","SAA.712.26","SAA.712.27","SAA.714.2","SAA.714.3","SAA.714.8","SAA.714.11","SAA.715.5","SAA.715.7","SAA.715.8","SAA.715.9","SAA.715.10","SAA.715.11","SAA.715.12","SAA.715.15","SAA.715.18","SAA.715.19","SAA.716.2","SAA.716.3","SAA.716.4","SAA.716.6","SAA.716.8","SAA.716.11","SAA.716.12","SAA.716.15","SAA.716.17","SAA.716.20","SAA.716.21","SAA.717.3","SAA.717.5","SAA.717.7","SAA.717.10","SAA.717.13","SAA.717.14","SAA.717.15","SAA.717.18","SAA.717.20","SAA.717.21","SAA.717.22","SAA.718.1","SAA.718.2","SAA.718.3","SAA.718.5","SAA.718.6","SAA.718.7","SAA.718.11","SAA.718.22","SAA.718.23","SAA.718.24","SAA.718.25","SAA.719.2","SAA.719.4","SAA.719.8","SAA.719.9","SAA.719.10","SAA.719.11","SAA.719.12","SAA.719.14","SAA.719.17","SAA.719.20","SAA.719.23","SAA.720.3","SAA.720.4","SAA.720.6","SAA.720.7","SAA.720.10","SAA.720.13","SAA.720.14","SAA.721.2","SAA.721.3","SAA.721.4","SAA.721.7","SAA.721.8","SAA.721.10","SAA.721.11","SAA.721.12","SAA.721.13","SAA.721.14","SAA.721.18","SAA.721.19","SAA.721.20","SAA.721.23","SAA.722.11","SAA.722.12","SAA.722.13","SAA.722.16","SAA.722.17","SAA.722.18","SAA.722.19","SAA.722.22","SAA.722.24","SAA.723.2","SAA.723.3","SAA.723.4","SAA.723.7","SAA.723.9","SAA.723.13","SAA.723.15","SAA.723.17",
895: "SAA.723.19","SAA.723.20","SAA.723.22","SAA.723.23","SAA.724.5","SAA.724.6","SAA.724.8","SAA.724.11","SAA.724.14","SAA.724.15","SAA.724.16","SAA.724.17","SAA.724.18","SAA.726.2","SAA.726.7","SAA.726.8","SAA.726.9","SAA.726.10","SAA.726.11","SAA.726.12","SAA.726.13","SAA.726.14","SAA.726.17","SAA.726.20","SAA.726.21","SAA.726.22","SAA.726.23","SAA.729.2","SAA.729.3","SAA.729.4","SAA.729.5","SAA.729.6","SAA.729.10","SAA.729.11","SAA.729.14","SAA.729.17","SAA.729.18","SAA.729.19","SAA.729.20","SAA.729.21","SAA.730.4","SAA.730.5","SAA.730.8","SAA.730.9","SAA.730.11","SAA.730.12","SAA.730.13","SAA.730.14","SAA.730.22","SAA.733.2","SAA.733.3","SAA.733.5","SAA.733.6","SAA.733.9","SAA.733.10","SAA.734.1","SAA.734.2","SAA.734.3","SAA.734.4","SAA.734.5","SAA.734.6","SAA.734.7","SAA.734.11","SAA.734.12","SAA.734.13","SAA.734.15","SAA.734.17","SAA.734.19","SAA.734.20","SAA.735.7","SAA.735.8","SAA.735.10","SAA.735.12","SAA.735.14","SAA.735.19","SAA.735.22","SAA.736.3","SAA.736.4","SAA.736.7","SAA.736.8","SAA.736.9","SAA.736.10","SAA.736.17","SAA.736.18","SAA.736.21","SAA.736.22","SAA.736.23","SAA.737.5","SAA.737.6","SAA.737.8",
896: "SAA.737.11","SAA.737.13","SAA.737.15","SAA.737.16","SAA.737.18","SAA.738.4","SAA.738.7","SAA.738.8","SAA.738.11","SAA.738.13","SAA.738.14","SAA.738.16","SAA.738.18","SAA.739.1","SAA.739.2","SAA.739.3","SAA.739.13","SAA.739.14","SAA.739.15","SAA.739.18","SAA.739.19","SAA.739.20","SAA.740.7","SAA.740.20","SAA.742.2","SAA.742.3","SAA.742.5","SAA.742.6","SAA.742.7","SAA.742.11","SAA.742.12","SAA.742.14","SAA.742.15","SAA.742.17","SAA.742.18","SAA.742.20","SAA.742.21","SAA.742.23","SAA.742.25","SAA.743.4","SAA.743.7","SAA.743.9","SAA.743.10","SAA.743.13","SAA.743.16","SAA.743.19","SAA.743.21","SAA.743.22","SAA.743.23","SAA.743.24","SAA.744.5","SAA.744.6","SAA.744.7","SAA.744.22","SAA.745.12","SAA.746.12","SAA.747.2","SAA.747.4","SAA.750.1","SAA.750.6","SAA.750.7","SAA.750.12","SAA.750.16","SAA.750.19","SAA.750.20","SAA.750.26","SAA.751.1","SAA.751.2","SAA.751.3","SAA.751.7","SAA.751.8","SAA.751.13","SAA.751.16","SAA.751.17","SAA.751.18","SAA.751.22","SAA.752.1","SAA.752.3","SAA.752.5","SAA.752.11","SAA.752.13","SAA.752.14","SAA.752.15","SAA.752.17","SAA.752.18","SAA.752.21","SAA.802.6","SAA.802.8","SAA.802.10","SAA.802.11","SAA.802.12","SAA.802.13","SAA.802.16","SAA.802.17","SAA.802.20","SAA.804.3","SAA.804.4","SAA.804.5","SAA.804.6","SAA.804.11","SAA.805.21","SAA.806.24","SAA.807.1",
897: "SAA.807.7","SAA.807.16","SAA.807.17","SAA.807.20","SAA.808.2","SAA.808.4","SAA.808.5","SAA.808.8","SAA.808.9","SAA.808.13","SAA.811.3","SAA.813.1","SAA.813.3","SAA.813.4","SAA.813.5","SAA.813.10","SAA.813.12","SAA.813.15","SAA.813.16","SAA.814.2","SAA.814.3","SAA.814.5","SAA.814.9","SAA.814.11","SAA.814.16","SAA.814.18","SAA.814.19","SAA.814.23","SAA.814.24","SAA.815.1","SAA.815.2","SAA.815.7","SAA.815.9","SAA.815.10","SAA.815.11","SAA.815.12","SAA.815.13","SAA.815.14","SAA.815.15","SAA.815.16","SAA.815.18","SAA.815.19","SAA.815.20","SAA.815.21","SAA.815.26","SAA.819.1","SAA.819.2","SAA.819.4","SAA.819.5","SAA.819.6","SAA.819.8","SAA.819.13","SAA.819.17","SAA.822.9","SAA.826.18","SAA.827.13","SAA.827.14","SAA.837.21","SAA.846.4","SAA.846.10"
898: };
899: }
900:
901: return list;
902: }
903: }
904:
905: ////////////////////////////////////////////////////////////////////////////
906: ////////////////////////////////////////////////////////////////////////////
907: }
908:
909: ////////////////////////////////////////////////////////////////////////////
910: ////////////////////////////////////////////////////////////////////////////
911: }