Sadeep Sachintha
feat: implement FX service with persistent caching and optimize concurrent rate fetching in main
72fdc64 | <html lang="en"> | |
| <head> | |
| <title>Exchange Rates</title> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> | |
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | |
| <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> | |
| <script type="text/javascript" src="./javascript/zebra_datepicker.js"></script> | |
| <script type="text/javascript" src="./javascript/iframeResizer.contentWindow.min.js"></script> | |
| <link rel="stylesheet" href="./css/default.css" type="text/css"> | |
| </head> | |
| <body onload="setDefault()"> | |
| <div class="container-fluid"> | |
| <div class="col-sm-12"> | |
| <form class="form-horizontal" action="exrates_results.php" method="post" name="lookupForm" id="lookupForm" onsubmit="window.focus(); return checkValidArray();" role="form"> | |
| <fieldset> | |
| <legend>Specific Date or Range</legend> | |
| <input name="lookupPage" value="lookup_daily_exchange_rates.php" type="hidden"> | |
| <input name="startRange" value="2006-11-11" type="hidden"> | |
| <div class="col-sm-offset-2 col-sm-10"> | |
| <div class="radio"> | |
| <input id="rangeType_dates" id="rangeType" name="rangeType" value="dates" checked="checked" type="radio" onchange="getSpecificValue(this.value)"> | |
| <div class="form-inline"> | |
| <div class="form-group"> | |
| <label class="control-label">Start (or single date) </label> | |
| <div class="input-group"> | |
| <input class="datepicker" type="text" id="txtStart" name="txtStart" value="2026-05-17"> | |
| </div> | |
| <label class="control-label">to</label> | |
| <div class="input-group"> | |
| <input class="datepicker" type="text" id="txtEnd" name="txtEnd" value="2026-05-17"> | |
| </div> | |
| </div> | |
| </div> | |
| <p class="small text-muted">Date Format: yyyy-mm-dd</p> | |
| </div> | |
| <div id="errordiv" class="text-danger form-group" style="display: none;"></div> | |
| <div class="radio"> | |
| <div class="form-group"> | |
| <label for="rangeType_range"> | |
| <input id="rangeType_range" name="rangeType" value="range" type="radio" onchange="getQuickDate(this.value)">Quick Date: | |
| </label> | |
| </div> | |
| <div class="form-inline"> | |
| <div class="form-group"> | |
| <span>Latest</span> | |
| <select id="rangeValue" name="rangeValue" onchange="setQuickValueRange()" class="form-control" disabled> | |
| <option value="1" selected="selected">1 day</option> | |
| <option value="7">7 days</option> | |
| <option value="14">14 days</option> | |
| <option value="21">21 days</option> | |
| <option value="30">30 days</option> | |
| <option value="60">60 days</option> | |
| </select> | |
| <span>for daily series.</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </fieldset> | |
| <p> </p> | |
| <fieldset> | |
| <legend>Daily Indicative Exchange Rates</legend> | |
| <div class="form-group"> | |
| <div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="AUD~Australian Dollar" id="chk_cur[]" type="checkbox"> Australian Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BHD~Bahrain Dinar" id="chk_cur[]" type="checkbox"> Bahrain Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BDT~Bangladesh Taka" id="chk_cur[]" type="checkbox"> Bangladesh Taka</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BRL~Brazil Real" id="chk_cur[]" type="checkbox"> Brazil Real</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="BND~Brunei Dollar" id="chk_cur[]" type="checkbox"> Brunei Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CAD~Canadian Dollar" id="chk_cur[]" type="checkbox"> Canadian Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CNH~Chinese Yuan (Offshore)" id="chk_cur[]" type="checkbox"> Chinese Yuan (Offshore)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CNY~Chinese Yuan (Renminbi)" id="chk_cur[]" type="checkbox"> Chinese Yuan (Renminbi)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CZK~Czechoslovak Koruna" id="chk_cur[]" type="checkbox"> Czechoslovak Koruna</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="DKK~Danish Kroner" id="chk_cur[]" type="checkbox"> Danish Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="EGP~Egypt Pound" id="chk_cur[]" type="checkbox"> Egypt Pound</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="EUR~Euro" id="chk_cur[]" type="checkbox" checked> Euro</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="GHS~Ghana Cedi" id="chk_cur[]" type="checkbox"> Ghana Cedi</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="XAU~Gold (per Troy oz.)" id="chk_cur[]" type="checkbox"> Gold (per Troy oz.)</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="HKD~Hong Kong Dollar" id="chk_cur[]" type="checkbox"> Hong Kong Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="HUF~Hungary Forint" id="chk_cur[]" type="checkbox"> Hungary Forint</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="INR~Indian Rupee" id="chk_cur[]" type="checkbox"> Indian Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="IDR~Indonesian Rupiah" id="chk_cur[]" type="checkbox"> Indonesian Rupiah</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="IRR~Iran Rial" id="chk_cur[]" type="checkbox"> Iran Rial</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="JPY~Japanese Yen" id="chk_cur[]" type="checkbox" checked> Japanese Yen</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="JOD~Jordan Dinar" id="chk_cur[]" type="checkbox"> Jordan Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KES~Kenya Shillings" id="chk_cur[]" type="checkbox"> Kenya Shillings</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KRW~Korean Won" id="chk_cur[]" type="checkbox"> Korean Won</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="KWD~Kuwait Dinar" id="chk_cur[]" type="checkbox"> Kuwait Dinar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MOP~Macau Pataca" id="chk_cur[]" type="checkbox"> Macau Pataca</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MYR~Malaysia Ringgit" id="chk_cur[]" type="checkbox"> Malaysia Ringgit</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MVR~Maldivian Rufiya" id="chk_cur[]" type="checkbox"> Maldivian Rufiya</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MUR~Mauritius Rupee" id="chk_cur[]" type="checkbox"> Mauritius Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="MMK~Myanmar Kyat" id="chk_cur[]" type="checkbox"> Myanmar Kyat</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NPR~Nepal Rupee" id="chk_cur[]" type="checkbox"> Nepal Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="RON~New Romania Leu" id="chk_cur[]" type="checkbox"> New Romania Leu</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NZD~New Zealand Dollar" id="chk_cur[]" type="checkbox"> New Zealand Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NGN~Nigeria Naira" id="chk_cur[]" type="checkbox"> Nigeria Naira</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="NOK~Norwegian Kroner" id="chk_cur[]" type="checkbox"> Norwegian Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="OMR~Oman Rial" id="chk_cur[]" type="checkbox"> Oman Rial</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PKR~Pakistan Rupee" id="chk_cur[]" type="checkbox"> Pakistan Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PGK~Papua New Guinea Kina" id="chk_cur[]" type="checkbox"> Papua New Guinea Kina</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PHP~Philippines Peso" id="chk_cur[]" type="checkbox"> Philippines Peso</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="PLN~Poland Zloty" id="chk_cur[]" type="checkbox"> Poland Zloty</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="QAR~Qatar Riyal" id="chk_cur[]" type="checkbox"> Qatar Riyal</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="RUB~Russia Rouble" id="chk_cur[]" type="checkbox"> Russia Rouble</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SAR~Saudi Arabian Riyal" id="chk_cur[]" type="checkbox"> Saudi Arabian Riyal</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SCR~Seychelles Rupee" id="chk_cur[]" type="checkbox"> Seychelles Rupee</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SGD~Singapore Dollar" id="chk_cur[]" type="checkbox"> Singapore Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SBD~Solomon Island Dollar" id="chk_cur[]" type="checkbox"> Solomon Island Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="ZAR~South African Rand" id="chk_cur[]" type="checkbox"> South African Rand</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="GBP~Sterling Pound" id="chk_cur[]" type="checkbox"> Sterling Pound</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="SEK~Swedish Kroner" id="chk_cur[]" type="checkbox"> Swedish Kroner</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="CHF~Swiss Franc" id="chk_cur[]" type="checkbox"> Swiss Franc</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="TWD~Taiwan Dollar" id="chk_cur[]" type="checkbox"> Taiwan Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="THB~Thailand Baht" id="chk_cur[]" type="checkbox"> Thailand Baht</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="AED~UAE Dirham" id="chk_cur[]" type="checkbox"> UAE Dirham</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="USD~US Dollar" id="chk_cur[]" type="checkbox" checked> US Dollar</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="VND~Vietnam Dong" id="chk_cur[]" type="checkbox"> Vietnam Dong</label></div></div><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label for="IEXE0101"><input name="chk_cur[]" value="ZMW~Zambia Kwacha (New)" id="chk_cur[]" type="checkbox"> Zambia Kwacha (New)</label></div></div> | |
| </div> | |
| <div class="form-group"> | |
| <div class="col-sm-offset-2 col-sm-10"> | |
| <button class="btn btn-default" value="Select All" name="select_button" type="button" onclick="selectAll(document.lookupForm['chk_cur[]'])">Select All</button> | |
| <button class="btn btn-default" value="Clear" name="clear_button" type="button" onclick="deselectAll(document.lookupForm['chk_cur[]'])">Clear</button> | |
| <button class="btn btn-primary" type="submit" value="Submit" name="submit_button">Submit</button> | |
| <!--a href="./exrates_results.php" class="btn btn-primary">Submit</a--> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| </div> | |
| <script> | |
| $(document).ready(function() { | |
| // assuming the controls you want to attach the plugin to | |
| // have the "datepicker" class set | |
| $('input.datepicker').Zebra_DatePicker(); | |
| }); | |
| function getSpecificValue() { | |
| document.getElementById("rangeValue").disabled = true; | |
| //document.getElementById("txtStart").disabled = false; | |
| //document.getElementById("txtEnd").disabled = false; | |
| document.getElementById("txtStart").value = formatDate(new Date()); | |
| document.getElementById("txtEnd").value = formatDate(new Date()); | |
| document.getElementById("rangeValue").value = 1; | |
| } | |
| function getQuickDate() { | |
| document.getElementById("rangeValue").disabled = false; | |
| //document.getElementById("txtStart").readonly = "readonly"; | |
| //document.getElementById("txtEnd").readonly = "readonly"; | |
| document.getElementById("txtStart").value = formatDate(new Date()); | |
| document.getElementById("txtEnd").value = formatDate(new Date()); | |
| } | |
| function selectAll(chk) { | |
| for (i = 0; i < chk.length; i++){ | |
| chk[i].checked = true ; | |
| } | |
| //alert(chk.length); | |
| } | |
| function deselectAll(chk) { | |
| for (i = 0; i < chk.length; i++){ | |
| chk[i].checked = false ; | |
| } | |
| //alert(chk.length); | |
| } | |
| function formatDate(date) { | |
| var d = new Date(date), | |
| month = '' + (d.getMonth() + 1), | |
| day = '' + d.getDate(), | |
| year = d.getFullYear(); | |
| if (month.length < 2) month = '0' + month; | |
| if (day.length < 2) day = '0' + day; | |
| return [year, month, day].join('-'); | |
| } | |
| function setDefault() | |
| { | |
| document.getElementById("rangeType_dates").checked = true; | |
| document.getElementById("rangeValue").value = 1; | |
| document.getElementById("txtStart").value = formatDate(new Date()); | |
| document.getElementById("txtEnd").value = formatDate(new Date()); | |
| } | |
| function setQuickValueRange() | |
| { | |
| var rangeSelect = document.getElementById("rangeValue"); | |
| var selectedRange = rangeSelect.options[rangeSelect.selectedIndex].value; | |
| //alert(selectedRange); | |
| var now = new Date(); | |
| if (selectedRange == 1) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 0)); | |
| } | |
| else if (selectedRange == 7) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 6)); | |
| } | |
| else if (selectedRange == 14) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 13)); | |
| } | |
| else if (selectedRange == 21) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 20)); | |
| } | |
| else if (selectedRange == 30) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 29)); | |
| } | |
| else if (selectedRange == 60) | |
| { | |
| document.getElementById("txtStart").value = formatDate(now.setDate(now.getDate() - 59)); | |
| } | |
| document.getElementById("txtEnd").value = formatDate(new Date()); | |
| } | |
| </script> | |
| </body> | |
| </html> | |