RewardReq.cshtml 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918
  1. @{
  2. ViewBag.Title = "Reward Requests";
  3. Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5. @using SuperAdmin.Models;
  6. @using SuperAdmin.Models.Http;
  7. @using SuperAdmin.Controllers;
  8. @using SuperAdmin.Source;
  9. @model ExportGetListRes
  10. @{
  11. }
  12. <style>
  13. img {
  14. max-width: 100%;
  15. }
  16. </style>
  17. <input type="hidden" value="@ViewBag.Role" id="role" />
  18. <div class="content-header row">
  19. <div class="content-header-left col-md-6 col-xs-12 mb-1">
  20. <h2 class="content-header-title">Reward requests</h2>
  21. </div>
  22. <div class="content-header-right breadcrumbs-right breadcrumbs-top col-md-6 col-xs-12">
  23. <div class="breadcrumb-wrapper col-xs-12">
  24. <ol class="breadcrumb">
  25. <li class="breadcrumb-item">
  26. <a href="Index">Admin</a>
  27. </li>
  28. <li class="breadcrumb-item">
  29. <a href="#">Reward requests</a>
  30. </li>
  31. </ol>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="content-body">
  36. <!-- Basic form layout section start -->
  37. <section id="basic-form-layouts">
  38. <div class="row service-height">
  39. <div class="col-md-12">
  40. <div class="card">
  41. <div class="card-header">
  42. <h4 class="card-title" id="basic-layout-form">Search</h4>
  43. <a class="heading-elements-toggle"><i class="icon-ellipsis font-medium-3"></i></a>
  44. <div class="heading-elements">
  45. <ul class="list-inline mb-0">
  46. <li><a data-action="collapse"><i class="icon-minus4"></i></a></li>
  47. @*<li><a data-action="reload"><i class="icon-reload"></i></a></li>*@
  48. <li><a data-action="expand"><i class="icon-expand2"></i></a></li>
  49. @*<li><a data-action="close"><i class="icon-cross2"></i></a></li>*@
  50. </ul>
  51. </div>
  52. </div>
  53. <div class="card-content collapse show">
  54. <div class="card-body">
  55. <div class="card-block">
  56. <div class="form-body">
  57. @Html.AntiForgeryToken()
  58. <div class="row">
  59. <div class="col-md-3 col-sm-4 col-6">
  60. <div class="form-group">
  61. <label>From Date</label>
  62. <div class='input-group'>
  63. <input type="text" class="form-control fromDate" id="fromDateSearch" name="fromDateSearch">
  64. </div>
  65. </div>
  66. </div>
  67. <div class="col-md-3 col-sm-4 col-6">
  68. <div class="form-group">
  69. <label>To date</label>
  70. <div class='input-group'>
  71. <input type="text" class="form-control toDate" id="toDateSearch" name="toDateSearch">
  72. </div>
  73. </div>
  74. </div>
  75. <div class="col-md-3 col-sm-4 col-6">
  76. <div class="form-group">
  77. <label>Game</label>
  78. <select class="form-control" id="gameSearch" name="gameSearch">
  79. <option value="-1" selected>-- All --</option>
  80. <option value="1">Lucky power</option>
  81. <option value="2">Lucky day</option>
  82. <option value="3">Lucky plus</option>
  83. </select>
  84. </div>
  85. </div>
  86. <div class="col-md-3 col-sm-4 col-6">
  87. <div class="form-group">
  88. <label>Status</label>
  89. <select class="form-control" id="statusSearch" name="statusSearch">
  90. <option value="-1" selected>-- All --</option>
  91. <option value="@LumilotoUtils.ExportStatus.startUpload">Uploading</option>
  92. <option value="@LumilotoUtils.ExportStatus.finishUpload">Wait approving</option>
  93. <option value="@LumilotoUtils.ExportStatus.rejected">Rejected</option>
  94. <option value="@LumilotoUtils.ExportStatus.deleted">Deleted</option>
  95. <option value="@LumilotoUtils.ExportStatus.approved">Approved</option>
  96. <option value="@LumilotoUtils.ExportStatus.addingMoney">Adding money</option>
  97. <option value="@LumilotoUtils.ExportStatus.finishAddMoney">Finish add money</option>
  98. </select>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="row">
  103. <div class="col-md-12">
  104. <button type="button" class="btn btn-primary" onclick="search()" id="btnSearch">
  105. <i class="icon-search"></i> Search
  106. </button>
  107. <button type="button" class="btn btn-success" onclick="add()" id="btnAdd">
  108. <i class="icon-plus"></i> Add
  109. </button>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. <div class="col-12">
  119. <div class="card">
  120. <div class="card-content">
  121. <div class="col-md-12 table-responsive" style="padding-top: 10px">
  122. @Html.Partial("_RewardReqGrid", Model)
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. </section>
  129. <!-- // Basic form layout section end -->
  130. </div>
  131. <div class="modal fade text-xs-left" id="modal-add-service" tabindex="-1" role="dialog" aria-labelledby="myModalLabel17" style="display: none;" aria-hidden="true">
  132. <div class="modal-dialog modal-xl" role="document">
  133. <div class="modal-content">
  134. <div class="modal-header">
  135. <h4 class="modal-title" id="modalLabelService">Reward Request Information</h4>
  136. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  137. <span aria-hidden="true">×</span>
  138. </button>
  139. </div>
  140. <input type="hidden" id="id" />
  141. <div class="modal-body">
  142. <div class="row" id="div-info">
  143. <div class="col-md-6">
  144. <div class="form-group">
  145. <label for="wsName">From Date</label>
  146. <input type="text" class="form-control fromDateTime" id="fromDate" name="fromDate" autocomplete="off">
  147. </div>
  148. </div>
  149. <div class="col-md-6">
  150. <div class="form-group">
  151. <label for="team1">To Date</label>
  152. <input type="text" class="form-control toDateTime" id="toDate" name="toDate" autocomplete="off">
  153. </div>
  154. </div>
  155. <div class="col-md-6">
  156. <div class="form-group">
  157. <label for="wsdl">Game</label>
  158. <select class="form-control" id="gameId" name="gameId">
  159. <option value="1" selected>Lucky power</option>
  160. <option value="2">Lucky day</option>
  161. <option value="3">Lucky plus</option>
  162. </select>
  163. </div>
  164. </div>
  165. <div class="col-md-6">
  166. <div class="form-group">
  167. <label for="wsdl">Name</label>
  168. <input type="text" class="form-control" id="name" name="name">
  169. </div>
  170. </div>
  171. <div class="col-md-6">
  172. <div class="form-group">
  173. <label for="wsdl">Status</label>
  174. <select class="form-control" type="text" id="status" name="status" disabled>
  175. <option value="@LumilotoUtils.ExportStatus.draft" selected>Draft</option>
  176. <option value="@LumilotoUtils.ExportStatus.startUpload">Uploading</option>
  177. <option value="@LumilotoUtils.ExportStatus.finishUpload">Finish upload</option>
  178. <option value="@LumilotoUtils.ExportStatus.rejected">Rejected</option>
  179. <option value="@LumilotoUtils.ExportStatus.deleted">Deleted</option>
  180. <option value="@LumilotoUtils.ExportStatus.approved">Approved</option>
  181. <option value="@LumilotoUtils.ExportStatus.addingMoney">Adding money</option>
  182. <option value="@LumilotoUtils.ExportStatus.finishAddMoney">Finish add money</option>
  183. </select>
  184. </div>
  185. </div>
  186. </div>
  187. <div class="row" id="div-action">
  188. <div class="col-12">
  189. <button type="button" id="btnAddUpdate" class="btn btn-outline-primary" onclick="addUpdateAction()">Create Request</button>
  190. @*<button type="button" id="btnUpdate" class="btn btn-outline-primary" onclick="addUpdateAction()">Save Request</button>*@
  191. <button type="button" id="btnGetData" class="btn btn-outline-success" onclick="viewData()">View data</button>
  192. <button type="button" id="btnDeleteData" class="btn btn-outline-success" onclick="deleteData()">Delete data</button>
  193. <button type="button" id="btnExportSystem" class="btn btn-outline-success" onclick="exportSystem()">Export system</button>
  194. <button type="button" id="btnExportData" class="btn btn-outline-success" onclick="exportData()">Export Excel</button>
  195. @*<form enctype="multipart/form-data" method="POST" action="/Admin/RewardImportData" style="display: inline-block">*@
  196. <label id="btnImportData" for="importFile" class="btn btn-outline-success" style="margin: 0 0 0 0;">Import data</label>
  197. <input type="file" id="importFile" name="importFile" class="shifted" style="display: none" accept=".xls,.xlsx" onchange="importFile()" />
  198. @*</form>*@
  199. @*<button type="button" id="btnImportData" class="btn btn-outline-success" onclick="importFile()">Import data</button>
  200. <input id="importFile" type="file" name="importFile" style="display: none;" />*@
  201. <button type="button" id="btnSubmit" class="btn btn-outline-danger" onclick="submit()">Submit</button>
  202. </div>
  203. </div>
  204. <div class="row">
  205. <div class="col-12" style="padding-top: 10px" id="div_detail">
  206. @Html.Partial("_RewardDetailGrid", Model)
  207. </div>
  208. </div>
  209. <div class="row" id="div-approve">
  210. @if (!BaseController.UsingVsa() || ViewBag.Role == BaseController.RoleAdminSale)
  211. {
  212. <div class="col-md-12">
  213. <div class="form-group">
  214. <label for="wsdl">Note</label>
  215. <input type="text" class="form-control" id="note" name="note" autocomplete="off">
  216. </div>
  217. </div>
  218. <div class="col-md-12">
  219. <button type="button" id="btnExportList" class="btn btn-outline-info" onclick="exportData()">Export</button>
  220. <button type="button" id="btnApprove" class="btn btn-outline-success" onclick="approve()">Approve</button>
  221. <button type="button" id="btnReject" class="btn btn-outline-danger" onclick="reject()">Reject</button>
  222. <button type="button" class="btn grey btn-outline-secondary" data-dismiss="modal">Close</button>
  223. </div>
  224. }
  225. </div>
  226. </div>
  227. <div class="modal-footer">
  228. @*<button type="button" class="btn grey btn-outline-secondary" data-dismiss="modal">Close</button>
  229. <button type="button" id="btnAdd" class="btn btn-outline-primary" onclick="addUpdateAction()">Add</button>
  230. <button type="button" id="btnUpdate" class="btn btn-outline-primary" onclick="addUpdateAction()">Save Info</button>*@
  231. </div>
  232. </div>
  233. </div>
  234. </div>
  235. @section Scripts {
  236. <script>
  237. $(document).ready(function () {
  238. $(".fromDate").datetimepicker({
  239. format: "DD/MM/YYYY",
  240. defaultDate: moment().add(-30, 'days')
  241. });
  242. $(".toDate").datetimepicker({
  243. format: "DD/MM/YYYY",
  244. defaultDate: moment().endOf('day')
  245. });
  246. $(".fromDateTime").datetimepicker({
  247. format: "DD/MM/YYYY HH:mm:ss",
  248. defaultDate: moment().add(-30, 'days')
  249. });
  250. $(".toDateTime").datetimepicker({
  251. format: "DD/MM/YYYY HH:mm:ss",
  252. defaultDate: moment().endOf('day')
  253. });
  254. search();
  255. });
  256. var tableReq;
  257. var tableDetail;
  258. function resetTableReq() {
  259. tableReq = $("#grid_reward").DataTable({});
  260. }
  261. function resetTableDetail() {
  262. tableDetail = $("#grid_reward_detail").DataTable({});
  263. }
  264. function clearTable(table) {
  265. if (table != null && table != undefined) {
  266. table
  267. .clear()
  268. .destroy();
  269. }
  270. }
  271. resetTableReq();
  272. resetTableDetail();
  273. // reward request
  274. function search() {
  275. console.log("Search");
  276. startSpinner('btnSearch');
  277. clearTable(tableReq);
  278. $.ajax({
  279. url: "/Admin/RewardReqSearch",
  280. data: {
  281. fromDate: $("#fromDateSearch").val(),
  282. toDate: $("#toDateSearch").val(),
  283. gameId: $("#gameSearch").val(),
  284. status: $("#statusSearch").val()
  285. },
  286. type: "POST",
  287. success: function (data) {
  288. stopSpinner('btnSearch');
  289. console.log(data);
  290. if (data.error != "0" && data.error != "1") {
  291. showModal('message-dialog');
  292. $('#message-content').html(data.content.split("\n").join("<br />"));
  293. } else {
  294. updateGridData(data.data.listLotoExportGet);
  295. resetTableReq();
  296. }
  297. },
  298. error: function (data) {
  299. stopSpinner('btnSearch');
  300. console.log(data.error);
  301. }
  302. })
  303. }
  304. function addUpdateAction() {
  305. // Checking whether FormData is available in browser
  306. if (window.FormData !== undefined) {
  307. // Create FormData object
  308. var formData = new FormData();
  309. console.log(moment($("#ngaykichhoatthe").val(), "DD/MM/YYYY HH:mm:ss"));
  310. // Adding one more key to FormData object
  311. formData.append('id', $("#id").val());
  312. formData.append('name', $("#name").val());
  313. formData.append('fromDate', $("#fromDate").val());
  314. formData.append('toDate', $("#toDate").val());
  315. formData.append('gameId', $("#gameId").val());
  316. //formData.append('ngaykichhoatthe', moment($("#ngaykichhoatthe").val(), "DD/MM/YYYY HH:mm:ss").format("YYYY-MM-DD HH:mm:ss"));
  317. formData.append('status', $("#status").val());
  318. formData.append('action', 'add');
  319. $.ajax({
  320. url: '/Admin/RewardReqAddUpdate',
  321. type: "POST",
  322. contentType: false, // Not to set any content header
  323. processData: false, // Not to process data
  324. data: formData,
  325. success: function (result) {
  326. if (result.error == '0') {
  327. Swal.fire("Success!", "Success!", "success").
  328. then((result) => {
  329. hideModal("modal-add-service");
  330. //search();
  331. });
  332. //alert('Import success: ' + result.content);
  333. } else {
  334. Swal.fire("Failed!", result.content, "error");
  335. //alert('Import failed: ' + result.content);
  336. }
  337. },
  338. error: function (err) {
  339. swal("Failed!", err.statusText, "error");
  340. //alert(err.statusText);
  341. }
  342. });
  343. } else {
  344. Swal.fire("Failed!", "FormData is not supported.", "error");
  345. //alert("FormData is not supported.");
  346. }
  347. }
  348. function add() {
  349. // clear data
  350. $("#id").val("");
  351. $("#fromDate").val(moment().startOf('month').format("DD/MM/YYYY HH:mm:ss"));
  352. $("#toDate").val(moment().endOf('month').format("DD/MM/YYYY HH:mm:ss"));
  353. $("#name").val("");
  354. $("#note").val("");
  355. $("#status").val("@LumilotoUtils.ExportStatus.draft");
  356. // button
  357. $("#btnAddUpdate").show();
  358. $("#btnGetData").hide();
  359. $("#btnExportData").hide();
  360. $("#btnExportSystem").show();
  361. $("#btnSubmit").hide();
  362. $("#btnImportData").hide();
  363. $("#btnDeleteData").hide();
  364. // div
  365. $("#div-approve").hide();
  366. // clear table
  367. clearTable(tableDetail);
  368. resetTableDetail();
  369. $("#div_detail").hide();
  370. // show modal
  371. showModal("modal-add-service");
  372. }
  373. function edit(id) {
  374. console.log(id);
  375. $("#btnAddUpdate").hide();
  376. $("#btnGetData").hide();
  377. $("#btnImportData").hide();
  378. $("#btnSubmit").hide();
  379. $("#btnDeleteData").hide();
  380. $("#btnExportData").hide();
  381. $("#btnExportSystem").hide();
  382. $("#btnApprove").hide();
  383. $("#btnReject").hide();
  384. $("#div_detail").hide();
  385. // get service info
  386. $.ajax({
  387. url: "/Admin/RewardReqGetById",
  388. data: {
  389. id: id
  390. },
  391. type: "POST",
  392. success: function (data) {
  393. console.log(data);
  394. if (data.error != "0" && data.error != "1") {
  395. setTimeout(function () {
  396. showModal('message-dialog');
  397. $('#message-content').html(data.content.split("\n").join("<br />"));
  398. }, 1000);
  399. } else {
  400. var customer = data.data;
  401. console.log("status : " + customer.status);
  402. // change data
  403. $("#id").val(id);
  404. $("#name").val(customer.name);
  405. $("#fromDate").val(customer.fromDate);
  406. $("#toDate").val(customer.toDate);
  407. $("#gameId").val(customer.gameId);
  408. $("#status").val(customer.status);
  409. $("#note").val(customer.note);
  410. if (customer.status == "@LumilotoUtils.ExportStatus.draft") {
  411. $("#btnGetData").hide();
  412. $("#btnImportData").show();
  413. $("#btnExportSystem").show();
  414. $("#div_detail").hide();
  415. } else {
  416. $("#div_detail").show();
  417. }
  418. if (customer.status == "@LumilotoUtils.ExportStatus.startUpload") {
  419. $("#btnGetData").show();
  420. $("#btnDeleteData").show();
  421. $("#btnSubmit").show();
  422. $("#btnImportData").show();
  423. $("#btnExportSystem").show();
  424. $("#div_detail").show();
  425. }
  426. if (customer.status == "@LumilotoUtils.ExportStatus.finishUpload") {
  427. $("#div_detail").show();
  428. $("#btnExportData").show();
  429. }
  430. if (customer.status != "@LumilotoUtils.ExportStatus.approved" && customer.status != "@LumilotoUtils.ExportStatus.rejected"
  431. && customer.status != "@LumilotoUtils.ExportStatus.addingMoney" && customer.status != "@LumilotoUtils.ExportStatus.finishAddMoney") {
  432. $("#btnApprove").show();
  433. $("#btnReject").show();
  434. }
  435. //$("#btnUpdate").show();
  436. //search();
  437. viewData();
  438. // show modal
  439. showModal("modal-add-service");
  440. }
  441. },
  442. error: function (data) {
  443. console.log(data.error);
  444. }
  445. })
  446. }
  447. function updateStatus(status) {
  448. var id = $("#id").val();
  449. console.log(id);
  450. // get service info
  451. $.ajax({
  452. url: "/Admin/RewardReqAddUpdate",
  453. data: {
  454. exportId: id,
  455. type: status,
  456. action: 'update'
  457. },
  458. type: "POST",
  459. success: function (data) {
  460. console.log(data);
  461. if (data.error != "0") {
  462. setTimeout(function () {
  463. showModal('message-dialog');
  464. $('#message-content').html(data.content.split("\n").join("<br />"));
  465. }, 1000);
  466. } else {
  467. if (status == '@LumilotoUtils.ExportActionType.deleted') {
  468. Swal.fire('Removed!', '', 'success').then((result) => {
  469. hideModal("modal-add-service");
  470. search();
  471. });
  472. } else if (status == '@LumilotoUtils.ExportActionType.deleteData') {
  473. Swal.fire('Data deleted!', '', 'success').then((result) => {
  474. search();
  475. });
  476. } else if (status == '@LumilotoUtils.ExportActionType.finishUpload') {
  477. edit(id);
  478. Swal.fire('Request submited!', '', 'success').then((result) => {
  479. search();
  480. });
  481. }
  482. }
  483. },
  484. error: function (data) {
  485. console.log(data.error);
  486. }
  487. })
  488. }
  489. function process(status) {
  490. var id = $("#id").val();
  491. console.log(id);
  492. // get service info
  493. $.ajax({
  494. url: "/Admin/RewardReqProcess",
  495. data: {
  496. exportId: id,
  497. type: status
  498. },
  499. type: "POST",
  500. success: function (data) {
  501. console.log(data);
  502. if (data.error != "0") {
  503. setTimeout(function () {
  504. showModal('message-dialog');
  505. $('#message-content').html(data.content.split("\n").join("<br />"));
  506. }, 1000);
  507. } else {
  508. if (status == '@LumilotoUtils.ExportActionType.rejected') {
  509. Swal.fire('Request rejected!', '', 'success').then((result) => {
  510. hideModal("modal-add-service");
  511. //search();
  512. });
  513. } else if (status == '@LumilotoUtils.ExportActionType.approved') {
  514. Swal.fire('Request approved!', '', 'success').then((result) => {
  515. hideModal("modal-add-service");
  516. //search();
  517. });
  518. }
  519. }
  520. },
  521. error: function (data) {
  522. console.log(data.error);
  523. }
  524. })
  525. }
  526. $('#modal-add-service').on('hidden.bs.modal', function () {
  527. search();
  528. });
  529. function updateGridData(val) {
  530. console.log(val);
  531. $("#gridbody").html("");
  532. var html = "";
  533. if (val != undefined) {
  534. for (var i = 0; i < val.length; i++) {
  535. var service = val[i];
  536. html += "<tr>";
  537. html += "<td scope='row'>" + (i + 1) + "</td>";
  538. html += "<td class='text-center'><span class='fa fa-edit cursor-pointer' onclick='edit(\"" + service.id + "\")'></span> "
  539. + (service.status == '1' || service.status == '0' ? "<span class='fa fa-remove text-danger cursor-pointer' onclick='remove(\"" + service.id + "\")'></span></td >" : "");
  540. //+ (service.status == '2' ? "<span class='fa fa-play text-primary cursor-pointer' onclick='process(\"" + service.id + "\")'></span></td >" : "");
  541. //html += "<td class='text-left'>" + service.code + "</td>";
  542. html += "<td class='text-left'>" + service.name + "</td>";
  543. html += "<td class='text-left'>" + service.fromDate + "</td>";
  544. html += "<td class='text-left'>" + service.toDate + "</td>";
  545. html += "<td class='text-left'>" + GetGameName(service.gameId) + "</td>";
  546. html += "<td class='text-left'>" + service.createUsers + "</td>";
  547. html += "<td class='text-left'>" + service.createDate + "</td>";
  548. html += "<td class='text-center'>" + GetStatusExportName(service.status) + "</td>";
  549. html += "<td class='text-right'>" + formatNumber(service.moneySystem) + "</td>";
  550. html += "<td class='text-right'>" + formatNumber(service.moneyImport) + "</td>";
  551. html += "<td class='text-right'>" + formatNumber(service.moneyNotImport) + "</td>";
  552. html += "<td class='text-right'>" + formatNumber(service.moneyNotSys) + "</td>";
  553. html += "<td class='text-left'>" + service.acceptUsers + "</td>";
  554. html += "<td class='text-left'>" + service.acceptDate + "</td>";
  555. html += "</tr>";
  556. }
  557. }
  558. $("#gridbody").html(html);
  559. }
  560. function reject() {
  561. Swal.fire({
  562. title: 'Do you want to reject this request?',
  563. showDenyButton: false,
  564. showCancelButton: true,
  565. confirmButtonText: `Yes`,
  566. denyButtonText: `No`,
  567. }).then((result) => {
  568. /* Read more about isConfirmed, isDenied below */
  569. if (result.isConfirmed) {
  570. //Swal.fire('Saved!', '', 'success')
  571. process('@LumilotoUtils.ExportActionType.rejected');
  572. //edit($("#id").val());
  573. //Swal.fire('Data deleted!', '', 'success')
  574. } else if (result.isDenied) {
  575. //Swal.fire('Changes are not saved', '', 'info')
  576. }
  577. })
  578. }
  579. function approve() {
  580. Swal.fire({
  581. title: 'Do you want to approve this request?',
  582. showDenyButton: false,
  583. showCancelButton: true,
  584. confirmButtonText: `Yes`,
  585. denyButtonText: `No`,
  586. }).then((result) => {
  587. /* Read more about isConfirmed, isDenied below */
  588. if (result.isConfirmed) {
  589. //Swal.fire('Saved!', '', 'success')
  590. process('@LumilotoUtils.ExportActionType.approved');
  591. //edit($("#id").val());
  592. //Swal.fire('Data deleted!', '', 'success')
  593. } else if (result.isDenied) {
  594. //Swal.fire('Changes are not saved', '', 'info')
  595. }
  596. })
  597. }
  598. function deleteData() {
  599. Swal.fire({
  600. title: 'Do you want to delete data of this request?',
  601. showDenyButton: false,
  602. showCancelButton: true,
  603. confirmButtonText: `Yes`,
  604. denyButtonText: `No`,
  605. }).then((result) => {
  606. /* Read more about isConfirmed, isDenied below */
  607. if (result.isConfirmed) {
  608. //Swal.fire('Saved!', '', 'success')
  609. updateStatus('@LumilotoUtils.ExportActionType.deleteData');
  610. edit($("#id").val());
  611. //Swal.fire('Data deleted!', '', 'success')
  612. } else if (result.isDenied) {
  613. //Swal.fire('Changes are not saved', '', 'info')
  614. }
  615. })
  616. }
  617. function remove(id) {
  618. console.log("remove " + id);
  619. $("#id").val(id);
  620. Swal.fire({
  621. title: 'Do you want to remove this request?',
  622. showDenyButton: false,
  623. showCancelButton: true,
  624. confirmButtonText: `Yes`,
  625. denyButtonText: `No`,
  626. }).then((result) => {
  627. /* Read more about isConfirmed, isDenied below */
  628. if (result.isConfirmed) {
  629. //Swal.fire('Saved!', '', 'success')
  630. updateStatus('@LumilotoUtils.ExportActionType.deleted');
  631. //Swal.fire('Removed!', '', 'success')
  632. } else if (result.isDenied) {
  633. //Swal.fire('Changes are not saved', '', 'info')
  634. }
  635. })
  636. }
  637. function submit() {
  638. Swal.fire({
  639. title: 'Do you want to submit this request?',
  640. showDenyButton: false,
  641. showCancelButton: true,
  642. confirmButtonText: `Yes`,
  643. denyButtonText: `No`,
  644. }).then((result) => {
  645. /* Read more about isConfirmed, isDenied below */
  646. if (result.isConfirmed) {
  647. //Swal.fire('Saved!', '', 'success')
  648. updateStatus('@LumilotoUtils.ExportActionType.finishUpload');
  649. edit($("#id").val());
  650. //Swal.fire('Request submited!', '', 'success')
  651. } else if (result.isDenied) {
  652. //Swal.fire('Changes are not saved', '', 'info')
  653. }
  654. })
  655. }
  656. function importFile() {
  657. var id = $("#id").val();
  658. console.log(id);
  659. // get service info
  660. var formData = new FormData();
  661. var importFile = $("#importFile").get(0);
  662. if (importFile.files.length > 0) {
  663. formData.append("importFile", importFile.files[0]);
  664. formData.append("exportId", $("#id").val());
  665. fetch("/Admin/RewardImportData", {
  666. method: "POST",
  667. body: formData
  668. })
  669. .then(response => response.json())
  670. .then(data => {
  671. console.log(data);
  672. if (data.error != "0") {
  673. setTimeout(function () {
  674. showModal('message-dialog');
  675. $('#message-content').html(data.content.split("\n").join("<br />"));
  676. }, 1000);
  677. } else {
  678. $("#importFile").val("");
  679. edit($("#id").val());
  680. }
  681. });
  682. //$.ajax({
  683. // url: "/Admin/RewardImportData",
  684. // data: formData,
  685. // type: "POST",
  686. // success: function (data) {
  687. // console.log(data);
  688. // if (data.error != "0") {
  689. // setTimeout(function () {
  690. // showModal('message-dialog');
  691. // $('#message-content').html(data.content.split("\n").join("<br />"));
  692. // }, 1000);
  693. // } else {
  694. // viewData();
  695. // }
  696. // },
  697. // error: function (data) {
  698. // console.log(data.error);
  699. // }
  700. //});
  701. }
  702. }
  703. function exportSystem() {
  704. var id = $("#id").val();
  705. console.log(id);
  706. // get service info
  707. $.ajax({
  708. url: "/Admin/ExportWinner",
  709. data: {
  710. gameId: $("#gameId").val(),
  711. fromDate: $("#fromDate").val(),
  712. toDate: $("#toDate").val(),
  713. isPayOnline: "0"
  714. },
  715. type: "POST",
  716. xhr: function () {
  717. var xhr = new XMLHttpRequest();
  718. xhr.onreadystatechange = function () {
  719. if (xhr.readyState == 2) {
  720. if (xhr.status == 200) {
  721. xhr.responseType = "blob";
  722. console.log("blob");
  723. } else {
  724. xhr.responseType = "text";
  725. console.log("text");
  726. }
  727. }
  728. };
  729. return xhr;
  730. },
  731. success: function (data, status, xhr) {
  732. let filename = "";
  733. let disposition = xhr.getResponseHeader('Content-Disposition');
  734. if (disposition && disposition.indexOf('attachment') !== -1) {
  735. let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
  736. let matches = filenameRegex.exec(disposition);
  737. if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
  738. }
  739. let a = document.createElement('a');
  740. let url = window.URL.createObjectURL(data);
  741. a.href = url;
  742. a.download = filename.replace('UTF-8', '');;
  743. document.body.append(a);
  744. a.click();
  745. a.remove();
  746. window.URL.revokeObjectURL(url);
  747. $("#overlay").fadeOut(300);
  748. },
  749. error: function (data) {
  750. console.log(data.error);
  751. }
  752. })
  753. }
  754. function exportData() {
  755. var id = $("#id").val();
  756. console.log(id);
  757. // get service info
  758. $.ajax({
  759. url: "/Admin/ExportWinner",
  760. data: {
  761. exportId: id,
  762. type: "2"
  763. },
  764. type: "POST",
  765. xhr: function () {
  766. var xhr = new XMLHttpRequest();
  767. xhr.onreadystatechange = function () {
  768. if (xhr.readyState == 2) {
  769. if (xhr.status == 200) {
  770. xhr.responseType = "blob";
  771. console.log("blob");
  772. } else {
  773. xhr.responseType = "text";
  774. console.log("text");
  775. }
  776. }
  777. };
  778. return xhr;
  779. },
  780. success: function (data, status, xhr) {
  781. let filename = "";
  782. let disposition = xhr.getResponseHeader('Content-Disposition');
  783. if (disposition && disposition.indexOf('attachment') !== -1) {
  784. let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
  785. let matches = filenameRegex.exec(disposition);
  786. if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
  787. }
  788. let a = document.createElement('a');
  789. let url = window.URL.createObjectURL(data);
  790. a.href = url;
  791. a.download = filename.replace('UTF-8', '');;
  792. document.body.append(a);
  793. a.click();
  794. a.remove();
  795. window.URL.revokeObjectURL(url);
  796. $("#overlay").fadeOut(300);
  797. },
  798. error: function (data) {
  799. console.log(data.error);
  800. }
  801. })
  802. }
  803. </script>
  804. <script>
  805. function viewData() {
  806. console.log("Search data");
  807. startSpinner('btnViewData');
  808. var exportId = $("#id").val();
  809. console.log("exportId " + exportId);
  810. //clearTable(tableDetail);
  811. $.ajax({
  812. url: "/Admin/RewardGetListWinner",
  813. data: {
  814. exportId: $("#id").val(),
  815. type: "2"
  816. },
  817. type: "POST",
  818. success: function (data) {
  819. stopSpinner('btnViewData');
  820. console.log(data);
  821. if (data.error != "0" && data.error != "1") {
  822. showModal('message-dialog');
  823. $('#message-content').html(data.content.split("\n").join("<br />"));
  824. } else {
  825. updateGridDataDetail(data.data.listLotoExportData);
  826. //resetTableDetail();
  827. }
  828. },
  829. error: function (data) {
  830. stopSpinner('btnViewData');
  831. console.log(data.error);
  832. }
  833. })
  834. }
  835. function updateGridDataDetail(val) {
  836. console.log(val);
  837. $("#gridbody_detail").html("");
  838. var html = "";
  839. if (val != undefined) {
  840. for (var i = 0; i < val.length; i++) {
  841. var service = val[i];
  842. //<th scope="col" class="text-center">Phone</th>
  843. // <th scope="col" class="text-center">Game</th>
  844. // <th scope="col" class="text-center">Term</th>
  845. // <th scope="col" class="text-center">Date</th>
  846. // <th scope="col" class="text-center">Prize</th>
  847. // <th scope="col" class="text-center">Paid</th>
  848. html += "<tr>";
  849. html += "<td scope='row'>" + (i + 1) + "</td>";
  850. html += "<td class='text-left'>" + service.msisdn + "</td>";
  851. html += "<td class='text-left'>" + GetGameName(service.gameId) + "</td>";
  852. html += "<td class='text-left'>" + service.randomId + "</td>";
  853. html += "<td class='text-left'>" + service.date + "</td>";
  854. html += "<td class='text-left'>" + service.winnerName + "</td>";
  855. html += "<td class='text-left'>" + formatNumber(service.money) + "</td>";
  856. html += "<td class='text-left'>" + (service.isPay == '0' ? 'Not yet' : 'Already') + "</td>";
  857. html += "</tr>";
  858. }
  859. }
  860. $("#gridbody_detail").html(html);
  861. }
  862. </script>
  863. }