public async Task <ActionResult> GetComments(string id, string searchText)
        {
            LogBookView logViewModel = new LogBookView();

            var apiController = new LogApiController();

            logViewModel.TotalNumber = apiController.LogBookCount(id, searchText);
            //using (var client = new HttpClient())
            //{
            //    string uri = WebAPI + "LogBookCount?";
            //    uri += "signalId=" + id;
            //    uri += "&searchText=" + searchText;
            //    //HTTP GET
            //    var responseTask = client.GetAsync(uri);
            //    responseTask.Wait();

            //    var result = responseTask.Result;
            //    if (result.IsSuccessStatusCode)
            //    {
            //        string data = await result.Content.ReadAsStringAsync();
            //        //use JavaScriptSerializer from System.Web.Script.Serialization
            //        JavaScriptSerializer JSserializer = new JavaScriptSerializer();
            //        //deserialize to your class
            //        logViewModel.TotalNumber = JSserializer.Deserialize<int>(data);
            //    }
            //    else //web api sent error response
            //    {
            //        return Content("Server error. Please contact administrator.");
            //    }
            //}

            return(PartialView("_Comments", logViewModel));
        }
        public async Task <ActionResult> GetCommentsResult(string id, string searchText)
        {
            LogBookView logViewModel = new LogBookView();

            using (var client = new HttpClient())
            {
                string uri = WebAPI + "LogBookGet?";
                uri += "signalId=" + id;
                uri += "&pageSize=5000";
                uri += "&pageNumber=1";
                uri += "&searchText=" + searchText;
                //HTTP GET
                var responseTask = client.GetAsync(uri);
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    string data = await result.Content.ReadAsStringAsync();

                    //use JavaScriptSerializer from System.Web.Script.Serialization
                    JavaScriptSerializer JSserializer = new JavaScriptSerializer();
                    //deserialize to your class
                    logViewModel = JSserializer.Deserialize <LogBookView>(data);
                }
                else //web api sent error response
                {
                    return(Content("Server error. Please contact administrator."));
                }
            }

            return(PartialView("_CommentsResult", logViewModel));
        }
        private LogBookView GetLogBookView(string uri)
        {
            var logBookView = new LogBookView();

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add((
                                                            new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")));

                var response = client.GetAsync(uri).Result;
                if (response.IsSuccessStatusCode)
                {
                    var content = response.Content.ReadAsStringAsync().Result;
                    JavaScriptSerializer JSserializer = new JavaScriptSerializer();
                    logBookView = JSserializer.Deserialize <LogBookView>(content);
                }
                else //web api sent error response
                {
                    return(null); //logBookView;
                }
            }

            logBookView = FindIntersection(logBookView);

            return(logBookView);
        }
        //http://localhost:52920/api/LogApi/LogBookGet?locationId=7220&pageSize=5&pageNumber=1
        public LogBookView LogBookEntries(string locationId, int pageSize, int pageNumber, string searchText)
        {
            LogBookView logViewModel = new LogBookView();
            var         db           = Repositories.LogBook.LogBookRepositoryFactory.Create();
            var         logs         = db.GetLogs(locationId, searchText);

            logViewModel.TotalNumber = logs.Count;
            logViewModel.Logs        = logs.ToPagedList(pageNumber, pageSize).ToList();
            logViewModel.PageSize    = pageSize;
            logViewModel.PageNumber  = pageNumber;
            return(logViewModel);
        }
        public LogBookView LogBookReport(string locationId, string commentSearch, DateTime startDate, DateTime endDate,
                                         string userSearch, int onsiteRemote, int reasons, int pageRows, int pageNumber)
        {
            LogBookView logViewModel = new LogBookView();
            var         db           = Repositories.LogBook.LogBookRepositoryFactory.Create();
            var         logs         = db.SearchLogs(locationId, commentSearch, startDate, endDate, userSearch, onsiteRemote, reasons);

            logViewModel.TotalNumber = logs.Count;
            logViewModel.Logs        = logs.ToPagedList(pageNumber, pageRows).ToList();
            logViewModel.PageSize    = pageRows;
            logViewModel.PageNumber  = pageNumber;
            return(logViewModel);
        }
        private LogBookView FindIntersection(LogBookView logBookView)
        {
            string currentLocation     = "";
            string currentIntersection = "";

            foreach (LogView log in logBookView.Logs)
            {
                if (log.Onsite)
                {
                    log.OnsiteOrRemote = "On Site";
                }
                else
                {
                    log.OnsiteOrRemote = "Remote";
                }

                if (!String.Equals(currentLocation, "") && String.Equals(currentLocation, log.LocationId))
                {
                    log.Intersection = currentIntersection;
                }
                else
                {
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Accept.Add((
                                                                    new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")));
                        string uri = WebAPI + "AIMSLocation?";
                        uri += "LocationToSearch=" + log.LocationId;
                        var response = client.GetAsync(uri).Result;
                        if (response.IsSuccessStatusCode)
                        {
                            var content = response.Content.ReadAsStringAsync().Result;
                            JavaScriptSerializer JSserializer = new JavaScriptSerializer();
                            var locationView =
                                JSserializer.Deserialize <ViewModels.AIMS.LocationView>(content);
                            currentLocation     = locationView.LocationIdentifier;
                            currentIntersection = locationView.Name;
                            log.Intersection    = currentIntersection;
                        }
                        else //web api sent error response
                        {
                            log.Intersection = "Server error, cannot get intersection info";
                        }
                    }
                }
            }

            return(logBookView);
        }
        public LogsReportViewModel()
        {
            DateTime nowDate = DateTime.Now;

            EndDate             = new DateTime(nowDate.Year, nowDate.Month, nowDate.Day, 0, 0, 0);
            StartDate           = EndDate.AddMonths(-1);
            OnSite              = true;
            Remote              = true;
            CommentSearch       = "";
            LogsView            = new LogBookView();
            LogsView.Logs       = new List <LogView>();
            LogsView.PageSize   = 20;
            LogsView.PageNumber = 1;
            ReasonForResponses  = new List <ReasonForResponseView>();
        }
        public FileResult FileDownload(LogsReportViewModel vm)
        {
            string startDateFileName
                = vm.StartDate.ToString("yyyyMMdd");
            string endDateFileName = vm.EndDate.ToString("yyyyMMdd");
            string fileZipName     = "ELogBook" + vm.LocationId + "_" + startDateFileName + "to" + endDateFileName + ".csv";

            byte[] fileToSave = new byte[] {};

            var logBookView = new LogBookView();

            vm.LogsView.PageNumber = 1;
            string uri = BuildUriWithoutPage(vm);

            uri += "&pageRows=" + FileMaxRows;
            uri += "&pageNumber=" + vm.LogsView.PageNumber;

            if ((vm.EndDate.Ticks - vm.StartDate.Ticks) > 0)
            {
                logBookView = GetLogBookView(uri);
                var records = logBookView.Logs;

                fileToSave = Business.Exporter.GetLogFile(records);
            }

            return(File(fileToSave, "csv", fileZipName));

            //// javascript download prefers text; haven't tested binary yet.
            //// works for chrome so far. not IE
            //using (var memStream = new MemoryStream())
            //{
            //    using (var ziparchive = new ZipArchive(memStream, ZipArchiveMode.Create, true))
            //    {
            //        var entry1 = ziparchive.CreateEntry(fileZipName, CompressionLevel.Optimal);
            //        using (var entryStream = entry1.Open())
            //        {
            //            entryStream.Write(fileToSave, 0, fileToSave.Length);
            //        }
            //    }

            //    return File(memStream.ToArray(), "downloaded/csv", fileZipName);
            //}
        }
        public ActionResult RunReport(LogsReportViewModel vm)
        {
            var logBookView = new LogBookView();

            if (vm.LogsView.PageNumber == 0)
            {
                vm.LogsView.PageNumber = 1;
            }
            if (vm.ReportPageNumber == 0)
            {
                vm.ReportPageNumber = 1;
            }

            string uri = BuildUriWithoutPage(vm);

            uri += "&pageRows=" + PageRows;
            uri += "&pageNumber=" + vm.ReportPageNumber;

            //if (ModelState.IsValid)  //don't do  ModelState.IsValid ==> ReasonForResponses will always be invalid
            if ((vm.EndDate.Ticks - vm.StartDate.Ticks) > 0)
            {
                logBookView = GetLogBookView(uri);

                vm.LogsView = logBookView; //logViewModel.Logs;
                if (logBookView != null)
                {
                    return(PartialView("ReportResult", vm));
                }
                else
                {
                    return(Content("Server error for Reports. Please contact administrator."));
                }
            }
            else
            {
                return(Content("Please make sure End Date is before Start Date"));
            }
        }
        private void AddLogBookItem()
        {
            var lbvm = new LogBookViewModel(SelectedCustomer.CustomerId);
            var lbv = new LogBookView();
            Messenger.Default.Register<MessangerLogBook>(this, (message) =>
            {
                switch (message.id)
                {
                    case 1:
                        using (dbContext db = new dbContext())
                        {
                            LogBook x = new LogBook();
                            x.Customer = db.Customer.Find(message.CustomerId);
                            x.CustomerContactType = db.CustomerContactType.Find(message.CustomerContactTypeId);
                            x.Information = message.Information;
                            x.Employeer = db.Employee.Find(message.EmployeerId);
                            x.ContactDate = message.ContactDate;
                            db.LogBook.Add(x);
                            db.SaveChanges();
                            //RaisePropertyChanged("SelectedCustomer");
                        }
                        break;
                }
            });
            lbv.DataContext = lbvm;
            lbv.ShowDialog();
            SearchCustomers();

        }