private int SetOnsiteRemote(LogsReportViewModel vm)
        {
            int OnsiteRemote = 0;

            if (vm.OnSite)
            {
                OnsiteRemote += 1; //binary 0001
            }
            if (vm.Remote)
            {
                OnsiteRemote += 2; //binary 0010
            }
            return(OnsiteRemote);
        }
        private string BuildUriWithoutPage(LogsReportViewModel vm)
        {
            string StartDateString = vm.StartDate.ToShortDateString();
            string EndDateString   = vm.EndDate.AddDays(1).ToShortDateString();
            int    OnsiteRemote    = SetOnsiteRemote(vm);
            int    Reasons         = SetReasons(vm);

            string uri = WebAPI + "LogBookReport?";

            uri += "locationId=" + vm.LocationId;
            uri += "&commentSearch=" + vm.CommentSearch;
            uri += "&startDate=" + StartDateString;
            uri += "&endDate=" + EndDateString;
            uri += "&userSearch=" + vm.UserSearch;
            uri += "&OnsiteRemote=" + OnsiteRemote;
            uri += "&reasons=" + Reasons;
            return(uri);
        }
        private int SetReasons(LogsReportViewModel vm)
        {
            int Reasons = 0;

            foreach (var reason in vm.ReasonForResponses)
            {
                if (reason.Id == 1)
                {
                    Reasons += reason.Id;
                }
                else
                {
                    Reasons += 2 << (reason.Id - 2); //set bits
                }
            }

            return(Reasons);
        }
        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"));
            }
        }
        // GET: LogsReport
        public ActionResult Index()
        {
            var vm = new LogsReportViewModel();

            using (var client = new HttpClient())
            {
                string uri      = WebAPI + "ReasonsForResponse";
                var    response = client.GetAsync(uri).Result;
                if (response.IsSuccessStatusCode)
                {
                    var content = response.Content.ReadAsStringAsync().Result;
                    JavaScriptSerializer JSserializer = new JavaScriptSerializer();
                    //deserialize to your class
                    var reasonsForResponse = JSserializer.Deserialize <List <ReasonForResponseView> >(content);
                    vm.ReasonForResponses = reasonsForResponse;
                }
                else //web api sent error response
                {
                    return(Content("Server error getting the Reasons For Responses filter. Please contact administrator."));
                }
            }
            return(View(vm));
        }