public IHttpActionResult PostCheckinDetail(UserAttendanceViewModel login)
        {
            LogInData    logR         = new LogInData();
            var          userdetails  = generic.GetUserDetail(login.UserId);
            var          Ipdata       = db.IpMasters.Where(c => c.UserId == userdetails.SubscriberId).ToList();
            var          finalipMatch = Ipdata.Where(c => c.LatitudeFrom <= login.Latitude && c.LatitudeTo >= login.Latitude && c.LongitudeFrom <= login.Longitude && c.LongitudeTo >= login.Longitude).FirstOrDefault();
            TimeZoneInfo INDIAN_ZONE  = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
            DateTime     indianTime   = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE);

            var getcheckindetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == login.UserId && c.CheckInDate == indianTime.Date).FirstOrDefault();

            if (finalipMatch != null)
            {
                if (getcheckindetails != null)
                {
                    var getcheckoutdetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == login.UserId && c.CheckOutDate == indianTime.Date).FirstOrDefault();
                    if (getcheckoutdetails != null)
                    {
                        logR.CheckedStatus  = 2;                             // checkin / checkout done
                        logR.CheckOutTime   = getcheckindetails.CheckOutTime;
                        logR.CheckInTime    = getcheckindetails.CheckInTime; //mj
                        logR.CurrentDate    = indianTime.Date;
                        logR.ServerTime     = indianTime.TimeOfDay;
                        logR.LocationStatus = 1; //Inside of premises
                    }

                    else
                    {
                        logR.CheckedStatus  = 1; // Only checked in
                        logR.CheckInTime    = getcheckindetails.CheckInTime;
                        logR.CurrentDate    = indianTime.Date;
                        logR.ServerTime     = indianTime.TimeOfDay;
                        logR.LocationStatus = 1;//Inside of premises
                    }
                }
                else
                {
                    logR.CheckedStatus  = 0; //No checkin /checkout found
                    logR.CurrentDate    = indianTime.Date;
                    logR.ServerTime     = indianTime.TimeOfDay;
                    logR.LocationStatus = 1;//Inside of premises
                }
            }
            else
            {
                logR.LocationStatus = 0;//outside of premises
                logR.CurrentDate    = indianTime.Date;
                logR.ServerTime     = indianTime.TimeOfDay;
            }
            return(new LogInResult(logR, Request));
        }
        public IHttpActionResult GetUserAttendance([FromUri] int id)
        {
            Exception ex = null;
            UserAttendanceViewModel result = null;

            try {
                var userAttendance = _dataProvider.GetEntity <UserAttendance>(id);
                result = new UserAttendanceViewModel(userAttendance);

                result.AddLink(new Link(Request.RequestUri, HttpMethod.Get, RelValues.Self, ActionValues.Refresh, "UserAttendances/" + id));
                result.AddLink(new Link(Request.RequestUri, HttpMethod.Put, RelValues.Self, ActionValues.Save, "UserAttendances/" + id));
                result.AddLink(new Link(Request.RequestUri, HttpMethod.Delete, RelValues.Self, ActionValues.Delete, "UserAttendances/" + id));
            } catch (Exception e) {
                ex = e;
            }

            return(GetHttpActionResult(ex));
        }
        public IHttpActionResult Post(UserAttendanceViewModel login)
        {
            LogInData logR = new LogInData();

            TimeZoneInfo    INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
            DateTime        indianTime  = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE);
            DateTime        date        = DateTime.Now.Date;
            ApplicationUser userExists  = UserManager.FindByEmail(login.Email);

            if (userExists != null)
            {
                var user       = UserManager.Find(userExists.UserName, login.Password);
                var userDetail = generic.GetUserDetail(user.Id);
                if (user != null)
                {
                    string name = null;
                    if (userDetail.Role == "Admin")
                    {
                        name = db.CorporateProfile.Where(c => c.CorporateId == user.Id).FirstOrDefault().Name;
                    }
                    else
                    {
                        name = db.EmployeeBasicDetails.Where(e => e.UserId == user.Id).FirstOrDefault().Name;
                    }
                    var deviceinfo = db.DeviceDetail.Where(c => c.UserId == user.Id).FirstOrDefault();
                    if (deviceinfo == null)
                    {
                        pms.AddDeviceInfromation(user.Id, login.AndroidId, login.AndroidDeviceName);
                        var getcheckindetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == user.Id && c.CheckInDate == date).FirstOrDefault();

                        if (getcheckindetails != null)
                        {
                            var getcheckoutdetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == user.Id && c.CheckOutDate == date).FirstOrDefault();
                            if (getcheckoutdetails != null)
                            {
                                logR.CheckedStatus = 2;
                                logR.CheckOutTime  = getcheckindetails.CheckOutTime;
                                logR.CurrentDate   = indianTime.Date;
                                logR.ServerTime    = indianTime.TimeOfDay;
                                logR.Status        = 2;
                                logR.Message       = "LogIn Successful";
                                logR.BearerCode    = logintoken(login.Email, login.Password);
                                logR.UserName      = name;
                                logR.Phonenumber   = user.PhoneNumber;
                                logR.UserId        = user.Id;
                            }

                            else
                            {
                                logR.CheckedStatus = 1;
                                logR.CheckInTime   = getcheckindetails.CheckInTime;
                                logR.CurrentDate   = indianTime.Date;
                                logR.ServerTime    = indianTime.TimeOfDay;
                                logR.Status        = 2;
                                logR.Message       = "LogIn Successful";
                                logR.BearerCode    = logintoken(login.Email, login.Password);
                                logR.UserName      = name;
                                logR.Phonenumber   = user.PhoneNumber;
                                logR.UserId        = user.Id;
                            }
                        }
                        else
                        {
                            logR.CheckedStatus = 0;
                            logR.CheckInTime   = getcheckindetails.CheckInTime;
                            logR.CurrentDate   = indianTime.Date;
                            logR.ServerTime    = indianTime.TimeOfDay;
                            logR.Status        = 2;
                            logR.Message       = "LogIn Successful";
                            logR.BearerCode    = logintoken(login.Email, login.Password);
                            logR.UserName      = name; // user.UserName;
                            logR.Phonenumber   = user.PhoneNumber;
                            logR.UserId        = user.Id;
                        }
                    }
                    else
                    {
                        if (deviceinfo.DeviceId == login.AndroidId)
                        {
                            var getcheckindetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == user.Id && c.CheckInDate == date).FirstOrDefault();
                            if (getcheckindetails != null)
                            {
                                var getcheckoutdetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == user.Id && c.CheckOutDate == date).FirstOrDefault();
                                if (getcheckoutdetails != null)
                                {
                                    logR.CheckedStatus = 2;
                                    logR.CheckOutTime  = getcheckindetails.CheckOutTime;
                                    logR.CurrentDate   = indianTime.Date;
                                    logR.ServerTime    = indianTime.TimeOfDay;
                                    logR.Status        = 2;
                                    logR.Message       = "LogIn Successful";
                                    logR.BearerCode    = logintoken(login.Email, login.Password);
                                    logR.UserName      = name;
                                    logR.Phonenumber   = user.PhoneNumber;
                                    logR.UserId        = user.Id;
                                }

                                else
                                {
                                    logR.CheckedStatus = 1;
                                    logR.CheckInTime   = getcheckindetails.CheckInTime;
                                    logR.CurrentDate   = indianTime.Date;
                                    logR.ServerTime    = indianTime.TimeOfDay;
                                    logR.Status        = 2;
                                    logR.Message       = "LogIn Successful";
                                    logR.BearerCode    = logintoken(login.Email, login.Password);
                                    logR.UserName      = name;
                                    logR.Phonenumber   = user.PhoneNumber;
                                    logR.UserId        = user.Id;
                                }
                            }
                            else
                            {
                                logR.CheckedStatus = 0;
                                //logR.CheckInTime = getcheckindetails.CheckInTime;
                                logR.CurrentDate = indianTime.Date;
                                logR.ServerTime  = indianTime.TimeOfDay;
                                logR.Status      = 2;
                                logR.Message     = "LogIn Successful";
                                logR.BearerCode  = logintoken(login.Email, login.Password);
                                logR.UserName    = name;
                                logR.Phonenumber = user.PhoneNumber;
                                logR.UserId      = user.Id;
                            }
                        }

                        else
                        {
                            logR.Status     = 3;
                            logR.Message    = "Device is not registered";
                            logR.DeviceName = deviceinfo.DeviceName;
                            logR.UserId     = user.Id;
                        }
                    }
                    //for valid login
                }
                else
                {
                    // for invalid password
                    logR.Status  = 1;
                    logR.Message = "Invalid Password";
                }
            }
            else
            {
                logR.Status  = 0; //Invalid Email or User doesn't exists
                logR.Message = "Invalid Email";
            }
            return(new LogInResult(logR, Request));
        }
        public IHttpActionResult PostCheckInCheckOut(UserAttendanceViewModel login)
        {
            LogInData logR = new LogInData();

            string status = "NoMatch";


            var userdetails = generic.GetUserDetail(login.UserId);

            Int64 branchId = db.EmpJoiningDetail.Where(e => e.UserId == userdetails.UserId).FirstOrDefault().BranchId;

            var Ipdata = db.IpMasters.Where(c => c.UserId == userdetails.SubscriberId && c.BranchId == branchId).ToList();

            TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
            DateTime     indianTime  = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE);

            DateTime currentDate = indianTime.Date;
            TimeSpan CurrentTime = indianTime.TimeOfDay;

            if (Ipdata != null)
            {
                var branchlocation = Ipdata.FirstOrDefault();

                if (branchlocation.Authenticate == 1)
                {
                    if (login.LoggedInIp == branchlocation.IPAddressFrom || login.LoggedInIp == branchlocation.IPAddressTo)
                    {
                        status = submitAttendance(login.UserId, userdetails.SubscriberId, login.LoggedInIp, login.Latitude, login.Longitude, currentDate, CurrentTime);
                    }
                }
                else if (branchlocation.Authenticate == 2)
                {
                    if (login.Latitude >= branchlocation.LatitudeFrom && login.Latitude <= branchlocation.LatitudeTo && login.Longitude >= branchlocation.LongitudeFrom && login.Longitude <= branchlocation.LongitudeTo)
                    {
                        status = submitAttendance(login.UserId, userdetails.SubscriberId, login.LoggedInIp, login.Latitude, login.Longitude, currentDate, CurrentTime);
                    }
                }
                else if (branchlocation.Authenticate == 3)
                {
                    if ((login.LoggedInIp == branchlocation.IPAddressFrom || login.LoggedInIp == branchlocation.IPAddressTo) && (login.Latitude >= branchlocation.LatitudeFrom && login.Latitude <= branchlocation.LatitudeTo && login.Longitude >= branchlocation.LongitudeFrom && login.Longitude <= branchlocation.LongitudeTo))
                    {
                        status = submitAttendance(login.UserId, userdetails.SubscriberId, login.LoggedInIp, login.Latitude, login.Longitude, currentDate, CurrentTime);
                    }
                }

                if (status == "CheckedIn")
                {
                    logR.CheckedStatus  = 1;//checked in
                    logR.CheckInTime    = CurrentTime;
                    logR.CurrentDate    = indianTime.Date;
                    logR.ServerTime     = CurrentTime;
                    logR.LocationStatus = 1;
                }
                else
                {
                    logR.CheckedStatus  = 2; //checked Out
                    logR.CheckInTime    = db.BiometricCheckInCheckOut.Where(c => c.UserId == login.UserId && c.CheckInDate == indianTime.Date).FirstOrDefault().CheckInTime;
                    logR.CheckOutTime   = CurrentTime;
                    logR.CurrentDate    = indianTime.Date;
                    logR.ServerTime     = CurrentTime;
                    logR.LocationStatus = 1;
                }
            }
            else
            {
                logR.LocationStatus = 0;
                logR.CurrentDate    = indianTime.Date;
                logR.ServerTime     = indianTime.TimeOfDay;
            }

            //var userdetails = generic.GetUserDetail(login.UserId);
            //var Ipdata = db.IpMasters.Where(c => c.UserId == userdetails.SubscriberId).ToList();

            //TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
            //DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE);
            //if (Ipdata != null)
            //{
            //    var finalipMatch = Ipdata.Where(c => c.LatitudeFrom <= login.Latitude && c.LatitudeTo >= login.Latitude && c.LongitudeFrom <= login.Longitude && c.LongitudeTo >= login.Longitude).FirstOrDefault();
            //    //var finalipMatch = Ipdata.Where(c => c.IPAddressFrom == IpRangeofUser || c.IPAddressTo == IpRangeofUser).FirstOrDefault();
            //    if (finalipMatch != null)
            //    {

            //        var getcheckindetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == login.UserId && c.CheckInDate == indianTime.Date).FirstOrDefault();
            //        if (getcheckindetails == null)
            //        {
            //            //Default 0 fro adding new record
            //            Int64 BiometricId = 0;


            //            DateTime checkindate = indianTime.Date;
            //            TimeSpan CheckInTime = indianTime.TimeOfDay;

            //            Int64 ShiftId = 1;
            //            bool result = admin.AddEmployeeCheckinCheckout(BiometricId, login.UserId, checkindate, CheckInTime, null, null, login.LoggedInIp, userdetails.SubscriberId, ShiftId);
            //            logR.CheckedStatus = 1;//checked in
            //            logR.CheckInTime = CheckInTime;
            //            logR.CurrentDate = checkindate;
            //            logR.ServerTime = indianTime.TimeOfDay;
            //            logR.LocationStatus = 1;
            //        }
            //        else
            //        {
            //            var BiometricDetails = db.BiometricCheckInCheckOut.Where(c => c.UserId == login.UserId).ToList().OrderByDescending(d => d.CheckInDate).FirstOrDefault();
            //            //DateTime? checkoutdate = DateTime.Now.Date;
            //            //TimeSpan? CheckoutTime = DateTime.Now.TimeOfDay;
            //            DateTime checkoutdate = indianTime.Date;
            //            TimeSpan CheckoutTime = indianTime.TimeOfDay;


            //            Int64 ShiftId = 1;
            //            bool res = admin.AddEmployeeCheckinCheckout(BiometricDetails.BiometricId, login.UserId, BiometricDetails.CheckInDate, BiometricDetails.CheckInTime, checkoutdate, CheckoutTime, login.LoggedInIp, BiometricDetails.SubscriberId, ShiftId);
            //            logR.CheckedStatus = 2; //checked Out
            //            logR.CheckInTime = getcheckindetails.CheckInTime;
            //            logR.CheckOutTime = CheckoutTime;
            //            logR.CurrentDate = checkoutdate;
            //            logR.ServerTime = indianTime.TimeOfDay;
            //            logR.LocationStatus = 1;
            //        }

            //    }
            //    else
            //    {
            //        logR.LocationStatus = 0;
            //        logR.CurrentDate = indianTime.Date;
            //        logR.ServerTime = indianTime.TimeOfDay;
            //    }
            //}
            return(new LogInResult(logR, Request));
        }