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 VOIP PSTN User support class of Optical Fiber Network (OFN) data model.
14: /// </summary>
15: ///
16: /// <remarks>
17: /// Copyright © 2017-2022 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 VoipPstnUser
30: {
31: /// <summary/>
32: public VoipPstnUser() { }
33:
34: ////////////////////////////////////////////////////////////////////////////
35:
36: /// <summary>
37: ///
38: /// </summary>
39: public static bool Update(Ia.Ngn.Cl.Model.Business.Huawei.Ems.Response response, out Ia.Cl.Model.Result result)
40: {
41: bool isUpdated;
42: int did, queryFn, querySn, queryPn, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount, fn, sn, pn;
43: string id, queryCommand, queryDev, dn, nddOntIdOrMsanDevId;
44: DataColumnCollection columns;
45: DataRow columnDataRow;
46: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
47: Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser voipPstnUser, newVoipPstnUser;
48: Ia.Ngn.Cl.Model.Huawei.EmsOnt emsOnt;
49: Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type emsDevType;
50: List<string> itemIdList;
51: List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> voipPstnUserList;
52:
53: isUpdated = false;
54: readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
55:
56: result = new Ia.Cl.Model.Result(); // remove initially then add to test all return paths
57:
58: queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
59:
60: //queryCommand = "LST-VOIPPSTNUSER::DEV=ARD_MSAN_Cabinet 1_Frame 0,FN=0,SN=2,PN=0:{ctag}::;";
61: //queryCommand = "LST-VOIPPSTNUSER::DEV=SAB_MSAN_Cabinet 4_Frame 0,FN=0,SN=3,PN=58:{ctag}::;";
62:
63: // LST-VOIPPSTNUSER::DEV=MDU-JBA-943-002,FN=0,SN=3,PN=10:{ctag}::;
64: // LST-VOIPPSTNUSER::DEV=ARD_MSAN_Cabinet 1_Frame 0,FN=0,SN=2,PN=0:{ctag}::;
65: queryDev = Ia.Cl.Model.Default.Match(queryCommand, @"DEV=(.+?),");
66: queryFn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"FN=(\d+)"));
67: querySn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"SN=(\d+)"));
68: queryPn = int.Parse(Ia.Cl.Model.Default.Match(queryCommand, @"PN=(\d+)"));
69:
70: using (var db = new Ia.Ngn.Cl.Model.Ngn())
71: {
72: if (response.CompletionCode == "COMPLD")
73: {
74: emsDevType = Ia.Ngn.Cl.Model.Data.Huawei.Dev.ReadTypeByDev(queryDev);
75:
76: if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu || emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan)
77: {
78: if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu)
79: {
80: nddOnt = Ia.Ngn.Cl.Model.Business.Default.NddOntFromHuaweiEmsAccessNameFormat(queryDev);
81:
82: if (nddOnt != null)
83: {
84: emsOnt = (from eo in db.EmsOnts where eo.Id == nddOnt.Id select eo).SingleOrDefault();
85:
86: if (emsOnt != null)
87: {
88: // this should always give a single value or none
89: voipPstnUserList = (from evpu in db.EmsVoipPstnUsers
90: where evpu.EmsOnt != null && evpu.EmsOnt.Id == emsOnt.Id && evpu.SN == querySn && evpu.PN == queryPn
91: select evpu).ToList();
92:
93: nddOntIdOrMsanDevId = nddOnt.Id;
94: }
95: else
96: {
97: voipPstnUserList = null;
98: nddOntIdOrMsanDevId = string.Empty;
99:
100: result.AddWarning("EmsOnt is null for ont.Access.Name: " + nddOnt.Access.Name);
101: }
102: }
103: else
104: {
105: voipPstnUserList = null;
106: nddOntIdOrMsanDevId = string.Empty;
107: }
108: }
109: else //if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan)
110: {
111: var msanDev = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
112: where m.Dev == queryDev
113: select m).SingleOrDefault();
114:
115: nddOntIdOrMsanDevId = (msanDev != null) ? msanDev.Id : string.Empty;
116:
117: voipPstnUserList = (from evpu in db.EmsVoipPstnUsers
118: where evpu.EmsOnt == null && evpu.Id.StartsWith(nddOntIdOrMsanDevId) && evpu.SN == querySn && evpu.PN == queryPn
119: select evpu).ToList();
120: }
121:
122: if (voipPstnUserList != null)
123: {
124: existingItemCount = voipPstnUserList.Count;
125:
126: if (response.QueryDataTable != null)
127: {
128: if (response.QueryDataTable.Rows.Count >= 1)
129: {
130: itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
131:
132: columns = response.QueryDataTable.Columns;
133: readItemCount = response.QueryDataTable.Rows.Count;
134:
135: columnDataRow = response.QueryDataTable.Rows[0];
136:
137: foreach (DataRow dataRow in response.QueryDataTable.Rows)
138: {
139: did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
140: fn = int.Parse(dataRow[columns.IndexOf("FN")].ToString());
141: sn = int.Parse(dataRow[columns.IndexOf("SN")].ToString());
142: pn = int.Parse(dataRow[columns.IndexOf("PN")].ToString());
143:
144: dn = columns.Contains("DN") ? dataRow[columns.IndexOf("DN")].ToString() : string.Empty;
145:
146: if (dn != "--") // "--" means empty
147: {
148: if (pn == queryPn && sn == querySn)
149: {
150: // I'll check that the records are for a real 11 digit number, otherwise we will not send it to the database
151: // for MDUs numbers will look like 96524805054
152: // for MSAN numbers will look like +96524805054
153: //if (
154: // Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToServiceWithCountryCode(dn) && emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu
155: // ||
156: // Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToImpuAid(dn) && emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan
157: // )
158: //{
159: id = Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.VoipPstnUserId(nddOntIdOrMsanDevId, sn, pn);
160:
161: voipPstnUser = (from eo in voipPstnUserList where eo.Id == id select eo).SingleOrDefault();
162:
163: newVoipPstnUser = new Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser()
164: {
165: Id = id,
166: DID = did,
167: FN = fn,
168: SN = sn,
169: PN = pn,
170: DN = dn.ToString(),
171: MGID = columns.Contains("MGID") ? int.Parse(dataRow[columns.IndexOf("MGID")].ToString()) : 0,
172: MGNAME = columns.Contains("MGNAME") ? dataRow[columns.IndexOf("MGNAME")].ToString() : string.Empty,
173: TID = columns.Contains("TID") ? Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.SpecialIntegerParameterHandling("TID", dataRow[columns.IndexOf("TID")].ToString()) : 0,
174: LayeredConf = columns.Contains("LayeredConf") ? dataRow[columns.IndexOf("LayeredConf")].ToString() : string.Empty,
175: HighLevelWidth = columns.Contains("HighLevelWidth") ? int.Parse(dataRow[columns.IndexOf("HighLevelWidth")].ToString()) : 0,
176: LowerLevelWidth = columns.Contains("LowerLevelWidth") ? int.Parse(dataRow[columns.IndexOf("LowerLevelWidth")].ToString()) : 0,
177: Voltage = columns.Contains("Voltage") ? dataRow[columns.IndexOf("Voltage")].ToString() : string.Empty,
178: KCType = columns.Contains("KCType") ? dataRow[columns.IndexOf("KCType")].ToString() : string.Empty,
179: VoiceGain = columns.Contains("VoiceGain") ? dataRow[columns.IndexOf("VoiceGain")].ToString() : string.Empty,
180: LimitPulseDial = columns.Contains("LimitPulseDial") ? dataRow[columns.IndexOf("LimitPulseDial")].ToString() : string.Empty,
181: RevPolarity = columns.Contains("RevPolarity") ? dataRow[columns.IndexOf("RevPolarity")].ToString() : string.Empty,
182: RevPoleLevel = columns.Contains("RevPoleLevel") ? int.Parse(dataRow[columns.IndexOf("RevPoleLevel")].ToString()) : 0,
183: RevPolePulse = columns.Contains("RevPolePulse") ? dataRow[columns.IndexOf("RevPolePulse")].ToString() : string.Empty,
184: PSTAT = columns.Contains("PSTAT") ? dataRow[columns.IndexOf("PSTAT")].ToString() : string.Empty,
185: ConfigStatus = columns.Contains("ConfigStatus") ? dataRow[columns.IndexOf("ConfigStatus")].ToString() : string.Empty,
186: ServiceStatus = columns.Contains("ServiceStatus") ? dataRow[columns.IndexOf("ServiceStatus")].ToString() : string.Empty,
187: ServiceType = columns.Contains("ServiceType") ? dataRow[columns.IndexOf("ServiceType")].ToString() : string.Empty,
188: ALIAS = columns.Contains("ALIAS") ? dataRow[columns.IndexOf("ALIAS")].ToString() : string.Empty,
189: UserType = columns.Contains("UserType") ? dataRow[columns.IndexOf("UserType")].ToString() : string.Empty,
190: Impedance = columns.Contains("Impedance") ? dataRow[columns.IndexOf("Impedance")].ToString() : string.Empty,
191: Current = columns.Contains("Current") ? dataRow[columns.IndexOf("Current")].ToString() : string.Empty,
192: DCTime = columns.Contains("DCTime") ? int.Parse(dataRow[columns.IndexOf("DCTime")].ToString()) : 0,
193: PITime = columns.Contains("PITime") ? Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.SpecialIntegerParameterHandling("PITime", dataRow[columns.IndexOf("PITime")].ToString()) : 0,
194: FSKDelayInterval = columns.Contains("FSKDelayInterval") ? int.Parse(dataRow[columns.IndexOf("FSKDelayInterval")].ToString()) : 0,
195: ActualVoiceGain = columns.Contains("ActualVoiceGain") ? dataRow[columns.IndexOf("ActualVoiceGain")].ToString() : string.Empty,
196: CidTransWhen = columns.Contains("CidTransWhen") ? dataRow[columns.IndexOf("CidTransWhen")].ToString() : string.Empty,
197: CidFormat = columns.Contains("CidFormat") ? dataRow[columns.IndexOf("CidFormat")].ToString() : string.Empty,
198: OverloadPRI = columns.Contains("OverloadPRI") ? dataRow[columns.IndexOf("OverloadPRI")].ToString() : string.Empty,
199: ImpedanceProfile = columns.Contains("ImpedanceProfile") ? dataRow[columns.IndexOf("ImpedanceProfile")].ToString() : string.Empty,
200: SendVoiceGain = columns.Contains("SendVoiceGain") ? dataRow[columns.IndexOf("SendVoiceGain")].ToString() : string.Empty,
201: RecvVoiceGain = columns.Contains("RecvVoiceGain") ? dataRow[columns.IndexOf("RecvVoiceGain")].ToString() : string.Empty,
202: RevPolarityMode = columns.Contains("RevPolarityMode") ? dataRow[columns.IndexOf("RevPolarityMode")].ToString() : string.Empty,
203: PortRunState = columns.Contains("PortRunState") ? dataRow[columns.IndexOf("PortRunState")].ToString() : string.Empty,
204: PortTestState = columns.Contains("PortTestState") ? dataRow[columns.IndexOf("PortTestState")].ToString() : string.Empty,
205: PortLineState = columns.Contains("PortLineState") ? dataRow[columns.IndexOf("PortLineState")].ToString() : string.Empty,
206: PortLoopState = columns.Contains("PortLoopState") ? dataRow[columns.IndexOf("PortLoopState")].ToString() : string.Empty,
207: ServiceRunState = columns.Contains("ServiceRunState") ? dataRow[columns.IndexOf("ServiceRunState")].ToString() : string.Empty,
208: ServiceAdminState = columns.Contains("ServiceAdminState") ? dataRow[columns.IndexOf("ServiceAdminState")].ToString() : string.Empty,
209: ActualSendVoiceGain = columns.Contains("ActualSendVoiceGain") ? dataRow[columns.IndexOf("ActualSendVoiceGain")].ToString() : string.Empty,
210: ActualRecvVo = columns.Contains("ActualRecvVo") ? dataRow[columns.IndexOf("ActualRecvVo")].ToString() : string.Empty,
211: AGCEnable = columns.Contains("AGCEnable") ? dataRow[columns.IndexOf("AGCEnable")].ToString() : string.Empty,
212: AGCEnableLevel = columns.Contains("AGCEnableLevel") ? int.Parse(dataRow[columns.IndexOf("AGCEnableLevel")].ToString()) : 0,
213: SNSEnable = columns.Contains("SNSEnable") ? dataRow[columns.IndexOf("SNSEnable")].ToString() : string.Empty,
214: SNSEnableLevel = columns.Contains("SNSEnableLevel") ? int.Parse(dataRow[columns.IndexOf("SNSEnableLevel")].ToString()) : 0,
215: NlpMode = columns.Contains("NlpMode") ? dataRow[columns.IndexOf("NlpMode")].ToString() : string.Empty,
216: LineLockEnable = columns.Contains("LineLockEnable") ? dataRow[columns.IndexOf("LineLockEnable")].ToString() : string.Empty,
217: DspInputGain = columns.Contains("DspInputGain") ? dataRow[columns.IndexOf("DspInputGain")].ToString() : string.Empty,
218: DspOutputGain = columns.Contains("DspOutputGain") ? dataRow[columns.IndexOf("DspOutputGain")].ToString() : string.Empty,
219: ClipReversePole = columns.Contains("ClipReversePole") ? dataRow[columns.IndexOf("ClipReversePole")].ToString() : string.Empty,
220: DEFAULTCLI = columns.Contains("DEFAULTCLI") ? dataRow[columns.IndexOf("DEFAULTCLI")].ToString() : string.Empty,
221: USERGROUPID = columns.Contains("USERGROUPID") ? int.Parse(dataRow[columns.IndexOf("USERGROUPID")].ToString()) : 0,
222: ADJUSTFACTOR = columns.Contains("ADJUSTFACTOR") ? int.Parse(dataRow[columns.IndexOf("ADJUSTFACTOR")].ToString()) : 0,
223: DSPPROFILE = columns.Contains("DSPPROFILE") ? dataRow[columns.IndexOf("DSPPROFILE")].ToString() : string.Empty,
224:
225: EmsOnt = (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu) ? (from eo in db.EmsOnts where eo.Id == nddOntIdOrMsanDevId select eo).SingleOrDefault() : null
226: };
227:
228: if (voipPstnUser == null)
229: {
230: newVoipPstnUser.Created = newVoipPstnUser.Updated = DateTime.UtcNow.AddHours(3);
231:
232: db.EmsVoipPstnUsers.Add(newVoipPstnUser);
233:
234: insertedItemCount++;
235: }
236: else // update
237: {
238: // below: copy values from newVoipPstnUser to voipPstnUser
239:
240: if (voipPstnUser.Update(newVoipPstnUser))
241: {
242: db.EmsVoipPstnUsers.Attach(voipPstnUser);
243: db.Entry(voipPstnUser).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
244:
245: updatedItemCount++;
246: }
247: }
248:
249: itemIdList.Add(id); // keep at the end
250: //}
251: //else
252: //{
253: // result.AddError("dn:" + dn + ", emsDevType:" + emsDevType.ToString() + ". dn and emsDevtype values are inconsistent.");
254: //}
255: }
256: else
257: {
258: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): pn != queryPn and/or sn != querySn.");
259: }
260: }
261: else
262: {
263: result.AddWarning("LST-VOIPPSTNUSER (" + response.Ctag + "): dn is -- empty.");
264: }
265: }
266:
267: // below: this function will remove values that were not present in the reading
268: if (voipPstnUserList.Count > 0)
269: {
270: foreach (Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser v in voipPstnUserList)
271: {
272: if (!itemIdList.Contains(v.Id))
273: {
274: voipPstnUser = (from evpu in db.EmsVoipPstnUsers
275: where /*evpu.EmsOnt != null &&*/ evpu.Id == v.Id
276: select evpu).SingleOrDefault();
277:
278: db.EmsVoipPstnUsers.Remove(voipPstnUser);
279:
280: deletedItemCount++;
281: }
282: }
283: }
284: }
285: else //if (response.QueryDataTable.Rows.Count == 0)
286: {
287: if (voipPstnUserList.Count > 0)
288: {
289: foreach (Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser v in voipPstnUserList)
290: {
291: voipPstnUser = (from evpu in db.EmsVoipPstnUsers
292: where /*evpu.EmsOnt != null &&*/ evpu.Id == v.Id
293: select evpu).SingleOrDefault();
294:
295: db.EmsVoipPstnUsers.Remove(voipPstnUser);
296:
297: deletedItemCount++;
298: }
299: }
300: }
301:
302: db.SaveChanges();
303:
304: if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
305: else isUpdated = false;
306:
307: result.AddSuccess("LST-VOIPPSTNUSER (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
308: }
309: else
310: {
311: result.AddWarning("LST-VOIPPSTNUSER (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
312: }
313: }
314: else
315: {
316: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): voipPstnUserList is null.");
317: }
318: }
319: else
320: {
321: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): for DEV: " + queryDev + " emsDevType is neither MDU nor MSAN.");
322: }
323: }
324: else
325: {
326: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
327: }
328: }
329:
330: return isUpdated;
331: }
332:
333: ////////////////////////////////////////////////////////////////////////////
334:
335: /// <summary>
336: ///
337: /// </summary>
338: public static bool UpdateByDn(Ia.Ngn.Cl.Model.Business.Huawei.Ems.Response response, out string updatedService, out Ia.Cl.Model.Result result)
339: {
340: bool isUpdated;
341: int did, readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount, fn, sn, pn;
342: string id, queryCommand, queryDn, dn, dev, nddOntIdOrMsanDevId;
343: DataColumnCollection columns;
344: DataRow columnDataRow;
345: Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt;
346: Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser voipPstnUser, newVoipPstnUser;
347: Ia.Ngn.Cl.Model.Huawei.EmsOnt emsOnt;
348: Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type emsDevType;
349: List<string> itemIdList;
350: List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> voipPstnUserList;
351:
352: isUpdated = false;
353: updatedService = string.Empty;
354: readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
355:
356: result = new Ia.Cl.Model.Result(); // remove initially then add to test all return paths
357:
358: using (var db = new Ia.Ngn.Cl.Model.Ngn())
359: {
360: if (response.CompletionCode == "COMPLD")
361: {
362: //if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.NoMatchingPortPleaseCheckTheDataSetting)
363: //{
364: // result.AddWarning("LST-VOIPPSTNUSER: (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
365: //}
366: //else //if (response.ResultCode == Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.Succeeded)
367: //{
368: queryCommand = response.CommandFromCorrelationTagDictionaryByCtag;
369:
370: //queryCommand = "LST-VOIPPSTNUSER::DN=96524805054:{ctag}::;";
371:
372: // LST-VOIPPSTNUSER::DN=+96524805054:{ctag}::;
373: // LST-VOIPPSTNUSER::DN=96524805054:{ctag}::;
374: queryDn = Ia.Cl.Model.Default.Match(queryCommand, @"DN=(.+?):");
375:
376: // VoIP PSTN user of the device ARD_MSAN_Cabinet 1_Frame 0
377: // VoIP PSTN user of the device MDU-MHL-2101-004
378: dev = response.Title.Replace("VoIP PSTN user of the device ", "");
379:
380: emsDevType = Ia.Ngn.Cl.Model.Data.Huawei.Dev.ReadTypeByDev(dev);
381:
382: if (emsDevType != Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu && emsDevType != Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan)
383: {
384: emsDevType = Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.DevTypeFromDn(queryDn);
385: }
386:
387: if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu || emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan)
388: {
389: if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu)
390: {
391: nddOnt = Ia.Ngn.Cl.Model.Business.Default.NddOntFromHuaweiEmsAccessNameFormat(dev);
392:
393: nddOntIdOrMsanDevId = (nddOnt != null) ? nddOnt.Id : string.Empty;
394:
395: if (nddOnt != null)
396: {
397: emsOnt = (from eo in db.EmsOnts where eo.Id == nddOnt.Id select eo).SingleOrDefault();
398:
399: if (emsOnt != null)
400: {
401: // this should always give a single value or none
402: voipPstnUserList = (from evpu in db.EmsVoipPstnUsers
403: where evpu.EmsOnt != null && evpu.EmsOnt.Id == emsOnt.Id && evpu.DN == queryDn
404: select evpu).ToList();
405: }
406: else
407: {
408: voipPstnUserList = new List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser>();
409: }
410: }
411: else
412: {
413: voipPstnUserList = new List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser>();
414: }
415: }
416: else //if (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Msan)
417: {
418: var msanDev = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
419: where m.Dev == dev
420: select m).SingleOrDefault();
421:
422: nddOntIdOrMsanDevId = (msanDev != null) ? msanDev.Id : string.Empty;
423:
424: voipPstnUserList = (from evpu in db.EmsVoipPstnUsers
425: where evpu.EmsOnt == null && evpu.Id.StartsWith(nddOntIdOrMsanDevId) && evpu.DN == queryDn
426: select evpu).ToList();
427: }
428:
429: if (voipPstnUserList != null)
430: {
431: existingItemCount = voipPstnUserList.Count;
432:
433: if (response.QueryDataTable != null)
434: {
435: if (response.QueryDataTable.Rows.Count >= 1)
436: {
437: itemIdList = new List<string>(response.QueryDataTable.Rows.Count + 1);
438:
439: columns = response.QueryDataTable.Columns;
440: readItemCount = response.QueryDataTable.Rows.Count;
441:
442: columnDataRow = response.QueryDataTable.Rows[0];
443:
444: foreach (DataRow dataRow in response.QueryDataTable.Rows)
445: {
446: did = int.Parse(dataRow[columns.IndexOf("DID")].ToString());
447: fn = int.Parse(dataRow[columns.IndexOf("FN")].ToString());
448: sn = int.Parse(dataRow[columns.IndexOf("SN")].ToString());
449: pn = int.Parse(dataRow[columns.IndexOf("PN")].ToString());
450:
451: dn = columns.Contains("DN") ? dataRow[columns.IndexOf("DN")].ToString() : string.Empty;
452:
453: if (dn != "--") // "--" means empty
454: {
455: if (dn == queryDn)
456: {
457: id = Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.VoipPstnUserId(nddOntIdOrMsanDevId, sn, pn);
458:
459: voipPstnUser = (from eo in voipPstnUserList where eo.Id == id select eo).SingleOrDefault();
460:
461: newVoipPstnUser = new Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser()
462: {
463: Id = id,
464: DID = did,
465: FN = fn,
466: SN = sn,
467: PN = pn,
468: DN = dn.ToString(),
469: MGID = columns.Contains("MGID") ? int.Parse(dataRow[columns.IndexOf("MGID")].ToString()) : 0,
470: MGNAME = columns.Contains("MGNAME") ? dataRow[columns.IndexOf("MGNAME")].ToString() : string.Empty,
471: TID = columns.Contains("TID") ? Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.SpecialIntegerParameterHandling("TID", dataRow[columns.IndexOf("TID")].ToString()) : 0,
472: LayeredConf = columns.Contains("LayeredConf") ? dataRow[columns.IndexOf("LayeredConf")].ToString() : string.Empty,
473: HighLevelWidth = columns.Contains("HighLevelWidth") ? int.Parse(dataRow[columns.IndexOf("HighLevelWidth")].ToString()) : 0,
474: LowerLevelWidth = columns.Contains("LowerLevelWidth") ? int.Parse(dataRow[columns.IndexOf("LowerLevelWidth")].ToString()) : 0,
475: Voltage = columns.Contains("Voltage") ? dataRow[columns.IndexOf("Voltage")].ToString() : string.Empty,
476: KCType = columns.Contains("KCType") ? dataRow[columns.IndexOf("KCType")].ToString() : string.Empty,
477: VoiceGain = columns.Contains("VoiceGain") ? dataRow[columns.IndexOf("VoiceGain")].ToString() : string.Empty,
478: LimitPulseDial = columns.Contains("LimitPulseDial") ? dataRow[columns.IndexOf("LimitPulseDial")].ToString() : string.Empty,
479: RevPolarity = columns.Contains("RevPolarity") ? dataRow[columns.IndexOf("RevPolarity")].ToString() : string.Empty,
480: RevPoleLevel = columns.Contains("RevPoleLevel") ? int.Parse(dataRow[columns.IndexOf("RevPoleLevel")].ToString()) : 0,
481: RevPolePulse = columns.Contains("RevPolePulse") ? dataRow[columns.IndexOf("RevPolePulse")].ToString() : string.Empty,
482: PSTAT = columns.Contains("PSTAT") ? dataRow[columns.IndexOf("PSTAT")].ToString() : string.Empty,
483: ConfigStatus = columns.Contains("ConfigStatus") ? dataRow[columns.IndexOf("ConfigStatus")].ToString() : string.Empty,
484: ServiceStatus = columns.Contains("ServiceStatus") ? dataRow[columns.IndexOf("ServiceStatus")].ToString() : string.Empty,
485: ServiceType = columns.Contains("ServiceType") ? dataRow[columns.IndexOf("ServiceType")].ToString() : string.Empty,
486: ALIAS = columns.Contains("ALIAS") ? dataRow[columns.IndexOf("ALIAS")].ToString() : string.Empty,
487: UserType = columns.Contains("UserType") ? dataRow[columns.IndexOf("UserType")].ToString() : string.Empty,
488: Impedance = columns.Contains("Impedance") ? dataRow[columns.IndexOf("Impedance")].ToString() : string.Empty,
489: Current = columns.Contains("Current") ? dataRow[columns.IndexOf("Current")].ToString() : string.Empty,
490: DCTime = columns.Contains("DCTime") ? int.Parse(dataRow[columns.IndexOf("DCTime")].ToString()) : 0,
491: PITime = columns.Contains("PITime") ? Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.SpecialIntegerParameterHandling("PITime", dataRow[columns.IndexOf("PITime")].ToString()) : 0,
492: FSKDelayInterval = columns.Contains("FSKDelayInterval") ? int.Parse(dataRow[columns.IndexOf("FSKDelayInterval")].ToString()) : 0,
493: ActualVoiceGain = columns.Contains("ActualVoiceGain") ? dataRow[columns.IndexOf("ActualVoiceGain")].ToString() : string.Empty,
494: CidTransWhen = columns.Contains("CidTransWhen") ? dataRow[columns.IndexOf("CidTransWhen")].ToString() : string.Empty,
495: CidFormat = columns.Contains("CidFormat") ? dataRow[columns.IndexOf("CidFormat")].ToString() : string.Empty,
496: OverloadPRI = columns.Contains("OverloadPRI") ? dataRow[columns.IndexOf("OverloadPRI")].ToString() : string.Empty,
497: ImpedanceProfile = columns.Contains("ImpedanceProfile") ? dataRow[columns.IndexOf("ImpedanceProfile")].ToString() : string.Empty,
498: SendVoiceGain = columns.Contains("SendVoiceGain") ? dataRow[columns.IndexOf("SendVoiceGain")].ToString() : string.Empty,
499: RecvVoiceGain = columns.Contains("RecvVoiceGain") ? dataRow[columns.IndexOf("RecvVoiceGain")].ToString() : string.Empty,
500: RevPolarityMode = columns.Contains("RevPolarityMode") ? dataRow[columns.IndexOf("RevPolarityMode")].ToString() : string.Empty,
501: PortRunState = columns.Contains("PortRunState") ? dataRow[columns.IndexOf("PortRunState")].ToString() : string.Empty,
502: PortTestState = columns.Contains("PortTestState") ? dataRow[columns.IndexOf("PortTestState")].ToString() : string.Empty,
503: PortLineState = columns.Contains("PortLineState") ? dataRow[columns.IndexOf("PortLineState")].ToString() : string.Empty,
504: PortLoopState = columns.Contains("PortLoopState") ? dataRow[columns.IndexOf("PortLoopState")].ToString() : string.Empty,
505: ServiceRunState = columns.Contains("ServiceRunState") ? dataRow[columns.IndexOf("ServiceRunState")].ToString() : string.Empty,
506: ServiceAdminState = columns.Contains("ServiceAdminState") ? dataRow[columns.IndexOf("ServiceAdminState")].ToString() : string.Empty,
507: ActualSendVoiceGain = columns.Contains("ActualSendVoiceGain") ? dataRow[columns.IndexOf("ActualSendVoiceGain")].ToString() : string.Empty,
508: ActualRecvVo = columns.Contains("ActualRecvVo") ? dataRow[columns.IndexOf("ActualRecvVo")].ToString() : string.Empty,
509: AGCEnable = columns.Contains("AGCEnable") ? dataRow[columns.IndexOf("AGCEnable")].ToString() : string.Empty,
510: AGCEnableLevel = columns.Contains("AGCEnableLevel") ? int.Parse(dataRow[columns.IndexOf("AGCEnableLevel")].ToString()) : 0,
511: SNSEnable = columns.Contains("SNSEnable") ? dataRow[columns.IndexOf("SNSEnable")].ToString() : string.Empty,
512: SNSEnableLevel = columns.Contains("SNSEnableLevel") ? int.Parse(dataRow[columns.IndexOf("SNSEnableLevel")].ToString()) : 0,
513: NlpMode = columns.Contains("NlpMode") ? dataRow[columns.IndexOf("NlpMode")].ToString() : string.Empty,
514: LineLockEnable = columns.Contains("LineLockEnable") ? dataRow[columns.IndexOf("LineLockEnable")].ToString() : string.Empty,
515: DspInputGain = columns.Contains("DspInputGain") ? dataRow[columns.IndexOf("DspInputGain")].ToString() : string.Empty,
516: DspOutputGain = columns.Contains("DspOutputGain") ? dataRow[columns.IndexOf("DspOutputGain")].ToString() : string.Empty,
517: ClipReversePole = columns.Contains("ClipReversePole") ? dataRow[columns.IndexOf("ClipReversePole")].ToString() : string.Empty,
518: DEFAULTCLI = columns.Contains("DEFAULTCLI") ? dataRow[columns.IndexOf("DEFAULTCLI")].ToString() : string.Empty,
519: USERGROUPID = columns.Contains("USERGROUPID") ? int.Parse(dataRow[columns.IndexOf("USERGROUPID")].ToString()) : 0,
520: ADJUSTFACTOR = columns.Contains("ADJUSTFACTOR") ? int.Parse(dataRow[columns.IndexOf("ADJUSTFACTOR")].ToString()) : 0,
521: DSPPROFILE = columns.Contains("DSPPROFILE") ? dataRow[columns.IndexOf("DSPPROFILE")].ToString() : string.Empty,
522:
523: EmsOnt = (emsDevType == Ia.Ngn.Cl.Model.Business.Huawei.Dev.Type.Mdu) ? (from eo in db.EmsOnts where eo.Id == nddOntIdOrMsanDevId select eo).SingleOrDefault() : null
524: };
525:
526: if (voipPstnUser == null)
527: {
528: newVoipPstnUser.Created = newVoipPstnUser.Updated = DateTime.UtcNow.AddHours(3);
529:
530: db.EmsVoipPstnUsers.Add(newVoipPstnUser);
531:
532: insertedItemCount++;
533: }
534: else // update
535: {
536: // below: copy values from newVoipPstnUser to ontSipInfo
537:
538: if (voipPstnUser.Update(newVoipPstnUser))
539: {
540: db.EmsVoipPstnUsers.Attach(voipPstnUser);
541: db.Entry(voipPstnUser).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
542:
543: updatedItemCount++;
544: }
545: }
546:
547: itemIdList.Add(id); // keep at the end
548:
549: updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(dn);
550: }
551: else result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): dn not equal to queryDn.");
552: }
553: else result.AddWarning("LST-VOIPPSTNUSER (" + response.Ctag + "): dn is -- empty.");
554: }
555:
556: // below: this function will remove values that were not present in the reading
557: if (voipPstnUserList.Count > 0)
558: {
559: foreach (Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser v in voipPstnUserList)
560: {
561: if (!itemIdList.Contains(v.Id))
562: {
563: voipPstnUser = (from evpu in db.EmsVoipPstnUsers
564: where /*evpu.EmsOnt != null &&*/ evpu.Id == v.Id
565: select evpu).SingleOrDefault();
566:
567: db.EmsVoipPstnUsers.Remove(voipPstnUser);
568:
569: deletedItemCount++;
570:
571: updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(voipPstnUser.DN);
572: }
573: }
574: }
575: }
576: else //if (response.QueryDataTable.Rows.Count == 0)
577: {
578: if (voipPstnUserList.Count > 0)
579: {
580: foreach (Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser v in voipPstnUserList)
581: {
582: voipPstnUser = (from evpu in db.EmsVoipPstnUsers
583: where /*evpu.EmsOnt != null &&*/ evpu.Id == v.Id
584: select evpu).SingleOrDefault();
585:
586: db.EmsVoipPstnUsers.Remove(voipPstnUser);
587:
588: deletedItemCount++;
589:
590: updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(voipPstnUser.DN);
591: }
592: }
593: }
594: }
595: else
596: {
597: if (voipPstnUserList.Count > 0)
598: {
599: foreach (Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser v in voipPstnUserList)
600: {
601: voipPstnUser = (from evpu in db.EmsVoipPstnUsers
602: where /*evpu.EmsOnt != null &&*/ evpu.Id == v.Id
603: select evpu).SingleOrDefault();
604:
605: db.EmsVoipPstnUsers.Remove(voipPstnUser);
606:
607: deletedItemCount++;
608:
609: updatedService = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(voipPstnUser.DN);
610: }
611: }
612: }
613:
614: db.SaveChanges();
615:
616: if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
617: else isUpdated = false;
618:
619: result.AddSuccess("LST-VOIPPSTNUSER (" + response.Ctag + "): (" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
620: }
621: else
622: {
623: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): voipPstnUserList is null.");
624: }
625: }
626: else
627: {
628: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): for DEV: " + dev + " emsDevType is neither MDU nor MSAN.");
629: }
630: //}
631: //else
632: //{
633: // result.AddError("LST-VOIPPSTNUSER: (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
634: //}
635: }
636: else
637: {
638: result.AddError("LST-VOIPPSTNUSER (" + response.Ctag + "): (" + response.CompletionCode + ", " + response.ResultCode.ToString() + ")");
639: }
640: }
641:
642: return isUpdated;
643: }
644:
645: ////////////////////////////////////////////////////////////////////////////
646:
647: /// <summary>
648: ///
649: /// </summary>
650: public static List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> List()
651: {
652: List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> list;
653:
654: using (var db = new Ia.Ngn.Cl.Model.Ngn())
655: {
656: list = (from evpu in db.EmsVoipPstnUsers
657: //where evpu.EmsOnt != null
658: select evpu).ToList();
659: }
660:
661: return list;
662: }
663:
664: ////////////////////////////////////////////////////////////////////////////
665:
666: /// <summary>
667: ///
668: /// </summary>
669: public static List<string> ServiceList()
670: {
671: List<string> list;
672:
673: using (var db = new Ia.Ngn.Cl.Model.Ngn())
674: {
675: var list0 = (from evpu in db.EmsVoipPstnUsers select evpu.DN).AsNoTracking().ToList();
676:
677: list = (from l in list0 select Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l)).Distinct().ToList();
678: }
679:
680: return list;
681: }
682:
683: ////////////////////////////////////////////////////////////////////////////
684:
685: /// <summary>
686: ///
687: /// </summary>
688: public static List<string> DuplicateMduDnServiceWithCountryCodeOrMsanDnServiceImpuAidServiceList()
689: {
690: List<string> list;
691:
692: //var dummy = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuAid("");
693:
694: // I'll check that the records are for a real 11 digit number, otherwise we will not send it to the database
695: // for MDUs numbers will look like 96524805054 Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToServiceWithCountryCode(dn);
696: // for MSAN numbers will look like +96524805054 Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToImpuAid(dn)
697:
698: using (var db = new Ia.Ngn.Cl.Model.Ngn())
699: {
700: var list0 = (from evpu1 in db.EmsVoipPstnUsers
701: join evpu2 in db.EmsVoipPstnUsers on evpu1.DN equals evpu2.DN
702: where evpu1.Id != evpu2.Id
703: select new { Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(evpu1.DN) }).Distinct().ToList();
704:
705: var list1 = (from evpu1 in db.EmsVoipPstnUsers
706: join evpu2 in db.EmsVoipPstnUsers on evpu1.DN equals "+" + evpu2.DN
707: where evpu1.Id != evpu2.Id
708: select new { Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(evpu1.DN) }).Distinct().ToList();
709:
710: var list2 = list0.Union(list1).Distinct().ToList();
711:
712: list = (from l in list2 select l.Service).ToList();
713: }
714:
715: return list;
716: }
717:
718: ////////////////////////////////////////////////////////////////////////////
719:
720: /// <summary>
721: ///
722: /// </summary>
723: public static List<string> InconsistentRecordsWhereEmsOntIsNullAndDnIsImpuAidHasPlusFormatOrEmsOntIsNotNullAndDnIsInServiceWithCountryCodeNoPlusFormatList()
724: {
725: List<string> list;
726:
727: //var dummy = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuAid("");
728:
729: // for MDUs numbers will look like 96524805054 Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToServiceWithCountryCode(dn);
730: // for MSAN numbers will look like +96524805054 Ia.Ngn.Cl.Model.Business.NumberFormatConverter.IsMatchToImpuAid(dn)
731:
732: using (var db = new Ia.Ngn.Cl.Model.Ngn())
733: {
734: // select * from EmsVoipPstnUsers where EmsOnt_Id is not null and dn like '+%'
735: var list0 = (from evpu in db.EmsVoipPstnUsers
736: where evpu.EmsOnt != null && evpu.DN.StartsWith("+")
737: select new { Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(evpu.DN) }).Distinct().ToList();
738:
739: // select * from EmsVoipPstnUsers where EmsOnt_Id is null and dn not like '+%'
740: var list1 = (from evpu in db.EmsVoipPstnUsers
741: where evpu.EmsOnt == null && !evpu.DN.StartsWith("+")
742: select new { Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(evpu.DN) }).Distinct().ToList();
743:
744: var list2 = list0.Union(list1).Distinct().ToList();
745:
746: list = (from l in list2 select l.Service).ToList();
747: }
748:
749: return list;
750: }
751:
752: ////////////////////////////////////////////////////////////////////////////
753:
754: /// <summary>
755: ///
756: /// </summary>
757: public static List<string> ServiceIdWithinSipOltList()
758: {
759: int serviceType;
760: string service, serviceId;
761: List<int> sipOltIdList;
762: List<string> list, serviceIdList;
763:
764: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
765: sipOltIdList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.SipOltIdList;
766:
767: using (var db = new Ia.Ngn.Cl.Model.Ngn())
768: {
769: list = (from evpu in db.EmsVoipPstnUsers
770: where evpu.EmsOnt != null && evpu.EmsOnt.Access != null && sipOltIdList.Contains(evpu.EmsOnt.Access.Olt)
771: select evpu.DN).AsNoTracking().ToList();
772: }
773:
774: if (list != null && list.Count > 0)
775: {
776: serviceIdList = new List<string>(list.Count);
777:
778: foreach (string s in list)
779: {
780: service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
781:
782: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
783:
784: serviceIdList.Add(serviceId);
785: }
786: }
787: else
788: {
789: serviceIdList = new List<string>();
790: }
791:
792: return serviceIdList;
793: }
794:
795: ////////////////////////////////////////////////////////////////////////////
796:
797: /// <summary>
798: ///
799: /// </summary>
800: public static List<string> ServiceWithinEmsVoipPstnUserWhereEmsDevResultCodeDeviceOfflineError()
801: {
802: string service;
803: List<string> serviceList;
804:
805: using (var db = new Ia.Ngn.Cl.Model.Ngn())
806: {
807: var list = (from evpu in db.EmsVoipPstnUsers
808: where evpu.EmsOnt != null && evpu.EmsOnt.Access != null
809: select new { evpu.DN, evpu.DID }).AsNoTracking().ToList();
810:
811: if (list != null && list.Count > 0)
812: {
813: serviceList = new List<string>(list.Count);
814:
815: var didToResultCodeDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DidToResultCodeDictionary;
816:
817: foreach (var evpu in list)
818: {
819: if (didToResultCodeDictionary.ContainsKey(evpu.DID))
820: {
821: var resultCode = didToResultCodeDictionary[evpu.DID];
822:
823: if (resultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
824: {
825: service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(evpu.DN);
826:
827: serviceList.Add(service);
828: }
829: }
830: }
831: }
832: else
833: {
834: serviceList = new List<string>();
835: }
836: }
837:
838: return serviceList;
839: }
840:
841: ////////////////////////////////////////////////////////////////////////////
842:
843: /// <summary>
844: ///
845: /// </summary>
846: public static List<string> AccessNameWithinEmsVoipPstnUserWhereEmsDevResultCodeDeviceOfflineError()
847: {
848: string accessName;
849: List<string> accessNameList;
850:
851: using (var db = new Ia.Ngn.Cl.Model.Ngn())
852: {
853: var list = (from evpu in db.EmsVoipPstnUsers
854: where evpu.EmsOnt != null && evpu.EmsOnt.Access != null
855: select new { evpu.EmsOnt.Access.Id, evpu.DID }).AsNoTracking().ToList();
856:
857: if (list != null && list.Count > 0)
858: {
859: accessNameList = new List<string>(list.Count);
860:
861: var didToResultCodeDictionary = Ia.Ngn.Cl.Model.Data.Huawei.Dev.DidToResultCodeDictionary;
862: var ontAccessIdToOntAccessNameDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntAccessNameDictionary;
863:
864: foreach (var accessIdDid in list)
865: {
866: if (didToResultCodeDictionary.ContainsKey(accessIdDid.DID))
867: {
868: var resultCode = didToResultCodeDictionary[accessIdDid.DID];
869:
870: if (resultCode == (long)Ia.Ngn.Cl.Model.Client.Huawei.Ems.ResultCode.DeviceOfflineError)
871: {
872: if (ontAccessIdToOntAccessNameDictionary.ContainsKey(accessIdDid.Id))
873: {
874: accessName = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntAccessNameDictionary[accessIdDid.Id];
875:
876: if (!accessNameList.Contains(accessName))
877: {
878: accessNameList.Add(accessName);
879: }
880: }
881: }
882: }
883: }
884: }
885: else
886: {
887: accessNameList = new List<string>();
888: }
889: }
890:
891: return accessNameList;
892: }
893:
894: ////////////////////////////////////////////////////////////////////////////
895:
896: /// <summary>
897: ///
898: /// </summary>
899: public static List<string> ServiceIdWithinAllowedSipOltToBeProvisionedOrMigratedList()
900: {
901: int serviceType;
902: string service, serviceId;
903: List<int> sipOltIdList;
904: List<string> list, serviceIdList;
905:
906: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
907: sipOltIdList = Ia.Ngn.Cl.Model.Data.Service.AllowedToBeProvisionedSipOltIdList.Union(Ia.Ngn.Cl.Model.Data.Service.AllowedToBeMigratedSipOltIdList).ToList();
908:
909: using (var db = new Ia.Ngn.Cl.Model.Ngn())
910: {
911: list = (from evpu in db.EmsVoipPstnUsers
912: where evpu.EmsOnt != null && evpu.EmsOnt.Access != null && sipOltIdList.Contains(evpu.EmsOnt.Access.Olt)
913: select evpu.DN).ToList();
914: }
915:
916: if (list != null && list.Count > 0)
917: {
918: serviceIdList = new List<string>(list.Count);
919:
920: foreach (string s in list)
921: {
922: service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
923:
924: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
925:
926: serviceIdList.Add(serviceId);
927: }
928: }
929: else
930: {
931: serviceIdList = new List<string>();
932: }
933:
934: return serviceIdList;
935: }
936:
937: ////////////////////////////////////////////////////////////////////////////
938:
939: /// <summary>
940: /// List of ServiceOnts within EmsVoipPstnUsers within a SIP allowed to be provisioned or migrated OLT
941: /// </summary>
942: public static List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated> ServiceOntWithinAllowedSipOltToBeProvisionedOrMigratedList()
943: {
944: int serviceType;
945: string service, serviceId;
946: List<int> sipOltIdList;
947: List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated> tempSipUserNamelist, serviceOntList;
948:
949: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
950: sipOltIdList = Ia.Ngn.Cl.Model.Data.Service.AllowedToBeProvisionedSipOltIdList.Union(Ia.Ngn.Cl.Model.Data.Service.AllowedToBeMigratedSipOltIdList).ToList();
951:
952: var ontAccessIdToOntForOltIdListDictionary = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntAccessIdToOntForOltIdListDictionary(sipOltIdList);
953:
954: using (var db = new Ia.Ngn.Cl.Model.Ngn())
955: {
956: tempSipUserNamelist = (from evpu in db.EmsVoipPstnUsers
957: where evpu.EmsOnt != null && evpu.EmsOnt.Access != null && sipOltIdList.Contains(evpu.EmsOnt.Access.Olt)
958: // select vpu.DN).ToList();
959: select new Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated { Service = evpu.DN, AccessId = evpu.EmsOnt.Access.Id, CreatedDateTime = evpu.Created }).AsNoTracking().ToList();
960: }
961:
962: if (tempSipUserNamelist != null && tempSipUserNamelist.Count > 0)
963: {
964: serviceOntList = new List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated>(tempSipUserNamelist.Count);
965:
966: foreach (var so in tempSipUserNamelist)
967: {
968: service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(so.Service); // so.Service here is vpu.DN
969:
970: serviceId = Ia.Ngn.Cl.Model.Business.Service.ServiceToServiceId(service, serviceType);
971:
972: serviceOntList.Add(new Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated
973: {
974: ServiceId = serviceId,
975: Service = service,
976: AccessId = so.AccessId,
977: Ont = ontAccessIdToOntForOltIdListDictionary.ContainsKey(so.AccessId) ? ontAccessIdToOntForOltIdListDictionary[so.AccessId] : null,
978: CreatedDateTime = so.CreatedDateTime
979: });
980: }
981: }
982: else
983: {
984: serviceOntList = new List<Ia.Ngn.Cl.Model.Business.ServiceAccessIpOntCreated>();
985: }
986:
987: return serviceOntList;
988: }
989:
990: ////////////////////////////////////////////////////////////////////////////
991:
992: /// <summary>
993: ///
994: /// </summary>
995: public static Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser Read(string id)
996: {
997: Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser item;
998:
999: using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
item = (from evpu in db.EmsVoipPstnUsers
where evpu.EmsOnt != null && evpu.Id == id
select evpu).Include(o => o.EmsOnt).SingleOrDefault();
}
return item;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> ReadByService(string service) //, Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont nddOnt)
{
string dn;
List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> list;
dn = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ServiceWithCountryCode(service);
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
where evpu.EmsOnt != null && evpu.DN == dn
select evpu).Include(o => o.EmsOnt).ThenInclude(o => o.Access).ToList(); //.SingleOrDefault();
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> ReadByMsanService(string service)
{
string dn;
List<Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser> list;
dn = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuAid(service);
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
where /*evpu.EmsOnt != null &&*/ evpu.DN == dn
select evpu)/*.Include(o => o.EmsOnt).ThenInclude(o => o.Access)*/.ToList(); //.SingleOrDefault();
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.DidFnSnPnDn> DidFnSnPnDnMsanList()
{
List<Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.DidFnSnPnDn> list;
//var dummy = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuAid("");
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
where evpu.DN.StartsWith("+" + Ia.Ngn.Cl.Model.Business.Service.CountryCode)
select new Ia.Ngn.Cl.Model.Business.Huawei.VoipPstnUser.DidFnSnPnDn
{
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
}).ToList();
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> MsanServiceList
{
get
{
List<string> list;
#if DEBUG
var dummyVarToDrawRefractorToBelow = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Dn("0000000");
#endif
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
var list0 = (from evpu in db.EmsVoipPstnUsers
where evpu.EmsOnt == null && evpu.DN.StartsWith("+965")
select evpu.DN).ToList();
list = new List<string>();
foreach (var s in list0)
{
list.Add(Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s));
}
}
return list;
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Dictionary<string, bool> MsanServiceDictionary
{
get
{
string key;
Dictionary<string, bool> dictionary;
#if DEBUG
var dummyVarToDrawRefractorToBelow = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Dn("0000000");
#endif
var list = Ia.Ngn.Cl.Model.Data.Huawei.VoipPstnUser.MsanServiceList;
dictionary = new Dictionary<string, bool>();
foreach (var s in list)
{
key = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s);
if (!string.IsNullOrEmpty(key)) dictionary[key] = true;
}
return dictionary;
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Dictionary<int, int> MsanDevDidToDnCountDictionary
{
get
{
Dictionary<int, int> dictionary;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
/*
select ed.DID,count(0) from EmsVoipPstnUsers evpu
left outer join EmsDevs ed on ed.DID = evpu.DID
where evpu.DN like '+%'
group by ed.DID
*/
dictionary = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null && evpu.DN.StartsWith("+965")
group ed.DID by ed.DID into g
select new { Did = g.Key, Count = g.Count() }).AsNoTracking().ToDictionary(u => u.Did, u => u.Count);
}
return dictionary.ToDictionary(u => u.Key, u => u.Value);
}
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<string> DnServiceListByMsanDevDidList(List<int> didList)
{
List<string> list;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
var list0 = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null && evpu.DN != null && evpu.DN.StartsWith("+965") && didList.Contains(ed.DID)
select evpu.DN).AsNoTracking().ToList();
list = new List<string>();
foreach (var s in list0)
{
list.Add(Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s));
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsan(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> list;
var msanDevList = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id
select m).ToList();
var didList = msanDevList.Select(u => u.Did).ToList();
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null /*&& evpu.DN.StartsWith("+965")*/ && didList.Contains(ed.DID)
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().ToList();
foreach (var l in list)
{
l.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l.Dn);
l.MsanId = msan.Id;
l.MsanNameSymbol = msan.NameSymbol;
msanDev = (from m in msanDevList where m.Did == l.Did select m).Single();
l.MsanDevId = msanDev.Id;
l.MsanDevDev = msanDev.Dev;
l.Cabinet = msanDev.Cabinet;
l.Frame = msanDev.Frame;
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> MsanDevLicListByNddMsanAndCabinet(Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Msan msan, int cabinet)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> list;
var msanDevList = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id && m.Cabinet == cabinet
select m).ToList();
var didList = msanDevList.Select(u => u.Did).ToList();
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null /*&& evpu.DN.StartsWith("+965")*/ && didList.Contains(ed.DID)
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().ToList();
foreach (var l in list)
{
l.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l.Dn);
l.MsanId = msan.Id;
l.MsanNameSymbol = msan.NameSymbol;
msanDev = (from m in msanDevList where m.Did == l.Did select m).Single();
l.MsanDevId = msanDev.Id;
l.MsanDevDev = msanDev.Dev;
l.Cabinet = msanDev.Cabinet;
l.Frame = msanDev.Frame;
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
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)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> list;
var msanDevList = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id && m.Cabinet == cabinet && m.Frame == frame
select m).ToList();
var didList = msanDevList.Select(u => u.Did).ToList();
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null /*&& evpu.DN.StartsWith("+965")*/ && didList.Contains(ed.DID)
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().ToList();
foreach (var l in list)
{
l.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l.Dn);
l.MsanId = msan.Id;
l.MsanNameSymbol = msan.NameSymbol;
msanDev = (from m in msanDevList where m.Did == l.Did select m).Single();
l.MsanDevId = msanDev.Id;
l.MsanDevDev = msanDev.Dev;
l.Cabinet = msanDev.Cabinet;
l.Frame = msanDev.Frame;
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
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)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> list;
var msanDevList = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id && m.Cabinet == cabinet && m.Frame == frame
select m).ToList();
var didList = msanDevList.Select(u => u.Did).ToList();
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null /*&& evpu.DN.StartsWith("+965")*/ && didList.Contains(ed.DID) && evpu.FN == fn
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().ToList();
foreach (var l in list)
{
l.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l.Dn);
l.MsanId = msan.Id;
l.MsanNameSymbol = msan.NameSymbol;
msanDev = (from m in msanDevList where m.Did == l.Did select m).Single();
l.MsanDevId = msanDev.Id;
l.MsanDevDev = msanDev.Dev;
l.Cabinet = msanDev.Cabinet;
l.Frame = msanDev.Frame;
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
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)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev msanDev;
List<Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic> list;
var msanDevList = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id && m.Cabinet == cabinet && m.Frame == frame
select m).ToList();
var didList = msanDevList.Select(u => u.Did).ToList();
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
list = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null /*&& evpu.DN.StartsWith("+965")*/ && didList.Contains(ed.DID) && evpu.FN == fn && evpu.SN == sn
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().ToList();
foreach (var l in list)
{
l.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(l.Dn);
l.MsanId = msan.Id;
l.MsanNameSymbol = msan.NameSymbol;
msanDev = (from m in msanDevList where m.Did == l.Did select m).Single();
l.MsanDevId = msanDev.Id;
l.MsanDevDev = msanDev.Dev;
l.Cabinet = msanDev.Cabinet;
l.Frame = msanDev.Frame;
}
}
return list;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic MsanDevLicByEmsVoipPstnUserId(string emsVoipPstnUserId)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic lic;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
lic = (from evpu in db.EmsVoipPstnUsers
where evpu.Id == emsVoipPstnUserId
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().SingleOrDefault();
var msanDev = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Did == lic.Did
select m).Single();
lic.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(lic.Dn);
lic.MsanId = msanDev.Msan.Id;
lic.MsanNameSymbol = msanDev.Msan.NameSymbol;
lic.MsanDevId = msanDev.Id;
lic.MsanDevDev = msanDev.Dev;
lic.Cabinet = msanDev.Cabinet;
lic.Frame = msanDev.Frame;
}
return lic;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
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)
{
Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic lic;
var msanDev = (from m in Ia.Ngn.Cl.Model.Data.Huawei.Default.MsanDevList
where m.Msan.Id == msan.Id && m.Cabinet == cabinet && m.Frame == frame
select m).SingleOrDefault();
if (msanDev != null)
{
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
lic = (from evpu in db.EmsVoipPstnUsers
join ed in db.EmsDevs on evpu.DID equals ed.DID
where evpu.EmsOnt == null && msanDev.Did == ed.DID && evpu.FN == fn && evpu.SN == sn && evpu.PN == pn
select new Ia.Ngn.Cl.Model.Business.Huawei.Dev.MsanDev.Lic
{
EmsVoipPstnUserId = evpu.Id,
Did = evpu.DID,
Fn = evpu.FN,
Sn = evpu.SN,
Pn = evpu.PN,
Dn = evpu.DN,
Created = evpu.Created,
Updated = evpu.Updated
}).AsNoTracking().SingleOrDefault();
if (lic != null)
{
lic.Service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(lic.Dn);
lic.MsanId = msanDev.Msan.Id;
lic.MsanNameSymbol = msanDev.Msan.NameSymbol;
lic.MsanDevId = msanDev.Id;
lic.MsanDevDev = msanDev.Dev;
lic.Cabinet = msanDev.Cabinet;
lic.Frame = msanDev.Frame;
}
}
}
else lic = null;
return lic;
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static Dictionary<string, string> IdToOntIdDictionary
{
get
{
Dictionary<string, string> dictionary;
using (var db = new Ia.Ngn.Cl.Model.Ngn())
{
dictionary = (from evpu in db.EmsVoipPstnUsers
where evpu.EmsOnt != null
select new { evpu.Id, OntId = evpu.EmsOnt.Id }).ToDictionary(u => u.Id, u => u.OntId);
}
return dictionary.ToDictionary(u => u.Key, u => u.Value);
}
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string ToSimpleTextString(Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser emsVoipPstnUser)
{
StringBuilder sb;
sb = new StringBuilder();
//sb.AppendLine("Vendor: " + Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei.Name);
sb.AppendLine("DID: " + emsVoipPstnUser.DID);
sb.AppendLine("FN: " + emsVoipPstnUser.FN);
sb.AppendLine("SN: " + emsVoipPstnUser.SN);
sb.AppendLine("PN: " + emsVoipPstnUser.PN);
sb.AppendLine("MGID: " + emsVoipPstnUser.MGID);
sb.AppendLine("MGNAME: " + emsVoipPstnUser.MGNAME);
sb.AppendLine("TID: " + emsVoipPstnUser.TID);
sb.AppendLine("DN: " + emsVoipPstnUser.DN);
sb.AppendLine("LayeredConf: " + emsVoipPstnUser.LayeredConf);
sb.AppendLine("HighLevelWidth: " + emsVoipPstnUser.HighLevelWidth);
sb.AppendLine("LowerLevelWidth: " + emsVoipPstnUser.LowerLevelWidth);
sb.AppendLine("Voltage: " + emsVoipPstnUser.Voltage);
sb.AppendLine("KCType: " + emsVoipPstnUser.KCType);
sb.AppendLine("VoiceGain: " + emsVoipPstnUser.VoiceGain);
sb.AppendLine("LimitPulseDial: " + emsVoipPstnUser.LimitPulseDial);
sb.AppendLine("RevPolarity: " + emsVoipPstnUser.RevPolarity);
sb.AppendLine("RevPoleLevel: " + emsVoipPstnUser.RevPoleLevel);
sb.AppendLine("RevPolePulse: " + emsVoipPstnUser.RevPolePulse);
sb.AppendLine("PSTAT: " + emsVoipPstnUser.PSTAT);
sb.AppendLine("ConfigStatus: " + emsVoipPstnUser.ConfigStatus);
sb.AppendLine("ServiceStatus: " + emsVoipPstnUser.ServiceStatus);
sb.AppendLine("ServiceType: " + emsVoipPstnUser.ServiceType);
sb.AppendLine("ALIAS: " + emsVoipPstnUser.ALIAS);
sb.AppendLine("UserType: " + emsVoipPstnUser.UserType);
sb.AppendLine("Impedance: " + emsVoipPstnUser.Impedance);
sb.AppendLine("Current: " + emsVoipPstnUser.Current);
sb.AppendLine("DCTime: " + emsVoipPstnUser.DCTime);
sb.AppendLine("PITime: " + emsVoipPstnUser.PITime);
sb.AppendLine("FSKDelayInterval: " + emsVoipPstnUser.FSKDelayInterval);
sb.AppendLine("ActualVoiceGain: " + emsVoipPstnUser.ActualVoiceGain);
sb.AppendLine("CidTransWhen: " + emsVoipPstnUser.CidTransWhen);
sb.AppendLine("CidFormat: " + emsVoipPstnUser.CidFormat);
sb.AppendLine("OverloadPRI: " + emsVoipPstnUser.OverloadPRI);
sb.AppendLine("ImpedanceProfile: " + emsVoipPstnUser.ImpedanceProfile);
sb.AppendLine("SendVoiceGain: " + emsVoipPstnUser.SendVoiceGain);
sb.AppendLine("RecvVoiceGain: " + emsVoipPstnUser.RecvVoiceGain);
sb.AppendLine("RevPolarityMode: " + emsVoipPstnUser.RevPolarityMode);
sb.AppendLine("PortRunState: " + emsVoipPstnUser.PortRunState);
sb.AppendLine("PortTestState: " + emsVoipPstnUser.PortTestState);
sb.AppendLine("PortLineState: " + emsVoipPstnUser.PortLineState);
sb.AppendLine("PortLoopState: " + emsVoipPstnUser.PortLoopState);
sb.AppendLine("ServiceRunState: " + emsVoipPstnUser.ServiceRunState);
sb.AppendLine("ServiceAdminState: " + emsVoipPstnUser.ServiceAdminState);
sb.AppendLine("ActualSendVoiceGain: " + emsVoipPstnUser.ActualSendVoiceGain);
sb.AppendLine("ActualRecvVo: " + emsVoipPstnUser.ActualRecvVo);
sb.AppendLine("AGCEnable: " + emsVoipPstnUser.AGCEnable);
sb.AppendLine("AGCEnableLevel: " + emsVoipPstnUser.AGCEnableLevel);
sb.AppendLine("SNSEnable: " + emsVoipPstnUser.SNSEnable);
sb.AppendLine("SNSEnableLevel: " + emsVoipPstnUser.SNSEnableLevel);
sb.AppendLine("NlpMode: " + emsVoipPstnUser.NlpMode);
sb.AppendLine("LineLockEnable: " + emsVoipPstnUser.LineLockEnable);
sb.AppendLine("DspInputGain: " + emsVoipPstnUser.DspInputGain);
sb.AppendLine("DspOutputGain: " + emsVoipPstnUser.DspOutputGain);
sb.AppendLine("ClipReversePole: " + emsVoipPstnUser.ClipReversePole);
sb.AppendLine("DEFAULTCLI: " + emsVoipPstnUser.DEFAULTCLI);
sb.AppendLine("USERGROUPID: " + emsVoipPstnUser.USERGROUPID);
sb.AppendLine("ADJUSTFACTOR: " + emsVoipPstnUser.ADJUSTFACTOR);
sb.AppendLine("DSPPROFILE: " + emsVoipPstnUser.DSPPROFILE);
return sb.ToString();
}
////////////////////////////////////////////////////////////////////////////
/// <summary>
///
/// </summary>
public static string ToSimpleDidFnSnPnTextString(Ia.Ngn.Cl.Model.Huawei.EmsVoipPstnUser emsVoipPstnUser)
{
var s = "DID: " + emsVoipPstnUser.DID + ", FN: " + emsVoipPstnUser.FN + ", SN: " + emsVoipPstnUser.SN + ", PN: " + emsVoipPstnUser.PN;
return s;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
}