//-------------------------- Private -------------------------------------------- /* * DialCodes * Brazil|55|ROC_CEL * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512 * Brazil|55|ROC_LOCAL * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512 * Mexico|52|Acapoulco * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 */ void parse(ImportExportFilter pImportExportFilter, string[] pRouteLines, List <string> pDialCodes) { string _breakoutName = pRouteLines[0].Split(AppConstants.ImportExport_FieldDelimiter)[2]; RouteRecord _routeRecord = null; if (pImportExportFilter == ImportExportFilter.DialPlan) { _routeRecord = new RouteRecord(Code, Name, _breakoutName, pDialCodes.ToArray(), null); } else if (pImportExportFilter == ImportExportFilter.Rates) { _routeRecord = new RouteRecord(Code, Name, _breakoutName, null, pRouteLines); } if (_routeRecord != null) { Routes.Add(_routeRecord.FullName, _routeRecord); } }
/* or Rates * //NOTE: LATEST Rates Export/Import FORMAT * Brazil|55|ROC_CEL|Regular|Blocked|0am-1am|0/0|0.0|0.0 * Brazil|55|ROC_CEL|Regular|Night|11pm-11pm|30/6|0.1110000|0.1164000 * Brazil|55|ROC_CEL|Regular|Day|2pm-9pm|1/1|0.2220000|0.2264000 * Brazil|55|ROC_CEL|Regular|Eve|10pm-10pm|60/60|0.3330000|0.3364000 * * single blocked line * GOOD: * Brazil|55|ROC_11|Regular|Blocked|0am-11pm|0/0|0.0|0.0 * * BAD: * Brazil|55|ROC_11|Regular|Blocked|0am-5pm|0/0|0.0|0.0 * * BAD: Brazil|55|ROC_11|Regular|Blocked|0am-5pm, 6pm-11pm|0/0|0.0|0.0 * * bad for all, even if together with other rate lines: * * BAD: Brazil|55|ROC_11|Regular|Blocked|0am-11pm|60/60|0.0|0.0 * * BAD: Brazil|55|ROC_11|Regular|Blocked|0am-11pm|0/0|1.0|1.0 * * Brazil|55|ROC_CEL|Weekend|Blocked|0am-1am|0/0|0.0|0.0 * Brazil|55|ROC_CEL|Weekend|Peak|8am-8pm|30/6|0.1110000|0.1164000 * Brazil|55|ROC_CEL|Weekend|OffPeak|2am-7am,9pm-11pm|1/1|0.2220000|0.2264000 * * Brazil|55|ROC_CEL|Holiday|Blocked|0am-1am|0/0|0.0|0.0 * Brazil|55|ROC_CEL|Holiday|Flat|2am-11pm|30/6|0.1110000|0.1164000 */ public CountryRecord(ImportExportFilter pImportExportFilter, string[] pRouteLines) { if (pRouteLines == null || pRouteLines.Length == 0) { throw new Exception("RouteLines is null or zero!"); } Name = pRouteLines[0].Split(AppConstants.ImportExport_FieldDelimiter)[0]; Code = int.Parse(pRouteLines[0].Split(AppConstants.ImportExport_FieldDelimiter)[1]); Routes = new SortedList <string, RouteRecord>(); var _routeLines = new List <string>(); var _dialCodes = new List <string>(); string _previousRouteName = null; foreach (string _line in pRouteLines) { if (char.IsLetter(_line[0])) { string _currentRouteName = _line.Split(AppConstants.ImportExport_FieldDelimiter)[2]; if (_currentRouteName != _previousRouteName) { if (_previousRouteName != null) { parse(pImportExportFilter, _routeLines.ToArray(), _dialCodes); _routeLines = new List <string>(); _dialCodes = new List <string>(); } _previousRouteName = _currentRouteName; } _routeLines.Add(_line); //collect country's route line } else { _dialCodes.AddRange(_line.Split(AppConstants.ImportExport_FieldDelimiter)); } } if (_routeLines.Count > 0 || _dialCodes.Count > 0) { parse(pImportExportFilter, _routeLines.ToArray(), _dialCodes); } }
public DialPlanImportExportArgs(ImportExportType pImportExportType, ImportExportFilter pImportExportFilter, string pFilePath, short pAccountId, string pAccountName, int pCallingPlanId, int pRoutingPlanId, ViewContext pContext, bool pPerMinute, DateTime pFrom, DateTime pTo) { ImportExportType = pImportExportType; AccountId = pAccountId; AccountName = pAccountName; CallingPlanId = pCallingPlanId; RoutingPlanId = pRoutingPlanId; ImportExportFilter = pImportExportFilter; FilePath = pFilePath; Context = pContext; PerMinute = pPerMinute; From = pFrom; To = pTo; }
/* * DialCodes * Brazil|55|ROC_CEL * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512 * Brazil|55|ROC_LOCAL * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512 * Mexico|52|Acapoulco * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * 551281234512|551281234512|551281234512|551281234512|551281234512|551281234512 * * or Rates * * //TODO: TO BE REMOVED old format * Brazil|55|55_ROC_LOC|R|30/6|0am|0.1320000,0.0264000 * Brazil|55|55_ROC_LOC|W|30/6|0am,2pm|0.1110000,0.1164000|0.2220000,0.2264000 * Brazil|55|55_ROC_LOC|H|30/6|0am,2pm,10pm|0.1110000,0.1164000|0.2220000,0.2264000|0.3330000,0.3364000 * Mexico|52|Acapulco|R|30/6|0am|0.1320000,0.0264000 * Mexico|52|Cancun|R|30/6|0am,2pm|0.1110000,0.1164000|0.2220000,0.2264000 * Mexico|52|Cancun|H|30/6|0am,2pm,10pm|0.1110000,0.1164000|0.2220000,0.2264000|0.3330000,0.3364000 * Mexico|52|Mexico City|R|30/6|0am,2pm|0.1110000,0.1164000 * Mexico|52|Mexico City|W|60/6|0am,2pm,10pm|0.1110000,0.1164000|0.2220000,0.2264000|0.3330000,0.3364000 * //TODO: END TO BE REMOVED * * * //NOTE: LATEST Rates Export/Import FORMAT * Brazil|55|ROC_CEL|Regular|Blocked|0am-1am * Brazil|55|ROC_CEL|Regular|Night|11pm-11pm|30/6|0.1110000|0.1164000 * Brazil|55|ROC_CEL|Regular|Day|2pm-9pm|1/1|0.2220000|0.2264000 * Brazil|55|ROC_CEL|Regular|Eve|10pm-10pm|60/60|0.3330000|0.3364000 * * Brazil|55|ROC_CEL|Weekend|Blocked|0am-1am * Brazil|55|ROC_CEL|Weekend|Peak|8am-8pm|30/6|0.1110000|0.1164000 * Brazil|55|ROC_CEL|Weekend|OffPeak|2am-7am,9pm-11pm|1/1|0.2220000|0.2264000 * * * Brazil|55|ROC_CEL|Holiday|Blocked|0am-1am * Brazil|55|ROC_CEL|Holiday|Flat|2am-11pm|30/6|0.1110000|0.1164000 */ public IList <CountryRecord> Process(ImportExportFilter pImportExportFilter, string pFilePath) { var _countries = new SortedList <string, CountryRecord>(); int _lineNumber = 0; Host.ReportStatus(string.Format("Started File Parsing Process... File: {0}", pFilePath)); Host.ReportProgress(0); try { int _totalLineCount; countLines(pFilePath, out _totalLineCount); using (var _sr = new StreamReader(pFilePath)) { var _countryLines = new List <string>(); string _line; string _previousCountryName = null; while ((_line = _sr.ReadLine()) != null) { Host.ReportProgress(_lineNumber++ *100 / _totalLineCount); if (_line.StartsWith("Country")) { //Rates file header continue; } if (!char.IsLetter(_line[0]) && !char.IsNumber(_line[0])) { throw new Exception(string.Format("Invalid File format. \r\nLine#: {0} \r\nLine: {1}", _lineNumber, _line)); } if (Host.CancellationPending) { throw new Exception("File parsing canceled"); } if (char.IsLetter(_line[0])) { string _currentCountryName = _line.Split(AppConstants.ImportExport_FieldDelimiter)[0]; if (_currentCountryName != _previousCountryName) { if (_previousCountryName != null) { var _countryRecord = new CountryRecord(pImportExportFilter, _countryLines.ToArray()); _countries.Add(_countryRecord.Name, _countryRecord); _countryLines = new List <string>(); } _previousCountryName = _currentCountryName; } } _countryLines.Add(_line); //collect country's route line } //-- collect last country if (_countryLines.Count > 0) { var _countryRecord = new CountryRecord(pImportExportFilter, _countryLines.ToArray()); _countries.Add(_countryRecord.Name, _countryRecord); } } } catch (Exception _ex) { TimokLogger.Instance.LogRbr(LogSeverity.Critical, "DialPlanFileParser.Process", string.Format("Failed parsing the file\r\n{0}", _ex)); throw; } return(_countries.Values); }