Index.cshtml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. @{
  2. ViewData["Title"] = "Products & Services";
  3. }
  4. @using Pulsa.Texts
  5. @using WebPortal.Models
  6. @using WebPortal.Controllers
  7. @using WebPortal.Extensions
  8. @using WebService
  9. @using Microsoft.AspNetCore.Http
  10. @{
  11. //wsLoginResponse userInfo = Context.Session.GetComplexData<wsLoginResponse>("userInfo");
  12. String msisdn = Context.Session.GetString("account");
  13. String isdn = "";
  14. if (msisdn == null || msisdn.Length == 0)
  15. {
  16. msisdn = ViewBag.msisdn;
  17. }
  18. if (msisdn != null && msisdn.Length > BaseController.CountryCode.Length)
  19. {
  20. isdn = msisdn.Substring(BaseController.CountryCode.Length);
  21. }
  22. }
  23. @Html.Partial("_TopBanner")
  24. <div class="pathway pt-5">
  25. <div class="container">
  26. <a href="https://telemor.tl" class="f14 breadcrumb breadcrumb-back">
  27. <img src="/image/recharge/left.png"> @Lang.Back
  28. </a>
  29. <ul class="breadcrumb">
  30. <li class="breadcrumb-item"><a href="https://telemor.tl">Home</a></li>
  31. <li class="breadcrumb-item active">@Lang.Recharge</li>
  32. </ul>
  33. </div>
  34. </div>
  35. <div class="recharge">
  36. <div class="container aos-init" data-aos="fade-up">
  37. <div class="row">
  38. <div class="col-md-5 d-none d-md-block">
  39. <h3 class="f20 mb-4 tab-recharge active" order="1">@Lang.RechargeScratch</h3>
  40. <h3 class="f20 mb-4 tab-recharge" order="2">@Lang.RechargeUssd</h3>
  41. <h3 class="f20 mb-4 tab-recharge" order="3">@Lang.RechargeKakoak</h3>
  42. <h3 class="f20 mb-4 tab-recharge" order="4">@Lang.RechargeMosan</h3>
  43. </div>
  44. <div class="col-md-7 col-12 content-recharge">
  45. <h3 class="f20 mb-4 tab-recharge active d-md-none" order="1">@Lang.RechargeScratch</h3>
  46. <div class="box" order="1">
  47. <form class="formstyle">
  48. <div class="form-group">
  49. <input type="text" class="form-control" placeholder="@Lang.PhoneNumber *" id="phoneNumber2" value="@msisdn">
  50. <p class="invalid-feedback" id="recharge-phoneNumberError2"></p>
  51. </div>
  52. <div class="form-group">
  53. <input class="form-control" type="text" placeholder="@Lang.EnterScratchCode" id="scratchCode2" maxlength="13">
  54. <p class="invalid-feedback" id="recharge-scratchCodeError2"></p>
  55. @*</div>*@
  56. </div>
  57. <div class="form-group">
  58. <div class="d-flex align-items-center">
  59. <div id="captcha-topup"></div>
  60. </div>
  61. </div>
  62. <div class="form-group recharge-action">
  63. <a class="btn-white text-center heg42" onclick="clearData();" id="btn-clear">@Lang.Reset</a>
  64. <a class="btn-blue btn-regis text-center heg42" onclick="recharge2();" id="btn-recharge2">@Lang.Recharge</a>
  65. </div>
  66. <div class="row collapse-action">
  67. <div class="col-12 text-center">
  68. <img src="~/image/recharge/collapse.png" />
  69. </div>
  70. </div>
  71. </form>
  72. </div>
  73. <h3 class="f20 mb-4 tab-recharge d-md-none" order="2">@Lang.RechargeUssd</h3>
  74. <div class="box d-none" order="2">
  75. <h3 class="text-center mb-5">Dial On Your Phone</h3>
  76. <div class="row">
  77. <div class="col-6">
  78. <p class="font-weight-bold">Recharge Pulsa:</p>
  79. <p class="text-blue">*120*[code on scratch card]#</p>
  80. <br />
  81. <p class="font-weight-bold">Check Pulsa Balance:</p>
  82. <p class="text-blue">*122#</p>
  83. </div>
  84. <div class="col-6">
  85. <img src="~/image/recharge/recharge_ussd.png" />
  86. </div>
  87. </div>
  88. <div class="row collapse-action">
  89. <div class="col-12 text-center">
  90. <img src="~/image/recharge/collapse.png" />
  91. </div>
  92. </div>
  93. </div>
  94. <h3 class="f20 mb-4 tab-recharge d-md-none" order="3">@Lang.RechargeKakoak</h3>
  95. <div class="box d-none" order="3">
  96. <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
  97. <ol class="carousel-indicators">
  98. <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
  99. <li data-target="#carouselExampleIndicators" data-slide-to="1" class=""></li>
  100. <li data-target="#carouselExampleIndicators" data-slide-to="2" class=""></li>
  101. </ol>
  102. <div class="carousel-inner">
  103. <div class="carousel-item active">
  104. <div class="row">
  105. <div class="col-lg-8 col-6 text-right">
  106. <img src="~/image/recharge/kakoak.png" />
  107. </div>
  108. <div class="col-lg-4 col-6 text-right">
  109. <h5>
  110. @Lang.DownloadSupperApp
  111. </h5>
  112. <a href="https://play.google.com/store/apps/details?id=com.telemor.superapp" target="_blank" class="d-block mb-3">
  113. <img src="~/image/google-play.svg" alt="google" style="max-width: 118px; height: auto">
  114. </a>
  115. <a href="https://apps.apple.com/vn/app/kakoak-care-more/id1603869621" target="_blank" class="d-block">
  116. <img src="~/image/app-store.svg" alt="app" style="max-width: 118px; height: auto">
  117. </a>
  118. </div>
  119. <div class="col-12 text-center description">
  120. <a class="register">@Lang.Login</a>
  121. </div>
  122. </div>
  123. </div>
  124. <div class="carousel-item">
  125. <div class="row">
  126. <div class="col-lg-8 col-6 text-right">
  127. <img src="~/image/recharge/kakoak2.png" />
  128. </div>
  129. <div class="col-lg-4 col-6 text-right">
  130. <h5>
  131. @Lang.DownloadSupperApp
  132. </h5>
  133. <a href="https://play.google.com/store/apps/details?id=com.telemor.superapp" target="_blank" class="d-block mb-3">
  134. <img src="~/image/google-play.svg" alt="google" style="max-width: 118px; height: auto">
  135. </a>
  136. <a href="https://apps.apple.com/vn/app/kakoak-care-more/id1603869621" target="_blank" class="d-block">
  137. <img src="~/image/app-store.svg" alt="app" style="max-width: 118px; height: auto">
  138. </a>
  139. </div>
  140. <div class="col-12 text-center description">
  141. <a class="register">@Lang.Login</a>
  142. </div>
  143. </div>
  144. </div>
  145. <div class="carousel-item">
  146. <div class="row">
  147. <div class="col-lg-8 col-6 text-right">
  148. <img src="~/image/recharge/kakoak3.png" />
  149. </div>
  150. <div class="col-lg-4 col-6 text-right">
  151. <h5>
  152. @Lang.DownloadSupperApp
  153. </h5>
  154. <a href="https://play.google.com/store/apps/details?id=com.telemor.superapp" target="_blank" class="d-block mb-3">
  155. <img src="~/image/google-play.svg" alt="google" style="max-width: 118px; height: auto">
  156. </a>
  157. <a href="https://apps.apple.com/vn/app/kakoak-care-more/id1603869621" target="_blank" class="d-block">
  158. <img src="~/image/app-store.svg" alt="app" style="max-width: 118px; height: auto">
  159. </a>
  160. </div>
  161. <div class="col-12 text-center description">
  162. <a class="register">@Lang.Recharge</a>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
  168. <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  169. <span class="sr-only">@Lang.Previous</span>
  170. </a>
  171. <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
  172. <span class="carousel-control-next-icon" aria-hidden="true"></span>
  173. <span class="sr-only">@Lang.Next</span>
  174. </a>
  175. </div>
  176. <div class="row collapse-action">
  177. <div class="col-12 text-center">
  178. <img src="~/image/recharge/collapse.png" />
  179. </div>
  180. </div>
  181. </div>
  182. <h3 class="f20 mb-4 tab-recharge d-md-none" order="4">@Lang.RechargeMosan</h3>
  183. <div class="box d-none" order="4">
  184. <div id="carouselExampleIndicators2" class="carousel slide" data-ride="carousel">
  185. <ol class="carousel-indicators">
  186. <li data-target="#carouselExampleIndicators2" data-slide-to="0" class="active"></li>
  187. <li data-target="#carouselExampleIndicators2" data-slide-to="1" class=""></li>
  188. </ol>
  189. <div class="carousel-inner">
  190. <div class="carousel-item active">
  191. <div class="row">
  192. <div class="col-lg-8 col-6 text-right">
  193. <img src="~/image/recharge/mosan.png" />
  194. </div>
  195. <div class="col-lg-4 col-6 text-right">
  196. <h5>
  197. @Lang.DownloadMosanApp
  198. </h5>
  199. <a href="https://play.google.com/store/apps/details?id=com.mosan.eu" target="_blank" class="d-block mb-3">
  200. <img src="~/image/google-play.svg" alt="google" style="max-width: 118px; height: auto">
  201. </a>
  202. <a href="https://apps.apple.com/vn/app/mosan-telemor/id1641630920" target="_blank" class="d-block">
  203. <img src="~/image/app-store.svg" alt="app" style="max-width: 118px; height: auto">
  204. </a>
  205. </div>
  206. <div class="col-12 text-center description">
  207. <a class="register">@Lang.Login</a>
  208. </div>
  209. </div>
  210. </div>
  211. <div class="carousel-item">
  212. <div class="row">
  213. <div class="col-lg-8 col-6 text-right">
  214. <img src="~/image/recharge/mosan2.png" />
  215. </div>
  216. <div class="col-lg-4 col-6 text-right">
  217. <h5>
  218. @Lang.DownloadMosanApp
  219. </h5>
  220. <a href="https://play.google.com/store/apps/details?id=com.mosan.eu" target="_blank" class="d-block mb-3">
  221. <img src="~/image/google-play.svg" alt="google" style="max-width: 118px; height: auto">
  222. </a>
  223. <a href="https://apps.apple.com/vn/app/mosan-telemor/id1641630920" target="_blank" class="d-block">
  224. <img src="~/image/app-store.svg" alt="app" style="max-width: 118px; height: auto">
  225. </a>
  226. </div>
  227. <div class="col-12 text-center description">
  228. <a class="register">@Lang.Recharge</a>
  229. </div>
  230. </div>
  231. </div>
  232. </div>
  233. <a class="carousel-control-prev" href="#carouselExampleIndicators2" role="button" data-slide="prev">
  234. <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  235. <span class="sr-only">@Lang.Previous</span>
  236. </a>
  237. <a class="carousel-control-next" href="#carouselExampleIndicators2" role="button" data-slide="next">
  238. <span class="carousel-control-next-icon" aria-hidden="true"></span>
  239. <span class="sr-only">@Lang.Next</span>
  240. </a>
  241. </div>
  242. <div class="row collapse-action">
  243. <div class="col-12 text-center">
  244. <img src="~/image/recharge/collapse.png" />
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. </div>
  252. <link rel="stylesheet" type="text/css" href="~/css/recharge.css">
  253. @section Scripts{
  254. <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
  255. async defer>
  256. </script>
  257. <script>
  258. $(".collapse-action").click(function () {
  259. $(".tab-recharge").removeClass("active");
  260. $(".recharge .box").addClass("d-none");
  261. })
  262. $('.tab-recharge').click(function () {
  263. $(".tab-recharge").removeClass("active");
  264. let order = $(this).attr("order");
  265. console.log("order = " + order);
  266. $(".tab-recharge[order=" + order + "]").addClass("active");
  267. //$(".recharge .box").removeClass("show");
  268. $(".recharge .box").addClass("d-none");
  269. $(".recharge .box[order=" + order + "]").removeClass("d-none");
  270. })
  271. </script>
  272. <script>
  273. // Restricts input for the set of matched elements to the given inputFilter function.
  274. (function ($) {
  275. $.fn.inputFilter = function (callback, errMsg) {
  276. return this.on("input keydown keyup mousedown mouseup select contextmenu drop focusout", function (e) {
  277. if (callback(this.value)) {
  278. // Accepted value
  279. if (["keydown", "mousedown", "focusout"].indexOf(e.type) >= 0) {
  280. $(this).removeClass("input-error");
  281. this.setCustomValidity("");
  282. }
  283. this.oldValue = this.value;
  284. this.oldSelectionStart = this.selectionStart;
  285. this.oldSelectionEnd = this.selectionEnd;
  286. } else if (this.hasOwnProperty("oldValue")) {
  287. // Rejected value - restore the previous one
  288. $(this).addClass("input-error");
  289. this.setCustomValidity(errMsg);
  290. this.reportValidity();
  291. this.value = this.oldValue;
  292. this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
  293. } else {
  294. // Rejected value - nothing to restore
  295. this.value = "";
  296. }
  297. });
  298. };
  299. }(jQuery));
  300. $(document).ready(function () {
  301. $("#scratchCode2").inputFilter(function (value) {
  302. return /^\d*$/.test(value); // Allow digits only, using a RegExp
  303. }, "Only digits allowed");
  304. });
  305. </script>
  306. <script>
  307. var widgetId1;
  308. var onloadCallback = function () {
  309. widgetId1 = grecaptcha.render(
  310. 'captcha-topup',
  311. {
  312. 'sitekey': '@BaseController.CaptchaSiteKey'
  313. });
  314. };
  315. function clearData() {
  316. $("#scratchCode2").val("");
  317. grecaptcha.reset(widgetId1);
  318. }
  319. var updating2 = false;
  320. function recharge2() {
  321. if (updating2) {
  322. return;
  323. }
  324. console.log("recharge2");
  325. var token = $('input[name=__RequestVerificationToken]').val();
  326. var msisdn = $('#phoneNumber2').val();
  327. var code = $('#scratchCode2').val();
  328. // validate
  329. if (!msisdn || msisdn == "") {
  330. $("#recharge-phoneNumberError2").html("@Lang.PhonenumberRequired");
  331. $("#recharge-phoneNumberError2").show();
  332. $('#phoneNumber2').addClass("is-invalid");
  333. return;
  334. }
  335. if (!code || code == "") {
  336. $("#recharge-scratchCodeError2").html("@Lang.ScratchCodeRequired");
  337. $("#recharge-scratchCodeError2").show();
  338. $('#scratchCode2').addClass("is-invalid");
  339. return;
  340. }
  341. if (code.length != 13) {
  342. $("#recharge-scratchCodeError2").html("@Lang.ScratchCodeInvalid");
  343. $("#recharge-scratchCodeError2").show();
  344. $('#scratchCode2').addClass("is-invalid");
  345. return;
  346. }
  347. //$("#btn-recharge2").prop('disabled', true);
  348. startSpinner("btn-recharge2");
  349. updating2 = true;
  350. var formData = new FormData();
  351. formData.append('__RequestVerificationToken', token);
  352. formData.append('msisdn', msisdn);
  353. formData.append('code', code);
  354. formData.append('captcharesponse', grecaptcha.getResponse(widgetId1));
  355. $.ajax({
  356. type: "POST",
  357. url: ("/Home/RechargeScratch"),
  358. headers: { 'RequestVerificationToken': token },
  359. data: formData,
  360. contentType: false,
  361. processData: false,
  362. success: function (result) {
  363. updating2 = false;
  364. grecaptcha.reset(widgetId1);
  365. //$("#btn-recharge2").prop('disabled', false);
  366. stopSpinner("btn-recharge2");
  367. console.log(result);
  368. hideModal("Recharge");
  369. $("#scratchCode2").val("");
  370. if (result.error == '0') {
  371. $('#message-success').html(result.content);
  372. showModal("modalSuccess");
  373. } else {
  374. showModal("modalFail");
  375. $('#message-error').html(result.content);
  376. }
  377. },
  378. error: function (err) {
  379. updating2 = false;
  380. $("#scratchCode2").val("");
  381. grecaptcha.reset(widgetId1);
  382. //$("#btn-recharge2").prop('disabled', false);
  383. stopSpinner("btn-recharge2");
  384. hideModal("Recharge");
  385. showModal("modalFail");
  386. $('#message-error').html(err.statusText);
  387. }
  388. });
  389. }
  390. </script>
  391. }