In the following part I am showing javascript Code:
$('#PATIENTYYID').autocomplete({
source: function (request, response) {
var compid = $('#txtcompid').val();
var year = $('#PATIENTYY').val();
$.ajax({
url: '/api/ApiControllername/PatientYID',
type: 'GET',
cache: false,
data: { query: request.term, query2: compid, Year: year },
dataType: 'json',
success: function (data) {
response($.map(data, function (item) {
return {
label: item,
value: item,
};
}));
}
});
},
select: function (event, ui) {
$('#PATIENTYYID').val(ui.item.label);
txtOneChanged();
},
change: $('#PATIENTYYID').keyup(_.debounce(txtOneChanged, 500))
});
function txtOneChanged() {
var changedText = $("#PATIENTYYID").val();
var changedText2 = $('#txtcompid').val();
var year = $('#PATIENTYY').val();
//var Name = document.getElementById('PatientYearID');
var txtBox = document.getElementById('PATIENTYYID');
var txtBox2 = document.getElementById('PatientName');
var txtBox3 = document.getElementById('BILLDT');
var txtBox4 = document.getElementById('BILLNO');
var txtBox5 = document.getElementById('BILLYY');
var txtBox6 = document.getElementById('DISCHGDT');
var txtBox7 = document.getElementById('DISCHGTM');
var txtBox8 = document.getElementById('RemarksMaster');
if (changedText != "") {
$.getJSON(
'/api/PatientName', { "ChangedText": changedText, "ChangedText2": changedText2 },//apiCabinBed
function (result) {
txtBox2.value = result;
});
$.getJSON(
'/api/ApiControllername/DynamicPatinetYearId', {
"ChangedText": changedText, "ChangedText2": changedText2, "Year": year
},
function (result) {
txtBox.value = result[0].PATIENTYYID;
txtBox3.value = result[0].BILLDT;
txtBox4.value = result[0].BILLNO;
txtBox5.value = result[0].BILLYY;
txtBox6.value = result[0].DISCHGDT;
txtBox7.value = result[0].DISCHGTM;
txtBox8.value = result[0].RemarksMaster;
});
}
}
Lower Part Script:
<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-ui-1.10.4.min.js"></script>
Now I am showing What I have done in the Apicontroller:
[System.Web.Http.Route("api/apiControllername/PatientYID")]
[System.Web.Http.HttpGet]
public IEnumerable<string> GetPatinetYearID(string query, string query2, Int64 Year)
{
using (var db = new DbContext())
{
Int64 compid = Convert.ToInt64(query2);
List<string> result = new List<string>();
var tags = from p in db.HDBContext
where p.COMPID == compid
select new { p.PATIENTYYID };
string date = Convert.ToString(Year);
string currentyear = date.Substring(2, 2);
foreach (var tag in tags)
{
if ((tag.PATIENTYYID.ToString().StartsWith(query) == true) && (tag.PATIENTYYID.ToString().StartsWith(currentyear) == true))
{
result.Add(tag.PATIENTYYID.ToString());
}
}
IEnumerable<string> en = result;
return en;
}
}
[System.Web.Http.Route("api/apiControllername/DynamicPatinetYearId")]
[System.Web.Http.HttpGet]
public IEnumerable<BDTO> DynamicPatientYid(string changedText, string changedText2, Int64 year)
{
using (var db = new DbContext())
{
Int64 compid = Convert.ToInt64(changedText2);
String name = "";
List<string> rt = new List<string>();
var tags = from p in db.HDBContext
where p.COMPID == compid
select new { p.PATIENTYYID };
string date = Convert.ToString(year);
string currentyear = date.Substring(2, 2);
//string currentyear = Convert.ToString(td).Substring(8, 2);
foreach (var tag in tags)
{
if ((tag.PATIENTYYID.ToString().StartsWith(changedText) == true) && (tag.PATIENTYYID.ToString().StartsWith(currentyear) == true))
{
rt.Add(tag.PATIENTYYID.ToString());
}
}
int lenChangedtxt = changedText.Length;
Int64 cont = rt.Count();
Int64 k = 0;
string status = "";
if (changedText != "" && cont != 0)
{
while (status != "no")
{
k = 0;
foreach (var n in rt)
{
string ss = Convert.ToString(n);
string subss = "";
if (ss.Length >= lenChangedtxt)
{
subss = ss.Substring(0, lenChangedtxt);
subss = subss.ToUpper();
}
else
{
subss = "";
}
if (subss == changedText.ToUpper())
{
k++;
}
if (k == cont)
{
status = "yes";
lenChangedtxt++;
if (ss.Length > lenChangedtxt - 1)
{
changedText = changedText + ss[lenChangedtxt - 1];
}
k = 0;
}
else
{
status = "no";
//lenChangedtxt--;
}
}
}
if (lenChangedtxt == 1)
{
name = changedText.Substring(0, lenChangedtxt);
}
else if (lenChangedtxt > 1)
{
name = changedText.Substring(0, lenChangedtxt - 1);
}
}
else
{
name = changedText;
}
Int64 yearID = Convert.ToInt64(name);
var find_data = (from n in db.BillMasterDbSet where n.COMPID == compid && n.PATIENTYY == year && n.PATIENTYYID==yearID select n).ToList();
if(find_data.Count!=0)
{
return (from t1 in db.BillMasterDbSet
where t1.COMPID == compid && t1.PATIENTYY == year && t1.PATIENTYYID == yearID
select new
{
billdate = t1.BILLDT,
billno = t1.BILLNO,
billyear = t1.BILLYY,
dischargedate = t1.DISCHGDT,
dischargetime = t1.DISCHGTM,
remarks=t1.REMARKS
})
.AsEnumerable().Select(a => new BillMasterDTO
{
PATIENTYYID=yearID,
BILLDT=Convert.ToString(a.billdate),
BILLYY=a.billyear,
BILLNO=a.billno,
DISCHGDT=a.dischargedate,
DISCHGTM=a.dischargetime,
RemarksMaster=a.remarks
}).ToList();
}
else
{
return db.HMS_IpdDbSet.AsEnumerable().Select(a => new BillMasterDTO
{
PATIENTYYID = yearID,
PatientName = "",
BILLDT = "",
BILLYY = 0,
BILLNO = 0,
RemarksMaster = ""
}).ToList();
}
}
}
My autocomplete is slightly changed from general autocomplete. I am using an algorithm for matching 1st common part and showing that.
Example: Data set like: 1600001, 1600002, 1600003
By my autocomplete if you press 1 then it shows all related data and fetch 160000 to that textbox. Because 160000 is common in those data set.
Thank you
Enjoy Coding
SS Team