public void filterRecord(int length, string property, string value, string value2, ref ScheduleMaster[] scheduleMaster)
 {
     /* Fields that can be filter
      * Name
      * Desription
      * Status
      */
     //Filter for a specific patient
     int fetch;
     scheduleMaster = null;
     if (property.Equals("Date"))
     {
         StringManipulation strManipulate = new StringManipulation(value, value2, "Date");
         strManipulate.dateValue2 = strManipulate.dateValue2.AddHours(11);
         var records = db.ScheduleMasters.Where(sm => sm.Date >= strManipulate.dateValue && sm.Date <= strManipulate.dateValue2).Count();
         if (records > length)
         {
             if ((records - length) > pageSize)
                 fetch = pageSize;
             else
                 fetch = records - length;
             var getScheduleMaster = db.ScheduleMasters.Where(sm => sm.Date >= strManipulate.dateValue && sm.Date <= strManipulate.dateValue2)
                                                       .Include(sm => sm.UserInformation).Where(ui => ui.UserInformation.User.UserTypeId == 4)
                                                       .OrderByDescending(sm => sm.Date).Skip((length)).Take(fetch).AsNoTracking().ToArray();
             scheduleMaster = getScheduleMaster;
         }
     }
     else if (property.Equals("DentistFirstName"))
     {
         value = value.ToLower();
         var records = db.ScheduleMasters.Where(sm => sm.UserInformation.FirstName.ToLower().Contains(value) || sm.UserInformation.FirstName.ToLower().ToLower().Equals(value)).Count();
         if (records > length)
         {
             if ((records - length) > pageSize)
                 fetch = pageSize;
             else
                 fetch = records - length;
             var getScheduleMaster = db.ScheduleMasters.Where(sm => sm.UserInformation.FirstName.ToLower().Contains(value) || sm.UserInformation.FirstName.ToLower().ToLower().Equals(value))
                                                       .Include(sm => sm.UserInformation).Where(ui => ui.UserInformation.User.UserTypeId == 4)
                                                       .OrderBy(sm => sm.Id).Skip((length)).Take(fetch).AsNoTracking().ToArray();
             scheduleMaster = getScheduleMaster;
         }
     }
     else if (property.Equals("DentistMiddleName"))
     {
         value = value.ToLower();
         var records = db.ScheduleMasters.Where(sm => sm.UserInformation.MiddleName.ToLower().Contains(value) || sm.UserInformation.MiddleName.ToLower().ToLower().Equals(value)).Count();
         if (records > length)
         {
             if ((records - length) > pageSize)
                 fetch = pageSize;
             else
                 fetch = records - length;
             var getScheduleMaster = db.ScheduleMasters.Where(sm => sm.UserInformation.MiddleName.ToLower().Contains(value) || sm.UserInformation.MiddleName.ToLower().ToLower().Equals(value))
                                                       .Include(sm => sm.UserInformation).Where(ui => ui.UserInformation.User.UserTypeId == 4)
                                                       .OrderBy(sm => sm.Id).Skip((length)).Take(fetch).AsNoTracking().ToArray();
             scheduleMaster = getScheduleMaster;
         }
     }
     else if (property.Equals("DentistLastName"))
     {
         value = value.ToLower();
         var records = db.ScheduleMasters.Where(sm => sm.UserInformation.LastName.ToLower().Contains(value) || sm.UserInformation.LastName.ToLower().ToLower().Equals(value)).Count();
         if (records > length)
         {
             if ((records - length) > pageSize)
                 fetch = pageSize;
             else
                 fetch = records - length;
             var getScheduleMaster = db.ScheduleMasters.Where(sm => sm.UserInformation.LastName.ToLower().Contains(value) || sm.UserInformation.LastName.ToLower().ToLower().Equals(value))
                                                       .Include(sm => sm.UserInformation).Where(ui => ui.UserInformation.User.UserTypeId == 4)
                                                       .OrderBy(sm => sm.Id).Skip((length)).Take(fetch).AsNoTracking().ToArray();
             scheduleMaster = getScheduleMaster;
         }
     }
     //status
     else
     {
         StringManipulation strManipulate = new StringManipulation(value, value2, "Integer");
         var records = db.ScheduleMasters.Where(sm => sm.Status == strManipulate.intValue).Count();
         if (records > length)
         {
             if ((records - length) > pageSize)
                 fetch = pageSize;
             else
                 fetch = records - length;
             var getScheduleMaster = db.ScheduleMasters.Where(sm => sm.Status == strManipulate.intValue)
                                                       .Include(sm => sm.UserInformation).Where(ui => ui.UserInformation.User.UserTypeId == 4)
                                                       .OrderBy(sm => sm.Id).Skip((length)).Take(fetch).AsNoTracking().ToArray();
             scheduleMaster = getScheduleMaster;
         }
     }
 }
 public void saveScheduleMaster(ScheduleMaster scheduleMaster, string dummy)
 {
     db.ScheduleMasters.Add(scheduleMaster);
     db.SaveChanges();
 }
        public IHttpActionResult PostScheduleMaster(ScheduleMaster scheduleMaster)
        {
            response.status = "FAILURE";
            if (!ModelState.IsValid)
            {
                response.message = "Bad request.";
                return Ok(response);
            }
            try
            {
                if(validateForSave(scheduleMaster.Date, scheduleMaster.DentistId)){
                    saveScheduleMaster(scheduleMaster, "dummy");
                    response.status = "SUCCESS";
                    response.objParam1 = scheduleMaster;
                }
                else
                    response.message = "Created Schedule is conflict to other schedules.";
            }
            catch (Exception e)
            {
                response.message = e.InnerException.InnerException.Message.ToString();
            }

            return Ok(response);
        }
        public IHttpActionResult PutScheduleMaster(int id, ScheduleMaster scheduleMaster)
        {
            response.status = "FAILURE";
            if (!ModelState.IsValid)
            {
                response.message = "Bad request.";
                return Ok(response);
            }

            if (id != scheduleMaster.Id)
            {
                response.message = "Schedule not found.";
                return Ok(response);
            }

            db.Entry(scheduleMaster).State = EntityState.Modified;

            try
            {
                var getScheduleDetail = db.ScheduleDetails.Where(sd => sd.ScheduleMasterId == scheduleMaster.Id).AsNoTracking().ToArray();
                bool valid = true;
                //Check if details are not yet used or still open
                foreach (ScheduleDetail sd in getScheduleDetail)
                {
                    if (sd.Status == 1)
                    {
                        valid = false;
                        break;
                    }
                }
                if (!valid || scheduleMaster.Status == 1)
                {
                    response.message = "Schedule is already used so changing the dentist is not allowed.";
                    return Ok(response);
                }
                db.SaveChanges();
                response.status = "SUCCESS";
                response.objParam1 = scheduleMaster;
            }
            catch (Exception e)
            {
                if (!ScheduleMasterExists(id))
                {
                    response.message = "Schedule not found.";
                    return Ok(response);
                }
                else
                {
                    response.message = e.InnerException.InnerException.Message.ToString();
                }
            }

            return Ok(response);
        }
 //Filtering for Schedule date, base on the status
 public IHttpActionResult GetScheduleMaster(int length, int status, string property, string value, string value2)
 {
     ScheduleMaster[] scheduleMaster = new ScheduleMaster[pageSize];
     this.filterRecord(length, status, property, value, value2, ref scheduleMaster);
     if (scheduleMaster != null)
         return Ok(scheduleMaster);
     else
         return Ok();
 }