| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Globalization;
- using System.Threading;
- using System.Threading.Tasks;
- using LotteryWebApp.Common;
- using LotteryWebApp.Extensions;
- using LotteryWebApp.Languages;
- using LotteryWebApp.Models;
- using LotteryWebApp.Service;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Configuration;
- using Newtonsoft.Json;
- using LotteryWebApp.Controllers;
- namespace LotteryWebApp.Areas.Millions.Controllers
- {
- [Area("Millions")]
- [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
- public class HomeController : BaseController
- {
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
- IConfiguration configuration;
- private readonly IWebHostEnvironment webHostEnvironment;
- APIFunctions api = new APIFunctions();
- public HomeController(IConfiguration _configuration, IWebHostEnvironment hostEnvironment)
- {
- configuration = _configuration;
- webHostEnvironment = hostEnvironment;
- }
- public String GetParameter(String key)
- {
- return configuration.GetSection(key).Value;
- }
- public async Task<IActionResult> Index(
- string termType,
- String uuid,
- String mcuid,
- String phonenumber,
- String token
- )
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
- String lang = currentCulture.Name;
- String msisdnAuto = null;
- if (!CheckAuthToken())
- {
- if (token != null)
- {
- AutoLoginRequest autoLoginRequest = new AutoLoginRequest { token = token };
- AutoLoginResponse autoLoginResponse = await api.AutoLoginApiAsync(configuration, autoLoginRequest);
- if (autoLoginResponse.code == Code.SUCCESS_CODE)
- {
- string msisdnReal = validateMsisdn(autoLoginResponse.data.msisdn.Substring(1));
- if (msisdnReal == "") return RedirectToAction("Login", "Account", new { area = "" });
- CheckAccountRequest checkAccountRequest = new CheckAccountRequest
- {
- msisdn = msisdnReal,
- channel = Constants.WEB_CHANNEL,
- language = lang == "en" ? "0" : "1"
- };
- CheckAccountResponse checkAccountResponse = api.CheckAccountApi(configuration, checkAccountRequest);
- if (checkAccountResponse.status == Code.SUCCESS)
- {
- string tokenGetReal = checkAccountResponse.token;
- HttpContext.Session.SetComplexData("msisdn", msisdnReal);
- CreateAuthToken();
- HttpContext.Session.SetComplexData("token", tokenGetReal);
- UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest { users = msisdnReal, token = tokenGetReal };
- Profile profileGet = api.UserLoadProfileApi(configuration, userGetProfileRequest);
- HttpContext.Session.SetComplexData("profile", profileGet);
- UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdnReal, token = tokenGetReal };
- UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
- HttpContext.Session.SetComplexData("userStatus", userStatusGet);
- }
- else
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- }
- }
- else if (uuid != null)
- {
- String res = await CheckAutoLogin(log, uuid);
- if (res != null)
- {
- dynamic json = JsonConvert.DeserializeObject(res);
- if (json["code"] == "200" && json["errorCode"] == "200")
- {
- msisdnAuto = json["data"]["msisdn"];
- }
- }
- String msisdnDetect = validateMsisdn(msisdnAuto.Substring(1));
- if (msisdnDetect != "")
- {
- RegisterRequest request = new RegisterRequest { Msisdn = msisdnDetect };
- RegisterResponse reset = api.UserForgotPasswordApi(configuration, request);
- if (reset.status == Code.SUCCESS)
- {
- HttpContext.Session.Remove("regInfos");
- HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
- return RedirectToAction("Login", "Account", new { area = "", step = 2 });
- }
- }
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- else if (phonenumber != null)
- {
- // simplified or same logic as original
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- else
- {
- // If no token/uuid and not auth, verify existing session token
- var savedToken = HttpContext.Session.GetString("token");
- if (string.IsNullOrEmpty(savedToken))
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- }
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.termType = termType != null ? termType : Constants.Millions_CODE;
- model.userStatus = userStatus;
- model.profile = profile;
- model.listTerm = new List<Term>();
- String tokenGet = HttpContext.Session.GetComplexData<String>("token");
- String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
- String toDate = DateTime.Now.ToString("dd/MM/yyyy");
- // Get Top Winner
- GetTopWinnerRequest getTopWinnerRequest = new GetTopWinnerRequest { type = lang == "en" ? "0" : "1", token = tokenGet };
- GetTopWininerResponse getTopWininerResponse = api.GetTopWinnerApi(configuration, getTopWinnerRequest);
- if (getTopWininerResponse.responseCode == Code.SUCCESS)
- {
- model.topWinner = getTopWininerResponse.list;
- HttpContext.Session.SetComplexData("topWinner", model.topWinner);
- }
- // Get Term Results
- //ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
- //{
- // gameId = model.termType,
- // token = tokenGet,
- // type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- // order = Constants.DECS,
- // fromDate = fromDate,
- // toDate = toDate,
- // rowsOnPage = Constants.ROW_ON_PAGE,
- // seqPage = "1",
- // id = Constants.ALL_DATA
- //};
- //ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
- //if (result.responseCode == Code.SESSION_EXPIRED)
- //{
- // return RedirectToAction("Login", "Account", new { area = "" });
- //}
- //else if (result.responseCode == Code.SUCCESS)
- //{
- // model.listTerm = result.listTerm;
- //}
- if (!string.IsNullOrEmpty(termType))
- {
- HttpContext.Session.SetString("termType", termType);
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- return View(model);
- }
- public async Task<IActionResult> GameHome(string termType)
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.termType = termType != null ? termType : Constants.Millions_CODE;
- model.userStatus = userStatus;
- model.profile = profile;
- model.listTerm = new List<Term>();
- if (!string.IsNullOrEmpty(termType))
- {
- HttpContext.Session.SetString("termType", termType);
- }
- // Get Term Results for Jackpot
- string cachedBolet = HttpContext.Session.GetString("bolet");
- if (!string.IsNullOrEmpty(cachedBolet))
- {
- model.bolet = cachedBolet;
- model.lastResult = HttpContext.Session.GetString("lastResult");
- model.lastResultDate = HttpContext.Session.GetString("lastResultDate");
- model.nextRoundDate = HttpContext.Session.GetString("nextRoundDate");
- }
- else
- {
- String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
- String toDate = DateTime.Now.ToString("dd/MM/yyyy");
- string lang = CultureInfo.CurrentCulture.Name;
- string langValue = (lang.StartsWith("en") || lang.StartsWith("fr")) ? "0" : "1";
- // Get Last Result
- ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
- {
- gameId = model.termType,
- language = langValue,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = fromDate,
- toDate = toDate,
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
- if (result.responseCode == Code.SUCCESS && result.listTerm != null && result.listTerm.Count > 0)
- {
- model.bolet = result.listTerm[0].bolet;
- model.lastResult = result.listTerm[0].result;
- model.lastResultDate = result.listTerm[0].date_random;
- model.nextRoundDate = result.listTerm[0].date_end;
- HttpContext.Session.SetString("nextRoundDate", model.nextRoundDate ?? "");
- HttpContext.Session.SetString("bolet", model.bolet ?? "");
- HttpContext.Session.SetString("lastResult", model.lastResult ?? "");
- HttpContext.Session.SetString("lastResultDate", model.lastResultDate ?? "");
- }
- //// Get Next Round
- //ResultOfTermRequest nextRoundRequest = new ResultOfTermRequest
- //{
- // gameId = model.termType,
- // language = langValue,
- // token = token,
- // type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- // order = Constants.ASC,
- // fromDate = DateTime.Now.ToString("dd/MM/yyyy"),
- // toDate = DateTime.Now.AddDays(7).ToString("dd/MM/yyyy"),
- // rowsOnPage = "1",
- // seqPage = "1",
- // id = Constants.ALL_DATA
- //};
- //ResultOfTermResponse nextResult = api.GetResultOfTermApi(configuration, nextRoundRequest);
- //if (nextResult.responseCode == Code.SUCCESS && nextResult.listTerm != null && nextResult.listTerm.Count > 0)
- //{
- // model.nextRoundDate = nextResult.listTerm[0].date_random;
- // HttpContext.Session.SetString("nextRoundDate", model.nextRoundDate ?? "");
- //}
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- public async Task<IActionResult> FAQ()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- public IActionResult More()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- public IActionResult Profile()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- [HttpPost]
- public IActionResult UserUpdateProfile(string fullName, string birthday)
- {
- try
- {
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- string token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(msisdn) || string.IsNullOrEmpty(token))
- {
- return Json(new { status = Code.ERROR, message = "Session expired" });
- }
- string birthdayFormat = birthday;
- if (!string.IsNullOrEmpty(birthday) && birthday.Contains("-"))
- {
- try {
- birthdayFormat = DateTime.ParseExact(birthday, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy");
- } catch { }
- }
- UserUpdateProfileRequest request = new UserUpdateProfileRequest
- {
- users = msisdn,
- token = token,
- fullName = fullName,
- birthday = birthdayFormat
- };
- UserUpdateProfileResponse response = api.UserUpdateProfileApi(configuration, request);
-
- if (response.status == Code.SUCCESS)
- {
- // Update session profile
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- if (profile != null)
- {
- profile.fullName = fullName;
- profile.birthday = birthdayFormat;
- HttpContext.Session.SetComplexData("profile", profile);
- }
- }
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { status = Code.ERROR, message = ex.Message });
- }
- }
- public IActionResult Rule()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- public IActionResult JackpotResults(string termType, string fromFormatted, string toFormatted)
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- model.bolet = HttpContext.Session.GetString("bolet");
- model.lastResult = HttpContext.Session.GetString("lastResult");
- model.lastResultDate = HttpContext.Session.GetString("lastResultDate");
- model.nextRoundDate = HttpContext.Session.GetString("nextRoundDate");
- model.termType = !string.IsNullOrEmpty(termType)
- ? termType
- : (HttpContext.Session.GetString("termType") ?? Constants.Millions_CODE);
- string lang = CultureInfo.CurrentCulture.Name;
- string langValue = (lang.StartsWith("en") || lang.StartsWith("fr")) ? "0" : "1";
- // Default: last 7 days if filter not provided
- if (string.IsNullOrEmpty(fromFormatted))
- {
- fromFormatted = DateTime.Now.AddDays(-365).ToString("yyyy-MM-dd");
- }
- if (string.IsNullOrEmpty(toFormatted))
- {
- toFormatted = DateTime.Now.ToString("yyyy-MM-dd");
- }
- ViewBag.FromFormatted = fromFormatted;
- ViewBag.ToFormatted = toFormatted;
- RpSearchDetailTicketRequest request = new RpSearchDetailTicketRequest
- {
- requestId = DateTime.Now.Ticks.ToString(),
- msisdn = "-1",
- gameId = model.termType,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- prize = "JACKPOT",
- language = langValue,
- token = token
- };
- RpSearchDetailTicketResponse result = api.RpSearchDetailTicketApi(configuration, request);
- log.Debug("RpSearchDetailTicket response: " + JsonConvert.SerializeObject(result));
- model.listTerm = new List<Term>();
- var winnersByDraw = new Dictionary<string, List<JackpotWinnerItem>>();
- if (result != null && result.responseCode == Code.SUCCESS && result.list != null)
- {
- // Group winners by randomId -> one draw card per group
- var grouped = result.list
- .GroupBy(w => w.randomId)
- .OrderByDescending(g => ParseDrawDate(g.First().randomDate));
- foreach (var group in grouped)
- {
- var first = group.First();
- DateTime drawDt = ParseDrawDate(first.randomDate);
- long totalPrize = 0;
- foreach (var w in group)
- {
- long m;
- if (long.TryParse(w.moneyWin, out m)) totalPrize += m;
- }
- Term term = new Term
- {
- id = first.randomId,
- seq = first.randomId,
- date_random = drawDt != DateTime.MinValue ? drawDt.ToString("dd/MM/yyyy HH:mm:ss") : first.randomDate,
- date_start = first.startDate,
- date_end = first.endDate,
- result = first.result,
- money_winner = totalPrize.ToString(),
- bolet = totalPrize.ToString(),
- split = group.Count().ToString(),
- gameId = model.termType
- };
- model.listTerm.Add(term);
- winnersByDraw[first.randomId] = group.ToList();
- }
- }
- // Cache winners by draw id so JackpotDetail can render them
- HttpContext.Session.SetComplexData("jackpotWinners", winnersByDraw);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTerm = new List<Term>();
- }
- return View(model);
- }
- private static DateTime ParseDrawDate(string raw)
- {
- if (string.IsNullOrEmpty(raw)) return DateTime.MinValue;
- string[] formats = {
- "M/d/yyyy h:mm:ss tt",
- "MM/dd/yyyy h:mm:ss tt",
- "M/d/yyyy hh:mm:ss tt",
- "dd/MM/yyyy HH:mm:ss",
- "yyyy-MM-dd HH:mm:ss"
- };
- DateTime dt;
- if (DateTime.TryParseExact(raw, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
- {
- return dt;
- }
- if (DateTime.TryParse(raw, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
- {
- return dt;
- }
- return DateTime.MinValue;
- }
- public IActionResult JackpotDetail(string id, string termType)
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- model.bolet = HttpContext.Session.GetString("bolet");
- model.lastResult = HttpContext.Session.GetString("lastResult");
- model.lastResultDate = HttpContext.Session.GetString("lastResultDate");
- model.termType = !string.IsNullOrEmpty(termType)
- ? termType
- : (HttpContext.Session.GetString("termType") ?? Constants.Millions_CODE);
- ViewBag.DrawId = id;
- var cache = HttpContext.Session.GetComplexData<Dictionary<string, List<JackpotWinnerItem>>>("jackpotWinners");
- List<JackpotWinnerItem> winners = null;
- if (cache != null && !string.IsNullOrEmpty(id) && cache.ContainsKey(id))
- {
- winners = cache[id];
- }
- ViewBag.Winners = winners ?? new List<JackpotWinnerItem>();
- }
- catch (Exception ex)
- {
- log.Error(ex);
- ViewBag.Winners = new List<JackpotWinnerItem>();
- }
- return View(model);
- }
- public IActionResult HowToPlay()
- {
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
- }
- catch (Exception ex)
- {
- log.Error(ex);
- }
- return View(model);
- }
- public IActionResult Results(string termType, string fromDate, string toDate)
- {
- TermResultHistoryModel model = new TermResultHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
-
- model.termType = termType != null ? termType : (HttpContext.Session.GetString("termType") ?? Constants.Millions_CODE);
-
- // Set default dates if not provided (same as root implementation)
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- model.fromDate = fromFormatted;
- model.toDate = toFormatted;
- // Load initial results
- ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTerm = result.listTerm ?? new List<Term>();
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTerm = new List<Term>();
- }
- return View(model);
- }
- public IActionResult TermResultHistory(string termType, string fromDate, string toDate)
- {
- TermResultHistoryModel model = new TermResultHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- model.termType = termType;
- model.fromDate = fromFormatted;
- model.toDate = toFormatted;
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTerm = result.listTerm ?? new List<Term>();
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTerm = new List<Term>();
- }
- return PartialView("_TermResultHistoryV2", model);
- }
- public IActionResult TermResultHistoryGrouped(string fromDate, string toDate)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
- string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
- string[] gameIds = { Constants.Millions_CODE };
- var allTerms = new List<Term>();
- foreach (var gid in gameIds)
- {
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = gid,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
- rowsOnPage = "50",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS && result.listTerm != null)
- {
- allTerms.AddRange(result.listTerm);
- }
- }
- // Group by date part of date_random
- var grouped = allTerms.GroupBy(x => {
- DateTime dt;
- if (DateTime.TryParse(x.date_random, out dt))
- return dt.Date;
- return DateTime.MinValue;
- })
- .Where(g => g.Key != DateTime.MinValue)
- .OrderByDescending(g => g.Key)
- .ToList();
- return PartialView("_TermResultHistoryGrouped", grouped);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return PartialView("_TermResultHistoryGrouped", new List<IGrouping<DateTime, Term>>());
- }
- }
- public IActionResult History(string termType, string status, string seqPage)
- {
- UserTicketHistoryModel model = new UserTicketHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
-
- model.termType = termType ?? Constants.Millions_CODE;
- model.status = status ?? Constants.ALL_DATA; // -1 for all, or 0, 1, 2
- model.seqPage = seqPage ?? "1";
- UserTicketRequest request = new UserTicketRequest
- {
- gameId = model.termType,
- msisdn = msisdn,
- token = token,
- type = model.status,
- order = Constants.DECS,
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = model.seqPage
- };
- UserTicketResponse result = api.GetUserTicketApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTicket = result.listTicket ?? new List<Ticket>();
- model.totalPage = result.totalPage;
- }
- else
- {
- model.listTicket = new List<Ticket>();
- model.totalPage = "0";
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTicket = new List<Ticket>();
- }
- return View(model);
- }
- public IActionResult TermUserTicketHistory(string termType, string status, string seqPage)
- {
- UserTicketHistoryModel model = new UserTicketHistoryModel();
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
- string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- model.termType = termType;
- model.status = status;
- model.seqPage = seqPage ?? "1";
- UserTicketRequest request = new UserTicketRequest
- {
- gameId = termType,
- msisdn = msisdn,
- token = token,
- type = status,
- order = Constants.DECS,
- rowsOnPage = Constants.ROW_ON_PAGE,
- seqPage = model.seqPage
- };
- UserTicketResponse result = api.GetUserTicketApi(configuration, request);
- if (result.responseCode == Code.SUCCESS)
- {
- model.listTicket = result.listTicket ?? new List<Ticket>();
- model.totalPage = result.totalPage;
- }
- else
- {
- model.listTicket = new List<Ticket>();
- model.totalPage = "0";
- }
- }
- catch (Exception ex)
- {
- log.Error(ex);
- model.listTicket = new List<Ticket>();
- }
- return PartialView("_TermUserTicketHistory", model);
- }
- [HttpPost]
- [ValidateAntiForgeryToken]
- public IActionResult TermResult(string termType)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- string lang = CultureInfo.CurrentCulture.Name;
- string langValue = (lang.StartsWith("en") || lang.StartsWith("fr")) ? "0" : "1";
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = termType,
- language = langValue,
- token = token,
- type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- order = Constants.DECS,
- rowsOnPage = "5",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- return Json(result);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmTicketData([FromBody] ConfirmTicketDataRequest request)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- request.token = token;
- request.msisdn = msisdn;
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.requestId = Guid.NewGuid().ToString();
- // DEBUG: Log request data
- var ticketDebug = request.ticket != null ? string.Join("; ", request.ticket.Select(t => $"code={t.code}, money={t.money}")) : "NULL";
- log.Info($"[ConfirmTicketData] gameId={request.gameId}, msisdn={request.msisdn}, tickets=[{ticketDebug}]");
- ConfirmTicketDataResponse response = api.ConfirmTicketDataApi(configuration, request);
-
- // DEBUG: Log response
- log.Info($"[ConfirmTicketData] Response: code={response.responseCode}, msg={response.responseMessage}, transId={response.transId}");
-
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmOTP([FromBody] ConfirmOTPRequest request)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- request.token = token;
- request.msisdn = msisdn;
- ConfirmOTPResponse response = api.ConfirmOTPApi(configuration, request);
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult SendOTP()
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- SendOTPRequest request = new SendOTPRequest
- {
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- SendOTPResponse response = api.SendOTPApi(configuration, request);
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmBuyingTicketV2([FromBody] ConfirmBuyingTicketRequest request)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- // Step 1: Verify OTP first
- ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
- {
- otp = request.paymentCode,
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
- if (otpResponse.responseCode != Code.SUCCESS)
- {
- return Json(new { responseCode = otpResponse.responseCode, responseMessage = otpResponse.responseMessage });
- }
- // Step 2: Proceed to Confirm buying
- request.token = token;
- request.msisdn = msisdn;
- request.requestId = Guid.NewGuid().ToString();
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.channel = configuration.GetSection("channel").Value;
- ConfirmBuyingTicketResponse response = api.ConfirmBuyingTicketApi(configuration, request);
- if (response.responseCode == Code.SUCCESS)
- {
- UpdateUserStatus(msisdn, token);
- }
- return Json(response);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- [HttpPost]
- public IActionResult ConfirmBuyingTicket([FromBody] ConfirmBuyingTicketRequest request)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
- request.token = token;
- request.msisdn = msisdn;
- request.requestId = Guid.NewGuid().ToString();
- request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
- request.channel = configuration.GetSection("channel").Value;
- ConfirmBuyingTicketResponse response = api.ConfirmBuyingTicketApi(configuration, request);
- if (response.responseCode == Code.SUCCESS)
- {
- UpdateUserStatus(msisdn, token);
- }
- return Json(new {
- responseCode = response.responseCode,
- responseMessage = response.responseMessage,
- transId = response.transId,
- orderId = response.orderId,
- userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
- });
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
- }
- }
- public IActionResult BuyTicket(string termType)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- model.termType = termType ?? Constants.Millions_CODE;
- Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
- UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- model.userStatus = userStatus;
- model.profile = profile;
-
- // Get active term
- ResultOfTermRequest request = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_NOT_RESULT_TYPE,
- order = Constants.DECS,
- rowsOnPage = "1",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
- if (result.responseCode == Code.SUCCESS && result.listTerm != null && result.listTerm.Count > 0)
- {
- model.listTerm = result.listTerm;
- }
- else
- {
- model.listTerm = new List<Term>();
- }
- if (model.termType == Constants.PIC10_BIGSMALL_CODE || model.termType == Constants.PIC10_ODDEVEN_CODE)
- {
- ResultOfTermRequest pastRequest = new ResultOfTermRequest
- {
- gameId = model.termType,
- token = token,
- type = Constants.TERM_HAS_RESULT_TYPE,
- order = Constants.DECS,
- fromDate = DateTime.Now.AddDays(-10).ToString("dd/MM/yyyy"),
- toDate = DateTime.Now.ToString("dd/MM/yyyy"),
- rowsOnPage = "5",
- seqPage = "1",
- id = Constants.ALL_DATA
- };
- ResultOfTermResponse pastResult = api.GetResultOfTermApi(configuration, pastRequest);
- if (pastResult.responseCode == Code.SUCCESS && pastResult.listTerm != null)
- {
- var pastTerms = pastResult.listTerm.Take(5).ToList();
- pastTerms.Reverse(); // Display chronological order
- ViewBag.PastTerms = pastTerms;
- }
- else
- {
- ViewBag.PastTerms = new List<Term>();
- }
- }
- return View(model);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return RedirectToAction("GameHome", new { termType = termType });
- }
- }
- public IActionResult TransferWinMoney()
- {
- if (!CheckAuthToken())
- {
- return RedirectToAction("Login", "Account", new { area = "" });
- }
- HomeIndex_ViewModel model = new HomeIndex_ViewModel();
- model.profile = HttpContext.Session.GetComplexData<Profile>("profile");
- model.userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
- return View(model);
- }
- [HttpPost]
- public IActionResult ConfirmTransfer(string otp, string phone, string amount, int channelPayment = 1)
- {
- try
- {
- var token = HttpContext.Session.GetComplexData<string>("token");
- var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
- if (string.IsNullOrEmpty(token)) return Json(new { status = Code.SESSION_EXPIRED, message = "Session expired" });
- var transferChannel = channelPayment == 2
- ? Constants.NATCASH_WALLET_TRANSFER
- : Constants.BASIC_WALLET_TRANSFER;
- // Step 1: Verify OTP
- ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
- {
- otp = otp,
- msisdn = msisdn,
- token = token,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
- if (otpResponse.responseCode != Code.SUCCESS)
- {
- return Json(new { status = otpResponse.responseCode, message = otpResponse.responseMessage });
- }
- // Step 2: If OTP success, call Transfer Money Api
- TransferMoneyRequest xferRequest = new TransferMoneyRequest
- {
- msisdn = msisdn,
- msisdnReceive = phone,
- money = amount,
- otp = otp,
- token = token,
- channelPayment = transferChannel,
- language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
- channel = configuration.GetSection("channel").Value
- };
- TransferMoneyResponse xferResponse = api.TransferMoneyApi(configuration, xferRequest);
- if (xferResponse.responseCode == Code.SUCCESS)
- {
- UpdateUserStatus(msisdn, token);
- }
- return Json(new {
- status = xferResponse.responseCode,
- message = xferResponse.responseMessage,
- paymentCode = xferResponse.paymentCode,
- responseCode = xferResponse.responseCode,
- userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
- });
- }
- catch (Exception ex)
- {
- log.Error(ex);
- return Json(new { status = Code.ERROR, message = ex.Message });
- }
- }
- private void UpdateUserStatus(string msisdn, string token)
- {
- try
- {
- UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdn, token = token };
- UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
- if (userStatusGet != null)
- {
- HttpContext.Session.SetComplexData("userStatus", userStatusGet);
- }
- }
- catch (Exception ex)
- {
- log.Error("UpdateUserStatus Error: " + ex.Message);
- }
- }
- public IActionResult Logout()
- {
- ClearCache();
- return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
- }
- }
- }
|