Saturday, June 11, 2016

Autocomplete in Asp.NET MVC using Webapi 2

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

No comments:

Post a Comment