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

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

Service Request Service 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: using System.Text;
    6:  
    7: namespace Ia.Ftn.Cl.Models.Business
    8: {
    9:     ////////////////////////////////////////////////////////////////////////////
   10:  
   11:     /// <summary publish="true">
   12:     /// Service Request Service support class of Fixed Telecommunications Network (FTN) business model.
   13:     /// </summary>
   14:     /// 
   15:     /// <remarks> 
   16:     /// Copyright © 2006-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   17:     /// </remarks> 
   18:     public class ServiceRequestService
   19:     {
   20:         private static readonly StringBuilder log = new StringBuilder();
   21:  
   22:         ////////////////////////////////////////////////////////////////////////////
   23:  
   24:         /// <summary>
   25:         ///
   26:         /// </summary>
   27:         public enum ServiceRequestServiceType { Create = 1, Read, Update, Delete };
   28:  
   29:         ////////////////////////////////////////////////////////////////////////////
   30:  
   31:         /// <summary>
   32:         ///
   33:         /// </summary>
   34:         public ServiceRequestService() { }
   35:  
   36:         ////////////////////////////////////////////////////////////////////////////
   37:  
   38:         /// <summary>
   39:         ///
   40:         /// </summary>
   41:         public static string ServiceIdToService(string service)
   42:         {
   43:             return Ia.Ftn.Cl.Models.Business.Service.ServiceIdToService(service);
   44:         }
   45:  
   46:         ////////////////////////////////////////////////////////////////////////////
   47:  
   48:         /// <summary>
   49:         ///
   50:         /// </summary>
   51:         public static string ServiceRequestServiceId(string service, int serviceType)
   52:         {
   53:             // below:
   54:             string id;
   55:  
   56:             id = Ia.Ftn.Cl.Models.Business.Service2.ServiceId(service, serviceType);
   57:  
   58:             return id;
   59:         }
   60:  
   61:         ////////////////////////////////////////////////////////////////////////////
   62:  
   63:         /// <summary>
   64:         /// Update service-request-service table with data from service requests
   65:         /// </summary>
   66:         public static List<string> UpdateForServiceRequestIdRange(Tuple<int, int> startEndRange, out string result)
   67:         {
   68:             List<int> numberList;
   69:             List<string> mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
   70:             List<Ia.Ftn.Cl.Models.ServiceRequest> serviceRequestList;
   71:  
   72:             result = string.Empty;
   73:  
   74:             if (startEndRange != null)
   75:             {
   76:                 // 1. Read all SRs for this range
   77:                 serviceRequestList = Ia.Ftn.Cl.Models.Data.ServiceRequest.ListWithinIdRange(startEndRange.Item1, startEndRange.Item2);
   78:  
   79:                 // 2. Collect numbers in int format into int list
   80:                 numberList = serviceRequestList.NumberList();
   81:  
   82:                 mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList = UpdateForServiceList(numberList, out result);
   83:             }
   84:             else mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList = new List<string>();
   85:  
   86:             return mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
   87:         }
   88:  
   89:         ////////////////////////////////////////////////////////////////////////////
   90:  
   91:         /// <summary>
   92:         ///
   93:         /// </summary>
   94:         public static List<string> UpdateForService(string service, out string result)
   95:         {
   96:             List<int> numberList;
   97:             List<string> mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
   98:  
   99:             numberList = new List<int>();
  100:             mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList = new List<string>();
  101:  
  102:             if (int.TryParse(service, out int i))
  103:             {
  104:                 numberList.Add(i);
  105:  
  106:                 mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList = UpdateForServiceList(numberList, out result);
  107:             }
  108:             else
  109:             {
  110:                 result = "Error: service: " + service + " is not in integer format. ";
  111:             }
  112:  
  113:             return mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
  114:         }
  115:  
  116:         ////////////////////////////////////////////////////////////////////////////
  117:  
  118:         /// <summary>
  119:         ///
  120:         /// </summary>
  121:         public static List<string> UpdateForServiceList(List<int> numberList, out string result)
  122:         {
  123:             int number;
  124:             string r0, r1, r2;
  125:             List<int> numberAndChangedAndChangedToList;
  126:             List<string> serviceList, service1List, service2List, mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
  127:             List<Ia.Ftn.Cl.Models.ServiceRequestType> serviceRequestTypeList;
  128:             List<Ia.Ftn.Cl.Models.ServiceRequest> serviceRequestList;
  129:             List<Ia.Ftn.Cl.Models.ServiceRequestHistory> serviceRequestHistoryList;
  130:             List<Ia.Ftn.Cl.Models.ServiceRequestService> serviceRequestServiceList, serviceRequestServiceDefaultList, serviceRequestServiceHistoryList;
  131:  
  132:             r0 = r1 = r2 = string.Empty;
  133:  
  134:             serviceList = new List<string>();
  135:             mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList = new List<string>();
  136:             serviceRequestServiceList = new List<Ia.Ftn.Cl.Models.ServiceRequestService>();
  137:  
  138:             using (var db = new Ia.Ftn.Cl.Db()) // important to enable usage of Include from different functions
  139:             {
  140:                 // SR
  141:                 // collect numbers in int format into int list
  142:                 numberAndChangedAndChangedToList = Ia.Ftn.Cl.Models.Data.ServiceRequest.ServiceNumberListAndRelatedChangedAndChangedToServiceNumberListByServiceNumberList(numberList);
  143:  
  144:                 if (numberAndChangedAndChangedToList.Count > 0)
  145:                 {
  146:                     // read all SRs related to collected numbers
  147:                     serviceRequestList = Ia.Ftn.Cl.Models.Data.ServiceRequest.List(numberAndChangedAndChangedToList);
  148:  
  149:                     // read all SRTs related to collected numbers
  150:                     serviceRequestTypeList = Ia.Ftn.Cl.Models.Data.ServiceRequestType.List(numberAndChangedAndChangedToList);
  151:  
  152:                     // collect numbers in string format into int list
  153:                     service1List = (from n in numberAndChangedAndChangedToList select n.ToString()).ToList<string>();
  154:  
  155:                     serviceRequestServiceDefaultList = ServiceRequestServiceFromServiceRequest(serviceRequestList, serviceRequestTypeList);
  156:  
  157:                     // remove duplicates (Linq orderyby boolean See http://stackoverflow.com/questions/9481054/linq-orderyby-boolean)
  158:                     serviceRequestServiceDefaultList = serviceRequestServiceDefaultList.OrderByDescending(u => u.Serial).OrderByDescending(u => u.Provisioned).OrderByDescending(u => u.LastRequestDateTime).GroupBy(u => u.Id).Select(u => u.First()).ToList();
  159:                 }
  160:                 else
  161:                 {
  162:                     serviceRequestList = new List<Ia.Ftn.Cl.Models.ServiceRequest>();
  163:                     serviceRequestTypeList = new List<Ia.Ftn.Cl.Models.ServiceRequestType>();
  164:                     service1List = new List<string>();
  165:  
  166:                     serviceRequestServiceDefaultList = new List<Ia.Ftn.Cl.Models.ServiceRequestService>();
  167:                 }
  168:  
  169:                 //foreach (var srsd in serviceRequestServiceDefaultList) serviceRequestServiceList.Add(srsd);
  170:                 foreach (var s in service1List) serviceList.Add(s);
  171:  
  172:                 // SRH
  173:                 // read all SRHs related to collected numbers
  174:                 serviceRequestHistoryList = Ia.Ftn.Cl.Models.Data.ServiceRequestHistory.List(numberAndChangedAndChangedToList);
  175:  
  176:                 // read the last provisioning state and last serial of all numbers in SRH
  177:                 Ia.Ftn.Cl.Models.Business.ServiceRequestHistory.NumberSerialProvisionedDictionary(serviceRequestHistoryList,
  178:                 out Dictionary<int, int> numberSerial,
  179:                 out Dictionary<int, bool> numberProvisioned);
  180:  
  181:                 // collect numbers in string format into int list
  182:                 service2List = (from n in numberAndChangedAndChangedToList select n.ToString()).ToList<string>();
  183:  
  184:                 if (serviceRequestHistoryList.Count > 0)
  185:                 {
  186:                     serviceRequestServiceHistoryList = ServiceRequestServiceFromServiceRequestHistory(serviceRequestHistoryList);
  187:  
  188:                     // remove duplicates (Linq orderyby boolean See http://stackoverflow.com/questions/9481054/linq-orderyby-boolean)
  189:                     serviceRequestServiceHistoryList = serviceRequestServiceHistoryList.OrderByDescending(u => u.Serial).OrderByDescending(u => u.Provisioned).OrderByDescending(u => u.LastRequestDateTime).GroupBy(u => u.Id).Select(u => u.First()).ToList();
  190:                 }
  191:                 else serviceRequestServiceHistoryList = new List<Ia.Ftn.Cl.Models.ServiceRequestService>();
  192:  
  193:  
  194:                 // construct SRS from SR and SRH. Primary copy will come from SR, but provisioning state will be taken from SRH only, other complementary service will be taken from both
  195:                 foreach (var srsd in serviceRequestServiceDefaultList)
  196:                 {
  197:                     serviceRequestServiceList.Add(srsd);
  198:                 }
  199:  
  200:  
  201:                 foreach (var srsh in serviceRequestServiceHistoryList)
  202:                 {
  203:                     if (!serviceRequestServiceList.Any(u => u.Id == srsh.Id)) serviceRequestServiceList.Add(srsh);
  204:                     else
  205:                     {
  206:                         var serviceRequestService = serviceRequestServiceList.Single(u => u.Id == srsh.Id);
  207:  
  208:                         // order is important before below
  209:                         if (serviceRequestService.Provisioned != srsh.Provisioned) mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList.Add(serviceRequestService.Service);
  210:  
  211:                         serviceRequestService.Provisioned = srsh.Provisioned; // this Provisioned value is from SRH records. SRH determines state of SR
  212:  
  213:                         serviceRequestService.InternationalCalling = srsh.InternationalCalling || serviceRequestService.InternationalCalling;
  214:                         serviceRequestService.InternationalCallingUserControlled = srsh.InternationalCallingUserControlled || serviceRequestService.InternationalCallingUserControlled;
  215:                         serviceRequestService.CallForwarding = srsh.CallForwarding || serviceRequestService.CallForwarding;
  216:                         serviceRequestService.CallWaiting = srsh.CallWaiting || serviceRequestService.CallWaiting;
  217:                         serviceRequestService.ConferenceCall = srsh.ConferenceCall || serviceRequestService.ConferenceCall;
  218:                         serviceRequestService.AlarmCall = srsh.AlarmCall || serviceRequestService.AlarmCall;
  219:                         serviceRequestService.WakeupCall = srsh.WakeupCall || serviceRequestService.WakeupCall;
  220:                         serviceRequestService.AbbriviatedCalling = srsh.AbbriviatedCalling || serviceRequestService.AbbriviatedCalling;
  221:                         //serviceRequestService.ServiceSuspension = srsd.ServiceSuspension || serviceRequestService.ServiceSuspension;
  222:  
  223:                         //serviceRequestService.Access = srsh.Access;
  224:                         //if (srsd.Access != null) serviceRequestService.Access = (from a in db.Accesses where a.Id == srsd.Access.Id select a).SingleOrDefault();
  225:                         //else serviceRequestService.Access = null;
  226:                     }
  227:                 }
  228:  
  229:  
  230:  
  231:                 foreach (var srs in serviceRequestServiceList)
  232:                 {
  233:                     number = int.Parse(srs.Service);
  234:  
  235:                     if (numberSerial.ContainsKey(number))
  236:                     {
  237:                         srs.Serial = numberSerial[number];
  238:                         srs.Provisioned = numberProvisioned[number];
  239:                     }
  240:                 }
  241:  
  242:  
  243:  
  244:  
  245:                 foreach (var s in service2List) serviceList.Add(s);
  246:  
  247:                 serviceList = serviceList.Distinct().ToList();
  248:  
  249:                 // update service request services
  250:                 Ia.Ftn.Cl.Models.Data.ServiceRequestService.UpdateWithServiceList(serviceList, serviceRequestServiceList, out r1);
  251:  
  252:                 // update service requests with SRS foreign keys
  253:                 Ia.Ftn.Cl.Models.Data.ServiceRequest.UpdateWithServiceList(serviceList, serviceRequestList, out r2);
  254:             }
  255:  
  256:             result = "(SRS:" + r1 + ",SR with SRS key:" + r2 + ")";
  257:  
  258:             return mismatchedProvisionStateBetweenDefaultSrsAndHistoricalSrsServiceList;
  259:         }
  260:  
  261:         ////////////////////////////////////////////////////////////////////////////
  262:  
  263:         /// <summary>
  264:         ///
  265:         /// </summary>
  266:         public static List<Ia.Ftn.Cl.Models.ServiceRequestService> ServiceRequestServiceFromServiceRequest(List<Ia.Ftn.Cl.Models.ServiceRequest> serviceRequestList, List<Ia.Ftn.Cl.Models.ServiceRequestType> serviceRequestTypeList)
  267:         {
  268:             int serial, serviceType, serviceId;
  269:             string service, serviceSerial, serviceRequestServiceId, changedToServiceRequestServiceId, changedToServiceNumber;
  270:             DateTime lastRequestDateTime;
  271:             Ia.Ftn.Cl.Models.ServiceRequestService serviceRequestService, changedToServiceRequestService;
  272:             Dictionary<string, int> serviceToSerialDictionary;
  273:             List<Ia.Ftn.Cl.Models.ServiceRequestService> serviceRequestServiceList;
  274:  
  275:             serviceType = Ia.Ftn.Cl.Models.Business.Service.ServiceType.ImsService; // irrelevant?
  276:             lastRequestDateTime = DateTime.MinValue;
  277:             serviceRequestServiceList = new List<Ia.Ftn.Cl.Models.ServiceRequestService>(serviceRequestList.Count);
  278:             serviceToSerialDictionary = new Dictionary<string, int>();
  279:  
  280:  
  281:             // create initial serviceRequestServiceList from serviceList with all Provisioned = false records:
  282:  
  283:  
  284:             // 11. Loop through all sr records by request id ascending
  285:             var list = serviceRequestList.OrderBy(p => p.RequestDateTime.Date).ThenBy(p => p.ServiceId == 38).ThenBy(p => p.Id); // <service id="38" arabicName="مجموعة الخدمات" />
  286:             foreach (Ia.Ftn.Cl.Models.ServiceRequest serviceRequest in list) // serviceRequestList.OrderBy(p => p.Id))
  287:             {
  288:                 if (Ia.Ftn.Cl.Models.Business.Authority.ServiceRequestIsAllowedProcessing(serviceRequest))
  289:                 {
  290:                     if (serviceRequest.ServiceCategoryId == 3)
  291:                     {
  292:                         // <category id="3" arabicName="هاتف" />
  293:  
  294:                         if (serviceRequest.Status == 2003 || serviceRequest.Status == 2005)
  295:                         {
  296:                             // <status id="2003" arabicName="قيد التنفيذ" />
  297:                             // <status id="2005" arabicName="تم التنفيذ" />
  298:  
  299:                             service = serviceRequest.Number.ToString();
  300:                             serial = serviceRequest.Serial;
  301:                             serviceId = serviceRequest.ServiceId;
  302:                             serviceSerial = service + ":" + serial;
  303:  
  304:                             serviceRequestServiceId = Ia.Ftn.Cl.Models.Business.ServiceRequestService.ServiceRequestServiceId(service, serviceType);
  305:  
  306:                             serviceRequestService = (from srs in serviceRequestServiceList
  307:                                                      where srs.Id == serviceRequestServiceId
  308:                                                      select srs).OrderByDescending(u => u.Serial).OrderByDescending(u => u.LastRequestDateTime).GroupBy(u => u.Id).Select(u => u.First()).FirstOrDefault(); //.SingleOrDefault();
  309:  
  310:                             if (serviceRequestService == null || serviceRequestService.Provisioned == false)
  311:                             {
  312:                                 if (serviceId == 1 || serviceId == 129 || serviceId == 54)
  313:                                 {
  314:                                     // <service id="1" arabicName="خط هاتف" />
  315:                                     // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  316:                                     // <service id="54" arabicName="اعادة تركيب" />
  317:  
  318:                                     serviceRequestService = new Ia.Ftn.Cl.Models.ServiceRequestService();
  319:  
  320:                                     serviceRequestService.Id = serviceRequestServiceId;
  321:                                     serviceRequestService.Service = service;
  322:                                     serviceRequestService.Serial = serial;
  323:                                     serviceRequestService.AreaCode = Ia.Ftn.Cl.Models.Business.Service.CountryCode;
  324:                                     serviceRequestService.ServiceType = serviceType;
  325:                                     serviceRequestService.Provisioned = true;
  326:  
  327:                                     TelephonyService(serviceRequest, serviceRequestTypeList, ref serviceRequestService);
  328:  
  329:                                     serviceRequestServiceList.Add(serviceRequestService);
  330:                                     serviceRequest.ServiceRequestService = serviceRequestService;
  331:  
  332:                                     lastRequestDateTime = serviceRequest.RequestDateTime;
  333:                                     if (serviceRequestService.LastRequestDateTime < lastRequestDateTime) serviceRequestService.LastRequestDateTime = lastRequestDateTime;
  334:                                 }
  335:                                 else
  336:                                 {
  337:                                     // incomplete service request list for serial
  338:                                 }
  339:                             }
  340:                             else
  341:                             {
  342:                                 if (serviceRequestService.Provisioned && serviceRequestService.Serial == serial)
  343:                                 {
  344:                                     if (serviceRequest.ServiceId == 41)
  345:                                     {
  346:                                         // <service id="41" arabicName="تغيير رقم" />
  347:  
  348:                                         // below: <type id="11" name="dn" arabicName="dn" oracleFieldName="الرقم الجديد"/>
  349:                                         changedToServiceNumber = (from srt in serviceRequestTypeList
  350:                                                                   where srt.ServiceRequest.Id == serviceRequest.Id && srt.TypeId == 11 && srt.Value != null
  351:                                                                   select srt.Value).SingleOrDefault();
  352:  
  353:                                         if (Ia.Ftn.Cl.Models.Business.Service.ServiceHasEightDigitsAndIsWithinAllowedDomainList(changedToServiceNumber)) // important because some numbers are null
  354:                                         {
  355:                                             // Set Provision to false for changed number
  356:                                             serviceRequestService.Provisioned = false;
  357:  
  358:                                             // Create or update entry for new number
  359:                                             changedToServiceRequestServiceId = Ia.Ftn.Cl.Models.Business.ServiceRequestService.ServiceRequestServiceId(changedToServiceNumber, serviceType);
  360:  
  361:                                             changedToServiceRequestService = (from srs in serviceRequestServiceList
  362:                                                                               where srs.Id == changedToServiceRequestServiceId
  363:                                                                               select srs).OrderByDescending(u => u.Serial).OrderByDescending(u => u.LastRequestDateTime).GroupBy(u => u.Id).Select(u => u.First()).FirstOrDefault(); //.SingleOrDefault();
  364:  
  365:                                             if (changedToServiceRequestService == null)
  366:                                             {
  367:                                                 changedToServiceRequestService = new Ia.Ftn.Cl.Models.ServiceRequestService();
  368:                                                 changedToServiceRequestService.Id = changedToServiceRequestServiceId; // keep here and keep below
  369:  
  370:                                                 serviceRequestServiceList.Add(changedToServiceRequestService);
  371:  
  372:                                                 changedToServiceRequestService = (from srs in serviceRequestServiceList
  373:                                                                                   where srs.Id == changedToServiceRequestServiceId
  374:                                                                                   select srs).OrderByDescending(u => u.Serial).OrderByDescending(u => u.LastRequestDateTime).GroupBy(u => u.Id).Select(u => u.First()).FirstOrDefault(); //.SingleOrDefault();
  375:                                             }
  376:  
  377:                                             changedToServiceRequestService.Copy(serviceRequestService); // order is very important, first copy then modify
  378:                                             changedToServiceRequestService.Id = changedToServiceRequestServiceId; // keep here and keep above
  379:                                             changedToServiceRequestService.Service = changedToServiceNumber;
  380:                                             // below: you must assign a serial that is an increment of any previously existing serial for the changed-to number, or 0 if non
  381:                                             changedToServiceRequestService.Serial = serviceToSerialDictionary.ContainsKey(changedToServiceNumber) ? serviceToSerialDictionary[changedToServiceNumber] + 1 : 0;
  382:                                             changedToServiceRequestService.Provisioned = true;
  383:  
  384:                                             lastRequestDateTime = serviceRequest.RequestDateTime;
  385:                                             if (changedToServiceRequestService.LastRequestDateTime < lastRequestDateTime) changedToServiceRequestService.LastRequestDateTime = lastRequestDateTime;
  386:  
  387:                                             if (changedToServiceRequestService != null) serviceToSerialDictionary[changedToServiceRequestService.Service] = changedToServiceRequestService.Serial;
  388:                                         }
  389:                                         else
  390:                                         {
  391:  
  392:                                         }
  393:                                     }
  394:                                     else
  395:                                     {
  396:                                         TelephonyService(serviceRequest, serviceRequestTypeList, ref serviceRequestService);
  397:                                     }
  398:  
  399:                                     lastRequestDateTime = serviceRequest.RequestDateTime;
  400:                                     if (serviceRequestService.LastRequestDateTime < lastRequestDateTime) serviceRequestService.LastRequestDateTime = lastRequestDateTime;
  401:                                 }
  402:  
  403:                                 serviceRequest.ServiceRequestService = serviceRequestService;
  404:                             }
  405:  
  406:                             if (serviceRequestService != null) serviceToSerialDictionary[serviceRequestService.Service] = serviceRequestService.Serial;
  407:                         }
  408:                         else
  409:                         {
  410:                         }
  411:                     }
  412:                 }
  413:             }
  414:  
  415:             return serviceRequestServiceList;
  416:         }
  417:  
  418:         ////////////////////////////////////////////////////////////////////////////
  419:  
  420:         /// <summary>
  421:         ///
  422:         /// </summary>
  423:         public static List<Ia.Ftn.Cl.Models.ServiceRequestService> ServiceRequestServiceFromServiceRequestHistory(List<Ia.Ftn.Cl.Models.ServiceRequestHistory> serviceRequestHistoryList)
  424:         {
  425:             int serial, status, serviceType, serviceId;
  426:             string service, serviceSerial, serviceIdIssue;
  427:             DateTime lastRequestDateTime;
  428:             Ia.Ftn.Cl.Models.ServiceRequestService serviceRequestService;
  429:             Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService serviceSerialRequestService;
  430:             List<string> serviceSerialsToRemoveList;
  431:             List<Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService> serviceSerialRequestServiceList;
  432:             List<Ia.Ftn.Cl.Models.ServiceRequestService> serviceRequestServiceList;
  433:             Dictionary<string, int> serviceToLastSerialDictionary, serviceSerialToStatusDictionary;
  434:             Dictionary<string, Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService> serviceRequestHistoryNumberSerialComplementaryServiceDictionary;
  435:  
  436:             serviceType = Ia.Ftn.Cl.Models.Business.Service.ServiceType.ImsService; // irrelevant?
  437:             serviceIdIssue = string.Empty;
  438:             lastRequestDateTime = DateTime.MinValue;
  439:             serviceSerialsToRemoveList = new List<string>();
  440:             serviceSerialRequestServiceList = new List<Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService>(serviceRequestHistoryList.Count);
  441:  
  442:             serviceToLastSerialDictionary = new Dictionary<string, int>(serviceRequestHistoryList.Count);
  443:             serviceSerialToStatusDictionary = new Dictionary<string, int>(serviceRequestHistoryList.Count);
  444:  
  445:             serviceRequestHistoryNumberSerialComplementaryServiceDictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService>(serviceRequestHistoryList.Count);
  446:  
  447:             // create initial serviceRequestServiceList from serviceList with all Provisioned = false records:
  448:  
  449:  
  450:  
  451:  
  452:             // 11. Loop through all srh records by request id ascending
  453:  
  454:             // build service request service from service request histories.
  455:             var list2 = serviceRequestHistoryList.OrderBy(p => p.ServiceDateTime.Date).ThenBy(p => p.ServiceId == 38); // <service id="38" arabicName="مجموعة الخدمات" />
  456:             foreach (var serviceRequestHistory in list2)
  457:             {
  458:                 if (Ia.Ftn.Cl.Models.Business.Authority.ServiceRequestHistoryIsAllowedProcessing(serviceRequestHistory))
  459:                 {
  460:                     if (serviceRequestHistory.ServiceCategoryId == 3)
  461:                     {
  462:                         // <category id="3" arabicName="هاتف" />
  463:  
  464:                         service = serviceRequestHistory.Number.ToString();
  465:                         serial = serviceRequestHistory.Serial;
  466:                         serviceId = serviceRequestHistory.ServiceId;
  467:                         status = serviceRequestHistory.Status;
  468:  
  469:                         serviceSerial = service + ":" + serial;
  470:  
  471:                         serviceSerialToStatusDictionary[serviceSerial] = status;
  472:  
  473:                         if (serviceToLastSerialDictionary.ContainsKey(service))
  474:                         {
  475:                             if (serviceToLastSerialDictionary[service] < serial) serviceToLastSerialDictionary[service] = serial;
  476:                         }
  477:                         else serviceToLastSerialDictionary[service] = serial;
  478:  
  479:                         if (!serviceRequestHistoryNumberSerialComplementaryServiceDictionary.ContainsKey(serviceSerial)
  480:                             || serviceRequestHistoryNumberSerialComplementaryServiceDictionary.ContainsKey(serviceSerial) && serviceRequestHistoryNumberSerialComplementaryServiceDictionary[serviceSerial].Provisioned == false)
  481:                         {
  482:                             if (serviceId == 1 || serviceId == 129 || serviceId == 54)
  483:                             {
  484:                                 // <service id="1" arabicName="خط هاتف" />
  485:                                 // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  486:                                 // <service id="54" arabicName="اعادة تركيب" />
  487:  
  488:                                 serviceSerialRequestService = new Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService();
  489:  
  490:                                 serviceSerialRequestService.Id = serviceSerial;
  491:                                 serviceSerialRequestService.Service = service;
  492:                                 serviceSerialRequestService.Serial = serial;
  493:                                 serviceSerialRequestService.Provisioned = true;
  494:  
  495:                                 if (/*serial == 0 &&*/ Ia.Ftn.Cl.Models.Data.ServiceRequestHistory.ServiceHasInternationalCallingFromAnOldUnseen1111_11_11RecordInCustomerDepartmentDatabase(serviceSerialRequestService.Service))
  496:                                 {
  497:                                     serviceSerialRequestService.InternationalCalling = true;
  498:                                 }
  499:  
  500:                                 serviceRequestHistoryNumberSerialComplementaryServiceDictionary[serviceSerial] = serviceSerialRequestService;
  501:  
  502:                                 lastRequestDateTime = serviceRequestHistory.ServiceDateTime;
  503:                             }
  504:                             else
  505:                             {
  506:                                 // incomplete service request list for serial
  507:                             }
  508:                         }
  509:                         else
  510:                         {
  511:                             if (serviceRequestHistoryNumberSerialComplementaryServiceDictionary[serviceSerial].Provisioned && serviceRequestHistoryNumberSerialComplementaryServiceDictionary[serviceSerial].Serial == serial)
  512:                             {
  513:                                 if (serviceId == 41)
  514:                                 {
  515:                                     // <service id="41" arabicName="تغيير رقم" />
  516:                                 }
  517:                                 else
  518:                                 {
  519:                                     Ia.Ftn.Cl.Models.Business.ServiceRequestService.TelephonyServiceHistory(ref serviceRequestHistoryNumberSerialComplementaryServiceDictionary, serviceSerial, status, serviceId, ref serviceIdIssue);
  520:                                 }
  521:  
  522:                                 lastRequestDateTime = serviceRequestHistory.ServiceDateTime;
  523:                             }
  524:                         }
  525:                     }
  526:                     else
  527:                     {
  528:  
  529:                     }
  530:                 }
  531:  
  532:                 // collect all numbers serials that are not the last in their serial series:
  533:                 foreach (KeyValuePair<string, Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService> kvp in serviceRequestHistoryNumberSerialComplementaryServiceDictionary)
  534:                 {
  535:                     if (serviceToLastSerialDictionary.ContainsKey(kvp.Value.Service))
  536:                     {
  537:                         if (serviceToLastSerialDictionary[kvp.Value.Service] > kvp.Value.Serial) serviceSerialsToRemoveList.Add(kvp.Key);
  538:                     }
  539:                     else
  540:                     {
  541:                         serviceIdIssue += "Error: serviceToLastSerialDictionary does not contain kvp.Value.Service: " + kvp.Value.Service + "\r\n";
  542:                     }
  543:                 }
  544:             }
  545:  
  546:             // remove previous service-serials
  547:             foreach (string s in serviceSerialsToRemoveList)
  548:             {
  549:                 serviceRequestHistoryNumberSerialComplementaryServiceDictionary.Remove(s);
  550:             }
  551:  
  552:             // construct serviceRequestServiceList from dictionary
  553:             serviceRequestServiceList = new List<Ia.Ftn.Cl.Models.ServiceRequestService>();
  554:  
  555:             foreach (KeyValuePair<string, Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService> kvp in serviceRequestHistoryNumberSerialComplementaryServiceDictionary)
  556:             {
  557:                 serviceSerial = kvp.Value.Service + ":" + kvp.Value.Serial;
  558:  
  559:                 serviceRequestService = new Ia.Ftn.Cl.Models.ServiceRequestService()
  560:                 {
  561:                     Id = kvp.Value.Service + ":1:965",
  562:                     Service = kvp.Value.Service,
  563:                     Serial = kvp.Value.Serial,
  564:                     //Provisioned = kvp.Value.Provisioned,
  565:                     Provisioned = Ia.Ftn.Cl.Models.Business.ServiceRequestHistory.ServiceRequestServiceHistoryProvisionedValueFromStatus(serviceSerialToStatusDictionary[serviceSerial]),
  566:                     CallWaiting = kvp.Value.CallWaiting,
  567:                     InternationalCallingUserControlled = kvp.Value.InternationalCallingUserControlled,
  568:                     CallerId = kvp.Value.CallerId,
  569:                     CallForwarding = kvp.Value.CallForwarding,
  570:                     CallBarring = kvp.Value.CallBarring,
  571:                     ConferenceCall = kvp.Value.ConferenceCall,
  572:                     AbbriviatedCalling = kvp.Value.AbbriviatedCalling,
  573:                     InternationalCalling = kvp.Value.InternationalCalling,
  574:                     AlarmCall = kvp.Value.AlarmCall,
  575:                     WakeupCall = kvp.Value.WakeupCall,
  576:                     BarringOfAllOutgoingCalls = kvp.Value.BarringOfAllOutgoingCalls,
  577:                     BarringOfAllIncomingCalls = kvp.Value.BarringOfAllIncomingCalls,
  578:                     LastRequestDateTime = lastRequestDateTime
  579:                 };
  580:  
  581:                 serviceRequestServiceList.Add(serviceRequestService);
  582:             }
  583:  
  584:             return serviceRequestServiceList;
  585:         }
  586:  
  587:         ////////////////////////////////////////////////////////////////////////////
  588:  
  589:         /// <summary>
  590:         ///
  591:         /// </summary>
  592:         private static void TelephonyService(Ia.Ftn.Cl.Models.ServiceRequest serviceRequest, List<Ia.Ftn.Cl.Models.ServiceRequestType> serviceRequestTypeList, ref Ia.Ftn.Cl.Models.ServiceRequestService serviceRequestService)
  593:         {
  594:             Ia.Ftn.Cl.Models.Access access;
  595:  
  596:             if (serviceRequest.ServiceId == 1 || serviceRequest.ServiceId == 129 || serviceRequest.ServiceId == 39 || serviceRequest.ServiceId == 54)
  597:             {
  598:                 // <service id="1" arabicName="خط هاتف" />
  599:                 // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  600:                 // <service id="39" arabicName="نقل خارجى" />
  601:                 // <service id="54" arabicName="اعادة تركيب" />
  602:  
  603:                 if (serviceRequest.ServiceId == 1 || serviceRequest.ServiceId == 129 || serviceRequest.ServiceId == 54)
  604:                 {
  605:                     // <service id="1" arabicName="خط هاتف" />
  606:                     // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  607:                     // <service id="54" arabicName="اعادة تركيب" />
  608:  
  609:                     // below: keep this here and don't move it out to accommodate 39
  610:                     using (var db = new Ia.Ftn.Cl.Db())
  611:                     {
  612:                         // important: ServiceRequestService.Update() will only update stored.Access if it is null, or (stored.userId == Guid.Empty && update.Id > stored.Id)
  613:                         access = Ia.Ftn.Cl.Models.Business.ServiceRequestType.ExtractAccess(serviceRequest.Id, serviceRequestTypeList);
  614:  
  615:                         if (access != null) serviceRequestService.Access = (from a in db.Accesses where a.Id == access.Id select a).SingleOrDefault();
  616:                         else serviceRequestService.Access = null;
  617:                         /* I will not use statistical estimation for incomplete workorders
  618:                         else
  619:                         {
  620:                             serviceAddress = Ia.Ftn.Cl.Model.Business.ServiceRequest.StatisticalServiceAddress(serviceRequestService.Service, serviceRequest.CustomerAddress, out level);
  621: 
  622:                             if (serviceAddress != null)
  623:                             {
  624:                                 accessList = (from a in db.Accesses where a.AreaId == serviceAddress.AreaId select a).ToList();
  625: 
  626:                                 access = Ia.Ftn.Cl.Model.Data.Access.StatisticalAccess(serviceAddress, ref accessList);
  627: 
  628:                                 if (access != null)
  629:                                 {
  630:                                     serviceRequestService.Access = (from a in db.Accesses where a.Id == access.Id select a).SingleOrDefault();
  631:                                 }
  632:                                 else serviceRequestService.Access = null;
  633:                             }
  634:                             else serviceRequestService.Access = null;
  635:                         }
  636:                         */
  637:                     }
  638:  
  639:                     serviceRequestService.CallerId = false;
  640:  
  641:                     serviceRequestService.AlarmCall = false;
  642:                     serviceRequestService.WakeupCall = false;
  643:  
  644:                     ///serviceRequestService.InternationalCallingUserControlled = true; // as requested by MOC FTN management
  645:                     serviceRequestService.CallWaiting = false;
  646:                     serviceRequestService.CallForwarding = false;
  647:                     serviceRequestService.ConferenceCall = false;
  648:                     serviceRequestService.CallBarring = false;
  649:  
  650:                     if (serviceRequest.ServiceId == 1 || serviceRequest.ServiceId == 54)
  651:                     {
  652:                         serviceRequestService.InternationalCalling = false;
  653:                     }
  654:                     else if (serviceRequest.ServiceId == 129) serviceRequestService.InternationalCalling = true;
  655:                 }
  656:                 else if (serviceRequest.ServiceId == 39)
  657:                 {
  658:                     // <service id="39" arabicName="نقل خارجى" />
  659:  
  660:                     using (var db = new Ia.Ftn.Cl.Db())
  661:                     {
  662:                         // important: ServiceRequestService.Update() will only update stored.Access if it is null, or (stored.userId == Guid.Empty && update.Id > stored.Id)
  663:                         access = Ia.Ftn.Cl.Models.Business.ServiceRequestType.ExtractAccess(serviceRequest.Id, serviceRequestTypeList);
  664:  
  665:                         if (access != null) serviceRequestService.Access = (from a in db.Accesses where a.Id == access.Id select a).SingleOrDefault();
  666:                         //else serviceRequestService.Access = null;
  667:                     }
  668:                 }
  669:             }
  670:             else
  671:             {
  672:                 switch (serviceRequest.ServiceId)
  673:                 {
  674:                     // below: <service id="40" arabicName="رفع خط" />
  675:                     case 40:
  676:                         {
  677:                             // will reset all to false
  678:  
  679:                             serviceRequestService.Provisioned = false;
  680:  
  681:                             serviceRequestService.CallerId = false;
  682:                             serviceRequestService.AlarmCall = false;
  683:                             serviceRequestService.WakeupCall = false;
  684:                             serviceRequestService.InternationalCallingUserControlled = false;
  685:                             serviceRequestService.CallWaiting = false;
  686:                             serviceRequestService.CallForwarding = false;
  687:                             serviceRequestService.ConferenceCall = false;
  688:                             serviceRequestService.CallBarring = false;
  689:                             serviceRequestService.InternationalCalling = false;
  690:  
  691:                             break;
  692:                         }
  693:  
  694:                     // below: <service id="131" arabicName="خط ذهبي"/>
  695:                     case 131: { break; }
  696:  
  697:                     // below: <service id="132" arabicName="خط فضي"/>
  698:                     case 132: { break; }
  699:  
  700:                     // below: <service id="133" arabicName="خط برونزي"/>
  701:                     case 133: { break; }
  702:  
  703:                     // below: <service id="12" arabicName="خدمة الانتظار" />
  704:                     case 12: { serviceRequestService.CallWaiting = true; break; }
  705:  
  706:                     // below: <service id="68" arabicName="إيقاف خدمة الانتظار" />
  707:                     case 68: { serviceRequestService.CallWaiting = false; break; }
  708:  
  709:                     // below: <service id="13" arabicName="التحكم بالصفر الدولي" />
  710:                     case 13: { serviceRequestService.InternationalCallingUserControlled = true; break; }
  711:  
  712:                     // below: <service id="67" arabicName="وقف التحكم بالصفر" />
  713:                     case 67: { serviceRequestService.InternationalCallingUserControlled = false; break; }
  714:  
  715:                     // below: <service id="14" arabicName="كاشف رقم" />
  716:                     case 14: { serviceRequestService.CallerId = true; break; }
  717:  
  718:                     // below: <service id="66" arabicName="إيقاف كاشف" />
  719:                     case 66: { serviceRequestService.CallerId = false; break; }
  720:  
  721:                     // below: <service id="5" arabicName="تحويل مكالمات" />
  722:                     case 5: { serviceRequestService.CallForwarding = true; break; }
  723:  
  724:                     // below: <service id="75" arabicName="إيقاف التحويل" />
  725:                     case 75: { serviceRequestService.CallForwarding = false; break; }
  726:  
  727:                     // below: <service id="20" arabicName="النداء الآلي" />
  728:                     case 20: { serviceRequestService.InternationalCalling = true; break; }
  729:  
  730:                     // below: <service id="19" arabicName="قطع النداء الآلي" />
  731:                     case 19: { serviceRequestService.InternationalCalling = false; break; }
  732:  
  733:                     // below: <service id="38" arabicName="مجموعة الخدمات" />
  734:                     case 38:
  735:                         {
  736:                             serviceRequestService.CallerId = true;
  737:  
  738:                             serviceRequestService.AlarmCall = true;
  739:                             serviceRequestService.WakeupCall = true;
  740:  
  741:                             //serviceRequestService.InternationalCallingUserControlled = true;
  742:                             serviceRequestService.CallWaiting = true;
  743:                             serviceRequestService.CallForwarding = true;
  744:                             serviceRequestService.ConferenceCall = true;
  745:                             break;
  746:                         }
  747:  
  748:                     // below: <service id="62" arabicName="إيقاف مجموعة الخدمات" />
  749:                     case 62:
  750:                         {
  751:                             serviceRequestService.CallerId = false;
  752:  
  753:                             serviceRequestService.AlarmCall = false;
  754:                             serviceRequestService.WakeupCall = false;
  755:  
  756:                             //serviceRequestService.InternationalCallingUserControlled = false;
  757:                             serviceRequestService.CallWaiting = false;
  758:                             serviceRequestService.CallForwarding = false;
  759:                             serviceRequestService.ConferenceCall = false;
  760:                             break;
  761:                         }
  762:  
  763:                     // below: <service id="52" arabicName="قطع حرارة" />
  764:                     case 52: { serviceRequestService.CallBarring = true; break; }
  765:  
  766:                     // below: <service id="53" arabicName="اعادة حرارة" />
  767:                     case 53: { serviceRequestService.CallBarring = false; break; }
  768:  
  769:                     // below: <service id="7" arabicName="منع الاتصال" />
  770:                     case 7: { serviceRequestService.BarringOfAllOutgoingCalls = true; break; }
  771:  
  772:                     // below: <service id="73" arabicName="إيقاف منع الاتصال" />
  773:                     case 73: { serviceRequestService.BarringOfAllOutgoingCalls = false; break; }
  774:  
  775:                     // below: <service id="8" arabicName="ايقاف استقبال" />
  776:                     case 8: { serviceRequestService.BarringOfAllIncomingCalls = true; break; }
  777:  
  778:                     // below: <service id="72" arabicName="رد استقبال" />
  779:                     case 72: { serviceRequestService.BarringOfAllIncomingCalls = false; break; }
  780:  
  781:                     // below: <service id="10" arabicName="خدمة الإيقاظ" />
  782:                     case 10:
  783:                         {
  784:                             serviceRequestService.AlarmCall = true;
  785:                             serviceRequestService.WakeupCall = true;
  786:                             break;
  787:                         }
  788:  
  789:                     // below: <service id="70" arabicName="إيقاف خدمة الإيقاظ" />
  790:                     case 70:
  791:                         {
  792:                             serviceRequestService.AlarmCall = false;
  793:                             serviceRequestService.WakeupCall = false;
  794:                             break;
  795:                         }
  796:  
  797:                     // below: <service id="6" arabicName="استشارة" />
  798:                     case 6: { serviceRequestService.ConferenceCall = true; break; }
  799:  
  800:                     // below: <service id="74" arabicName="إيقاف استشارة" />
  801:                     case 74: { serviceRequestService.ConferenceCall = false; break; }
  802:  
  803:                     // below: <service id="11" arabicName="إختصار الرقم" />
  804:                     case 11: { serviceRequestService.AbbriviatedCalling = true; break; }
  805:  
  806:                     // below: <service id="69" arabicName="إيقاف إختصار الرقم" />
  807:                     case 69: { serviceRequestService.AbbriviatedCalling = false; break; }
  808:  
  809:                     // below: <service id="55" arabicName="مفتاح بدالة" />
  810:                     case 55: { break; }
  811:  
  812:                     // below: <if id="60" name_ar="إيقاف مفتاح بدالة"...
  813:                     case 60: { break; }
  814:  
  815:                     // below: <if id="56" name_ar="فرع بدالة"...
  816:                     case 56: { break; }
  817:  
  818:                     // below: <if id="59" name_ar="إيقاف فرع بدالة"...
  819:                     case 59: { break; }
  820:  
  821:                     // below: <service id="64" arabicName="ايقاف التحويل الآلي/بدالة رئيس" />
  822:                     case 64: { break; }
  823:  
  824:                     // below: <service id="63" arabicName="ايقاف التحويل الآلي/بدالة فرع" />
  825:                     case 63: { break; }
  826:  
  827:                     // below: <service id="608" arabicName="خط رقمي دسل"/>
  828:                     case 608: { break; }
  829:  
  830:                     // below: <service id="609" arabicName="قطع خط رقمي دسل"/>
  831:                     case 609: { break; }
  832:  
  833:                     // below: <service id="15" arabicName="خدمة المحاسبة" />
  834:                     case 15: { break; }
  835:  
  836:                     // below: <service id="65" arabicName="إيقاف المحاسبة الذاتية" />
  837:                     case 65: { break; }
  838:  
  839:                     // below: <service id="271" arabicName="تغيير اسم"/>
  840:                     case 271: { break; }
  841:  
  842:                     // below: <service id="44" arabicName="تغيير نوع اشتراك" />
  843:                     case 44:
  844:                         {
  845:                             serviceRequestService.Serial++;
  846:                             break;
  847:                         }
  848:  
  849:                     // below: <service id="42" arabicName="نقل داخلي" />
  850:                     case 42: { break; }
  851:  
  852:                     // below: <service id="46" arabicName="جهاز كاشف" />
  853:                     case 46: { break; }
  854:  
  855:                     // below: <service id="45" arabicName="تعديل اسم" />
  856:                     case 45: { break; }
  857:  
  858:                     // below: <service id="47" arabicName="جهاز تلفون" />
  859:                     case 47: { break; }
  860:  
  861:                     // below: <service id="49" arabicName="رسوم مودم" />
  862:                     case 49: { break; }
  863:  
  864:                     // below: <service id="37" arabicName="برقية" />
  865:                     case 37: { break; }
  866:  
  867:                     // below: <service id="23" arabicName="مكالمات مصلحية -دفع" />
  868:                     case 23: { break; }
  869:  
  870:                     // below: <service id="17" arabicName="نظام التحويل الآلي/بدالة رئيس" />
  871:                     case 17: { break; }
  872:  
  873:                     // below: <service id="18" arabicName="نظام التحويل الآلي/بدالة فرع" />
  874:                     case 18: { break; }
  875:  
  876:                     // below: <service id="3" arabicName="نداء عاجل" />
  877:                     case 3: { break; }
  878:  
  879:                     // below: <service id="22" arabicName="رسوم كابل" />
  880:                     case 22: { break; }
  881:  
  882:                     // below: <service id="61" arabicName="إيقاف إعادة تركيب" />
  883:                     case 61: { break; }
  884:  
  885:                     // below: <service id="43" arabicName="تنازل" />
  886:                     case 43:
  887:                         {
  888:                             serviceRequestService.Serial++;
  889:                             break;
  890:                         }
  891:  
  892:                     default:
  893:                         {
  894:                             log.AppendLine("TelephonyService(): For ServiceRequest.Number=" + serviceRequest.Number + " ServiceId=" + serviceRequest.ServiceId + " was not recognized. ");
  895:                             break;
  896:                         }
  897:                 }
  898:             }
  899:         }
  900:  
  901:         ////////////////////////////////////////////////////////////////////////////
  902:  
  903:         /// <summary>
  904:         /// 
  905:         /// </summary>
  906:         public static void TelephonyServiceHistory(ref Dictionary<string, Ia.Ftn.Cl.Models.Business.ServiceSerialRequestService> serviceRequestNumberSerialComplementaryServiceDictionary, string serviceSerial, int status, int serviceId, ref string serviceIdIssue)
  907:         {
  908:             if (serviceId == 1 || serviceId == 129 || serviceId == 39 || serviceId == 54)
  909:             {
  910:                 // <service id="1" arabicName="خط هاتف" />
  911:                 // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  912:                 // <service id="39" arabicName="نقل خارجى" />
  913:                 // <service id="54" arabicName="اعادة تركيب" />
  914:  
  915:                 if (serviceId == 1 || serviceId == 129 || serviceId == 54)
  916:                 {
  917:                     // <service id="1" arabicName="خط هاتف" />
  918:                     // <service id="129" arabicName="خط هاتف مع نداء آلي"/>
  919:                     // <service id="54" arabicName="اعادة تركيب" />
  920:  
  921:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = false;
  922:  
  923:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = false;
  924:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = false;
  925:  
  926:                     ///dic[id].InternationalCallingUserControlled = true; // as requested by FTN management
  927:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = false;
  928:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = false;
  929:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = false;
  930:                     serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallBarring = false;
  931:  
  932:                     if (serviceId == 1 || serviceId == 54) serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCalling = false;
  933:                     else if (serviceId == 129) serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCalling = true;
  934:                 }
  935:                 else if (serviceId == 39)
  936:                 {
  937:                     // <service id="39" arabicName="نقل خارجى" />
  938:                 }
  939:             }
  940:             else
  941:             {
  942:                 switch (serviceId)
  943:                 {
  944:                     // below: <service id="40" arabicName="رفع خط" />
  945:                     case 40:
  946:                         {
  947:                             // - For SRH issues, I will ignore the service رفع خط (<service id="40" arabicName="رفع خط" />) if the number is يعمل (systemCode[7001] = "يعمل") (e.g. 25426947) or number is قطع مبرمج (systemCode[7003] = "قطع مبرمج") (e.g. 25417139)
  948:                             // - Note that status is specific to SRH
  949:  
  950:                             if (status == 7001 || status == 7003) { }
  951:                             else
  952:                             {
  953:                                 // - Will reset all to false
  954:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].Provisioned = false;
  955:  
  956:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = false;
  957:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = false;
  958:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = false;
  959:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCallingUserControlled = false;
  960:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = false;
  961:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = false;
  962:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = false;
  963:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallBarring = false;
  964:                                 serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCalling = false;
  965:                             }
  966:                             break;
  967:                         }
  968:  
  969:                     // below: <service id="131" arabicName="خط ذهبي"/>
  970:                     case 131: { break; }
  971:  
  972:                     // below: <service id="132" arabicName="خط فضي"/>
  973:                     case 132: { break; }
  974:  
  975:                     // below: <service id="133" arabicName="خط برونزي"/>
  976:                     case 133: { break; }
  977:  
  978:                     // below: <service id="12" arabicName="خدمة الانتظار" />
  979:                     case 12: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = true; break; }
  980:  
  981:                     // below: <service id="68" arabicName="إيقاف خدمة الانتظار" />
  982:                     case 68: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = false; break; }
  983:  
  984:                     // below: <service id="13" arabicName="التحكم بالصفر الدولي" />
  985:                     case 13: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCallingUserControlled = true; break; }
  986:  
  987:                     // below: <service id="67" arabicName="وقف التحكم بالصفر" />
  988:                     case 67: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCallingUserControlled = false; break; }
  989:  
  990:                     // below: <service id="14" arabicName="كاشف رقم" />
  991:                     case 14: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = true; break; }
  992:  
  993:                     // below: <service id="66" arabicName="إيقاف كاشف" />
  994:                     case 66: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = false; break; }
  995:  
  996:                     // below: <service id="5" arabicName="تحويل مكالمات" />
  997:                     case 5: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = true; break; }
  998:  
  999:                     // below: <service id="75" arabicName="إيقاف التحويل" />
 1000:                     case 75: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = false; break; }
 1001:  
 1002:                     // below: <service id="20" arabicName="النداء الآلي" />
 1003:                     case 20: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCalling = true; break; }
 1004:  
 1005:                     // below: <service id="19" arabicName="قطع النداء الآلي" />
 1006:                     case 19: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCalling = false; break; }
 1007:  
 1008:                     // below: <service id="38" arabicName="مجموعة الخدمات" />
 1009:                     case 38:
 1010:                         {
 1011:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = true;
 1012:  
 1013:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = true;
 1014:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = true;
 1015:  
 1016:                             // serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCallingUserControlled = true;
 1017:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = true;
 1018:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = true;
 1019:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = true;
 1020:  
 1021:                             break;
 1022:                         }
 1023:  
 1024:                     // below: <service id="62" arabicName="إيقاف مجموعة الخدمات" />
 1025:                     case 62:
 1026:                         {
 1027:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallerId = false;
 1028:  
 1029:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = false;
 1030:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = false;
 1031:  
 1032:                             //serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].InternationalCallingUserControlled = false;
 1033:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallWaiting = false;
 1034:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallForwarding = false;
 1035:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = false;
 1036:  
 1037:                             break;
 1038:                         }
 1039:  
 1040:                     // below: <service id="52" arabicName="قطع حرارة" />
 1041:                     case 52: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallBarring = true; break; }
 1042:  
 1043:                     // below: <service id="53" arabicName="اعادة حرارة" />
 1044:                     case 53: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].CallBarring = false; break; }
 1045:  
 1046:                     // below: <service id="7" arabicName="منع الاتصال" />
 1047:                     case 7: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].BarringOfAllOutgoingCalls = true; break; }
 1048:  
 1049:                     // below: <service id="73" arabicName="إيقاف منع الاتصال" />
 1050:                     case 73: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].BarringOfAllOutgoingCalls = false; break; }
 1051:  
 1052:                     // below: <service id="8" arabicName="ايقاف استقبال" />
 1053:                     case 8: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].BarringOfAllIncomingCalls = true; break; }
 1054:  
 1055:                     // below: <service id="72" arabicName="رد استقبال" />
 1056:                     case 72: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].BarringOfAllIncomingCalls = false; break; }
 1057:  
 1058:                     // below: <service id="10" arabicName="خدمة الإيقاظ" />
 1059:                     case 10:
 1060:                         {
 1061:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = true;
 1062:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = true;
 1063:                             break;
 1064:                         }
 1065:  
 1066:                     // below: <service id="70" arabicName="إيقاف خدمة الإيقاظ" />
 1067:                     case 70:
 1068:                         {
 1069:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AlarmCall = false;
 1070:                             serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].WakeupCall = false;
 1071:                             break;
 1072:                         }
 1073:  
 1074:                     // below: <service id="6" arabicName="استشارة" />
 1075:                     case 6: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = true; break; }
 1076:  
 1077:                     // below: <service id="74" arabicName="إيقاف استشارة" />
 1078:                     case 74: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].ConferenceCall = false; break; }
 1079:  
 1080:                     // below: <service id="11" arabicName="اختصار الرقم" />
 1081:                     case 11: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AbbriviatedCalling = true; break; }
 1082:  
 1083:                     // below: <service id="69" arabicName="إيقاف اختصار الرقم" />
 1084:                     case 69: { serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].AbbriviatedCalling = false; break; }
 1085:  
 1086:                     // below: <service id="55" arabicName="مفتاح بدالة" />
 1087:                     case 55: { break; }
 1088:  
 1089:                     // below: <if id="60" name_ar="إيقاف مفتاح بدالة"...
 1090:                     case 60: { break; }
 1091:  
 1092:                     // below: <if id="56" name_ar="فرع بدالة"...
 1093:                     case 56: { break; }
 1094:  
 1095:                     // below: <if id="59" name_ar="إيقاف فرع بدالة"...
 1096:                     case 59: { break; }
 1097:  
 1098:                     // below: <service id="64" arabicName="ايقاف التحويل الآلي/بدالة رئيس" />
 1099:                     case 64: { break; }
 1100:  
 1101:                     // below: <service id="63" arabicName="ايقاف التحويل الآلي/بدالة فرع" />
 1102:                     case 63: { break; }
 1103:  
 1104:                     // below: <service id="608" arabicName="خط رقمي دسل"/>
 1105:                     case 608: { break; }
 1106:  
 1107:                     // below: <service id="609" arabicName="قطع خط رقمي دسل"/>
 1108:                     case 609: { break; }
 1109:  
 1110:                     // below: <service id="15" arabicName="خدمة المحاسبة" />
 1111:                     case 15: { break; }
 1112:  
 1113:                     // below: <service id="65" arabicName="إيقاف المحاسبة الذاتية" />
 1114:                     case 65: { break; }
 1115:  
 1116:                     // below: <service id="271" arabicName="تغيير اسم"/>
 1117:                     case 271: { break; }
 1118:  
 1119:                     // below: <service id="44" arabicName="تغيير نوع اشتراك" />
 1120:                     case 44:
 1121:                         {
 1122:                             //serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].Serial++; I removed this from History
 1123:                             break;
 1124:                         }
 1125:  
 1126:                     // below: <service id="42" arabicName="نقل داخلي" />
 1127:                     case 42: { break; }
 1128:  
 1129:                     // below: <service id="46" arabicName="جهاز كاشف" />
 1130:                     case 46: { break; }
 1131:  
 1132:                     // below: <service id="45" arabicName="تعديل اسم" />
 1133:                     case 45: { break; }
 1134:  
 1135:                     // below: <service id="47" arabicName="جهاز تلفون" />
 1136:                     case 47: { break; }
 1137:  
 1138:                     // below: <service id="49" arabicName="رسوم مودم" />
 1139:                     case 49: { break; }
 1140:  
 1141:                     // below: <service id="37" arabicName="برقية" />
 1142:                     case 37: { break; }
 1143:  
 1144:                     // below: <service id="23" arabicName="مكالمات مصلحية -دفع" />
 1145:                     case 23: { break; }
 1146:  
 1147:                     // below: <service id="17" arabicName="نظام التحويل الآلي/بدالة رئيس" />
 1148:                     case 17: { break; }
 1149:  
 1150:                     // below: <service id="18" arabicName="نظام التحويل الآلي/بدالة فرع" />
 1151:                     case 18: { break; }
 1152:  
 1153:                     // below: <service id="3" arabicName="نداء عاجل" />
 1154:                     case 3: { break; }
 1155:  
 1156:                     // below: <service id="22" arabicName="رسوم كابل" />
 1157:                     case 22: { break; }
 1158:  
 1159:                     // below: <service id="61" arabicName="إيقاف إعادة تركيب" />
 1160:                     case 61: { break; }
 1161:  
 1162:                     // below: <service id="43" arabicName="تنازل" />
 1163:                     case 43:
 1164:                         {
 1165:                             //serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].Serial++; I removed this from History
 1166:                             break;
 1167:                         }
 1168:  
 1169:                     default:
 1170:                         {
 1171:                             serviceIdIssue += "SrsTest(): Service=" + serviceRequestNumberSerialComplementaryServiceDictionary[serviceSerial].Service + " ServiceId=" + serviceId + " was not recognized. " + "\r\n";
 1172:                             break;
 1173:                         }
 1174:                 }
 1175:             }
 1176:         }
 1177:  
 1178:         ////////////////////////////////////////////////////////////////////////////
 1179:         ////////////////////////////////////////////////////////////////////////////
 1180:     }
 1181:  
 1182:     ////////////////////////////////////////////////////////////////////////////
 1183:     ////////////////////////////////////////////////////////////////////////////
 1184: }