1: using System.Collections.Generic;
2: using System.Data;
3: using System.Linq;
4:
5: namespace Ia.Ngn.Cl.Model.Data.Nokia
6: {
7: ////////////////////////////////////////////////////////////////////////////
8:
9: /// <summary publish="true">
10: /// Access Management System (AMS) support class for Nokia data model.
11: /// </summary>
12: ///
13: /// <remarks>
14: /// Copyright © 2006-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
15: ///
16: /// 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
17: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
18: ///
19: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
20: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
21: ///
22: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
23: ///
24: /// Copyright notice: This notice may not be removed or altered from any source distribution.
25: /// </remarks>
26: public class Ams
27: {
28: private static Dictionary<string, string> correlationTagDictionary = new Dictionary<string, string>(1000);
29:
30: public static Dictionary<string, string> CorrelationTagDictionary { get { return correlationTagDictionary; } set { correlationTagDictionary = value; } }
31:
32: ////////////////////////////////////////////////////////////////////////////
33:
34: /// <summary>
35: ///
36: /// </summary>
37: public Ams() { }
38:
39: ////////////////////////////////////////////////////////////////////////////
40:
41: /// <summary>
42: ///
43: /// </summary>
44: public static string BellcoreStateFromId(int stateId)
45: {
46: // see: ColoredBellcoreStateFromId()
47: string s;
48: Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState bellcoreState;
49:
50: bellcoreState = (Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState)stateId;
51:
52: /*
53: * IS-NR: (In-Service and Normal) The entity is fully operational and will perform as provisioned.
54: * OOS-AU: (Out-of-Service and Autonomous) The entity is not operational because of an autonomous event.
55: * OOS-AUMA: (Out-of-Service and Autonomous Management) The entity is not operational because of an autonomous event and has also been manually removed from service.
56: * OOS-MA: (Out-of-Service and Management) The entity has been manually removed from service.
57: */
58:
59: switch (bellcoreState)
60: {
61: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.IsNr: s = "IS-NR"; break;
62: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAu: s = "OOS-AU"; break;
63: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAuma: s = "OOS-AUMA"; break;
64: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosMa: s = "OOS-MA"; break;
65: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.Undefined: s = "Unknown"; break;
66: default: s = "Unknown"; break;
67: }
68:
69: return s;
70: }
71:
72: ////////////////////////////////////////////////////////////////////////////
73:
74: /// <summary>
75: ///
76: /// </summary>
77: public static string ColoredBellcoreStateFromId(int stateId)
78: {
79: // see: BellcoreStateFromId()
80: string s;
81: Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState bellcoreState;
82:
83: bellcoreState = (Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState)stateId;
84:
85: switch (bellcoreState)
86: {
87: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.IsNr: s = "<span style=\"color:Green\">IS-NR</span>"; break;
88: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAu: s = "<span style=\"color:Red\">OOS-AU</span>"; break;
89: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosAuma: s = "<span style=\"color:Red\">OOS-AUMA</span>"; break;
90: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.OosMa: s = "<span style=\"color:Red\">OOS-MA</span>"; break;
91: case Ia.Ngn.Cl.Model.Business.Nokia.Ams.BellcoreState.Undefined: s = "<span style=\"color:Red\">Unknown</span>"; break;
92: default: s = "Unknown"; break;
93: }
94:
95: return s;
96: }
97:
98: ////////////////////////////////////////////////////////////////////////////
99:
100: /// <summary>
101: ///
102: /// </summary>
103: public static string PlannedSoftware
104: {
105: get
106: {
107: return "3FE50853AFXA35";
108: }
109: }
110:
111: ////////////////////////////////////////////////////////////////////////////
112:
113: /// <summary>
114: ///
115: /// </summary>
116: public static int NextVacantFlatTermIdForOnt(int familyTypeId, Ia.Ngn.Cl.Model.Ont ont)
117: {
118: int ft, gwId;
119: List<int> list;
120:
121: if (ont.OntServiceVoips != null && ont.OntServiceVoips.Count > 0)
122: {
123: gwId = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.GwIdFromIp(ont.OntServiceVoips.First().Ip);
124:
125: list = Ia.Ngn.Cl.Model.Data.Nokia.AgcfEndpoint.UsedFlatTermIdListForGatewayId(gwId);
126:
127: if (list.Count == 0) ft = 1; // this means agcfEndpoint does not exist for any number and the box is empty, and we should create agcfEndpoint at 1
128: else
129: {
130: list = Ia.Cl.Model.Default.ExcludedNumberListFromNumberListWithinRange(list, Ia.Ngn.Cl.Model.Business.Nokia.Ont.PossibleNumberOfTdForOntFamilyType((Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType)familyTypeId));
131:
132: if (list.Count > 0) ft = list[0];
133: else ft = Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown; // something went wrong
134: }
135: }
136: else ft = Ia.Ngn.Cl.Model.Business.Default.PortUndefinedOrInvalidOrUnknown; // something went wrong
137:
138: return ft;
139: }
140:
141: ////////////////////////////////////////////////////////////////////////////
142:
143: /// <summary>
144: ///
145: /// </summary>
146: public static List<int> VacantFlatTermIdForOntList(int familyTypeId, Ia.Ngn.Cl.Model.Ont ont)
147: {
148: int gwId;
149: List<int> vacantList, usedList;
150:
151: if (ont.OntServiceVoips != null && ont.OntServiceVoips.Count > 0)
152: {
153: gwId = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.GwIdFromIp(ont.OntServiceVoips.First().Ip);
154:
155: usedList = Ia.Ngn.Cl.Model.Data.Nokia.AgcfEndpoint.UsedFlatTermIdListForGatewayId(gwId);
156:
157: vacantList = Ia.Cl.Model.Default.ExcludedNumberListFromNumberListWithinRange(usedList, Ia.Ngn.Cl.Model.Business.Nokia.Ont.PossibleNumberOfTdForOntFamilyType((Ia.Ngn.Cl.Model.Business.Nokia.Ont.FamilyType)familyTypeId));
158: }
159: else
160: {
161: vacantList = new List<int>();
162: }
163:
164: return vacantList;
165: }
166:
167: ////////////////////////////////////////////////////////////////////////////
168:
169: /// <summary>
170: ///
171: /// </summary>
172: public static Ia.Ngn.Cl.Model.Ont OntFromGwId(int gwId)
173: {
174: string ip;
175: Ia.Ngn.Cl.Model.Ont ont;
176:
177: using (var db = new Ia.Ngn.Cl.Model.Ngn())
178: {
179: ip = Ia.Ngn.Cl.Model.Data.Nokia.AgcfGatewayRecord.IpFromGatewayId(gwId);
180:
181: ont = (from o in db.Onts where o.OntServiceVoips.First().Ip == ip select o).SingleOrDefault();
182: }
183:
184: return ont;
185: }
186:
187: ////////////////////////////////////////////////////////////////////////////
188:
189: /// <summary>
190: ///
191: /// </summary>
192: public static List<Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService> OntOntPotsCustomerNoEqualToSubPartyDisplayNameServiceList()
193: {
194: List<Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService> list;
195:
196: using (var db = new Ia.Ngn.Cl.Model.Ngn())
197: {
198: list = (from sp in db.SubParties
199: join e in db.AgcfEndpoints on sp.AgcfEndpoint.Id equals e.Id
200: join gr in db.AgcfGatewayRecords on e.GwId equals gr.GwId
201: join osv in db.OntServiceVoips on gr.IP1 equals osv.Ip
202: join o in db.Onts on osv.Ont.Id equals o.Id
203: join oop in db.OntOntPots on o.Id equals oop.Ont.Id
204: where oop.Customer != sp.DisplayName && oop.Termination == "td" + e.FlatTermID.ToString()
205: select new Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService
206: {
207: Service = sp.DisplayName,
208: Termination = oop.Termination,
209: OntId = o.Id,
210: OntFamilyTypeId = o.FamilyTypeId
211: }).ToList();
212: }
213:
214: return list;
215: }
216:
217: ////////////////////////////////////////////////////////////////////////////
218:
219: /// <summary>
220: ///
221: /// </summary>
222: public static List<Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService> OntOntPotsCustomerExistsButSubPartyIsNullServiceList()
223: {
224: List<Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService> list;
225:
226: using (var db = new Ia.Ngn.Cl.Model.Ngn())
227: {
228: list = (from oop in db.OntOntPots
229: join o in db.Onts on oop.Ont.Id equals o.Id
230: join osv in db.OntServiceVoips on o.Id equals osv.Ont.Id
231: join gr in db.AgcfGatewayRecords on osv.Ip equals gr.IP1
232: join e in db.AgcfEndpoints on gr.GwId equals e.GwId
233: join sp in db.SubParties on e.Id equals sp.AgcfEndpoint.Id into sp2
234: from sp in sp2.DefaultIfEmpty()
235: where sp == null // oop.Customer != sp.DisplayName && oop.Termination == "td" + e.FlatTermID.ToString()
236: select new Ia.Ngn.Cl.Model.Business.Nokia.OntOntPotsService
237: {
238: Service = oop.Customer,
239: Termination = oop.Termination,
240: OntId = o.Id,
241: OntFamilyTypeId = o.FamilyTypeId
242: }).ToList();
243: }
244:
245: return list;
246: }
247:
248: ////////////////////////////////////////////////////////////////////////////
249: ////////////////////////////////////////////////////////////////////////////
250: }
251:
252: ////////////////////////////////////////////////////////////////////////////
253: ////////////////////////////////////////////////////////////////////////////
254: }