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

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

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

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Data;
    4: using System.Linq;
    5:  
    6: namespace Ia.Ftn.Cl.Model.Business
    7: {
    8:     ////////////////////////////////////////////////////////////////////////////
    9:  
   10:     /// <summary publish="true">
   11:     /// Report support class of Fixed Telecommunications Network (FTN) business model.
   12:     /// </summary>
   13:     /// 
   14:     /// <remarks> 
   15:     /// Copyright © 2006-2022 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 Report
   28:     {
   29:         public enum Status { Open = 1, Closed = 2 }
   30:  
   31:         public enum ServiceType { Unspecified = 0, Dn = 1, AccessName = 2, AccessUnknown = 3 }
   32:  
   33:         ////////////////////////////////////////////////////////////////////////////
   34:  
   35:         /// <summary>
   36:         ///
   37:         /// </summary>
   38:         public Report() { }
   39:  
   40:         ////////////////////////////////////////////////////////////////////////////
   41:  
   42:         /// <summary>
   43:         ///
   44:         /// </summary>
   45:         public class Category
   46:         {
   47:             /// <summary/>
   48:             public Category() { }
   49:  
   50:             /// <summary/>
   51:             public int Id { get; set; }
   52:  
   53:             /// <summary/>
   54:             public string Name { get; set; }
   55:  
   56:             /// <summary/>
   57:             public string ArabicName { get; set; }
   58:  
   59:             /// <summary/>
   60:             public virtual ICollection<Ia.Ftn.Cl.Model.Business.Report.Area> Areas
   61:             {
   62:                 get
   63:                 {
   64:                     return (from a in Ia.Ftn.Cl.Model.Data.Report.AreaList
   65:                             where a.Category.Id == this.Id
   66:                             select a).ToList();
   67:                 }
   68:             }
   69:         }
   70:  
   71:         ////////////////////////////////////////////////////////////////////////////
   72:  
   73:         /// <summary>
   74:         ///
   75:         /// </summary>
   76:         public class Area
   77:         {
   78:             /// <summary/>
   79:             public Area() { }
   80:  
   81:             /// <summary/>
   82:             public int Id { get; set; }
   83:  
   84:             /// <summary/>
   85:             public int XmlId { get; set; }
   86:  
   87:             /// <summary/>
   88:             public string Name { get; set; }
   89:  
   90:             /// <summary/>
   91:             public string ArabicName { get; set; }
   92:  
   93:             /// <summary/>
   94:             public List<string> Frameworks { get; set; }
   95:  
   96:             /// <summary/>
   97:             public virtual Category Category { get; set; }
   98:  
   99:             /// <summary/>
  100:             public virtual ICollection<Indication> Indications
  101:             {
  102:                 get
  103:                 {
  104:                     return (from i in Ia.Ftn.Cl.Model.Data.Report.IndicationList
  105:                             where i.Area.Id == this.Id
  106:                             select i).ToList();
  107:                 }
  108:             }
  109:             /// <summary/>
  110:             public virtual ICollection<Action> Actions
  111:             {
  112:                 get
  113:                 {
  114:                     return (from a in Ia.Ftn.Cl.Model.Data.Report.ActionList
  115:                             where a.Area.Id == this.Id
  116:                             select a).ToList();
  117:                 }
  118:             }
  119:             /// <summary/>
  120:             public virtual ICollection<Resolution> Resolutions
  121:             {
  122:                 get
  123:                 {
  124:                     return (from r in Ia.Ftn.Cl.Model.Data.Report.ResolutionList
  125:                             where r.Area.Id == this.Id
  126:                             select r).ToList();
  127:                 }
  128:             }
  129:  
  130:             /// <summary/>
  131:             public int AreaId(int categoryId, int areaId)
  132:             {
  133:                 return categoryId * 100 + areaId;
  134:             }
  135:         }
  136:  
  137:         ////////////////////////////////////////////////////////////////////////////
  138:  
  139:         /// <summary>
  140:         ///
  141:         /// </summary>
  142:         public class Indication
  143:         {
  144:             /// <summary/>
  145:             public Indication() { }
  146:  
  147:             /// <summary/>
  148:             public int Id { get; set; }
  149:  
  150:             /// <summary/>
  151:             public int XmlId { get; set; }
  152:  
  153:             /// <summary/>
  154:             public bool Obsolete { get; set; }
  155:  
  156:             /// <summary/>
  157:             public bool CanInsert { get; set; }
  158:  
  159:             /// <summary/>
  160:             public string Name { get; set; }
  161:  
  162:             /// <summary/>
  163:             public string ArabicName { get; set; }
  164:  
  165:             /// <summary/>
  166:             public string ColoredName { get; set; }
  167:  
  168:             /// <summary/>
  169:             public string ColoredArabicName { get; set; }
  170:  
  171:             /// <summary/>
  172:             public string EnglishAndArabicName { get; set; }
  173:  
  174:             /// <summary/>
  175:             public string ColoredEnglishAndArabicName { get; set; }
  176:  
  177:             /// <summary/>
  178:             public string Color { get; set; }
  179:  
  180:             /// <summary/>
  181:             public List<string> Frameworks { get; set; }
  182:  
  183:             /// <summary/>
  184:             public virtual Area Area { get; set; }
  185:  
  186:             /// <summary/>
  187:             public int IndicationId(int areaId, int indicationId)
  188:             {
  189:                 return areaId * 10000 + indicationId;
  190:             }
  191:         }
  192:  
  193:         ////////////////////////////////////////////////////////////////////////////
  194:  
  195:         /// <summary>
  196:         ///
  197:         /// </summary>
  198:         public class Action
  199:         {
  200:             /// <summary/>
  201:             public Action() { }
  202:  
  203:             /// <summary/>
  204:             public int Id { get; set; }
  205:  
  206:             /// <summary/>
  207:             public int XmlId { get; set; }
  208:  
  209:             /// <summary/>
  210:             public bool Obsolete { get; set; }
  211:  
  212:             /// <summary/>
  213:             public bool CanInsert { get; set; }
  214:  
  215:             /// <summary/>
  216:             public string Name { get; set; }
  217:  
  218:             /// <summary/>
  219:             public string ArabicName { get; set; }
  220:  
  221:             /// <summary/>
  222:             public string ColoredName { get; set; }
  223:  
  224:             /// <summary/>
  225:             public string ColoredArabicName { get; set; }
  226:  
  227:             /// <summary/>
  228:             public string EnglishAndArabicName { get; set; }
  229:  
  230:             /// <summary/>
  231:             public string ColoredEnglishAndArabicName { get; set; }
  232:  
  233:             /// <summary/>
  234:             public string Color { get; set; }
  235:  
  236:             /// <summary/>
  237:             public List<string> Frameworks { get; set; }
  238:  
  239:             /// <summary/>
  240:             public virtual Area Area { get; set; }
  241:  
  242:             /// <summary/>
  243:             public int ActionId(int areaId, int actionId)
  244:             {
  245:                 return areaId * 10000 + actionId;
  246:             }
  247:         }
  248:  
  249:         ////////////////////////////////////////////////////////////////////////////
  250:  
  251:         /// <summary>
  252:         ///
  253:         /// </summary>
  254:         public class Resolution
  255:         {
  256:             /// <summary/>
  257:             public Resolution() { }
  258:  
  259:             /// <summary/>
  260:             public int Id { get; set; }
  261:  
  262:             /// <summary/>
  263:             public int XmlId { get; set; }
  264:  
  265:             /// <summary/>
  266:             public bool Obsolete { get; set; }
  267:  
  268:             /// <summary/>
  269:             public bool CanInsert { get; set; }
  270:  
  271:             /// <summary/>
  272:             public string Name { get; set; }
  273:  
  274:             /// <summary/>
  275:             public string ArabicName { get; set; }
  276:  
  277:             /// <summary/>
  278:             public string ColoredName { get; set; }
  279:  
  280:             /// <summary/>
  281:             public string ColoredArabicName { get; set; }
  282:  
  283:             /// <summary/>
  284:             public string EnglishAndArabicName { get; set; }
  285:  
  286:             /// <summary/>
  287:             public string ColoredEnglishAndArabicName { get; set; }
  288:  
  289:             /// <summary/>
  290:             public string Color { get; set; }
  291:  
  292:             /// <summary/>
  293:             public virtual Area Area { get; set; }
  294:  
  295:             /// <summary/>
  296:             public int ResolutionId(int areaId, int resolutionId)
  297:             {
  298:                 return areaId * 10000 + resolutionId;
  299:             }
  300:         }
  301:  
  302:         ////////////////////////////////////////////////////////////////////////////
  303:         ////////////////////////////////////////////////////////////////////////////
  304:  
  305:         /// <summary>
  306:         ///
  307:         /// </summary>
  308:         public static bool StaffHasResponsibilityReport(Ia.Ftn.Cl.Model.Staff staff)
  309:         {
  310:             bool has;
  311:  
  312:             if (Ia.Ftn.Cl.Model.Data.Report.ReportResponsibilityByStaffIdDictionary.ContainsKey(staff.Id))
  313:             {
  314:                 var list = Ia.Ftn.Cl.Model.Data.Report.ReportResponsibilityByStaffIdDictionary[staff.Id];
  315:  
  316:                 has = list.Count > 0;
  317:             }
  318:             else has = false;
  319:  
  320:             return has;
  321:         }
  322:  
  323:         ////////////////////////////////////////////////////////////////////////////
  324:  
  325:         /// <summary>
  326:         ///
  327:         /// </summary>
  328:         public static bool StaffHasResponsibilityLic(Ia.Ftn.Cl.Model.Staff staff)
  329:         {
  330:             bool has;
  331:  
  332:             var list = Ia.Ftn.Cl.Model.Data.Report.LicResponsibilityByStaff(staff);
  333:  
  334:             has = list.Count > 0;
  335:  
  336:             return has;
  337:         }
  338:  
  339:         ////////////////////////////////////////////////////////////////////////////
  340:  
  341:         /// <summary>
  342:         ///
  343:         /// </summary>
  344:         public static bool FrameworkHasReadabilityReport(string id)
  345:         {
  346:             bool has;
  347:  
  348:             if (Ia.Ftn.Cl.Model.Data.Report.ReportReadabilityByFrameworkDictionary.ContainsKey(id))
  349:             {
  350:                 var reportIdList = Ia.Ftn.Cl.Model.Data.Report.ReportReadabilityByFrameworkDictionary[id];
  351:  
  352:                 has = reportIdList.Count > 0;
  353:             }
  354:             else has = false;
  355:  
  356:             return has;
  357:         }
  358:  
  359:  
  360:         ////////////////////////////////////////////////////////////////////////////
  361:  
  362:         /// <summary>
  363:         ///
  364:         /// </summary>
  365:         public static void CloseLastUpdatedOverNDaysReportsWithNegligenceResolution(int numberOfPastDays)
  366:         {
  367:             bool reportInserted, reportClosed;
  368:             int area, indication, resolution, action, estimate;
  369:             string detail, note;
  370:             string userId;
  371:             DateTime now;
  372:             Ia.Cl.Models.Result result;
  373:  
  374:             now = DateTime.UtcNow.AddHours(3);
  375:  
  376:             var reportList = Ia.Ftn.Cl.Model.Data.Report.ListWhereStatusIsOpenAndNoReportHistoriesAndUpdatedBeforeDateTime(now.AddDays(-numberOfPastDays));
  377:  
  378:             if (reportList.Count > 0)
  379:             {
  380:                 indication = 1000;
  381:                 // <indication id="1000" name="Unspecified" arabicName="غير محدد"/>
  382:  
  383:                 resolution = 1026;
  384:                 // <resolution id="1026" name="Negligence" arabicName="إهمال" color="DarkOrange" />
  385:  
  386:                 action = 1000;
  387:                 // <action id="1000" name="Unspecified" arabicName="غير محدد"/>
  388:  
  389:                 estimate = 0;
  390:  
  391:                 userId = string.Empty;
  392:  
  393:                 result = new Ia.Cl.Models.Result();
  394:  
  395:                 area = 11; // <area id="11" name="Service"
  396:  
  397:                 foreach (var report in reportList)
  398:                 {
  399:                     detail = string.Empty; // StaffFrameworkArabicName(report);
  400:                     note = string.Empty;
  401:  
  402:                     var reportHistory = new Ia.Ftn.Cl.Model.ReportHistory
  403:                     {
  404:                         Report = Ia.Ftn.Cl.Model.Data.Report.Read(report.Id),
  405:                         Area = area,
  406:                         Indication = indication,
  407:                         Resolution = resolution,
  408:                         Action = action,
  409:                         Estimate = estimate,
  410:                         Detail = detail,
  411:                         UserId = userId,
  412:                         Note = note,
  413:                         Created = now,
  414:                         Updated = now
  415:                     };
  416:  
  417:                     reportInserted = Ia.Ftn.Cl.Model.Data.ReportHistory.Create(reportHistory, out _);
  418:  
  419:                     if (reportInserted)
  420:                     {
  421:                         reportClosed = Ia.Ftn.Cl.Model.Data.Report.CloseStatus(report);
  422:  
  423:                         if (reportClosed)
  424:                         {
  425:                             result.AddSuccess("Report history for report.Id: " + report.Id + " successfully inserted and report closed.");
  426:                         }
  427:                         else
  428:                         {
  429:                             result.AddWarning("Report history for report.Id: " + report.Id + " successfully inserted but report not closed.");
  430:                         }
  431:                     }
  432:                     else
  433:                     {
  434:                         result.AddError("Report history for report.Id: " + report.Id + " not inserted.");
  435:                     }
  436:                 }
  437:  
  438:                 Ia.Ftn.Cl.Model.Data.Report.OpenStatusOrClosedWithinLast24HourAndResponsibilityAndReadabilityReportListClear();
  439:             }
  440:         }
  441:  
  442:         ////////////////////////////////////////////////////////////////////////////
  443:  
  444:         /// <summary>
  445:         ///
  446:         /// </summary>
  447:         private static string StaffFrameworkArabicName(Ia.Ftn.Cl.Model.Report report)
  448:         {
  449:             string text;
  450:  
  451:             if (report.LastReportHistory != null)
  452:             {
  453:                 if (Ia.Ftn.Cl.Model.Business.Administration.IsFrameworkId(report.LastReportHistory.UserId))
  454:                 {
  455:                     text = (from f in Ia.Ftn.Cl.Model.Data.Administration.FrameworkList
  456:                             where f.Id == report.LastReportHistory.UserId
  457:                             select f.ArabicName).SingleOrDefault();
  458:                 }
  459:                 else
  460:                 {
  461:                     text = (from _s in Ia.Ftn.Cl.Model.Data.Staff.List
  462:                             where _s.Id == report.LastReportHistory.UserId
  463:                             select _s.Framework.ArabicName).SingleOrDefault();
  464:                 }
  465:             }
  466:             else
  467:             {
  468:                 text = string.Empty;
  469:             }
  470:  
  471:             return text;
  472:         }
  473:  
  474:         ////////////////////////////////////////////////////////////////////////////
  475:         ////////////////////////////////////////////////////////////////////////////   
  476:     }
  477:  
  478:     ////////////////////////////////////////////////////////////////////////////
  479:     ////////////////////////////////////////////////////////////////////////////   
  480: }