Advertisement
Clarkelele

Untitled

Aug 14th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.89 KB | None | 0 0
  1. using CsvHelper;
  2. using Globallcoach.Models;
  3. using Microsoft.AspNetCore.Authorization;
  4. using Microsoft.AspNetCore.Mvc;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System;
  11.  
  12. namespace Globallcoach.Controllers
  13. {
  14. public class AdminImportController : Controller
  15. {
  16. private void CreateDocument(int deployment, DocumentItem item)
  17. {
  18. // TODO: Check permissions
  19.  
  20. item.Save(HttpContext);
  21. }
  22.  
  23. private string FindExistingDocument(IDatabaseConnection connection, int type, string name, string parent)
  24. {
  25. IDatabaseQuery query = connection.CreateQuery("SELECT guid FROM documents INNER JOIN document_versions ON documents.database_revision = document_versions.database_revision AND documents.guid = document_versions.document_guid WHERE deleted_revision = 0 AND document_type_id = @type AND parent_guid = @parent AND title = @name");
  26. query.AddParameter("type", type);
  27. query.AddParameter("parent", parent);
  28. query.AddParameter("name", name);
  29.  
  30. using (IDatabaseQueryResult result = query.RunQuery())
  31. {
  32. if (result.Read())
  33. {
  34. return result.GetString(0);
  35. }
  36. }
  37.  
  38. return null;
  39. }
  40.  
  41. private string GetLeague(IDatabaseConnection connection, int deployment, string name)
  42. {
  43. string guid = FindExistingDocument(connection, Constants.DocumentTypeLeague, name, Constants.ParentLcsp);
  44.  
  45. if (string.IsNullOrEmpty(guid))
  46. {
  47. DocumentItem league = new DocumentItem(deployment, Constants.DocumentTypeLeague, Constants.ParentLcsp);
  48. league.Name = name;
  49. CreateDocument(deployment, league);
  50. guid = league.Guid;
  51. }
  52.  
  53. return guid;
  54. }
  55.  
  56. private string GetClub(IDatabaseConnection connection, int deployment, string leagueGuid, string name)
  57. {
  58. string guid = FindExistingDocument(connection, Constants.DocumentTypeClub, name, leagueGuid);
  59.  
  60. if (string.IsNullOrEmpty(guid))
  61. {
  62. DocumentItem club = new DocumentItem(deployment, Constants.DocumentTypeClub, leagueGuid);
  63. club.Name = name;
  64. CreateDocument(deployment, club);
  65. guid = club.Guid;
  66. }
  67.  
  68. return guid;
  69. }
  70.  
  71. private string GetSquad(IDatabaseConnection connection, int deployment, string clubGuid, string name)
  72. {
  73. string guid = FindExistingDocument(connection, Constants.DocumentTypeSquad, name, clubGuid);
  74.  
  75. if (string.IsNullOrEmpty(guid))
  76. {
  77. DocumentItem squad = new DocumentItem(deployment, Constants.DocumentTypeSquad, clubGuid);
  78. squad.Name = name;
  79. CreateDocument(deployment, squad);
  80. guid = squad.Guid;
  81. }
  82.  
  83. return guid;
  84. }
  85.  
  86. public string GetSquadGuid(IDatabaseConnection connection, int deployment, ImportItem item)
  87. {
  88. string league = GetLeague(connection, deployment, item.League);
  89. string club = GetClub(connection, deployment, league, item.Club);
  90. string squad = GetSquad(connection, deployment, club, item.Squad);
  91.  
  92. return squad;
  93. }
  94.  
  95. public int GetUserId(IDatabaseConnection connection, string email)
  96. {
  97. IDatabaseQuery query = connection.CreateQuery("SELECT id FROM users WHERE email = @email");
  98. query.AddParameter("email", email);
  99.  
  100. using (IDatabaseQueryResult result = query.RunQuery())
  101. {
  102. if (result.Read())
  103. {
  104. return result.GetInt32(0);
  105. }
  106. }
  107.  
  108. return -1;
  109. }
  110.  
  111. public int GetApiId(IDatabaseConnection connection, string email)
  112. {
  113. IDatabaseQuery query = connection.CreateQuery("SELECT api_id FROM users WHERE email = @email");
  114. query.AddParameter("email", email);
  115.  
  116. using (IDatabaseQueryResult result = query.RunQuery())
  117. {
  118. if (result.Read())
  119. {
  120. return result.GetInt32(0);
  121. }
  122. }
  123.  
  124. return -1;
  125. }
  126.  
  127. private void ProcessDocument(int id, string data, int deployment)
  128. {
  129. using (IDatabaseConnection deploymentConnection = DatabaseUtilities.GetDeploymentConnection())
  130. {
  131. using (IDatabaseConnection clientConnection = DatabaseUtilities.GetClientConnection(deployment))
  132. {
  133. IDatabaseQuery query = deploymentConnection.CreateQuery("UPDATE csv_imports SET processing = true WHERE id = @id");
  134. query.AddParameter("id", id);
  135. query.RunNonQuery();
  136.  
  137. ImportItem item = ParseLine(data);
  138.  
  139. if (item == null)
  140. return;
  141.  
  142. if (string.IsNullOrEmpty(item.League))
  143. {
  144. CreateImportError(deploymentConnection, id, deployment, data, "Player does not have a league");
  145. return;
  146. }
  147.  
  148. if (string.IsNullOrEmpty(item.Club))
  149. {
  150. CreateImportError(deploymentConnection, id, deployment, data, "Player does not have a club");
  151. return;
  152. }
  153.  
  154. if (string.IsNullOrEmpty(item.Squad))
  155. {
  156. CreateImportError(deploymentConnection, id, deployment, data, "Player does not have a squad");
  157. return;
  158. }
  159.  
  160. if (!string.IsNullOrEmpty(item.GuardianEmail) && string.IsNullOrEmpty(item.GuardianName))
  161. {
  162. CreateImportError(deploymentConnection, id, deployment, data, "Primary guardian does not have a name");
  163. return;
  164. }
  165.  
  166. if (!string.IsNullOrEmpty(item.SecondaryGuardianEmail) && string.IsNullOrEmpty(item.SecondaryGuardianName))
  167. {
  168. CreateImportError(deploymentConnection, id, deployment, data, "Secondary guardian does not have a name");
  169. return;
  170. }
  171.  
  172. string squadGuid = GetSquadGuid(clientConnection, deployment, item);
  173.  
  174. if (!UserUtilities.IsValidEmail(item.Email))
  175. {
  176. item.Email = UserUtilities.GenerateEmailForUser(item.Name, deployment);
  177. }
  178.  
  179. if (string.IsNullOrEmpty(item.Name))
  180. {
  181. CreateImportError(deploymentConnection, id, deployment, data, "Player does not have a name");
  182. return;
  183. }
  184.  
  185. query = deploymentConnection.CreateQuery("UPDATE csv_imports SET email = @email WHERE id = @id");
  186. query.AddParameter("email", item.Email);
  187. query.AddParameter("id", id);
  188. query.RunNonQuery();
  189.  
  190. int primaryParentId = -1;
  191. int secondaryParentId = -1;
  192.  
  193. if (!string.IsNullOrEmpty(item.GuardianName))
  194. {
  195. string primaryEmail = item.GuardianEmail;
  196.  
  197. if (!UserUtilities.IsValidEmail(primaryEmail))
  198. {
  199. primaryEmail = UserUtilities.GenerateEmailForUser(item.GuardianName, deployment);
  200. }
  201.  
  202. if (UserUtilities.UserExists(deploymentConnection, primaryEmail))
  203. {
  204. UserItem parent = new UserItem(deployment, GetApiId(deploymentConnection, primaryEmail));
  205. parent.Load();
  206.  
  207. if (parent.ClientRoleId == Constants.ClientRoleGuardian)
  208. primaryParentId = GetUserId(deploymentConnection, primaryEmail);
  209. }
  210. else
  211. {
  212. UserItem guardianUser = new UserItem();
  213. guardianUser.FullName = item.GuardianName;
  214. guardianUser.Email = primaryEmail;
  215. guardianUser.DeploymentId = deployment;
  216. guardianUser.ClientRoleId = Constants.ClientRoleGuardian;
  217. guardianUser.DeploymentRoleId = Constants.DeploymentRoleNone;
  218. guardianUser.Save(HttpContext);
  219.  
  220. primaryParentId = guardianUser.Id;
  221. }
  222. }
  223.  
  224. if (!string.IsNullOrEmpty(item.SecondaryGuardianName))
  225. {
  226. string secondaryEmail = item.SecondaryGuardianEmail;
  227.  
  228. if (!UserUtilities.IsValidEmail(secondaryEmail))
  229. {
  230. secondaryEmail = UserUtilities.GenerateEmailForUser(item.SecondaryGuardianName, deployment);
  231. }
  232.  
  233. if (UserUtilities.UserExists(deploymentConnection, secondaryEmail))
  234. {
  235. UserItem secondaryParent = new UserItem(deployment, GetApiId(deploymentConnection, secondaryEmail));
  236. secondaryParent.Load();
  237.  
  238. if (secondaryParent.ClientRoleId == Constants.ClientRoleGuardian)
  239. secondaryParentId = GetUserId(deploymentConnection, secondaryEmail);
  240. }
  241. else
  242. {
  243. UserItem guardianUser = new UserItem();
  244. guardianUser.FullName = item.SecondaryGuardianName;
  245. guardianUser.Email = secondaryEmail;
  246. guardianUser.DeploymentId = deployment;
  247. guardianUser.ClientRoleId = Constants.ClientRoleGuardian;
  248. guardianUser.DeploymentRoleId = Constants.DeploymentRoleNone;
  249. guardianUser.Save(HttpContext);
  250.  
  251. secondaryParentId = guardianUser.Id;
  252. }
  253. }
  254.  
  255. UserItem playerUser = new UserItem();
  256. playerUser.FullName = item.Name;
  257. playerUser.Email = item.Email;
  258. playerUser.DeploymentId = deployment;
  259. playerUser.ClientRoleId = Constants.ClientRolePlayer;
  260. playerUser.DeploymentRoleId = Constants.DeploymentRoleNone;
  261. playerUser.PrimaryParentId = primaryParentId;
  262. playerUser.SecondaryParentId = secondaryParentId;
  263. playerUser.Save(HttpContext);
  264.  
  265. int apiId = playerUser.ApiId;
  266.  
  267. DocumentItem player = new DocumentItem(deployment, Constants.DocumentTypePlayer, squadGuid);
  268. player.Name = item.Name;
  269. player.Guid = Utilities.GetPlayerGuid(apiId);
  270.  
  271. PlayerDocumentData playerData = (PlayerDocumentData)player.Data;
  272. playerData.Number = item.Number;
  273. playerData.PhoneNumber = item.PhoneNumber;
  274. playerData.DateOfBirth = item.DateOfBirth;
  275. playerData.YouthNationality = item.Nationality;
  276. playerData.Email = item.Email;
  277. playerData.Graduation = item.Graduation;
  278. playerData.Save(HttpContext);
  279.  
  280. DocumentItem guardian = new DocumentItem(deployment, Constants.DocumentTypePlayerGuardian, player.Guid);
  281. guardian.Name = "Player: Guardian (" + DateTime.Now.ToString("dd/MM/yyyy") + ")";
  282. GuardianDocumentData guardianData = (GuardianDocumentData)guardian.Data;
  283. guardianData.PrimaryGuardian = item.GuardianName;
  284. guardianData.PrimaryRelationship = item.GuardianRelationship;
  285. guardianData.PrimaryAddress = item.GuardianAddress;
  286. guardianData.PrimaryPhoneNumber = item.GuardianPhoneNumber;
  287. guardianData.PrimaryEmail = item.GuardianEmail;
  288. guardianData.SecondaryGuardian = item.SecondaryGuardianName;
  289. guardianData.SecondaryRelationship = item.SecondaryGuardianRelationship;
  290. guardianData.SecondaryAddress = item.SecondaryGuardianAddress;
  291. guardianData.SecondaryPhoneNumber = item.SecondaryGuardianPhoneNumber;
  292. guardianData.SecondaryEmail = item.SecondaryGuardianEmail;
  293. guardian.Save(HttpContext);
  294.  
  295. DocumentItem academic = new DocumentItem(deployment, Constants.DocumentTypePlayerAcademic, player.Guid);
  296. academic.Name = "Player: Academic (" + DateTime.Now.ToString("dd/MM/yyyy") + ")";
  297. AcademicDocumentData academicData = (AcademicDocumentData)academic.Data;
  298. academicData.School = item.AcademicSchool;
  299. academicData.GPA = item.AcademicGPA;
  300. academicData.ACT = item.AcademicACT;
  301. academicData.TOEFL = item.AcademicTOEFL;
  302. academic.Save(HttpContext);
  303.  
  304. query = deploymentConnection.CreateQuery("UPDATE csv_imports SET processed = true, processing = false, error = null WHERE id = @id");
  305. query.AddParameter("id", id);
  306. query.RunNonQuery();
  307. }
  308. }
  309. }
  310.  
  311. public void CreateImportError(IDatabaseConnection connection, int id, int deployment, string data, string error)
  312. {
  313. IDatabaseQuery query = connection.CreateQuery("UPDATE csv_imports SET processed = true, processing = false, error = @error WHERE id = @id");
  314. query.AddParameter("id", id);
  315. query.AddParameter("error", error);
  316. query.RunNonQuery();
  317. }
  318.  
  319. public async Task ProcessDocuments(int deployment)
  320. {
  321. using (IDatabaseConnection connection = Globallcoach.Database.CreateConnection(Constants.DeploymentDatabase))
  322. {
  323. IDatabaseQuery query = connection.CreateQuery("SELECT id, header, data FROM csv_imports WHERE deployment = @deployment AND user_id = @user AND processing = false AND processed = false");
  324. query.AddParameter("deployment", deployment);
  325. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  326.  
  327. using (IDatabaseQueryResult result = query.RunQuery())
  328. {
  329. while (result.Read())
  330. {
  331. ProcessDocument(result.GetInt32(0), result.GetString(1) + result.GetString(2), deployment);
  332. await Task.Delay(0);
  333. }
  334. }
  335. }
  336. }
  337.  
  338. public ImportItem ParseLine(string csv)
  339. {
  340. ImportItem item = new ImportItem();
  341.  
  342. var reader = new CsvReader(new StringReader(csv));
  343.  
  344. if (reader.Read())
  345. {
  346. if (!reader.IsRecordEmpty())
  347. {
  348. string name;
  349. if (reader.TryGetField<string>("Player Name", out name))
  350. item.Name = name.Trim();
  351.  
  352. int number;
  353. if (reader.TryGetField<int>("Player Number", out number))
  354. item.Number = number;
  355.  
  356. string squad;
  357. if (reader.TryGetField<string>("Squad", out squad))
  358. item.Squad = squad.Trim();
  359.  
  360. DateTime dob;
  361. if (reader.TryGetField<DateTime>("Player dob", out dob))
  362. item.DateOfBirth = dob;
  363.  
  364. string nationality;
  365. if (reader.TryGetField<string>("Player Nationality", out nationality))
  366. item.Nationality = nationality;
  367.  
  368. string email;
  369. if (reader.TryGetField<string>("Player Email", out email))
  370. item.Email = email;
  371.  
  372. string phoneNo;
  373. if (reader.TryGetField<string>("Player Phone Number", out phoneNo))
  374. item.PhoneNumber = phoneNo;
  375.  
  376. DateTime graduation;
  377. if (reader.TryGetField<DateTime>("Player Graduation Year", out graduation))
  378. item.Graduation = graduation;
  379.  
  380. string playerId;
  381. if (reader.TryGetField<string>("Player Identification", out playerId))
  382. item.PlayerIdentification = playerId;
  383.  
  384. string coachName;
  385. if (reader.TryGetField<string>("Coach Name", out coachName))
  386. item.CoachName = coachName;
  387.  
  388. string coachAddress;
  389. if (reader.TryGetField<string>("Coach Address", out coachAddress))
  390. item.CoachAddress = coachAddress;
  391.  
  392. string coachPhone;
  393. if (reader.TryGetField<string>("Coach Phone Number", out coachPhone))
  394. item.CoachPhoneNumber = coachPhone;
  395.  
  396. string coachEmail;
  397. if (reader.TryGetField<string>("Coach Email", out coachEmail))
  398. item.CoachEmail = coachEmail;
  399.  
  400. string guardianName;
  401. if (reader.TryGetField<string>("Guardian Name", out guardianName))
  402. item.GuardianName = guardianName;
  403.  
  404. string guardianRelationship;
  405. if (reader.TryGetField<string>("Guardian Relationship", out guardianRelationship))
  406. item.GuardianRelationship = guardianRelationship;
  407.  
  408. string guardianAddress;
  409. if (reader.TryGetField<string>("Guardian Address", out guardianAddress))
  410. item.GuardianAddress = guardianAddress;
  411.  
  412. string guardianPhone;
  413. if (reader.TryGetField<string>("Guardian Phone Number", out guardianPhone))
  414. item.GuardianPhoneNumber = guardianPhone;
  415.  
  416. string guardianEmail;
  417. if (reader.TryGetField<string>("Guardian Email", out guardianEmail))
  418. item.GuardianEmail = guardianEmail;
  419.  
  420. string guardianPassport;
  421. if (reader.TryGetField<string>("Guardian Passport", out guardianPassport))
  422. item.GuardianPassport = guardianPassport;
  423.  
  424. string secondaryGuardianName;
  425. if (reader.TryGetField<string>("Secondary Guardian Name", out secondaryGuardianName))
  426. item.SecondaryGuardianName = secondaryGuardianName;
  427.  
  428. string secondaryGuardianChild;
  429. if (reader.TryGetField<string>("Secondary Guardian Child", out secondaryGuardianChild))
  430. item.SecondaryGuardianChild = secondaryGuardianChild;
  431.  
  432. string secondaryGuardianRelationship;
  433. if (reader.TryGetField<string>("Secondary Guardian Relationship", out secondaryGuardianRelationship))
  434. item.SecondaryGuardianRelationship = secondaryGuardianRelationship;
  435.  
  436. string secondaryGuardianAddress;
  437. if (reader.TryGetField<string>("Secondary Guardian Address", out secondaryGuardianAddress))
  438. item.SecondaryGuardianAddress = secondaryGuardianAddress;
  439.  
  440. string secondaryGuardianPhoneNumber;
  441. if (reader.TryGetField<string>("Secondary Guardian Phone Number", out secondaryGuardianPhoneNumber))
  442. item.SecondaryGuardianPhoneNumber = secondaryGuardianPhoneNumber;
  443.  
  444. string secondaryGuardianEmail;
  445. if (reader.TryGetField<string>("Secondary Guardian Email", out secondaryGuardianEmail))
  446. item.SecondaryGuardianEmail = secondaryGuardianEmail;
  447.  
  448. string academicSchool;
  449. if (reader.TryGetField<string>("Academic School", out academicSchool))
  450. item.AcademicSchool = academicSchool;
  451.  
  452. string academicGPA;
  453. if (reader.TryGetField<string>("Academic gpa", out academicGPA))
  454. item.AcademicGPA = academicGPA;
  455.  
  456. string academicACT;
  457. if (reader.TryGetField<string>("Academic act", out academicACT))
  458. item.AcademicACT = academicACT;
  459.  
  460. string academicTOEFL;
  461. if (reader.TryGetField<string>("Academic toefl", out academicTOEFL))
  462. item.AcademicTOEFL = academicTOEFL;
  463.  
  464. string league;
  465. if (reader.TryGetField<string>("League", out league))
  466. item.League = league.Trim();
  467.  
  468. string club;
  469. if (reader.TryGetField<string>("Club", out club))
  470. item.Club = club.Trim();
  471.  
  472. return item;
  473. }
  474. }
  475.  
  476. return null;
  477. }
  478.  
  479. public ImportModel ProcessCSV(int deployment, string filename, string data)
  480. {
  481. using (IDatabaseConnection connection = Globallcoach.Database.CreateConnection(Constants.DeploymentDatabase))
  482. {
  483. ImportModel model = new ImportModel();
  484. string csvHeader = "";
  485.  
  486. var parser = new CsvParser(new StringReader(data));
  487.  
  488. while (true)
  489. {
  490. var row = parser.Read();
  491.  
  492. if (row == null)
  493. break;
  494.  
  495. if (parser.Row == 1)
  496. {
  497. csvHeader = parser.RawRecord;
  498. }
  499. else
  500. {
  501. ImportItem item = ParseLine(csvHeader + parser.RawRecord);
  502.  
  503. if (item != null)
  504. {
  505. IDatabaseQuery query = connection.CreateQuery("INSERT INTO csv_imports (filename, deployment, user_id, header, data, processing, processed) VALUES (@filename, @deployment, @user, @header, @data, false, false)");
  506. query.AddParameter("filename", filename);
  507. query.AddParameter("deployment", deployment);
  508. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  509. query.AddParameter("header", csvHeader);
  510. query.AddParameter("data", parser.RawRecord);
  511.  
  512. query.RunNonQuery();
  513.  
  514. model.Items.Add(item);
  515. }
  516. }
  517. }
  518.  
  519. return model;
  520. }
  521. }
  522.  
  523. [Route("admin/deployment/import/process")]
  524. [Authorize(Roles = "client_admin,client_headcoach")]
  525. public async Task<IActionResult> ConfirmImportCurrent()
  526. {
  527. return await ConfirmImport(UserUtilities.GetDeploymentId(HttpContext));
  528. }
  529.  
  530. [Route("admin/deployments/{deployment}/import/process")]
  531. [Authorize(Roles = "sales")]
  532. public async Task<IActionResult> ConfirmImport(int deployment)
  533. {
  534. ProcessDocuments(deployment);
  535.  
  536. DocumentModel model = new DocumentModel(deployment, Constants.ParentLcsp);
  537. model.Populate(UserUtilities.GetApiId(HttpContext));
  538.  
  539. return View("~/Views/Admin/Database/Index.cshtml", model);
  540. }
  541.  
  542. [HttpGet("admin/deployment/import/csv")]
  543. [Authorize(Roles = "client_admin,client_headcoach")]
  544. public IActionResult PickFileCurrent()
  545. {
  546. return PickFile(UserUtilities.GetDeploymentId(HttpContext));
  547. }
  548.  
  549. [HttpGet("admin/deployments/{deployment}/import/csv")]
  550. [Authorize(Roles = "sales,client_admin,client_headcoach")]
  551. public IActionResult PickFile(int deployment)
  552. {
  553. DocumentModel model = new DocumentModel(deployment, Constants.ParentLcsp);
  554.  
  555. return View("~/Views/Admin/Import/PickFile.cshtml", model);
  556. }
  557.  
  558. [Route("admin/deployment/import/list")]
  559. [Authorize(Roles = "client_admin,client_headcoach")]
  560. public IActionResult ListCurrent()
  561. {
  562. return List(UserUtilities.GetDeploymentId(HttpContext));
  563. }
  564.  
  565. [Route("admin/deployments/{deployment}/import/list")]
  566. [Authorize(Roles = "sales")]
  567. public IActionResult List(int deployment)
  568. {
  569. CurrentImportsModel model = new CurrentImportsModel();
  570. model.DeploymentId = deployment;
  571.  
  572. using (IDatabaseConnection connection = Globallcoach.Database.CreateConnection(Constants.DeploymentDatabase))
  573. {
  574. IDatabaseQuery query = connection.CreateQuery("SELECT data FROM csv_imports WHERE processing = false AND processed = false AND deployment = @deployment AND user_id = @user");
  575. query.AddParameter("deployment", deployment);
  576. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  577.  
  578. using (IDatabaseQueryResult result = query.RunQuery())
  579. {
  580. while (result.Read())
  581. {
  582. CurrentImportsItem item = new CurrentImportsItem();
  583. item.Data = result.GetString(0);
  584. model.Items.Add(item);
  585. }
  586. }
  587. }
  588.  
  589. return View("~/Views/Admin/Import/CurrentImports.cshtml", model);
  590. }
  591.  
  592. [Route("admin/deployment/import/errors")]
  593. [Authorize(Roles = "client_admin,client_headcoach")]
  594. public IActionResult ListErrorsCurrent()
  595. {
  596. return ListErrors(UserUtilities.GetDeploymentId(HttpContext));
  597. }
  598.  
  599. [Route("admin/deployments/{deployment}/import/errors")]
  600. [Authorize(Roles = "sales")]
  601. public IActionResult ListErrors(int deployment)
  602. {
  603. // TODO: Filter imports based on a specific import...
  604.  
  605. CurrentImportsModel model = new CurrentImportsModel();
  606. model.DeploymentId = deployment;
  607.  
  608. using (IDatabaseConnection connection = Globallcoach.Database.CreateConnection(Constants.DeploymentDatabase))
  609. {
  610. IDatabaseQuery query = connection.CreateQuery("SELECT data, error FROM csv_imports WHERE deployment = @deployment AND user_id = @user AND error IS NOT NULL");
  611. query.AddParameter("deployment", deployment);
  612. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  613.  
  614. using (IDatabaseQueryResult result = query.RunQuery())
  615. {
  616. while (result.Read())
  617. {
  618. CurrentImportsItem item = new CurrentImportsItem();
  619. item.DeploymentId = deployment;
  620. item.Data = result.GetString(0);
  621. item.Error = result.GetString(1);
  622. model.Items.Add(item);
  623. }
  624. }
  625. }
  626.  
  627. return View("~/Views/Admin/Import/ImportErrors.cshtml", model);
  628. }
  629.  
  630. [Route("admin/deployment/import/errors/export")]
  631. [Authorize(Roles = "client_admin,client_headcoach")]
  632. public FileContentResult ExportErrorsCurrent()
  633. {
  634. return ExportErrors(UserUtilities.GetDeploymentId(HttpContext));
  635. }
  636.  
  637. [Route("admin/deployments/{deployment}/import/errors/export")]
  638. [Authorize(Roles = "sales")]
  639. public FileContentResult ExportErrors(int deployment)
  640. {
  641. string csvData = "Player Name,Player Number,Player Picture,Squad,Player dob,Player Nationality,Player Email,Player Phone Number,Player Graduation Year,Player Identification,Player Passport,Coach Name,Coach Address,Coach Phone Number,Coach Email,Guardian Name,Guardian Relationship,Guardian Address,Guardian Phone Number,Guardian Email,Guardian Passport,Secondary Guardian Name,Secondary Guardian Child,Secondary Guardian Relationship,Secondary Guardian Address,Secondary Guardian Phone Number,Secondary Guardian Email,Academic School,Academic gpa,Academic act,Academic toefl,League,Club,Import Error\n";
  642.  
  643. using (IDatabaseConnection connection = Globallcoach.Database.CreateConnection(Constants.DeploymentDatabase))
  644. {
  645. IDatabaseQuery query = connection.CreateQuery("SELECT data, error FROM csv_imports WHERE deployment = @deployment AND user_id = @user AND error IS NOT NULL");
  646. query.AddParameter("deployment", deployment);
  647. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  648.  
  649. using (IDatabaseQueryResult result = query.RunQuery())
  650. {
  651. while (result.Read())
  652. {
  653. csvData += result.GetString(0).Trim() + "," + result.GetString(1) + "\n";
  654. }
  655. }
  656. }
  657.  
  658. var file = new FileContentResult(Encoding.UTF8.GetBytes(csvData), "application/csv");
  659. file.FileDownloadName = "errors.csv";
  660. return file;
  661. }
  662.  
  663. [Route("admin/deployment/import/errors/clear")]
  664. [Authorize(Roles = "client_admin,client_headcoach")]
  665. public IActionResult ClearErrorsCurrent()
  666. {
  667. return ClearErrors(UserUtilities.GetDeploymentId(HttpContext), true);
  668. }
  669.  
  670. [Route("admin/deployments/{deployment}/import/errors/clear")]
  671. [Authorize(Roles = "sales")]
  672. public IActionResult ClearErrors(int deployment)
  673. {
  674. return ClearErrors(deployment, false);
  675. }
  676.  
  677. private IActionResult ClearErrors(int deployment, bool current)
  678. {
  679. using (IDatabaseConnection connection = DatabaseUtilities.GetDeploymentConnection())
  680. {
  681. IDatabaseQuery query = connection.CreateQuery("DELETE FROM csv_imports WHERE deployment = @deployment AND user_id = @user AND error IS NOT NULL");
  682. query.AddParameter("deployment", deployment);
  683. query.AddParameter("user", UserUtilities.GetAdminId(HttpContext));
  684. query.RunNonQuery();
  685. }
  686.  
  687. return current ? RedirectToAction("ListErrorsCurrent", "AdminImport") : RedirectToAction("ListErrors", "AdminImport", new { deployment = deployment });
  688. }
  689.  
  690. [HttpPost("admin/deployment/import/csv")]
  691. [Authorize(Roles = "client_admin,client_headcoach")]
  692. public IActionResult ImportCSVCurrent()
  693. {
  694. return ImportCSV(UserUtilities.GetDeploymentId(HttpContext));
  695. }
  696.  
  697. [HttpPost("admin/deployments/{deployment}/import/csv")]
  698. [Authorize(Roles = "sales")]
  699. public IActionResult ImportCSV(int deployment)
  700. {
  701. ImportModel model = new ImportModel();
  702.  
  703. var files = Request.Form.Files;
  704.  
  705. foreach (var file in files)
  706. {
  707. Stream stream = file.OpenReadStream();
  708. StreamReader reader = new StreamReader(stream);
  709. string data = reader.ReadToEnd();
  710.  
  711. model = ProcessCSV(deployment, file.Name, data);
  712. }
  713.  
  714. model.DeploymentId = deployment;
  715.  
  716. return View("~/Views/Admin/Import/Review.cshtml", model);
  717. }
  718.  
  719. [HttpGet("admin/deployment/import/template")]
  720. public IActionResult TemplateCurrent()
  721. {
  722. return Template(UserUtilities.GetDeploymentId(HttpContext));
  723. }
  724.  
  725. [HttpGet("admin/deployments/{deployment}/import/template")]
  726. public IActionResult Template(int deployment)
  727. {
  728. string csvData = "Player Name,Player Number,Player Picture,Squad,Player dob,Player Nationality,Player Email,Player Phone Number,Player Graduation Year,Player Identification,Player Passport,Coach Name,Coach Address,Coach Phone Number,Coach Email,Guardian Name,Guardian Relationship,Guardian Address,Guardian Phone Number,Guardian Email,Guardian Passport,Secondary Guardian Name,Secondary Guardian Child,Secondary Guardian Relationship,Secondary Guardian Address,Secondary Guardian Phone Number,Secondary Guardian Email,Academic School,Academic gpa,Academic act,Academic toefl,League,Club";
  729.  
  730. var file = new FileContentResult(Encoding.UTF8.GetBytes(csvData), "application/csv");
  731. file.FileDownloadName = "template.csv";
  732. return file;
  733. }
  734.  
  735. [HttpGet("admin/deployment/export/passwords")]
  736. [Authorize(Roles = "client_admin,client_headcoach")]
  737. public IActionResult ExportPasswordsCurrent()
  738. {
  739. return ExportPasswords(UserUtilities.GetDeploymentId(HttpContext));
  740. }
  741.  
  742. [HttpGet("admin/deployments/{deployment}/export/passwords")]
  743. [Authorize(Roles = "sales")]
  744. public IActionResult ExportPasswords(int deployment)
  745. {
  746. string csvData = "";
  747. using (IDatabaseConnection connection = Database.CreateConnection(Constants.DeploymentDatabase))
  748. {
  749. IDatabaseQuery query = connection.CreateQuery("SELECT csv_imports.email, users.generated_password, users.full_name FROM csv_imports INNER JOIN users ON csv_imports.email = users.email WHERE deployment = @deployment AND processing = 0 AND processed = 1 AND error IS NULL ORDER BY users.full_name");
  750. query.AddParameter("deployment", deployment);
  751. using (IDatabaseQueryResult result = query.RunQuery())
  752. {
  753. while (result.Read())
  754. {
  755. csvData += result.GetString(0) + ",";
  756. csvData += result.GetString(1) + ",";
  757. csvData += result.GetString(2) + ",";
  758. csvData += Environment.NewLine;
  759. }
  760. }
  761. }
  762.  
  763. var file = new FileContentResult(Encoding.UTF8.GetBytes(csvData), "application/csv");
  764. file.FileDownloadName = "passwords.csv";
  765. return file;
  766. }
  767. }
  768.  
  769. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement