1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace Ia.Ngn.Cl.Model.Business
7: {
8: ////////////////////////////////////////////////////////////////////////////
9:
10: /// <summary publish="true">
11: /// Administration support class of Optical Fiber Network (OFN) business model.
12: /// </summary>
13: ///
14: /// <remarks>
15: /// Copyright © 2006-2021 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 Administration
28: {
29: private const int initialFrameworkListLength = 100;
30:
31: /// <summary/>
32: public static DateTime OfficialMorningStartOfWorkTime = DateTime.Parse("08:00"); // DateTime.Parse("07:00");
33:
34: /// <summary/>
35: public static DateTime OfficialMorningEndOfWorkTime = DateTime.Parse("14:00");
36:
37: /// <summary/>
38: public static DateTime OfficialEveningStartOfWorkTime = DateTime.MinValue;// DateTime.Parse("16:00");
39:
40: /// <summary/>
41: public static DateTime OfficialEveningEndOfWorkTime = DateTime.MinValue; // DateTime.Parse("20:00");
42:
43:
44: /// <summary/>
45: public static DateTime EarliestServiceRequestDate = DateTime.Parse("2000-01-01");
46:
47: /// <summary/>
48: public static DateTime SqlFriendlyJanuary1st1753NullDateTime = new DateTime(1753, 1, 1);
49:
50: /// <summary/>
51: public static DateTime EarliestRequestDateTime = new DateTime(1970, 1, 1);
52:
53: /// <summary/>
54: public static int InitialFrameworkListLength { get { return initialFrameworkListLength; } }
55:
56: /// <summary/>
57: public static bool ServiceSuspensionIsEnabled = true;
58:
59: ////////////////////////////////////////////////////////////////////////////
60:
61: /// <summary>
62: ///
63: /// </summary>
64: private static string LogoImagePng
65: {
66: get
67: {
68: return "9.png";
69: }
70: }
71:
72: ////////////////////////////////////////////////////////////////////////////
73:
74: /// <summary>
75: ///
76: /// </summary>
77: public static string LogoImageUrl
78: {
79: get
80: {
81: return "~/image/telegram/ftth-logo/" + LogoImagePng;
82: }
83: }
84:
85: ////////////////////////////////////////////////////////////////////////////
86:
87: /// <summary>
88: ///
89: /// </summary>
90: public static string LogoHtmlImageUrl
91: {
92: get
93: {
94: return "../../image/telegram/ftth-logo/" + LogoImagePng;
95: }
96: }
97:
98: ////////////////////////////////////////////////////////////////////////////
99:
100: /// <summary>
101: ///
102: /// </summary>
103: public static string LogoImageAbsolutePathUrl
104: {
105: get
106: {
107: return Ia.Cl.Model.Default.AbsolutePath() + @"image\telegram\ftth-logo\" + LogoImagePng;
108: }
109: }
110:
111: ////////////////////////////////////////////////////////////////////////////
112:
113: /// <summary>
114: ///
115: /// </summary>
116: public static string OfficialWorkingTimeString()
117: {
118: string officialMorningStartOfWorkTime, officialMorningEndOfWorkTime, officialEveningStartOfWorkTime, officialEveningEndOfWorkTime;
119: string officialMorningWorkTime, officialEveningWorkTime;
120:
121: officialMorningStartOfWorkTime = Ia.Ngn.Cl.Model.Business.Administration.OfficialMorningStartOfWorkTime != DateTime.MinValue ? Ia.Ngn.Cl.Model.Business.Administration.OfficialMorningStartOfWorkTime.ToString("HH:mm") : string.Empty;
122: officialMorningEndOfWorkTime = Ia.Ngn.Cl.Model.Business.Administration.OfficialMorningEndOfWorkTime != DateTime.MinValue ? Ia.Ngn.Cl.Model.Business.Administration.OfficialMorningEndOfWorkTime.ToString("HH:mm") : string.Empty;
123: officialEveningStartOfWorkTime = Ia.Ngn.Cl.Model.Business.Administration.OfficialEveningStartOfWorkTime != DateTime.MinValue ? Ia.Ngn.Cl.Model.Business.Administration.OfficialEveningStartOfWorkTime.ToString("HH:mm") : string.Empty;
124: officialEveningEndOfWorkTime = Ia.Ngn.Cl.Model.Business.Administration.OfficialEveningEndOfWorkTime != DateTime.MinValue ? Ia.Ngn.Cl.Model.Business.Administration.OfficialEveningEndOfWorkTime.ToString("HH:mm") : string.Empty;
125:
126: if (!string.IsNullOrEmpty(officialMorningStartOfWorkTime) && !string.IsNullOrEmpty(officialMorningEndOfWorkTime))
127: {
128: officialMorningWorkTime = officialMorningStartOfWorkTime + "-" + officialMorningEndOfWorkTime;
129: }
130: else officialMorningWorkTime = string.Empty;
131:
132: if (!string.IsNullOrEmpty(officialEveningStartOfWorkTime) && !string.IsNullOrEmpty(officialEveningEndOfWorkTime))
133: {
134: officialEveningWorkTime = officialEveningStartOfWorkTime + "-" + officialEveningEndOfWorkTime;
135: }
136: else officialEveningWorkTime = string.Empty;
137:
138: var officialWorkingTimeString = (officialMorningWorkTime + " " + officialEveningWorkTime).Trim();
139:
140: return officialWorkingTimeString;
141: }
142:
143: ////////////////////////////////////////////////////////////////////////////
144:
145: /// <summary>
146: ///
147: /// </summary>
148: public class Framework
149: {
150: public Framework() { }
151:
152: public enum TestType
153: {
154: وزارة_شؤون_الخدمات,
155: قطاع_الاتصالات_والخدمات_المساندة,
156: إدارة_شبكة_الألياف_الضوئية,
157: مراقبة_الدعم_الفنى_للشبكة,
158: قسم_الدعم_الفني_للشبكة
159: };
160:
161: /// <summary/>
162: public int Id { get; set; }
163:
164: /// <summary/>
165: public int Level { get; set; }
166:
167: /// <summary/>
168: public Guid Guid { get; set; }
169:
170: /// <summary/>
171: public string Type { get; set; }
172:
173: /// <summary/>
174: public string Name { get; set; }
175:
176: /// <summary/>
177: public string ArabicName { get; set; }
178:
179: /// <summary/>
180: public string Phone { get; set; }
181:
182: /// <summary/>
183: public string ColoredArabicName { get; set; }
184:
185: /// <summary/>
186: public Framework Parent { get; set; }
187:
188: /// <summary/>
189: public List<Framework> Ancestors { get; set; }
190:
191: /// <summary/>
192: public List<Framework> AncestorsOrSelf { get; set; }
193:
194: /// <summary/>
195: public List<Framework> Siblings { get; set; }
196:
197: /// <summary/>
198: public List<Framework> SiblingsOrSelf { get; set; }
199:
200: /// <summary/>
201: public List<Framework> Children { get; set; }
202:
203: /// <summary/>
204: public List<Framework> ChildrenOrSelf { get; set; }
205:
206: /// <summary/>
207: public List<Framework> Descendants { get; set; }
208:
209: /// <summary/>
210: public List<Framework> DescendantsOrSelf { get; set; }
211:
212: /// <summary/>
213: public List<Authority> Authorities { get; set; }
214:
215: /// <summary/>
216: public List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Site> Sites { get; set; }
217:
218: /// <summary/>
219: //public Ia.Cl.Model.Identity.User Role { get; set; }
220:
221: ////////////////////////////////////////////////////////////////////////////
222:
223: /// <summary>
224: ///
225: /// </summary>
226: public static bool operator ==(Framework fa, Framework fb)
227: {
228: bool b;
229:
230: // if both are null, or both are same instance, return true.
231: if (System.Object.ReferenceEquals(fa, fb)) b = true;
232: // if one is null, but not both, return false.
233: else if (((object)fa == null) || ((object)fb == null)) b = false;
234: // true if the fields match:
235: else b = fa.Id == fb.Id;
236:
237: return b;
238: }
239:
240: ////////////////////////////////////////////////////////////////////////////
241:
242: /// <summary>
243: ///
244: /// </summary>
245: public static bool operator !=(Framework fa, Framework fb)
246: {
247: return !(fa == fb);
248: }
249:
250: ////////////////////////////////////////////////////////////////////////////
251:
252: /// <summary>
253: ///
254: /// </summary>
255: public string FullyQualifiedArabicName
256: {
257: get
258: {
259: string s;
260:
261: s = string.Empty;
262:
263: foreach (var f in this.Ancestors) s += f.ArabicName + " | ";
264:
265: s = s + this.ArabicName;
266:
267: return s;
268: }
269: }
270:
271: ////////////////////////////////////////////////////////////////////////////
272:
273: /// <summary>
274: ///
275: /// </summary>
276: public override bool Equals(object value)
277: {
278: return value != null && Equals(value as Framework);
279: }
280:
281: ////////////////////////////////////////////////////////////////////////////
282:
283: /// <summary>
284: ///
285: /// </summary>
286: public int FrameworkId(int parentId, int frameworkId)
287: {
288: return parentId * 10 + frameworkId;
289: }
290:
291: ////////////////////////////////////////////////////////////////////////////
292:
293: /// <summary>
294: ///
295: /// </summary>
296: public static int ParentId(long frameworkId)
297: {
298: int i;
299: string s;
300:
301: s = frameworkId.ToString();
302:
303: if (s.Length > 2)
304: {
305: s = s.Substring(0, s.Length - 2);
306:
307: i = (int.TryParse(s, out i)) ? i : 0;
308: }
309: else i = 0;
310:
311: return i;
312: }
313:
314: ////////////////////////////////////////////////////////////////////////////
315:
316: /// <summary>
317: ///
318: /// </summary>
319: public string ArabicNameBracketParentArabicNameBracket
320: {
321: get
322: {
323: string name;
324:
325: if (Parent != null) name = ArabicName + " (" + Parent.ArabicName + ")";
326: else name = ArabicName;
327:
328: return name;
329: }
330: }
331:
332: ////////////////////////////////////////////////////////////////////////////
333:
334: /// <summary>
335: ///
336: /// </summary>
337: public static List<Guid> CustomerServiceSectorSectionDivisionFrameworkAndStaffGuidList()
338: {
339: return FrameworkAndStaffGuidList("قطاع خدمات المشتركين");
340: }
341:
342: ////////////////////////////////////////////////////////////////////////////
343:
344: /// <summary>
345: ///
346: /// </summary>
347: public static List<Guid> TelephoneNetworkMaintenanceDepartmentFrameworkAndStaffGuidList()
348: {
349: return FrameworkAndStaffGuidList("إدارة صيانة الشبكة الهاتفية");
350: }
351:
352: ////////////////////////////////////////////////////////////////////////////
353:
354: /// <summary>
355: ///
356: /// </summary>
357: public static List<Guid> NokiaFrameworkAndStaffGuidList()
358: {
359: return FrameworkAndStaffGuidList("نوكيا");
360: }
361:
362: ////////////////////////////////////////////////////////////////////////////
363:
364: /// <summary>
365: ///
366: /// </summary>
367: public static List<Guid> HuaweiFrameworkAndStaffGuidList()
368: {
369: return FrameworkAndStaffGuidList("هواوي");
370: }
371:
372: ////////////////////////////////////////////////////////////////////////////
373:
374: /// <summary>
375: ///
376: /// </summary>
377: public static List<Guid> FrameworkAndStaffGuidList(string frameworkArabicName)
378: {
379: var frameworkList = (from f in Ia.Ngn.Cl.Model.Data.Administration.FrameworkList
380: where f.ArabicName == frameworkArabicName || f.Ancestors.Any(u => u.ArabicName == frameworkArabicName)
381: select f.Guid).ToList();
382:
383: var staffList = (from s in Ia.Ngn.Cl.Model.Data.Staff.List
384: where frameworkList.Contains(s.Framework.Guid) || s.Framework.Ancestors.Any(u => frameworkList.Contains(u.Guid))
385: select s.UserId).ToList();
386:
387: var list = frameworkList.Union(staffList).ToList();
388:
389: return list;
390: }
391:
392: ////////////////////////////////////////////////////////////////////////////
393:
394: /// <summary>
395: ///
396: /// </summary>
397: public static List<Guid> FrameworkAndStaffGuidList(int frameworkId)
398: {
399: var frameworkList = (from f in Ia.Ngn.Cl.Model.Data.Administration.FrameworkList
400: where f.Id == frameworkId || f.Ancestors.Any(u => u.Id == frameworkId)
401: select f.Guid).ToList();
402:
403: var staffList = (from s in Ia.Ngn.Cl.Model.Data.Staff.List
404: where frameworkList.Contains(s.Framework.Guid) || s.Framework.Ancestors.Any(u => frameworkList.Contains(u.Guid))
405: select s.UserId).ToList();
406:
407: var list = frameworkList.Union(staffList).ToList();
408:
409: return list;
410: }
411:
412: ////////////////////////////////////////////////////////////////////////////
413:
414: /// <summary>
415: ///
416: /// </summary>
417: public static List<Guid> FrameworkAndStaffGuidList()
418: {
419: var frameworkList = (from f in Ia.Ngn.Cl.Model.Data.Administration.FrameworkList
420: select f.Guid).ToList();
421:
422: var staffList = (from s in Ia.Ngn.Cl.Model.Data.Staff.List
423: where frameworkList.Contains(s.Framework.Guid) || s.Framework.Ancestors.Any(u => frameworkList.Contains(u.Guid))
424: select s.UserId).ToList();
425:
426: var list = frameworkList.Union(staffList).ToList();
427:
428: return list;
429: }
430:
431: ////////////////////////////////////////////////////////////////////////////
432: ////////////////////////////////////////////////////////////////////////////
433: }
434:
435: ////////////////////////////////////////////////////////////////////////////
436:
437: /// <summary>
438: ///
439: /// </summary>
440: public class Category
441: {
442: /// <summary/>
443: public Category() { }
444: /// <summary/>
445: public string Name { get; set; }
446: /// <summary/>
447: public string Description { get; set; }
448: /// <summary/>
449: public string Regex { get; set; }
450: /// <summary/>
451: public string Color { get; set; }
452: }
453:
454: ////////////////////////////////////////////////////////////////////////////
455:
456: /// <summary>
457: ///
458: /// </summary>
459: public class StaffFramework
460: {
461: private bool isStaff;
462:
463: /// <summary/>
464: public StaffFramework() { }
465: /// <summary/>
466: public Guid Guid { get; set; }
467: /// <summary/>
468: public long FrameworkId { get; set; }
469: /// <summary/>
470: public string Name { get; set; }
471: /// <summary/>
472: public bool IsStaff
473: {
474: get { return isStaff; }
475: set { isStaff = true; }
476: }
477: /// <summary/>
478: public bool IsFramework
479: {
480: get { return !isStaff; }
481: set { isStaff = false; }
482: }
483: }
484:
485:
486: ////////////////////////////////////////////////////////////////////////////
487: ////////////////////////////////////////////////////////////////////////////
488:
489: /// <summary>
490: ///
491: /// </summary>
492: public class Statistic
493: {
494: /// <summary/>
495: public Statistic() { }
496:
497: public class Site
498: {
499: /// <summary/>
500: public string Id { get; set; }
501:
502: /// <summary/>
503: public string Name { get; set; }
504:
505: /// <summary/>
506: public string NameArabicName { get; set; }
507:
508: /// <summary/>
509: public string KuwaitAreaNameListString { get; set; }
510:
511: /// <summary/>
512: public string PstnDomainListString { get; set; }
513:
514: /// <summary/>
515: public string DomainListString { get; set; }
516:
517: /// <summary/>
518: public string SymbolListString { get; set; }
519:
520: /// <summary/>
521: public int FiberAccessCapacity { get; set; }
522:
523: /// <summary/>
524: public int FiberServiceCapacity { get; set; }
525:
526: /// <summary/>
527: public int FiberService { get; set; }
528:
529: /// <summary/>
530: public int NokiaService { get; set; }
531:
532: /// <summary/>
533: public int HuaweiService { get; set; }
534:
535: /// <summary/>
536: public string FiberServiceText { get; set; }
537:
538: /// <summary/>
539: public int Service { get; set; }
540:
541: /// <summary/>
542: public string ServiceText { get; set; }
543:
544: /// <summary/>
545: public string MsanDomainListString { get; set; }
546:
547: /// <summary/>
548: public int MsanServiceCapacity { get; set; }
549:
550: /// <summary/>
551: public int MsanService { get; set; }
552:
553: /// <summary/>
554: public string MsanServiceText { get; set; }
555:
556: /// <summary/>
557: public int PstnService { get; set; }
558:
559: /// <summary/>
560: public int EricssonPstnService { get; set; }
561:
562: /// <summary/>
563: public int SiemensPstnService { get; set; }
564:
565: /// <summary/>
566: public string EricssonSiemensPstnServiceText { get; set; }
567:
568: ////////////////////////////////////////////////////////////////////////////
569:
570: /// <summary>
571: ///
572: /// </summary>
573: public string ToSimpleTextString()
574: {
575: StringBuilder sb;
576:
577: sb = new StringBuilder();
578:
579: sb.AppendLine("Site: " + this.NameArabicName);
580: sb.AppendLine("Areas: " + this.KuwaitAreaNameListString);
581: sb.AppendLine("PSTN Domains: " + this.PstnDomainListString);
582: sb.AppendLine("PSTN Service (Ericsson/Siemens): " + this.EricssonSiemensPstnServiceText);
583: sb.AppendLine("MSAN Domains: " + this.MsanDomainListString);
584: sb.AppendLine("MSAN Service Capacity: " + this.MsanServiceCapacity);
585: sb.AppendLine("MSAN Service: " + this.MsanServiceText);
586: sb.AppendLine("Domains: " + this.DomainListString);
587: sb.AppendLine("Symbols: " + this.SymbolListString);
588: sb.AppendLine("Fiber Access Capacity: " + this.FiberAccessCapacity);
589: sb.AppendLine("Fiber Service Capacity: " + this.FiberServiceCapacity);
590: sb.AppendLine("Fiber Service (Nokia/Huawei): " + this.FiberServiceText);
591: sb.AppendLine("Service: " + this.ServiceText);
592:
593: return sb.ToString();
594: }
595:
596: ////////////////////////////////////////////////////////////////////////////
597: ////////////////////////////////////////////////////////////////////////////
598: }
599:
600: public class KuwaitArea
601: {
602: /// <summary/>
603: public KuwaitArea() { }
604:
605: /// <summary/>
606: public KuwaitArea(string name, string arabicName)
607: {
608: this.Name = name + " (" + arabicName + ")";
609: }
610:
611: /// <summary/>
612: public string Id { get; set; }
613:
614: /// <summary/>
615: public string Name { get; set; }
616:
617: /// <summary/>
618: public string Symbol { get; set; }
619:
620: /// <summary/>
621: public int AccessCapacity { get; set; }
622:
623: /// <summary/>
624:
625: public int NokiaOnt { get; set; }
626: /// <summary/>
627:
628: public int HuaweiOnt { get; set; }
629: /// <summary/>
630:
631: public string NokiaHuaweiOnt { get; set; }
632:
633: /// <summary/>
634: public int NokiaAccess { get; set; }
635:
636: /// <summary/>
637: public int HuaweiAccess { get; set; }
638:
639: /// <summary/>
640: public string NokiaHuaweiAccess { get; set; }
641:
642: /// <summary/>
643: public int ServiceRequestService { get; set; }
644:
645: /// <summary/>
646: public int Service { get; set; }
647:
648: /// <summary/>
649: public int NokiaService { get; set; }
650:
651: /// <summary/>
652: public int HuaweiService { get; set; }
653:
654: /// <summary/>
655: public string NokiaHuaweiService { get; set; }
656:
657: /// <summary/>
658: public int AccessReady { get; set; }
659:
660: /// <summary/>
661: public int AccessUsed { get; set; }
662:
663: /// <summary/>
664: public string AccessReadyUsed { get; set; }
665:
666: ////////////////////////////////////////////////////////////////////////////
667:
668: /// <summary>
669: ///
670: /// </summary>
671: public string ToSimpleTextString()
672: {
673: StringBuilder sb;
674:
675: sb = new StringBuilder();
676:
677: sb.AppendLine("Name: " + this.Name);
678: sb.AppendLine("Symbol: " + this.Symbol);
679: sb.AppendLine("Access Capacity: " + this.AccessCapacity);
680: sb.AppendLine("Access (Nokia/Huawei): " + this.NokiaHuaweiAccess);
681: sb.AppendLine("ONT/ONU (Nokia/Huawei): " + this.NokiaHuaweiOnt);
682: sb.AppendLine("Access (Ready/Used): " + this.AccessReadyUsed);
683: sb.AppendLine("Service Request Services: " + this.ServiceRequestService);
684: sb.AppendLine("Service (Nokia/Huawei): " + this.NokiaHuaweiService);
685:
686: return sb.ToString();
687: }
688:
689: ////////////////////////////////////////////////////////////////////////////
690: ////////////////////////////////////////////////////////////////////////////
691: }
692: }
693:
694: ////////////////////////////////////////////////////////////////////////////
695:
696: /// <summary>
697: ///
698: /// </summary>
699: public Administration() { }
700:
701: /// <summary/>
702: public static bool NowIsOfficialWorkingTime
703: {
704: get
705: {
706: bool b;
707: DateTime now;
708:
709: now = DateTime.UtcNow.AddHours(3);
710:
711: b = now.DayOfWeek != DayOfWeek.Friday && now.DayOfWeek != DayOfWeek.Saturday &&
712: (
713: now.TimeOfDay >= OfficialMorningStartOfWorkTime.TimeOfDay && now.TimeOfDay < OfficialMorningEndOfWorkTime.TimeOfDay
714: ||
715: now.TimeOfDay >= OfficialEveningStartOfWorkTime.TimeOfDay && now.TimeOfDay < OfficialEveningEndOfWorkTime.TimeOfDay
716: );
717:
718: return b;
719: }
720: }
721:
722: ////////////////////////////////////////////////////////////////////////////
723:
724: /// <summary>
725: /// Tests a given Guid value to see if it has a special format used in framework items. Framework ites will have 00000000- prefixed to them
726: /// </summary>
727: public static bool IsFrameworkGuid(Guid guid)
728: {
729: bool isFrameworkGuid;
730:
731: isFrameworkGuid = (guid.ToString().Substring(0, 9) == "00000000-") ? true : false;
732:
733: return isFrameworkGuid;
734: }
735:
736: ////////////////////////////////////////////////////////////////////////////
737:
738: /// <summary>
739: ///
740: /// </summary>
741: public static List<Ia.Ngn.Cl.Model.Business.Administration.Framework> FrameworkListOfAllowedReportAssignsByStaff(Ia.Ngn.Cl.Model.Staff staff)
742: {
743: List<Ia.Ngn.Cl.Model.Business.Administration.Framework> frameworkList;
744:
745: frameworkList = new List<Ia.Ngn.Cl.Model.Business.Administration.Framework>();
746:
747: frameworkList.AddRange(staff.Framework.Children);
748: frameworkList.AddRange(staff.Framework.Siblings);
749:
750: return frameworkList;
751: }
752:
753: ////////////////////////////////////////////////////////////////////////////
754:
755: /// <summary>
756: ///
757: /// </summary>
758: public static bool FrameworkHasAHead(Ia.Ngn.Cl.Model.Business.Administration.Framework framework)
759: {
760: bool hasHead;
761:
762: if (framework != null)
763: {
764: hasHead = (from s in Ia.Ngn.Cl.Model.Data.Staff.List where s.Framework.Id == framework.Id select s).Any(u => u.IsHead);
765: }
766: else hasHead = false;
767:
768: return hasHead;
769: }
770:
771: ////////////////////////////////////////////////////////////////////////////
772:
773: /// <summary>
774: ///
775: /// </summary>
776: public class StaffContact
777: {
778: private Ia.Ngn.Cl.Model.Staff staff;
779: private Ia.Ngn.Cl.Model.Contact contact;
780: private string email;
781: private string apiKey;
782: private Guid userId;
783:
784: /// <summary/>
785: public StaffContact() { }
786:
787: /// <summary/>
788: public Ia.Ngn.Cl.Model.Staff Staff
789: {
790: get
791: {
792: return staff;
793: }
794:
795: set
796: {
797: staff = value;
798:
799: var v = this.FullName;
800: var w = this.Email;
801: var x = this.UserId;
802: var y = this.ApiKey;
803: }
804: }
805:
806: /// <summary/>
807: public Ia.Ngn.Cl.Model.Contact Contact
808: {
809: get
810: {
811: return contact;
812: }
813:
814: set
815: {
816: contact = value;
817:
818: var v = this.FullName;
819: var w = this.Email;
820: var x = this.UserId;
821: var y = this.ApiKey;
822: }
823: }
824:
825: /// <summary/>
826: public string FullName
827: {
828: get
829: {
830: string name;
831:
832: if (staff != null) name = staff.FullName;
833: else if (contact != null) name = contact.FullName;
834: else name = string.Empty;
835:
836: return name;
837: }
838: }
839:
840: /// <summary/>
841: public string Email
842: {
843: get
844: {
845: if (staff != null && staff.User != null) email = staff.User.Email;
846: else if (contact != null) email = contact.Email;
847: else email = string.Empty;
848:
849: return email;
850: }
851: }
852:
853: /// <summary/>
854: public Guid UserId
855: {
856: get
857: {
858: if (staff != null) userId = staff.UserId;
859: else if (contact != null) userId = contact.UserId;
860: else userId = Guid.Empty;
861:
862: return userId;
863: }
864: }
865:
866: /// <summary/>
867: public string ApiKey
868: {
869: get
870: {
871: if (staff != null && staff.User != null) apiKey = UserId.ToString().Substring(0, 8);
872: else if (contact != null) apiKey = UserId.ToString().Substring(0, 8);
873: else apiKey = string.Empty;
874:
875: return apiKey;
876: }
877: }
878:
879: /// <summary/>
880: public bool IsApproved
881: {
882: get
883: {
884: return !string.IsNullOrEmpty(email); // && contact.IsApproved;
885: }
886: }
887:
888: ////////////////////////////////////////////////////////////////////////////
889: ////////////////////////////////////////////////////////////////////////////
890: }
891: }
892:
893: ////////////////////////////////////////////////////////////////////////////
894: ////////////////////////////////////////////////////////////////////////////
895: }