)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Administration (Ia.Ftn.Cl.Models.Business)

Public general use code classes and xml files that we've compiled and used over the years:

Administration support class of Fixed Telecommunications Network (FTN) business model.

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