Exemplo n.º 1
0
        public byte[] Export(Core.Reports.Enums.ExportType exportType, string[] parameters)
        {
            var dateNoTime  = DateTime.Today.AddMonths(1).ToString("d/M/yyyy");
            var dateNoTime2 = DateTime.Today.AddMonths(-1).ToString("d/M/yyyy");
            var province    = string.Empty;
            var district    = string.Empty;
            var models      = new List <AdjudicationsPerDistrictSummaryModelAG>();

            for (int i = 0; i < 20; i++)
            {
                if (i == 0)
                {
                    models.Add(
                        new AdjudicationsPerDistrictSummaryModelAG
                    {
                        Province = "Eastern Cape",
                        District = "HUMANSDORP",
                    });
                }
                else if (i == 5)
                {
                    models.Add(
                        new AdjudicationsPerDistrictSummaryModelAG
                    {
                        Province = "Western Cape",
                        District = "Somerser West",
                    });
                }
                else if (i == 15)
                {
                    models.Add(
                        new AdjudicationsPerDistrictSummaryModelAG
                    {
                        Province = "LIMPOP",
                        District = "BELA BELA",
                    });
                }

                models.Add(
                    new AdjudicationsPerDistrictSummaryModelAG
                {
                    TicketDate       = dateNoTime,
                    VerificationDate = dateNoTime2,
                    NoOfTickets      = 7 + i,
                    DaysToExpire     = 13
                });
            }
            if (exportType == ExportType.PDF)
            {
                return(StreamPdfReport(BuildReport(models)));
            }
            else if (exportType == ExportType.Excel)
            {
                return(StreamExcelReport(BuildReport(models)));
            }
            else
            {
                throw new NotSupportedException();
            }
        }
