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
9: {
10: ////////////////////////////////////////////////////////////////////////////
11:
12: /// <summary publish="true">
13: /// Service Request Administrative Issue support class for Optical Fiber Network (OFN) data model.
14: /// </summary>
15: ///
16: /// <remarks>
17: /// Copyright © 2019-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
18: ///
19: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
20: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
21: ///
22: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
23: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
24: ///
25: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
26: ///
27: /// Copyright notice: This notice may not be removed or altered from any source distribution.
28: /// </remarks>
29: public class ServiceRequestAdministrativeIssue
30: {
31: private static readonly object objectLock = new object();
32:
33: ////////////////////////////////////////////////////////////////////////////
34:
35: /// <summary>
36: ///
37: /// </summary>
38: public ServiceRequestAdministrativeIssue() { }
39:
40: ////////////////////////////////////////////////////////////////////////////
41:
42: /// <summary>
43: ///
44: /// </summary>
45: public static Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue Read(string service, out Ia.Cl.Model.Result result)
46: {
47: Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue serviceRequestAdministrativeIssue;
48:
49: result = new Ia.Cl.Model.Result();
50:
51: if (!string.IsNullOrEmpty(service))
52: {
53: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
54: {
55: var isPstnService = Ia.Ngn.Cl.Model.Data.Service2.IsPstnService(service);
56:
57: if (!isPstnService)
58: {
59: using (var db = new Ia.Ngn.Cl.Model.Ngn())
60: {
61: var serviceRequestAdministrativeIssueId = Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.ServiceRequestAdministrativeIssueId(service, Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService);
62:
63: serviceRequestAdministrativeIssue = (from srai in db.ServiceRequestAdministrativeIssues
64: where srai.Id == serviceRequestAdministrativeIssueId
65: select srai).SingleOrDefault();
66:
67: if (serviceRequestAdministrativeIssue != null)
68: {
69: result.AddSuccess(@"The number " + service + @" exists in table.");
70: }
71: else result.AddSuccess(@"The number " + service + @" does not exist in table.");
72: }
73: }
74: else
75: {
76: serviceRequestAdministrativeIssue = null;
77: result.AddError("Service number " + service + " is a PSTN number.");
78: }
79: }
80: else
81: {
82: serviceRequestAdministrativeIssue = null;
83: result.AddError("Service number " + service + " does not belong to the network.");
84: }
85: }
86: else
87: {
88: serviceRequestAdministrativeIssue = null;
89: result.AddError("Input is null or empty.");
90: }
91:
92: return serviceRequestAdministrativeIssue;
93: }
94:
95: ////////////////////////////////////////////////////////////////////////////
96:
97: /// <summary>
98: ///
99: /// </summary>
100: public static bool IsPendingIssue(Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType disconnectionType, string service)
101: {
102: bool isPendingIssue;
103:
104: using (var db = new Ia.Ngn.Cl.Model.Ngn())
105: {
106: isPendingIssue = (from srai in db.ServiceRequestAdministrativeIssues
107: where srai.Service == service && srai.Type == (int)disconnectionType
108: select srai.Service).Any();
109: }
110:
111: return isPendingIssue;
112: }
113:
114: ////////////////////////////////////////////////////////////////////////////
115:
116: /// <summary>
117: ///
118: /// </summary>
119: public static List<string> ServiceList(List<string> serviceList)
120: {
121: List<string> list;
122:
123: using (var db = new Ia.Ngn.Cl.Model.Ngn())
124: {
125: if (serviceList.Count > 0)
126: {
127: list = (from srai in db.ServiceRequestAdministrativeIssues
128: where serviceList.Contains(srai.Service)
129: select srai.Service).AsNoTracking().ToList();
130: }
131: else list = new List<string>();
132: }
133:
134: return list;
135: }
136:
137: ////////////////////////////////////////////////////////////////////////////
138:
139: /// <summary>
140: ///
141: /// </summary>
142: public static List<Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue> List()
143: {
144: List<Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue> list;
145:
146: using (var db = new Ia.Ngn.Cl.Model.Ngn())
147: {
148: list = (from srai in db.ServiceRequestAdministrativeIssues
149: select srai).AsNoTracking().ToList();
150: }
151:
152: return list;
153: }
154:
155: ////////////////////////////////////////////////////////////////////////////
156:
157: /// <summary>
158: ///
159: /// </summary>
160: public static List<string> ServiceList()
161: {
162: List<string> list;
163:
164: using (var db = new Ia.Ngn.Cl.Model.Ngn())
165: {
166: list = (from srai in db.ServiceRequestAdministrativeIssues
167: select srai.Service).AsNoTracking().ToList();
168: }
169:
170: return list;
171: }
172:
173: ////////////////////////////////////////////////////////////////////////////
174:
175: /// <summary>
176: ///
177: /// </summary>
178: public static List<string> ServiceList(Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType disconnectionType)
179: {
180: List<string> list;
181:
182: using (var db = new Ia.Ngn.Cl.Model.Ngn())
183: {
184: list = (from srai in db.ServiceRequestAdministrativeIssues
185: where srai.Type == (int)disconnectionType
186: select srai.Service).AsNoTracking().ToList();
187: }
188:
189: return list;
190: }
191:
192: ////////////////////////////////////////////////////////////////////////////
193:
194: /// <summary>
195: ///
196: /// </summary>
197: public static Dictionary<string, string> ServiceDictionary()
198: {
199: Dictionary<string, string> dictionary;
200:
201: using (var db = new Ia.Ngn.Cl.Model.Ngn())
202: {
203: dictionary = (from srai in db.ServiceRequestAdministrativeIssues
204: select new { srai.Service }).AsNoTracking().ToDictionary(u => u.Service, u => u.Service);
205: }
206:
207: return dictionary.ToDictionary(u => u.Key, u => u.Value);
208: }
209:
210: ////////////////////////////////////////////////////////////////////////////
211:
212: /// <summary>
213: ///
214: /// </summary>
215: public static List<string> IdList()
216: {
217: List<string> list;
218:
219: using (var db = new Ia.Ngn.Cl.Model.Ngn())
220: {
221: list = (from srai in db.ServiceRequestAdministrativeIssues
222: select srai.Id).AsNoTracking().ToList();
223: }
224:
225: return list;
226: }
227:
228: ////////////////////////////////////////////////////////////////////////////
229:
230: /// <summary>
231: ///
232: /// </summary>
233: public static Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue Update(string service, Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.ServiceRequestAdministrativeIssueType serviceRequestAdministrativeIssueType, bool serviceMustBeWithinNokiaSwitchDomainList, out Ia.Cl.Model.Result result)
234: {
235: Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue serviceRequestAdministrativeIssue;
236:
237: result = new Ia.Cl.Model.Result();
238:
239: if (!string.IsNullOrEmpty(service))
240: {
241: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
242: {
243: if (!serviceMustBeWithinNokiaSwitchDomainList || serviceMustBeWithinNokiaSwitchDomainList && Ia.Ngn.Cl.Model.Data.Service.ServiceIsWithinNokiaSwitchDomainList(service)) // temp
244: {
245: var isPstnService = Ia.Ngn.Cl.Model.Data.Service2.IsPstnService(service);
246:
247: if (!isPstnService)
248: {
249: using (var db = new Ia.Ngn.Cl.Model.Ngn())
250: {
251: result = new Ia.Cl.Model.Result();
252:
253: var serviceRequestAdministrativeIssueId = Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.ServiceRequestAdministrativeIssueId(service, Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService);
254:
255: serviceRequestAdministrativeIssue = (from srai in db.ServiceRequestAdministrativeIssues
256: where srai.Id == serviceRequestAdministrativeIssueId
257: select srai).SingleOrDefault();
258:
259: if (serviceRequestAdministrativeIssue != null)
260: {
261: if (serviceRequestAdministrativeIssueType.DisconnectionType == Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType.None)
262: {
263: db.ServiceRequestAdministrativeIssues.Remove(serviceRequestAdministrativeIssue);
264: db.SaveChanges();
265:
266: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
267:
268: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
269:
270: result.AddSuccess("Entry for " + service + " was deleted.");
271: }
272: else if (serviceRequestAdministrativeIssue.Type != (int)serviceRequestAdministrativeIssueType.DisconnectionType)
273: {
274: serviceRequestAdministrativeIssue.Type = (int)serviceRequestAdministrativeIssueType.DisconnectionType;
275: serviceRequestAdministrativeIssue.Updated = DateTime.UtcNow.AddHours(3);
276: // serviceRequestAdministrativeIssue.UserId = Guid.Empty;
277:
278: db.ServiceRequestAdministrativeIssues.Attach(serviceRequestAdministrativeIssue);
279: db.Entry(serviceRequestAdministrativeIssue).Property(u => u.Type).IsModified = true;
280: db.SaveChanges();
281:
282: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
283:
284: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
285:
286: result.AddSuccess("Entry for " + service + " was updated.");
287: }
288: else
289: {
290: result.AddWarning("Entry for " + service + " was not updated because it was not changed.");
291: }
292: }
293: else
294: {
295: if (serviceRequestAdministrativeIssueType.DisconnectionType == Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType.None)
296: {
297: result.AddWarning("Entry for " + service + " was not removed because it did not exist.");
298: }
299: else
300: {
301: serviceRequestAdministrativeIssue = new Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue
302: {
303: Id = serviceRequestAdministrativeIssueId,
304: Service = service,
305: Type = (int)serviceRequestAdministrativeIssueType.DisconnectionType,
306: Value = String.Empty,
307: Created = DateTime.UtcNow.AddHours(3),
308: Updated = DateTime.UtcNow.AddHours(3),
309: UserId = Guid.Empty,
310: };
311:
312: db.ServiceRequestAdministrativeIssues.Add(serviceRequestAdministrativeIssue);
313: db.SaveChanges();
314:
315: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
316:
317: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
318:
319: result.AddSuccess("Entry for " + service + " was created.");
320: }
321: }
322: }
323: }
324: else
325: {
326: serviceRequestAdministrativeIssue = null;
327: result.AddError("Service number " + service + " is a PSTN number.");
328: }
329: }
330: else
331: {
332: serviceRequestAdministrativeIssue = null;
333: result.AddError("Service number " + service + " does not belong to a Nokia switch.");
334: }
335: }
336: else
337: {
338: serviceRequestAdministrativeIssue = null;
339: result.AddError("Service number " + service + " does not belong to the network.");
340: }
341: }
342: else
343: {
344: serviceRequestAdministrativeIssue = null;
345: result.AddError("Input is null or empty.");
346: }
347:
348: return serviceRequestAdministrativeIssue;
349: }
350:
351: ////////////////////////////////////////////////////////////////////////////
352:
353: /// <summary>
354: ///
355: /// </summary>
356: public static bool Update2(Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType disconnectionType, string service, out Ia.Cl.Model.Result result)
357: {
358: bool isUpdated;
359: Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue serviceRequestAdministrativeIssue;
360:
361: result = new Ia.Cl.Model.Result();
362:
363: if (!string.IsNullOrEmpty(service))
364: {
365: if (Ia.Ngn.Cl.Model.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(service))
366: {
367: var isPstnService = Ia.Ngn.Cl.Model.Data.Service2.IsPstnService(service);
368:
369: if (!isPstnService)
370: {
371: using (var db = new Ia.Ngn.Cl.Model.Ngn())
372: {
373: var serviceRequestAdministrativeIssueId = Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.ServiceRequestAdministrativeIssueId(service, Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService);
374:
375: serviceRequestAdministrativeIssue = (from srai in db.ServiceRequestAdministrativeIssues
376: where srai.Id == serviceRequestAdministrativeIssueId
377: select srai).SingleOrDefault();
378:
379: if (serviceRequestAdministrativeIssue != null)
380: {
381: if (disconnectionType == Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType.None)
382: {
383: db.ServiceRequestAdministrativeIssues.Remove(serviceRequestAdministrativeIssue);
384: db.SaveChanges();
385:
386: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
387:
388: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
389:
390: isUpdated = true;
391: result.AddSuccess("Entry for " + service + " was deleted.");
392: }
393: else if (serviceRequestAdministrativeIssue.Type != (int)disconnectionType)
394: {
395: serviceRequestAdministrativeIssue.Type = (int)disconnectionType;
396: serviceRequestAdministrativeIssue.Updated = DateTime.UtcNow.AddHours(3);
397: // serviceRequestAdministrativeIssue.UserId = Guid.Empty;
398:
399: db.ServiceRequestAdministrativeIssues.Attach(serviceRequestAdministrativeIssue);
400: db.Entry(serviceRequestAdministrativeIssue).Property(u => u.Type).IsModified = true;
401: db.SaveChanges();
402:
403: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
404:
405: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
406:
407: isUpdated = true;
408: result.AddSuccess("Entry for " + service + " was updated.");
409: }
410: else
411: {
412: isUpdated = false;
413: result.AddWarning("Entry for " + service + " was not updated because it was not changed.");
414: }
415: }
416: else
417: {
418: if (disconnectionType == Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.DisconnectionType.None)
419: {
420: isUpdated = false;
421: result.AddWarning("Entry for " + service + " was not removed because it did not exist.");
422: }
423: else
424: {
425: serviceRequestAdministrativeIssue = new Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue
426: {
427: Id = serviceRequestAdministrativeIssueId,
428: Service = service,
429: Type = (int)disconnectionType,
430: Value = String.Empty,
431: Created = DateTime.UtcNow.AddHours(3),
432: Updated = DateTime.UtcNow.AddHours(3),
433: UserId = Guid.Empty,
434: };
435:
436: db.ServiceRequestAdministrativeIssues.Add(serviceRequestAdministrativeIssue);
437: db.SaveChanges();
438:
439: serviceRequestAdministrativeIssue = Ia.Ngn.Cl.Model.Data.ServiceRequestAdministrativeIssue.Read(service, out _);
440:
441: Ia.Ngn.Cl.Model.Data.Msmq.SecretaryApplication.Enqueue(Ia.Ngn.Cl.Model.Business.Msmq.Application.OfnApplication, Ia.Ngn.Cl.Model.Business.Msmq.Process.ServiceInServiceRequestAdministrativeIssuesUpdated, service);
442:
443: isUpdated = true;
444: result.AddSuccess("Entry for " + service + " was created.");
445: }
446: }
447: }
448: }
449: else
450: {
451: isUpdated = false;
452: result.AddError("Service number " + service + " is a PSTN number.");
453: }
454: }
455: else
456: {
457: isUpdated = false;
458: result.AddError("Service number " + service + " does not belong to the network.");
459: }
460: }
461: else
462: {
463: isUpdated = false;
464: result.AddError("Input is null or empty.");
465: }
466:
467: return isUpdated;
468: }
469:
470: ////////////////////////////////////////////////////////////////////////////
471: ////////////////////////////////////////////////////////////////////////////
472:
473: /// <summary>
474: ///
475: /// </summary>
476: public static string ToSimpleTextString(Ia.Ngn.Cl.Model.ServiceRequestAdministrativeIssue serviceRequestAdministrativeIssue)
477: {
478: var sb = new StringBuilder();
479:
480: sb.AppendLine("Service: " + serviceRequestAdministrativeIssue.Service);
481:
482: var typeName = Ia.Ngn.Cl.Model.Business.ServiceRequestAdministrativeIssue.ServiceRequestAdministrativeIssueTypeList.Where(u => (int)u.DisconnectionType == serviceRequestAdministrativeIssue.Type).Select(u => u.Name).SingleOrDefault();
483: sb.AppendLine("Type: " + typeName);
484:
485: sb.AppendLine("Value: " + serviceRequestAdministrativeIssue.Value);
486:
487: return sb.ToString();
488: }
489:
490: ////////////////////////////////////////////////////////////////////////////
491: ////////////////////////////////////////////////////////////////////////////
492: }
493:
494: ////////////////////////////////////////////////////////////////////////////
495: ////////////////////////////////////////////////////////////////////////////
496: }