ReportController.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. //using System.Drawing;
  5. using System.Globalization;
  6. using System.IO;
  7. //using DocumentFormat.OpenXml.Spreadsheet;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Logging;
  10. using Newtonsoft.Json;
  11. using SuperCms.Extensions;
  12. using SuperCms.Models;
  13. using SuperCms.Repositories;
  14. using Syncfusion.Drawing;
  15. using Syncfusion.XlsIO;
  16. namespace SuperCms.Controllers
  17. {
  18. public class ReportController : BaseController
  19. {
  20. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
  21. ISuperCmsRepo iSuperCmsRepo;
  22. public ReportController(ISuperCmsRepo ISuperCmsRepo)
  23. {
  24. iSuperCmsRepo = ISuperCmsRepo;
  25. }
  26. public IActionResult Index(
  27. String typeGet,
  28. String telcoID,
  29. String companyID,
  30. String startDate,
  31. String endDate,
  32. String page,
  33. String dateGet
  34. )
  35. {
  36. try
  37. {
  38. if (!CheckAuthToken())
  39. {
  40. return Redirect("/Home/Login");
  41. }
  42. ReportViewModel model = new ReportViewModel();
  43. model.date = dateGet != null ? dateGet : (DateTime.Now.Day).ToString();
  44. model.page = page != null ? page : "1";
  45. model.typeGet = typeGet != null ? typeGet : UtilsController.Constant.MONEY_GET;
  46. model.services = new ConnConfigs();
  47. model.services.data = new List<ConnConfig>();
  48. model.telcos = new ConnTelcos();
  49. model.telcos.data = new List<ConnTelco>();
  50. model.companies = new ConnCompanies();
  51. model.companies.data = new List<ConnCompany>();
  52. model.distributedDataByServices = new List<DistributedDataByService>();
  53. ConnCompanies companies = HttpContext.Session.GetComplexData<ConnCompanies>(
  54. "companies"
  55. );
  56. if (companies == null)
  57. {
  58. var resultT = iSuperCmsRepo.GetConnCompany(log);
  59. var propertyT = typeof(ICollection).GetProperty("Count");
  60. int countT = (int)propertyT.GetValue(resultT, null);
  61. if (resultT != null && countT > 0)
  62. {
  63. ConnCompanies data = new ConnCompanies();
  64. data.data = new List<ConnCompany>();
  65. foreach (IDictionary<string, object> row in (IEnumerable<object>)resultT)
  66. {
  67. var json = JsonConvert.SerializeObject(row);
  68. ConnCompany dataGet = new ConnCompany(json.ToString());
  69. data.data.Add(dataGet);
  70. }
  71. HttpContext.Session.SetComplexData("companies", data);
  72. }
  73. }
  74. model.companies = companies;
  75. model.companyID = companyID != null ? companyID : companies.data[0].id;
  76. ConnTelcos telcos = HttpContext.Session.GetComplexData<ConnTelcos>("telcos");
  77. if (telcos == null)
  78. {
  79. var resultT = iSuperCmsRepo.GetConnTelco(log);
  80. var propertyT = typeof(ICollection).GetProperty("Count");
  81. int countT = (int)propertyT.GetValue(resultT, null);
  82. if (resultT != null && countT > 0)
  83. {
  84. ConnTelcos data = new ConnTelcos();
  85. data.data = new List<ConnTelco>();
  86. foreach (IDictionary<string, object> row in (IEnumerable<object>)resultT)
  87. {
  88. var json = JsonConvert.SerializeObject(row);
  89. ConnTelco dataGet = new ConnTelco(json.ToString());
  90. data.data.Add(dataGet);
  91. }
  92. telcos = new ConnTelcos();
  93. telcos.data = new List<ConnTelco>();
  94. telcos = data;
  95. HttpContext.Session.SetComplexData("telcos", data);
  96. }
  97. }
  98. model.telcos = telcos;
  99. model.telcoID = telcoID != null ? telcoID : model.telcos.data[0].id;
  100. ConnConfigs services = HttpContext.Session.GetComplexData<ConnConfigs>("services");
  101. if (services == null)
  102. {
  103. var resultC = iSuperCmsRepo.GetConnConfig(log);
  104. var propertyC = typeof(ICollection).GetProperty("Count");
  105. int countC = (int)propertyC.GetValue(resultC, null);
  106. if (resultC != null && countC > 0)
  107. {
  108. ConnConfigs data = new ConnConfigs();
  109. data.data = new List<ConnConfig>();
  110. foreach (IDictionary<string, object> row in (IEnumerable<object>)resultC)
  111. {
  112. var json = JsonConvert.SerializeObject(row);
  113. ConnConfig dataGet = new ConnConfig(json.ToString());
  114. data.data.Add(dataGet);
  115. }
  116. services = new ConnConfigs();
  117. services.data = new List<ConnConfig>();
  118. services = data;
  119. HttpContext.Session.SetComplexData("services", data);
  120. }
  121. }
  122. model.services = services;
  123. List<DistributedByTelcoAndCompany> dis = HttpContext.Session.GetComplexData<
  124. List<DistributedByTelcoAndCompany>
  125. >("distributedByTelcoAndCompany");
  126. if (dis == null)
  127. {
  128. List<DistributedByTelcoAndCompany> distributedByTelcoAndCompanyT =
  129. new List<DistributedByTelcoAndCompany>();
  130. dis = distributedByTelcoAndCompany(
  131. model.telcos,
  132. model.companies,
  133. model.services,
  134. 0,
  135. distributedByTelcoAndCompanyT
  136. );
  137. HttpContext.Session.SetComplexData("distributedByTelcoAndCompany", dis);
  138. }
  139. model.telco = model.telcos.data.Find(x => x.id == model.telcoID);
  140. model.company = model.companies.data.Find(x => x.id == model.companyID);
  141. DistributedByTelcoAndCompany resGet = dis.Find(x => x.telco.id == model.telcoID);
  142. ConnCompanies c = new ConnCompanies();
  143. c.data = new List<ConnCompany>();
  144. ConnConfigs s = new ConnConfigs();
  145. s.data = new List<ConnConfig>();
  146. model.services = resGet != null ? resGet.services : s;
  147. model.companies = resGet != null ? resGet.companies : c;
  148. // sort
  149. model.services.data.Sort(
  150. delegate(ConnConfig x, ConnConfig y)
  151. {
  152. if (x.sequence == null && y.sequence == null)
  153. return 0;
  154. else if (x.sequence == null)
  155. return -1;
  156. else if (y.sequence == null)
  157. return 1;
  158. else
  159. return int.Parse(x.sequence).CompareTo(int.Parse(y.sequence));
  160. }
  161. );
  162. // get data in 2 months
  163. String start =
  164. startDate == null
  165. ? getStartByMonthToString(-1)
  166. : DateTime
  167. .ParseExact(
  168. startDate,
  169. "yyyy-MM-ddTHH:mm:ss",
  170. CultureInfo.InvariantCulture
  171. )
  172. .ToString("MM/dd/yyyy HH:mm:ss");
  173. String end =
  174. endDate == null
  175. ? getEndByDayToString()
  176. : DateTime
  177. .ParseExact(endDate, "yyyy-MM-ddTHH:mm", CultureInfo.InvariantCulture)
  178. .ToString("MM/dd/yyyy HH:mm:ss");
  179. DateTime startDateTime =
  180. startDate == null
  181. ? getStartByMonthToDate(-1)
  182. : DateTime.ParseExact(
  183. startDate,
  184. "yyyy-MM-ddTHH:mm:ss",
  185. CultureInfo.InvariantCulture
  186. );
  187. DateTime endDateTime =
  188. endDate == null
  189. ? getEndByDayToDate()
  190. : DateTime.ParseExact(
  191. endDate,
  192. "yyyy-MM-ddTHH:mm:ss",
  193. CultureInfo.InvariantCulture
  194. );
  195. model.listDate = getRangeTime(startDateTime, endDateTime);
  196. model.timeNow = model.listDate[1].ToString("dd/MM");
  197. for (int i = 0; i < model.services.data.Count; i++)
  198. {
  199. DistributedDataByService distributedDataByService =
  200. new DistributedDataByService();
  201. distributedDataByService.dataNow = new ConnDatas();
  202. distributedDataByService.dataLastMonth = new ConnDatas();
  203. distributedDataByService.service = model.services.data[i];
  204. distributedDataByService.dataLastMonth.data = new List<ConnData>();
  205. distributedDataByService.dataNow.data = new List<ConnData>();
  206. // distributed by time
  207. distributedDataByService.distributedByTimes = new List<DistributedByTime>();
  208. var resultD = iSuperCmsRepo.GetConnDataByService(
  209. log,
  210. model.services.data[i].id,
  211. start,
  212. end
  213. );
  214. var propertyD = typeof(ICollection).GetProperty("Count");
  215. int countD = (int)propertyD.GetValue(resultD, null);
  216. if (resultD != null && countD > 0)
  217. {
  218. ConnDatas data = new ConnDatas();
  219. data.data = new List<ConnData>();
  220. foreach (IDictionary<string, object> row in (IEnumerable<object>)resultD)
  221. {
  222. var json = JsonConvert.SerializeObject(row);
  223. ConnData dataGet = new ConnData(json.ToString());
  224. data.data.Add(dataGet);
  225. }
  226. DateTime startLastMonth = startDateTime;
  227. DateTime stopLastMonth = getEndByMonthToDate(-1);
  228. List<ConnData> dataLastMonth = data.data.FindAll(
  229. x =>
  230. DateTime.Compare(
  231. startLastMonth,
  232. DateTime.ParseExact(
  233. x.dateGet + " 01:00:00",
  234. "dd/MM/yyyy HH:mm:ss",
  235. CultureInfo.InvariantCulture
  236. )
  237. ) <= 0
  238. && DateTime.Compare(
  239. DateTime.ParseExact(
  240. x.dateGet + " 01:00:00",
  241. "dd/MM/yyyy HH:mm:ss",
  242. CultureInfo.InvariantCulture
  243. ),
  244. stopLastMonth
  245. ) <= 0
  246. );
  247. DateTime startNow = getStartByMonthToDate(0);
  248. DateTime stopNow = getEndByDayToDate();
  249. List<ConnData> dataNow = data.data.FindAll(
  250. x =>
  251. DateTime.Compare(
  252. startNow,
  253. DateTime.ParseExact(
  254. x.dateGet + " 01:00:00",
  255. "dd/MM/yyyy HH:mm:ss",
  256. CultureInfo.InvariantCulture
  257. )
  258. ) < 0
  259. && DateTime.Compare(
  260. DateTime.ParseExact(
  261. x.dateGet + " 01:00:00",
  262. "dd/MM/yyyy HH:mm:ss",
  263. CultureInfo.InvariantCulture
  264. ),
  265. stopNow
  266. ) < 0
  267. );
  268. //if (dataNow.Count == 0)
  269. //{
  270. // dataNow.Add(dataLastMonth[dataLastMonth.Count - 1]);
  271. //}
  272. distributedDataByService.dataLastMonth.data =
  273. dataLastMonth != null ? dataLastMonth : new List<ConnData>();
  274. distributedDataByService.dataNow.data =
  275. dataNow != null ? dataNow : new List<ConnData>();
  276. for (int t = 0; t < model.listDate.Count - 1; t++)
  277. {
  278. DistributedByTime time = new DistributedByTime();
  279. time.time = model.listDate[t + 1];
  280. time.connDatas = new ConnDatas();
  281. time.connDatas.data = data.data.FindAll(
  282. x =>
  283. DateTime.Compare(
  284. model.listDate[t + 1],
  285. DateTime.ParseExact(
  286. x.dateGet + " 01:00:00",
  287. "dd/MM/yyyy HH:mm:ss",
  288. CultureInfo.InvariantCulture
  289. )
  290. ) <= 0
  291. && DateTime.Compare(
  292. DateTime.ParseExact(
  293. x.dateGet + " 01:00:00",
  294. "dd/MM/yyyy HH:mm:ss",
  295. CultureInfo.InvariantCulture
  296. ),
  297. model.listDate[t]
  298. ) <= 0
  299. );
  300. distributedDataByService.distributedByTimes.Add(time);
  301. }
  302. }
  303. model.distributedDataByServices.Add(distributedDataByService);
  304. }
  305. return View("Index", model);
  306. }
  307. catch (Exception ex)
  308. {
  309. log.Error("Exception: ", ex);
  310. return Redirect("/Home");
  311. }
  312. }
  313. public IActionResult Export(String telcoID, String companyID)
  314. {
  315. try
  316. {
  317. if (!CheckAuthToken())
  318. {
  319. return Redirect("/Home/Login");
  320. }
  321. ReportViewModel model = new ReportViewModel();
  322. ConnTelcos telcos = HttpContext.Session.GetComplexData<ConnTelcos>("telcos");
  323. ConnCompanies companies = HttpContext.Session.GetComplexData<ConnCompanies>(
  324. "companies"
  325. );
  326. model.telcos = telcos;
  327. model.companies = companies;
  328. List<DistributedByTelcoAndCompany> disByTelcoAndCompany =
  329. HttpContext.Session.GetComplexData<List<DistributedByTelcoAndCompany>>(
  330. "distributedByTelcoAndCompany"
  331. );
  332. DistributedByTelcoAndCompany dis = disByTelcoAndCompany.Find(
  333. x => x.telco.id == telcoID
  334. );
  335. if (dis == null)
  336. {
  337. model.telco = disByTelcoAndCompany[0].telco;
  338. model.company = disByTelcoAndCompany[0].companies.data[0];
  339. model.services = disByTelcoAndCompany[0].services;
  340. }
  341. else
  342. {
  343. model.telco = dis.telco;
  344. model.companies = dis.companies;
  345. model.company =
  346. companyID != null
  347. ? dis.companies.data.Find(x => x.id == companyID)
  348. : dis.companies.data[0];
  349. model.services = dis.services;
  350. }
  351. model.telcoID = model.telco.id;
  352. model.companyID = model.company.id;
  353. model.startDate = getStartByMonthToString(-1);
  354. model.endDate = getEndByDayToString();
  355. return PartialView("Export", model);
  356. }
  357. catch (Exception ex)
  358. {
  359. return Redirect("/Home");
  360. }
  361. }
  362. public IActionResult ExportAction(
  363. String telcoID,
  364. String companyID,
  365. String serviceID,
  366. String startMonth,
  367. String endMonth
  368. )
  369. {
  370. try
  371. {
  372. if (!CheckAuthToken())
  373. {
  374. return Redirect("/Home/Login");
  375. }
  376. //Adding values to a worksheet range
  377. // get all data
  378. ConnTelcos telcos = HttpContext.Session.GetComplexData<ConnTelcos>("telcos");
  379. ConnCompanies companies = HttpContext.Session.GetComplexData<ConnCompanies>(
  380. "companies"
  381. );
  382. ConnConfigs services = HttpContext.Session.GetComplexData<ConnConfigs>("services");
  383. //sort
  384. telcos.data.Sort(
  385. delegate(ConnTelco x, ConnTelco y)
  386. {
  387. return int.Parse(x.id).CompareTo(int.Parse(y.id));
  388. }
  389. );
  390. companies.data.Sort(
  391. delegate(ConnCompany x, ConnCompany y)
  392. {
  393. return int.Parse(x.id).CompareTo(int.Parse(y.id));
  394. }
  395. );
  396. DateTime startDateTime =
  397. startMonth == null
  398. ? getStartByMonthToDate(-1)
  399. : DateTime.ParseExact(
  400. convertToDateTimeServer(startMonth),
  401. "MM/dd/yyyy HH:mm:ss",
  402. CultureInfo.InvariantCulture
  403. );
  404. DateTime endDateTime =
  405. endMonth == null
  406. ? getEndByDayToDate()
  407. : DateTime.ParseExact(
  408. convertToDateTimeServer(endMonth),
  409. "MM/dd/yyyy HH:mm:ss",
  410. CultureInfo.InvariantCulture
  411. );
  412. List<DateTime> listMonths = getRangeMonth(startDateTime, endDateTime);
  413. List<DistributedByTelcoAndCompany> disByTelcoAndCompany =
  414. HttpContext.Session.GetComplexData<List<DistributedByTelcoAndCompany>>(
  415. "distributedByTelcoAndCompany"
  416. );
  417. // if telcoID == null => get all telcos and all companies
  418. List<DistributedDataForExcelByOneMonth> disAllMonth =
  419. new List<DistributedDataForExcelByOneMonth>();
  420. List<DistributedByTime> dataAll = new List<DistributedByTime>();
  421. if (telcoID == UtilsController.Constant.GET_ALL)
  422. {
  423. for (int i = 0; i < listMonths.Count - 1; i++)
  424. {
  425. DateTime start = listMonths[i + 1];
  426. DateTime end = listMonths[i];
  427. DistributedDataForExcelByOneMonth disOneMonth =
  428. new DistributedDataForExcelByOneMonth();
  429. List<DateTime> listDate = getRangeTimeForExport(start, end);
  430. disOneMonth.time = listDate;
  431. disOneMonth.telcos = telcos;
  432. disOneMonth.companies = companies;
  433. disOneMonth.services = services;
  434. disOneMonth.distributedByTimes = new List<DistributedByTime>();
  435. String startTime = start.ToString("MM/dd/yyyy HH:mm:ss");
  436. String endTime = end.ToString("MM/dd/yyyy HH:mm:ss");
  437. // get data
  438. for (int s = 0; s < services.data.Count; s++)
  439. {
  440. var resultD = iSuperCmsRepo.GetConnDataByService(
  441. log,
  442. services.data[s].id,
  443. startTime,
  444. endTime
  445. );
  446. var propertyD = typeof(ICollection).GetProperty("Count");
  447. int countD = (int)propertyD.GetValue(resultD, null);
  448. if (resultD != null && countD > 0)
  449. {
  450. ConnDatas data = new ConnDatas();
  451. data.data = new List<ConnData>();
  452. foreach (
  453. IDictionary<string, object> row in (IEnumerable<object>)resultD
  454. )
  455. {
  456. var json = JsonConvert.SerializeObject(row);
  457. ConnData dataGet = new ConnData(json.ToString());
  458. data.data.Add(dataGet);
  459. }
  460. for (int t = 0; t < listDate.Count - 1; t++)
  461. {
  462. DistributedByTime time = new DistributedByTime();
  463. time.time = listDate[t + 1];
  464. time.service = services.data[s];
  465. time.connDatas = new ConnDatas();
  466. time.connDatas.data = data.data.FindAll(
  467. x =>
  468. DateTime.Compare(
  469. listDate[t + 1],
  470. DateTime.ParseExact(
  471. x.dateGet + " 01:00:00",
  472. "dd/MM/yyyy HH:mm:ss",
  473. CultureInfo.InvariantCulture
  474. )
  475. ) <= 0
  476. && DateTime.Compare(
  477. DateTime.ParseExact(
  478. x.dateGet + " 01:00:00",
  479. "dd/MM/yyyy HH:mm:ss",
  480. CultureInfo.InvariantCulture
  481. ),
  482. listDate[t]
  483. ) <= 0
  484. );
  485. disOneMonth.distributedByTimes.Add(time);
  486. dataAll.Add(time);
  487. }
  488. }
  489. }
  490. disAllMonth.Add(disOneMonth);
  491. }
  492. }
  493. else if (
  494. telcoID != UtilsController.Constant.GET_ALL
  495. && companyID == UtilsController.Constant.GET_ALL
  496. )
  497. {
  498. for (int i = 0; i < listMonths.Count - 1; i++)
  499. {
  500. DateTime start = listMonths[i + 1];
  501. DateTime end = listMonths[i];
  502. DistributedDataForExcelByOneMonth disOneMonth =
  503. new DistributedDataForExcelByOneMonth();
  504. List<DateTime> listDate = getRangeTimeForExport(start, end);
  505. disOneMonth.time = listDate;
  506. disOneMonth.telcos = new ConnTelcos();
  507. disOneMonth.telcos.data = new List<ConnTelco>();
  508. disOneMonth.telcos.data.Add(telcos.data.Find(x => x.id == telcoID));
  509. disOneMonth.services = services;
  510. disOneMonth.companies = companies;
  511. disOneMonth.distributedByTimes = new List<DistributedByTime>();
  512. String startTime = start.ToString("MM/dd/yyyy HH:mm:ss");
  513. String endTime = end.ToString("MM/dd/yyyy HH:mm:ss");
  514. // get all service which have telcoID and companyID equal to telcoID and all
  515. List<ConnConfig> servicesFilter = services.data.FindAll(
  516. x => x.telcoID == telcoID
  517. );
  518. disOneMonth.services = new ConnConfigs();
  519. disOneMonth.services.data = servicesFilter;
  520. // get data
  521. for (int s = 0; s < servicesFilter.Count; s++)
  522. {
  523. var resultD = iSuperCmsRepo.GetConnDataByService(
  524. log,
  525. servicesFilter[s].id,
  526. startTime,
  527. endTime
  528. );
  529. var propertyD = typeof(ICollection).GetProperty("Count");
  530. int countD = (int)propertyD.GetValue(resultD, null);
  531. if (resultD != null && countD > 0)
  532. {
  533. ConnDatas data = new ConnDatas();
  534. data.data = new List<ConnData>();
  535. foreach (
  536. IDictionary<string, object> row in (IEnumerable<object>)resultD
  537. )
  538. {
  539. var json = JsonConvert.SerializeObject(row);
  540. ConnData dataGet = new ConnData(json.ToString());
  541. data.data.Add(dataGet);
  542. }
  543. for (int t = 0; t < listDate.Count - 1; t++)
  544. {
  545. DistributedByTime time = new DistributedByTime();
  546. time.time = listDate[t + 1];
  547. time.service = servicesFilter[s];
  548. time.connDatas = new ConnDatas();
  549. time.connDatas.data = data.data.FindAll(
  550. x =>
  551. DateTime.Compare(
  552. listDate[t + 1],
  553. DateTime.ParseExact(
  554. x.dateGet + " 01:00:00",
  555. "dd/MM/yyyy HH:mm:ss",
  556. CultureInfo.InvariantCulture
  557. )
  558. ) <= 0
  559. && DateTime.Compare(
  560. DateTime.ParseExact(
  561. x.dateGet + " 01:00:00",
  562. "dd/MM/yyyy HH:mm:ss",
  563. CultureInfo.InvariantCulture
  564. ),
  565. listDate[t]
  566. ) <= 0
  567. );
  568. disOneMonth.distributedByTimes.Add(time);
  569. dataAll.Add(time);
  570. }
  571. }
  572. }
  573. disAllMonth.Add(disOneMonth);
  574. }
  575. }
  576. else if (
  577. telcoID != UtilsController.Constant.GET_ALL
  578. && companyID != UtilsController.Constant.GET_ALL
  579. && serviceID == UtilsController.Constant.GET_ALL
  580. )
  581. {
  582. for (int i = 0; i < listMonths.Count - 1; i++)
  583. {
  584. DateTime start = listMonths[i + 1];
  585. DateTime end = listMonths[i];
  586. DistributedDataForExcelByOneMonth disOneMonth =
  587. new DistributedDataForExcelByOneMonth();
  588. List<DateTime> listDate = getRangeTimeForExport(start, end);
  589. disOneMonth.time = listDate;
  590. disOneMonth.telcos = new ConnTelcos();
  591. disOneMonth.telcos.data = new List<ConnTelco>();
  592. disOneMonth.telcos.data.Add(telcos.data.Find(x => x.id == telcoID));
  593. disOneMonth.companies = new ConnCompanies();
  594. disOneMonth.companies.data = new List<ConnCompany>();
  595. disOneMonth.companies.data.Add(companies.data.Find(x => x.id == companyID));
  596. disOneMonth.distributedByTimes = new List<DistributedByTime>();
  597. //disOneMonth.services = services;
  598. String startTime = start.ToString("MM/dd/yyyy HH:mm:ss");
  599. String endTime = end.ToString("MM/dd/yyyy HH:mm:ss");
  600. // get all service which have telcoID and companyID equal to telcoID and all
  601. List<ConnConfig> servicesFilter = services.data.FindAll(
  602. x => x.telcoID == telcoID && x.companyID == companyID
  603. );
  604. disOneMonth.services = new ConnConfigs();
  605. disOneMonth.services.data = servicesFilter;
  606. // get data
  607. for (int s = 0; s < servicesFilter.Count; s++)
  608. {
  609. var resultD = iSuperCmsRepo.GetConnDataByService(
  610. log,
  611. servicesFilter[s].id,
  612. startTime,
  613. endTime
  614. );
  615. var propertyD = typeof(ICollection).GetProperty("Count");
  616. int countD = (int)propertyD.GetValue(resultD, null);
  617. if (resultD != null && countD > 0)
  618. {
  619. ConnDatas data = new ConnDatas();
  620. data.data = new List<ConnData>();
  621. foreach (
  622. IDictionary<string, object> row in (IEnumerable<object>)resultD
  623. )
  624. {
  625. var json = JsonConvert.SerializeObject(row);
  626. ConnData dataGet = new ConnData(json.ToString());
  627. data.data.Add(dataGet);
  628. }
  629. for (int t = 0; t < listDate.Count - 1; t++)
  630. {
  631. DistributedByTime time = new DistributedByTime();
  632. time.time = listDate[t + 1];
  633. time.service = servicesFilter[s];
  634. time.connDatas = new ConnDatas();
  635. time.connDatas.data = data.data.FindAll(
  636. x =>
  637. DateTime.Compare(
  638. listDate[t + 1],
  639. DateTime.ParseExact(
  640. x.dateGet + " 01:00:00",
  641. "dd/MM/yyyy HH:mm:ss",
  642. CultureInfo.InvariantCulture
  643. )
  644. ) <= 0
  645. && DateTime.Compare(
  646. DateTime.ParseExact(
  647. x.dateGet + " 01:00:00",
  648. "dd/MM/yyyy HH:mm:ss",
  649. CultureInfo.InvariantCulture
  650. ),
  651. listDate[t]
  652. ) <= 0
  653. );
  654. disOneMonth.distributedByTimes.Add(time);
  655. dataAll.Add(time);
  656. }
  657. }
  658. }
  659. disAllMonth.Add(disOneMonth);
  660. }
  661. }
  662. else
  663. {
  664. for (int i = 0; i < listMonths.Count - 1; i++)
  665. {
  666. DateTime start = listMonths[i + 1];
  667. DateTime end = listMonths[i];
  668. DistributedDataForExcelByOneMonth disOneMonth =
  669. new DistributedDataForExcelByOneMonth();
  670. List<DateTime> listDate = getRangeTimeForExport(start, end);
  671. disOneMonth.time = listDate;
  672. disOneMonth.telcos = new ConnTelcos();
  673. disOneMonth.telcos.data = new List<ConnTelco>();
  674. disOneMonth.telcos.data.Add(telcos.data.Find(x => x.id == telcoID));
  675. disOneMonth.companies = new ConnCompanies();
  676. disOneMonth.companies.data = new List<ConnCompany>();
  677. disOneMonth.companies.data.Add(companies.data.Find(x => x.id == companyID));
  678. disOneMonth.distributedByTimes = new List<DistributedByTime>();
  679. String startTime = start.ToString("MM/dd/yyyy HH:mm:ss");
  680. String endTime = end.ToString("MM/dd/yyyy HH:mm:ss");
  681. // get all service which have telcoID and companyID equal to telcoID and all
  682. ConnConfig serviceFilter = services.data.Find(x => x.id == serviceID);
  683. disOneMonth.services = new ConnConfigs();
  684. disOneMonth.services.data = new List<ConnConfig>();
  685. disOneMonth.services.data.Add(serviceFilter);
  686. // get data
  687. var resultD = iSuperCmsRepo.GetConnDataByService(
  688. log,
  689. serviceFilter.id,
  690. startTime,
  691. endTime
  692. );
  693. var propertyD = typeof(ICollection).GetProperty("Count");
  694. int countD = (int)propertyD.GetValue(resultD, null);
  695. if (resultD != null && countD > 0)
  696. {
  697. ConnDatas data = new ConnDatas();
  698. data.data = new List<ConnData>();
  699. foreach (
  700. IDictionary<string, object> row in (IEnumerable<object>)resultD
  701. )
  702. {
  703. var json = JsonConvert.SerializeObject(row);
  704. ConnData dataGet = new ConnData(json.ToString());
  705. data.data.Add(dataGet);
  706. }
  707. for (int t = 0; t < listDate.Count - 1; t++)
  708. {
  709. DistributedByTime time = new DistributedByTime();
  710. time.time = listDate[t + 1];
  711. time.service = serviceFilter;
  712. time.connDatas = new ConnDatas();
  713. time.connDatas.data = data.data.FindAll(
  714. x =>
  715. DateTime.Compare(
  716. listDate[t + 1],
  717. DateTime.ParseExact(
  718. x.dateGet + " 01:00:00",
  719. "dd/MM/yyyy HH:mm:ss",
  720. CultureInfo.InvariantCulture
  721. )
  722. ) <= 0
  723. && DateTime.Compare(
  724. DateTime.ParseExact(
  725. x.dateGet + " 01:00:00",
  726. "dd/MM/yyyy HH:mm:ss",
  727. CultureInfo.InvariantCulture
  728. ),
  729. listDate[t]
  730. ) <= 0
  731. );
  732. disOneMonth.distributedByTimes.Add(time);
  733. dataAll.Add(time);
  734. }
  735. }
  736. disAllMonth.Add(disOneMonth);
  737. }
  738. }
  739. return Excel(endDateTime, disAllMonth, dataAll);
  740. }
  741. catch (Exception ex)
  742. {
  743. log.Error("Exception: ", ex);
  744. return Redirect("/Home");
  745. }
  746. }
  747. }
  748. }