Exemplo n.º 2
0
        public byte[] Export(Core.Reports.Enums.ExportType exportType, string[] parameters)
        {
            var filterCriteria    = string.Empty;
            var startDate         = default(DateTime);
            var endDate           = default(DateTime);
            var districtList      = new List <long>();
            var infringementType  = default(InfringementType?);
            var infringementValue = default(decimal?);
            var registerStatus    = default(RegisterStatus?);
            var periodType        = string.Empty;

            foreach (var parameter in parameters)
            {
                var parts = parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 2)
                {
                    continue;
                }

                if (parts[0].Equals("districtID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long districtID = 0;
                    if (long.TryParse(parts[1], out districtID))
                    {
                        districtList.Add(districtID);
                    }
                }
                else if (parts[0].Equals("startDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out startDate);
                }
                else if (parts[0].Equals("endDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out endDate);
                }
                else if (parts[0].Equals("infringementType", StringComparison.InvariantCultureIgnoreCase))
                {
                    InfringementType infringementType_ = 0;
                    if (Enum.TryParse(parts[1], out infringementType_))
                    {
                        infringementType = infringementType_;
                    }
                }
                else if (parts[0].Equals("registerStatus", StringComparison.InvariantCultureIgnoreCase))
                {
                    RegisterStatus registerStatus_ = 0;
                    if (Enum.TryParse(parts[1], out registerStatus_))
                    {
                        registerStatus = registerStatus_;
                    }
                }
                else if (parts[0].Equals("infringementValue", StringComparison.InvariantCultureIgnoreCase))
                {
                    decimal infringementValue_ = 0;
                    if (decimal.TryParse(parts[1], out infringementValue_))
                    {
                        infringementValue = infringementValue_;
                    }
                }
                else if (parts[0].Equals("periodType", StringComparison.InvariantCultureIgnoreCase))
                {
                    periodType = parts[1];
                }
            }

            if (periodType.Equals("thisMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-1);
                endDate   = startDate.AddMonths(1).AddMilliseconds(-1);
            }
            else if (periodType.Equals("thisYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1).AddYears(-1);
                endDate   = startDate.AddYears(1).AddMilliseconds(-1);
            }

            using (var dbContext = new DataContext())
            {
                //dbContext.Database.Log = f => Debug.WriteLine(f);
                endDate = endDate.AddDays(1).AddMilliseconds(-1);

                var query = dbContext.OffenceRegister
                            .AsNoTracking()
                            .Include(f => f.Register)
                            .Include(f => f.Register.District)
                            .Include(f => f.Court)
                            .Include(f => f.Register.Person)
                            .Include(f => f.InfringementLocation)
                            .Include(f => f.EvidenceLog)
                            .Include(f => f.EvidenceLog.SpeedLog)
                            .Include(f => f.EvidenceLog.ChargeInfos)
                            .Include(f => f.EvidenceLog.InfringementEvidences)
                            .Include(f => f.EvidenceLog.HandWrittenCaptureLog)
                            .Where(f => (f.Register.DistrictID.HasValue && districtList.Contains(f.Register.DistrictID.Value)) &&
                                   (f.InfringementDate >= startDate && f.InfringementDate <= endDate));

                if (infringementType.HasValue)
                {
                    query = query.Where(f => f.InfringementType == infringementType.Value);
                }

                if (registerStatus.HasValue)
                {
                    query = query.Where(f => f.Register.RegisterStatus == (int)registerStatus.Value);
                }

                if (infringementValue.HasValue)
                {
                    query = query.Where(f => f.CapturedAmount.HasValue && f.CapturedAmount.Value >= infringementValue.Value);
                }

                var offences = query.OrderByDescending(f => f.InfringementDate).ToList();
                var models   = new List <OutstandingInfringerModel>();

                foreach (var offence in offences)
                {
                    var model = new OutstandingInfringerModel();

                    model.ReferenceNumber         = offence.ReferenceNumber;
                    model.DistrictName            = offence.Register.District == null ? string.Empty : offence.Register.District.BranchName;
                    model.OffenceLocation         = offence.InfringementLocation == null ? string.Empty : offence.InfringementLocation.Description;
                    model.OutstandingAmount       = offence.Register.OutstandingAmount.Value;
                    model.OffenceDate             = offence.InfringementDate;
                    model.OffenderName            = offence.Register.Person == null ? string.Empty : string.Format("{0} {1}", offence.Register.Person.FirstNames, offence.Register.Person.LastName);
                    model.OffenderEmail           = offence.Register.Person == null ? string.Empty : offence.Register.Person.Email;
                    model.OffenderMobile          = offence.Register.Person == null ? string.Empty : offence.Register.Person.MobileNumber;
                    model.FormattedRegisterStatus = offence.Register.RegisterStatus.ToString();

                    if (offence.EvidenceLog != null)
                    {
                        if (offence.EvidenceLog.ChargeInfos != null && offence.EvidenceLog.ChargeInfos.Count > 0)
                        {
                            var firstChargeInfo = offence.EvidenceLog.ChargeInfos.First();
                            model.OffenceCode        = firstChargeInfo.OffenceCode.Code;
                            model.OffenceDescription = firstChargeInfo.PrimaryDescription;
                        }

                        if (offence.EvidenceLog.HandWrittenCaptureLog != null)
                        {
                            model.OffenceLocation = offence.EvidenceLog.HandWrittenCaptureLog.OffenceLocationStreet;
                            if (!string.IsNullOrWhiteSpace(offence.EvidenceLog.HandWrittenCaptureLog.OffenceLocationSuburb))
                            {
                                model.OffenceLocation += string.Format("\n{0}", offence.EvidenceLog.HandWrittenCaptureLog.OffenceLocationSuburb);
                            }
                            if (!string.IsNullOrWhiteSpace(offence.EvidenceLog.HandWrittenCaptureLog.OffenceLocationTown))
                            {
                                model.OffenceLocation += string.Format("\n{0}", offence.EvidenceLog.HandWrittenCaptureLog.OffenceLocationTown);
                            }
                        }
                    }

                    models.Add(model);
                }

                filterCriteria += string.Format("District: {0} ", districtList.Count == 1 ? dbContext.Districts.Find(districtList[0]).BranchName : "ALL");
                filterCriteria += string.Format("Period: {0:yyyy/MM/dd} - {1:yyyy/MM/dd} ", startDate, endDate);
                filterCriteria += string.Format("Infringement Type: {0} ", infringementType.HasValue ? infringementType.ToString() : "ALL");
                if (infringementValue.HasValue && infringementValue.Value > 0)
                {
                    filterCriteria += string.Format("Values >: {0:0.00} ", infringementValue.Value);
                }
                filterCriteria += string.Format("Register Status: {0} ", registerStatus.HasValue ? registerStatus.ToString() : "ALL");

                if (exportType == ExportType.PDF)
                {
                    return(StreamPdfReport(BuildReport(models, filterCriteria)));
                }
                else if (exportType == ExportType.Excel)
                {
                    return(StreamExcelReport(BuildReport(models, filterCriteria)));
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
        }
Exemplo n.º 3
0
        public byte[] Export(Core.Reports.Enums.ExportType exportType, string[] parameters)
        {
            var filterCriteria = string.Empty;
            var districtList   = new List <long>();
            var mobileDeviceID = default(string);
            var officerID      = default(long?);
            var mobileDeviceActivityCategory = string.Empty;
            var startDate  = default(DateTime);
            var endDate    = default(DateTime);
            var periodType = string.Empty;

            foreach (var parameter in parameters)
            {
                var parts = parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 2)
                {
                    continue;
                }

                if (parts[0].Equals("startDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out startDate);
                }
                else if (parts[0].Equals("endDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out endDate);
                }
                else if (parts[0].Equals("districtID", StringComparison.InvariantCultureIgnoreCase) && parts.Length == 2)
                {
                    long districtID = 0;
                    if (long.TryParse(parts[1], out districtID))
                    {
                        districtList.Add(districtID);
                    }
                }
                else if (parts[0].Equals("mobileDeviceID", StringComparison.InvariantCultureIgnoreCase) && parts.Length == 2)
                {
                    mobileDeviceID = parts[1];
                }
                else if (parts[0].Equals("officerID", StringComparison.InvariantCultureIgnoreCase) && parts.Length == 2)
                {
                    long officerID_ = 0;
                    if (long.TryParse(parts[1], out officerID_))
                    {
                        officerID = officerID_;
                    }
                }
                else if (parts[0].Equals("mobileDeviceActivityCategory", StringComparison.InvariantCultureIgnoreCase) && parts.Length == 2)
                {
                    mobileDeviceActivityCategory = parts[1];
                }
                else if (parts[0].Equals("periodType", StringComparison.InvariantCultureIgnoreCase))
                {
                    periodType = parts[1];
                }
            }

            if (periodType.Equals("thisMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-1);
                endDate   = startDate.AddMonths(1).AddMilliseconds(-1);
            }
            else if (periodType.Equals("thisYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1).AddYears(-1);
                endDate   = startDate.AddYears(1).AddMilliseconds(-1);
            }

            using (var dbContext = new DataContext())
            {
                //dbContext.Database.Log = f => Debug.WriteLine(f);
                endDate = endDate.AddDays(1).AddMilliseconds(-1);

                var query = dbContext.UserMobileDeviceActivities
                            .AsNoTracking()
                            .Include(f => f.Credential)
                            .Include(f => f.Credential.User)
                            .Where(f => f.CreatedTimestamp >= startDate && f.CreatedTimestamp <= endDate);

                query = query.Join(dbContext.MobileDevices, f => f.DeviceID, g => g.DeviceID, (f, g) => new { f, g })
                        .Where(f => f.g.DistrictID != null && districtList.Contains(f.g.DistrictID.Value)).Select(f => f.f);

                if (!string.IsNullOrWhiteSpace(mobileDeviceID))
                {
                    query = query.Where(f => f.DeviceID == mobileDeviceID);
                }

                if (officerID.HasValue)
                {
                    var officerID_ = officerID.Value;
                    query = query.Where(f => f.Credential.EntityID == officerID_);
                }

                if (!string.IsNullOrWhiteSpace(mobileDeviceActivityCategory))
                {
                    query = query.Where(f => f.Category == mobileDeviceActivityCategory);
                }

                var activities = query.OrderByDescending(f => f.CreatedTimestamp).ToList();
                var models     = new List <iTicketActivityLogModel>();

                foreach (var activity in activities)
                {
                    var model = new iTicketActivityLogModel();
                    model.CreatedTimestamp  = activity.CreatedTimestamp;
                    model.DeviceID          = activity.DeviceID;
                    model.Category          = activity.Category;
                    model.ActionDescription = activity.ActionDescription;
                    model.OfficerNumber     = activity.Credential == null ? string.Empty : activity.Credential.User.ExternalID;
                    model.OfficerName       = activity.Credential == null ? string.Empty : string.Format("{0} {1}", activity.Credential.User.FirstName, activity.Credential.User.LastName);

                    models.Add(model);
                }

                filterCriteria += string.Format("District: {0} ", districtList.Count == 1 ? dbContext.Districts.Find(districtList[0]).BranchName : "ALL");
                filterCriteria += string.Format("Period: {0:yyyy/MM/dd} - {1:yyyy/MM/dd} ", startDate, endDate);
                if (string.IsNullOrWhiteSpace(mobileDeviceActivityCategory))
                {
                    filterCriteria += string.Format("Action Category: ALL ");
                }
                else
                {
                    filterCriteria += string.Format("Action Category: {0} ", mobileDeviceActivityCategory);
                }

                if (exportType == ExportType.PDF)
                {
                    return(StreamPdfReport(BuildReport(models, filterCriteria)));
                }
                else if (exportType == ExportType.Excel)
                {
                    return(StreamExcelReport(BuildReport(models, filterCriteria)));
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
        }
Exemplo n.º 4
0
        public byte[] Export(Core.Reports.Enums.ExportType exportType, string[] parameters)
        {
            var filterCriteria = string.Empty;
            var userID         = default(long?);
            var startDate      = default(DateTime);
            var endDate        = default(DateTime);
            var testCategoryID = default(long?);
            var siteID         = default(long?);
            var periodType     = string.Empty;
            var districtList   = new List <long>();

            foreach (var parameter in parameters)
            {
                var parts = parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 2)
                {
                    continue;
                }

                if (parts[0].Equals("districtID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long districtID = 0;
                    if (long.TryParse(parts[1], out districtID))
                    {
                        districtList.Add(districtID);
                    }
                }
                else if (parts[0].Equals("userID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long userID_ = 0;
                    if (long.TryParse(parts[1], out userID_))
                    {
                        userID = userID_;
                    }
                }
                else if (parts[0].Equals("startDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out startDate);
                }
                else if (parts[0].Equals("endDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out endDate);
                }
                else if (parts[0].Equals("testCategoryID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long testCategoryID_ = 0;
                    if (long.TryParse(parts[1], out testCategoryID_))
                    {
                        testCategoryID = testCategoryID_;
                    }
                }
                else if (parts[0].Equals("periodType", StringComparison.InvariantCultureIgnoreCase))
                {
                    periodType = parts[1];
                }
                else if (parts[0].Equals("siteID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long siteID_ = 0;
                    if (long.TryParse(parts[1], out siteID_))
                    {
                        siteID = siteID_;
                    }
                }
            }

            if (periodType.Equals("thisMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-1);
                endDate   = startDate.AddMonths(1).AddMilliseconds(-1);
            }
            else if (periodType.Equals("thisYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1).AddYears(-1);
                endDate   = startDate.AddYears(1).AddMilliseconds(-1);
            }

            using (var dbContext = new DataContext())
            {
                //dbContext.Database.Log = s => Debug.WriteLine(s);
                endDate = endDate.AddDays(1).AddMilliseconds(-1);

                var categoryTestTypes = dbContext.VehicleCategoryTestTypes
                                        .AsNoTracking()
                                        .Include(f => f.TestCategory)
                                        .ToList();

                var query = dbContext.VehicleTestBookings
                            .AsNoTracking()
                            .Include(f => f.CapturedCredential)
                            .Include(f => f.CapturedCredential.User)
                            .Include(f => f.Vehicle.VehicleCategory)
                            .Include(f => f.Site)
                            .Where(f =>
                                   f.IsPassed.HasValue &&
                                   f.TestDate >= startDate &&
                                   f.TestDate <= endDate);

                if (siteID.HasValue)
                {
                    query = query.Where(f => f.SiteID == siteID.Value);
                }
                else
                {
                    query = query.Where(f => f.Site.DistrictID.HasValue && districtList.Contains(f.Site.DistrictID.Value));
                }

                if (userID.HasValue)
                {
                    query = query.Where(f => f.CapturedCredential.EntityID == userID.Value);
                }

                if (testCategoryID.HasValue)
                {
                    query = query.Join(dbContext.VehicleCategoryTestTypes.Where(f => f.TestCategoryID == testCategoryID.Value), f => f.TestTypeID, f => f.TestTypeID, (f, g) => f);
                }

                var vehicleBookings = query
                                      .OrderBy(f => new { f.SiteID, f.TestDate })
                                      //.OrderBy(f => f.SiteID)
                                      .ToList();

                var models = new List <Kapsch.EVR.Reports.Models.VehicleInspectionModel>();
                foreach (var vehicleBooking in vehicleBookings)
                {
                    var categoryTestType = categoryTestTypes.FirstOrDefault(f =>
                                                                            f.TestTypeID == vehicleBooking.TestTypeID &&
                                                                            f.VehicleCategoryID == vehicleBooking.Vehicle.VehicleCategoryId);

                    var model =
                        new Kapsch.EVR.Reports.Models.VehicleInspectionModel
                    {
                        BookingReference = vehicleBooking.BookingReference,
                        ID               = vehicleBooking.ID,
                        EndedTimestamp   = vehicleBooking.EndedTimestamp,
                        IsPassed         = vehicleBooking.IsPassed == 1,
                        SiteID           = vehicleBooking.SiteID,
                        SiteName         = vehicleBooking.Site.Name,
                        StartedTimestamp = vehicleBooking.StartedTimestamp,
                        TestCategoryID   = categoryTestType != null ? categoryTestType.TestCategoryID : 0,
                        TestCategoryName = categoryTestType != null ? categoryTestType.TestCategory.Name : string.Empty,
                        TestDate         = vehicleBooking.TestDate,
                        UserID           = vehicleBooking.CapturedCredential.EntityID,
                        UserFullName     = string.Format("{0} {1}", vehicleBooking.CapturedCredential.User.FirstName, vehicleBooking.CapturedCredential.User.LastName),
                        VLN              = vehicleBooking.Vehicle.VLN
                    };

                    models.Add(model);
                }

                filterCriteria += string.Format("Inspection Summary for {0:yyyy/MM/dd} to {1:yyyy/MM/dd}.", startDate, endDate);

                if (exportType == ExportType.PDF)
                {
                    return(StreamPdfReport(BuildReport(models, filterCriteria)));
                }
                else if (exportType == ExportType.Excel)
                {
                    return(StreamExcelReport(BuildReport(models, filterCriteria)));
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
        }
Exemplo n.º 5
0
        public byte[] Export(Core.Reports.Enums.ExportType exportType, string[] parameters)
        {
            var filterCriteria = string.Empty;
            var districtList   = new List <long>();
            var officerID      = default(long?);
            var startDate      = default(DateTime);
            var endDate        = default(DateTime);
            var periodType     = string.Empty;

            foreach (var parameter in parameters)
            {
                var parts = parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 2)
                {
                    continue;
                }

                else if (parts[0].Equals("startDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out startDate);
                }
                else if (parts[0].Equals("endDate", StringComparison.InvariantCultureIgnoreCase))
                {
                    DateTime.TryParseExact(parts[1], "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out endDate);
                }
                else if (parts[0].Equals("districtID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long districtID = 0;
                    if (long.TryParse(parts[1], out districtID))
                    {
                        districtList.Add(districtID);
                    }
                }
                else if (parts[0].Equals("officerID", StringComparison.InvariantCultureIgnoreCase))
                {
                    long officerID_ = 0;
                    if (long.TryParse(parts[1], out officerID_))
                    {
                        officerID = officerID_;
                    }
                }
                else if (parts[0].Equals("periodType", StringComparison.InvariantCultureIgnoreCase))
                {
                    periodType = parts[1];
                }
            }

            if (periodType.Equals("thisMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastMonth", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, now.Month, 1).AddMonths(-1);
                endDate   = startDate.AddMonths(1).AddMilliseconds(-1);
            }
            else if (periodType.Equals("thisYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1);
                endDate   = now.Date.AddDays(1);
            }
            else if (periodType.Equals("lastYear", StringComparison.InvariantCultureIgnoreCase))
            {
                var now = DateTime.Now;

                startDate = new DateTime(now.Year, 1, 1).AddYears(-1);
                endDate   = startDate.AddYears(1).AddMilliseconds(-1);
            }

            using (var dbContext = new DataContext())
            {
                //dbContext.Database.Log = f => Debug.WriteLine(f);
                endDate = endDate.AddDays(1).AddMilliseconds(-1);

                var query = dbContext.VosiActionCaptures
                            .AsNoTracking()
                            .Include(f => f.CapturedCredential)
                            .Include(f => f.CapturedCredential.User)
                            .Join(dbContext.MobileDevices, f => f.DeviceID, g => g.DeviceID, (f, g) => new { f, g })
                            .Where(f =>
                                   f.g.DistrictID != null &&
                                   districtList.Contains(f.g.DistrictID.Value))
                            .Select(f => new { f.f, f.g.District.ID, f.g.District.BranchName });

                if (officerID.HasValue)
                {
                    var officerID_ = officerID.Value;
                    query = query.Where(f => f.f.CapturedCredential.EntityID == officerID_);
                }

                var models = query
                             .OrderBy(f => f.f.CapturedDateTime)
                             .ToList()
                             .Select(f => new OfficerVosiActionModel()
                {
                    ActionTimestamp       = f.f.CapturedDateTime,
                    ActionDescription     = f.f.VosiAction.Description,
                    Detail                = f.f.Comments,
                    DistrictID            = f.ID,
                    DistrictName          = f.BranchName,
                    OfficerExternalNumber = f.f.CapturedCredential.User.ExternalID,
                    OfficerID             = f.f.CapturedCredential.User.ID,
                    OfficerName           = string.Format("{0} {1}", f.f.CapturedCredential.User.FirstName, f.f.CapturedCredential.User.LastName),
                    VLN = f.f.VLN
                })
                             .ToList()
                             .OrderBy(f => f.DistrictID)
                             .OrderBy(f => f.OfficerID)
                             .ToList();

                filterCriteria += string.Format("District: {0} ", districtList.Count == 1 ? dbContext.Districts.Find(districtList[0]).BranchName : "ALL");
                filterCriteria += string.Format("Period: {0:yyyy/MM/dd} - {1:yyyy/MM/dd} ", startDate, endDate);
                if (officerID.HasValue)
                {
                    var officer = dbContext.Users.Find(officerID.Value);
                    filterCriteria += string.Format("Officer: {0} {1} ", officer.FirstName, officer.LastName);
                }
                else
                {
                    filterCriteria += string.Format("Officer: ALL ");
                }

                if (exportType == ExportType.PDF)
                {
                    return(StreamPdfReport(BuildReport(models, filterCriteria)));
                }
                else if (exportType == ExportType.Excel)
                {
                    return(StreamExcelReport(BuildReport(models, filterCriteria)));
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
        }