1: using Microsoft.EntityFrameworkCore;
2: using System;
3: using System.Collections.Generic;
4: using System.Linq;
5:
6: namespace Ia.Ngn.Cl.Model.Data.Nokia
7: {
8: ////////////////////////////////////////////////////////////////////////////
9:
10: /// <summary publish="true">
11: /// SubParty support class for Nokia's Optical Fiber Network (OFN) data model.
12: /// </summary>
13: ///
14: /// <remarks>
15: /// Copyright � 2014-2017 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
16: ///
17: /// 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
18: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
19: ///
20: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
21: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
22: ///
23: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
24: ///
25: /// Copyright notice: This notice may not be removed or altered from any source distribution.
26: /// </remarks>
27: public class SubParty
28: {
29: public SubParty() { }
30:
31: ////////////////////////////////////////////////////////////////////////////
32:
33: /// <summary>
34: ///
35: /// </summary>
36: public static bool Create(Ia.Ngn.Cl.Model.Nokia.SubParty subParty, out string result)
37: {
38: bool b;
39:
40: b = false;
41: result = string.Empty;
42:
43: using (var db = new Ia.Ngn.Cl.Model.Ngn())
44: {
45: subParty.Created = subParty.Updated = DateTime.UtcNow.AddHours(3);
46:
47: db.SubParties.Add(subParty);
48: db.SaveChanges();
49:
50: b = true;
51: }
52:
53: return b;
54: }
55:
56: ////////////////////////////////////////////////////////////////////////////
57:
58: /// <summary>
59: ///
60: /// </summary>
61: public static Ia.Ngn.Cl.Model.Nokia.SubParty Read(string id)
62: {
63: Ia.Ngn.Cl.Model.Nokia.SubParty subParty;
64:
65: using (var db = new Ia.Ngn.Cl.Model.Ngn())
66: {
67: subParty = (from sp in db.SubParties
68: where sp.Id == id
69: select sp).AsNoTracking().SingleOrDefault();
70: }
71:
72: return subParty;
73: }
74:
75: ////////////////////////////////////////////////////////////////////////////
76:
77: /// <summary>
78: ///
79: /// </summary>
80: public static List<Ia.Ngn.Cl.Model.Nokia.SubParty> ReadList()
81: {
82: List<Ia.Ngn.Cl.Model.Nokia.SubParty> subPartyList;
83:
84: using (var db = new Ia.Ngn.Cl.Model.Ngn())
85: {
86: subPartyList = (from sp in db.SubParties select sp).ToList();
87: }
88:
89: return subPartyList;
90: }
91:
92: ////////////////////////////////////////////////////////////////////////////
93:
94: /// <summary>
95: ///
96: /// </summary>
97: public static bool Update(Ia.Ngn.Cl.Model.Nokia.SubParty subParty, out string result)
98: {
99: bool b;
100:
101: b = false;
102: result = string.Empty;
103:
104: using (var db = new Ia.Ngn.Cl.Model.Ngn())
105: {
106: subParty = (from sp in db.SubParties where sp.Id == subParty.Id select sp).SingleOrDefault();
107:
108: subParty.Updated = DateTime.UtcNow.AddHours(3);
109:
110: db.SubParties.Attach(subParty);
111:
112: db.Entry(subParty).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
113: db.SaveChanges();
114:
115: b = true;
116: }
117:
118: return b;
119: }
120:
121: ////////////////////////////////////////////////////////////////////////////
122:
123: /// <summary>
124: ///
125: /// </summary>
126: public static bool Delete(string id, out string result)
127: {
128: bool b;
129:
130: b = false;
131: result = string.Empty;
132:
133: using (var db = new Ia.Ngn.Cl.Model.Ngn())
134: {
135: var v = (from sp in db.SubParties where sp.Id == id select sp).FirstOrDefault();
136:
137: db.SubParties.Remove(v);
138: db.SaveChanges();
139:
140: b = true;
141: }
142:
143: return b;
144: }
145:
146: ////////////////////////////////////////////////////////////////////////////
147:
148: /// <summary>
149: /// Read list of service PBX numbers that have Category == "SERVICEBUNDLE2"
150: /// </summary>
151: public static List<string> ServicePbxList()
152: {
153: List<string> l1, l2;
154:
155: l1 = l2 = null;
156:
157: using (var db = new Ia.Ngn.Cl.Model.Ngn())
158: {
159: l1 = (from sp in db.SubParties
160: where sp.Category == "SERVICEBUNDLE2"
161: select sp.PartyId).AsNoTracking().ToList();
162:
163: if (l1.Count > 0)
164: {
165: l2 = new List<string>(l1.Count);
166:
167: foreach (string s in l1) l2.Add(Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(s));
168: }
169: }
170:
171: return l2;
172: }
173:
174: ////////////////////////////////////////////////////////////////////////////
175:
176: /// <summary>
177: /// Read list of service Id PBX numbers that have Category == "SERVICEBUNDLE2"
178: /// </summary>
179: public static List<string> ServiceIdPbxList()
180: {
181: int serviceType;
182: string service, serviceId;
183: List<string> l1, l2;
184:
185: serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
186: l1 = l2 = null;
187:
188: using (var db = new Ia.Ngn.Cl.Model.Ngn())
189: {
190: l1 = (from sp in db.SubParties where sp.Category == "SERVICEBUNDLE2" select sp.PartyId).ToList();
191:
192: if (l1.Count > 0)
193: {
194: l2 = new List<string>(l1.Count);
195:
196: foreach (string u in l1)
197: {
198: service = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Service(u);
199:
200: serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(service, serviceType);
201:
202: l2.Add(serviceId);
203: }
204: }
205: }
206:
207: return l2;
208: }
209:
210: ////////////////////////////////////////////////////////////////////////////
211:
212: /// <summary>
213: /// select PrimaryPUIDCPEProfileNumber, count(0) as Count from SubParties group by PrimaryPUIDCPEProfileNumber
214: /// </summary>
215: public static Dictionary<int, int> PrimaryPuidCpeProfileNumberCountDistributionDictionary
216: {
217: get
218: {
219: Dictionary<int, int> dictionary;
220:
221: using (var db = new Ia.Ngn.Cl.Model.Ngn())
222: {
223: var v = (from sp in db.SubParties
224: group sp by sp.PrimaryPUIDCPEProfileNumber into g
225: select new { PrimaryPuidCpeProfileNumber = g.Key, Count = g.Count() }).AsNoTracking();
226:
227: dictionary = v.ToDictionary(u => u.PrimaryPuidCpeProfileNumber, u => u.Count);
228: }
229:
230: return dictionary;
231: }
232: }
233:
234: ////////////////////////////////////////////////////////////////////////////
235:
236: /// <summary>
237: /// SIP numbers with AssocOtasRealm from SubParties
238: /// </summary>
239: public static Dictionary<string, string> SipNumberWithAssocOtasRealmList
240: {
241: get
242: {
243: Dictionary<string, string> dictionary;
244:
245: using (var db = new Ia.Ngn.Cl.Model.Ngn())
246: {
247: var v = (from sp in db.SubParties where sp.PrimaryPUIDCPEProfileNumber == Ia.Ngn.Cl.Model.Business.Nokia.Ims.PrimaryPUIDCPEProfileNumberForSip select new { sp.DisplayName, sp.AssocOtasRealm });
248:
249: dictionary = v.ToDictionary(u => u.DisplayName, u => u.AssocOtasRealm);
250: }
251:
252: return dictionary;
253: }
254: }
255:
256: ////////////////////////////////////////////////////////////////////////////
257: ////////////////////////////////////////////////////////////////////////////
258: }
259:
260: ////////////////////////////////////////////////////////////////////////////
261: ////////////////////////////////////////////////////////////////////////////
262: }