public async Task <ActionResult <int> > Count([FromBody] Tracking_TrackingFilterDTO Tracking_TrackingFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TrackingFilter TrackingFilter = ConvertFilterDTOToFilterEntity(Tracking_TrackingFilterDTO);

            TrackingFilter = await TrackingService.ToFilter(TrackingFilter);

            int count = await TrackingService.Count(TrackingFilter);

            return(count);
        }
        public async Task <ActionResult <List <Tracking_TrackingDTO> > > List([FromBody] Tracking_TrackingFilterDTO Tracking_TrackingFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            TrackingFilter TrackingFilter = ConvertFilterDTOToFilterEntity(Tracking_TrackingFilterDTO);

            TrackingFilter = await TrackingService.ToFilter(TrackingFilter);

            List <Tracking> Trackings = await TrackingService.List(TrackingFilter);

            List <Tracking_TrackingDTO> Tracking_TrackingDTOs = Trackings
                                                                .Select(c => new Tracking_TrackingDTO(c)).ToList();

            return(Tracking_TrackingDTOs);
        }
        private TrackingFilter ConvertFilterDTOToFilterEntity(Tracking_TrackingFilterDTO Tracking_TrackingFilterDTO)
        {
            TrackingFilter TrackingFilter = new TrackingFilter();

            TrackingFilter.Selects   = TrackingSelect.ALL;
            TrackingFilter.Skip      = Tracking_TrackingFilterDTO.Skip;
            TrackingFilter.Take      = Tracking_TrackingFilterDTO.Take;
            TrackingFilter.OrderBy   = Tracking_TrackingFilterDTO.OrderBy;
            TrackingFilter.OrderType = Tracking_TrackingFilterDTO.OrderType;

            TrackingFilter.Id              = Tracking_TrackingFilterDTO.Id;
            TrackingFilter.TrackerId       = Tracking_TrackingFilterDTO.TrackerId;
            TrackingFilter.TargetId        = Tracking_TrackingFilterDTO.TargetId;
            TrackingFilter.PlaceId         = Tracking_TrackingFilterDTO.PlaceId;
            TrackingFilter.PlaceCheckingId = Tracking_TrackingFilterDTO.PlaceCheckingId;
            TrackingFilter.CreatedAt       = Tracking_TrackingFilterDTO.CreatedAt;
            TrackingFilter.UpdatedAt       = Tracking_TrackingFilterDTO.UpdatedAt;
            return(TrackingFilter);
        }
        public async Task <ActionResult> ExportTemplate([FromBody] Tracking_TrackingFilterDTO Tracking_TrackingFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            string path = "Templates/Tracking_Template.xlsx";

            byte[]       arr    = System.IO.File.ReadAllBytes(path);
            MemoryStream input  = new MemoryStream(arr);
            MemoryStream output = new MemoryStream();
            dynamic      Data   = new ExpandoObject();

            using (var document = StaticParams.DocumentFactory.Open(input, output, "xlsx"))
            {
                document.Process(Data);
            };
            return(File(output.ToArray(), "application/octet-stream", "Tracking.xlsx"));
        }
        public async Task <ActionResult> Export([FromBody] Tracking_TrackingFilterDTO Tracking_TrackingFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            MemoryStream memoryStream = new MemoryStream();

            using (ExcelPackage excel = new ExcelPackage(memoryStream))
            {
                #region Tracking
                var TrackingFilter = ConvertFilterDTOToFilterEntity(Tracking_TrackingFilterDTO);
                TrackingFilter.Skip = 0;
                TrackingFilter.Take = int.MaxValue;
                TrackingFilter      = await TrackingService.ToFilter(TrackingFilter);

                List <Tracking> Trackings = await TrackingService.List(TrackingFilter);

                var TrackingHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "TrackerId",
                        "TargetId",
                        "PlaceId",
                        "PlaceCheckingId",
                    }
                };
                List <object[]> TrackingData = new List <object[]>();
                for (int i = 0; i < Trackings.Count; i++)
                {
                    var Tracking = Trackings[i];
                    TrackingData.Add(new Object[]
                    {
                        Tracking.Id,
                        Tracking.TrackerId,
                        Tracking.TargetId,
                        Tracking.PlaceId,
                        Tracking.PlaceCheckingId,
                    });
                }
                excel.GenerateWorksheet("Tracking", TrackingHeaders, TrackingData);
                #endregion

                #region Place
                var PlaceFilter = new PlaceFilter();
                PlaceFilter.Selects   = PlaceSelect.ALL;
                PlaceFilter.OrderBy   = PlaceOrder.Id;
                PlaceFilter.OrderType = OrderType.ASC;
                PlaceFilter.Skip      = 0;
                PlaceFilter.Take      = int.MaxValue;
                List <Place> Places = await PlaceService.List(PlaceFilter);

                var PlaceHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Name",
                        "PlaceGroupId",
                        "Radius",
                        "Latitude",
                        "Longtitude",
                    }
                };
                List <object[]> PlaceData = new List <object[]>();
                for (int i = 0; i < Places.Count; i++)
                {
                    var Place = Places[i];
                    PlaceData.Add(new Object[]
                    {
                        Place.Id,
                        Place.Name,
                        Place.PlaceGroupId,
                        Place.Radius,
                        Place.Latitude,
                        Place.Longtitude,
                    });
                }
                excel.GenerateWorksheet("Place", PlaceHeaders, PlaceData);
                #endregion
                #region PlaceChecking
                var PlaceCheckingFilter = new PlaceCheckingFilter();
                PlaceCheckingFilter.Selects   = PlaceCheckingSelect.ALL;
                PlaceCheckingFilter.OrderBy   = PlaceCheckingOrder.Id;
                PlaceCheckingFilter.OrderType = OrderType.ASC;
                PlaceCheckingFilter.Skip      = 0;
                PlaceCheckingFilter.Take      = int.MaxValue;
                List <PlaceChecking> PlaceCheckings = await PlaceCheckingService.List(PlaceCheckingFilter);

                var PlaceCheckingHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "AppUserId",
                        "PlaceId",
                        "PlaceCheckingStatusId",
                        "CheckInAt",
                        "CheckOutAt",
                    }
                };
                List <object[]> PlaceCheckingData = new List <object[]>();
                for (int i = 0; i < PlaceCheckings.Count; i++)
                {
                    var PlaceChecking = PlaceCheckings[i];
                    PlaceCheckingData.Add(new Object[]
                    {
                        PlaceChecking.Id,
                        PlaceChecking.AppUserId,
                        PlaceChecking.PlaceId,
                        PlaceChecking.PlaceCheckingStatusId,
                        PlaceChecking.CheckInAt,
                        PlaceChecking.CheckOutAt,
                    });
                }
                excel.GenerateWorksheet("PlaceChecking", PlaceCheckingHeaders, PlaceCheckingData);
                #endregion
                #region AppUser
                var AppUserFilter = new AppUserFilter();
                AppUserFilter.Selects   = AppUserSelect.ALL;
                AppUserFilter.OrderBy   = AppUserOrder.Id;
                AppUserFilter.OrderType = OrderType.ASC;
                AppUserFilter.Skip      = 0;
                AppUserFilter.Take      = int.MaxValue;
                List <AppUser> AppUsers = await AppUserService.List(AppUserFilter);

                var AppUserHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Username",
                        "Password",
                        "DisplayName",
                        "Email",
                        "Phone",
                    }
                };
                List <object[]> AppUserData = new List <object[]>();
                for (int i = 0; i < AppUsers.Count; i++)
                {
                    var AppUser = AppUsers[i];
                    AppUserData.Add(new Object[]
                    {
                        AppUser.Id,
                        AppUser.Username,
                        AppUser.Password,
                        AppUser.DisplayName,
                        AppUser.Email,
                        AppUser.Phone,
                    });
                }
                excel.GenerateWorksheet("AppUser", AppUserHeaders, AppUserData);
                #endregion
                excel.Save();
            }
            return(File(memoryStream.ToArray(), "application/octet-stream", "Tracking.xlsx"));
        }