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

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

    1: using Microsoft.AspNetCore.Identity;
    2: using Microsoft.AspNetCore.Mvc.Rendering;
    3: using System.Text;
    4: using System.Text.RegularExpressions;
    5:  
    6: namespace Ia.Ftn.Wa.Models.Administration
    7: {
    8:     ////////////////////////////////////////////////////////////////////////////
    9:  
   10:     /// <summary publish="true">
   11:     ///
   12:     /// </summary>
   13:     /// 
   14:     /// <remarks> 
   15:     /// Copyright © 2006-2025 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   16:     /// </remarks> 
   17:     public static class ServiceStatus
   18:     {
   19:         ////////////////////////////////////////////////////////////////////////////
   20:  
   21:         /// <summary>
   22:         ///
   23:         /// </summary>
   24:         public static void Categorize(ref Ia.Ftn.Wa.Models.Administration.ServiceStatusViewModel serviceStatusViewModel)
   25:         {
   26:             serviceStatusViewModel.Result = new Ia.Cl.Models.Result();
   27:  
   28:             if (!string.IsNullOrEmpty(serviceStatusViewModel.DomainSelectedValue.ToString()))
   29:             {
   30:                 var domain = serviceStatusViewModel.DomainSelectedValue;
   31:                 var state = serviceStatusViewModel.StateSelectedValue;
   32:  
   33:                 var singleColumnFormat = serviceStatusViewModel.SingleColumnFormatSelectedValue;
   34:  
   35:                 Categorize(domain, state, singleColumnFormat, out int count, out string display, out string result);
   36:  
   37:                 serviceStatusViewModel.CountText = "A total of <u>" + count + "</u> service numbers satisfy filter condition.";
   38:  
   39:                 if (count > 0)
   40:                 {
   41:                     if (display.Length == 0)
   42:                     {
   43:                         serviceStatusViewModel.Result.AddError("Error in filter (خطأ في الإجراء).");
   44:                     }
   45:  
   46:                     serviceStatusViewModel.DisplayText = display;
   47:                 }
   48:                 else
   49:                 {
   50:                     serviceStatusViewModel.DisplayText = "No service number satisfy filter condition (لا يوجد أي رقم يتوافق مع البحث المشروط).";
   51:                 }
   52:             }
   53:             else
   54:             {
   55:                 serviceStatusViewModel.Result.AddError("You did not select a domain range (لم تختر مجالاً).");
   56:             }
   57:         }
   58:  
   59:         ////////////////////////////////////////////////////////////////////////////
   60:  
   61:         /// <summary>
   62:         ///
   63:         /// </summary>
   64:         private static void Categorize(string domain, string state, bool singleColumn, out int count, out string display, out string result)
   65:         {
   66:             bool categorize;
   67:             int length;
   68:             string sa;
   69:             StringBuilder sb = new StringBuilder(100000);
   70:             List<string> serviceList;
   71:  
   72:             length = domain.Length;
   73:             count = 0;
   74:  
   75:             result = display = string.Empty;
   76:  
   77:             // below: if looking for occupied numbers, the list will not be categorize
   78:             if (state == "occupied")
   79:             {
   80:                 serviceList = Ia.Ftn.Cl.Models.Data.Service.ActiveServiceRequestServiceNumbersWithinDomainList(domain);
   81:  
   82:                 categorize = false;
   83:             }
   84:             else
   85:             {
   86:                 serviceList = Ia.Ftn.Cl.Models.Data.Service.InactiveServiceRequestServiceNumbersWithinDomainList(domain);
   87:  
   88:                 categorize = true;
   89:             }
   90:  
   91:             if (serviceList.Count != 0)
   92:             {
   93:                 foreach (string i in serviceList)
   94:                 {
   95:                     sa = i.ToString() + " ";
   96:                     sb.Append(sa);
   97:                     count++;
   98:                 }
   99:  
  100:                 if (sb.Length > 0)
  101:                 {
  102:                     // below: remove last ' ' char
  103:                     sb.Remove(sb.Length - 1, 1);
  104:  
  105:                     if (categorize) display = CategorizeNumbers(serviceList, singleColumn);
  106:                     else display = sb.ToString();
  107:                 }
  108:                 else
  109:                 {
  110:                 }
  111:             }
  112:             else
  113:             {
  114:                 count = 0;
  115:                 display = null;
  116:             }
  117:         }
  118:  
  119:         ////////////////////////////////////////////////////////////////////////////
  120:  
  121:         /// <summary>
  122:         ///
  123:         /// </summary>
  124:         private static string CategorizeNumbers(List<string> serviceList, bool singleColumn)
  125:         {
  126:             int i, count;
  127:             string na, u;
  128:             var sb = new StringBuilder(100000);
  129:             var sbi = new StringBuilder(100000);
  130:             List<string> list;
  131:             Regex regex;
  132:  
  133:             list = new List<string>(10000);
  134:  
  135:             foreach (string t in serviceList) list.Add(t);
  136:  
  137:             foreach (Ia.Ftn.Cl.Models.Business.Administration.Category category in Ia.Ftn.Cl.Models.Data.Administration.CategoryList)
  138:             {
  139:                 count = 0; sbi.Length = 0;
  140:                 regex = new Regex(category.Regex);
  141:  
  142:                 for (i = 0; i < list.Count; i++)
  143:                 {
  144:                     u = list[i].ToString();
  145:  
  146:                     if (regex.IsMatch(u))
  147:                     {
  148:                         if (singleColumn) sbi.Append(u + "<br />");
  149:                         else sbi.Append(u + " ");
  150:  
  151:                         list.RemoveAt(i);
  152:                         count++; i--;
  153:                     }
  154:                 }
  155:  
  156:                 na = @"<p style=""color:" + category.Color + @""">" + category.Name + ": " + category.Description + "</p>";
  157:  
  158:                 if (count == 0) na += "No match found (لا يوجد تطابق). ";
  159:                 else if (count == 1) na += "Found 1 (one) match (وجد تطابق واحد). ";
  160:                 else if (count > 1 && count <= 10) na += "Found " + count + " matches (وجد " + count + " تطابقات). ";
  161:                 else if (count >= 11) na += "Found " + count + " matches (وجد " + count + " تطابقاً). ";
  162:  
  163:                 sb.Append(na + "\n<p>" + sbi.ToString() + "</p>");
  164:             }
  165:  
  166:             return sb.ToString();
  167:         }
  168:  
  169:         ////////////////////////////////////////////////////////////////////////////
  170:  
  171:         /// <summary>
  172:         ///
  173:         /// </summary>
  174:         public static void ViewModel(ref Ia.Ftn.Wa.Models.Administration.ServiceStatusViewModel serviceStatusViewModel)
  175:         {
  176:             var now = DateTime.UtcNow.AddHours(3).ToString("yyyyMMddHHmmss");
  177:  
  178:             var domainList = Ia.Ftn.Cl.Models.Data.Service.DomainList;
  179:             var list = domainList.ConvertAll(delegate (int i) { return i.ToString(); });
  180:  
  181:             list.Sort();
  182:  
  183:             serviceStatusViewModel.DomainSelectList = new SelectList(list);
  184:         }
  185:  
  186:         ////////////////////////////////////////////////////////////////////////////
  187:         ////////////////////////////////////////////////////////////////////////////
  188:     }
  189:  
  190:     ////////////////////////////////////////////////////////////////////////////
  191:     ////////////////////////////////////////////////////////////////////////////
  192: }