public Task <ExportResultResponse> GetExportExcel(PagedOrderResultRequestDto input)
        {
            var result = GetAll(input).Result.Data.Items;

            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            var products = _productTypeRepository.GetAll().ToList();

            using (var package = new ExcelPackage())
            {
                var worksheet = package.Workbook.Worksheets.Add("Orders");

                int row = 1, col = 1;

                worksheet.Cells[row, col++].Value = L("Company");
                worksheet.Cells[row, col++].Value = L("Serial");
                worksheet.Cells[row, col++].Value = L("DateBooked");
                worksheet.Cells[row, col++].Value = L("Sgi");
                worksheet.Cells[row, col++].Value = L("SalesRep");
                worksheet.Cells[row, col++].Value = L("RepEmail");
                worksheet.Cells[row, col++].Value = L("CustomerFirstName");
                worksheet.Cells[row, col++].Value = L("CustomerLastName");
                worksheet.Cells[row, col++].Value = L("ContactPhone");
                worksheet.Cells[row, col++].Value = L("Email");
                worksheet.Cells[row, col++].Value = L("DateOfBirth");
                worksheet.Cells[row, col++].Value = L("FirstIdentification");
                worksheet.Cells[row, col++].Value = L("SecondIdentification");
                worksheet.Cells[row, col++].Value = L("ExistingAccountNo");
                worksheet.Cells[row, col++].Value = L("StreetNo");
                worksheet.Cells[row, col++].Value = L("CustomerAddress");
                worksheet.Cells[row, col++].Value = L("Unit");
                worksheet.Cells[row, col++].Value = L("City");
                worksheet.Cells[row, col++].Value = L("PostalCode");
                worksheet.Cells[row, col++].Value = L("PromoDetails");

                foreach (var product in products)
                {
                    worksheet.Cells[row, col++].Value = product.Name;
                }
                worksheet.Cells[row, col++].Value = L("TimeSlot");
                worksheet.Cells[row, col++].Value = L("Notes");
                worksheet.Cells[row, col++].Value = L("OrderNo");
                worksheet.Cells[row, col++].Value = L("AccountNo");
                worksheet.Cells[row, col++].Value = L("InstallDate");
                worksheet.Cells[row, col++].Value = L("OrderState");
                worksheet.Cells[row, col++].Value = L("Remarks");
                worksheet.Cells[row, col++].Value = L("Followed");
                worksheet.Cells[row, col++].Value = L("Explanation");
                if (PermissionChecker.IsGranted(PermissionNames.Order_Admin_Invoice))
                {
                    worksheet.Cells[row, col++].Value = L("PaymentStatus");
                    worksheet.Cells[row, col++].Value = L("InvoiceNo");
                }
                if (PermissionChecker.IsGranted(PermissionNames.Order_Admin_Ready))
                {
                    worksheet.Cells[row, col++].Value = L("IsReady");
                }

                worksheet.Cells[ExcelRange.GetAddress(1, 1, 1, col)].Style.Font.Bold = true;

                foreach (var item in result.ToList())
                {
                    row++;
                    col = 1;
                    worksheet.Cells[row, col++].Value = item.Company.Name;
                    worksheet.Cells[row, col++].Value = item.Serial;
                    worksheet.Cells[row, col++].Value = item.DateBooked;
                    worksheet.Cells[row, col++].Value = item.Sgi;
                    worksheet.Cells[row, col++].Value = item.SalesRep.Name;
                    worksheet.Cells[row, col++].Value = item.SalesRep.EmailAddress;
                    worksheet.Cells[row, col++].Value = item.CustomerFirstName;
                    worksheet.Cells[row, col++].Value = item.CustomerLastName;
                    worksheet.Cells[row, col++].Value = item.ContactPhone;
                    worksheet.Cells[row, col++].Value = item.Email;
                    worksheet.Cells[row, col++].Value = item.DateOfBirth;
                    worksheet.Cells[row, col++].Value = item.FirstIdentification.Name;
                    worksheet.Cells[row, col++].Value = item.SecondIdentification.Name;
                    worksheet.Cells[row, col++].Value = item.ExistingAccountNo;
                    worksheet.Cells[row, col++].Value = item.StreetNo;
                    worksheet.Cells[row, col++].Value = item.CustomerAddress;
                    worksheet.Cells[row, col++].Value = item.Unit;
                    worksheet.Cells[row, col++].Value = item.City;
                    worksheet.Cells[row, col++].Value = item.PostalCode;
                    worksheet.Cells[row, col++].Value = item.PromoDetails;

                    var dic = item.OrdersProductType.ToList().ToDictionary(t => t.ProductTypeId, t => t.ProductTypeId);
                    foreach (var product in products)
                    {
                        worksheet.Cells[row, col++].Value = dic.ContainsKey(product.Id) ? "1": "0";
                    }
                    worksheet.Cells[row, col++].Value = item.TimeSlot.Name;
                    worksheet.Cells[row, col++].Value = item.Notes;
                    worksheet.Cells[row, col++].Value = item.OrderNo;
                    worksheet.Cells[row, col++].Value = item.AccountNo;
                    worksheet.Cells[row, col++].Value = item.InstallDate;
                    worksheet.Cells[row, col++].Value = item.OrderState.Name;
                    worksheet.Cells[row, col++].Value = item.Remarks;
                    worksheet.Cells[row, col++].Value = item.Followed;
                    worksheet.Cells[row, col++].Value = item.Explanation;
                    if (PermissionChecker.IsGranted(PermissionNames.Order_Admin_Invoice))
                    {
                        worksheet.Cells[row, col++].Value = item.PaymentStatus.Name;
                        worksheet.Cells[row, col++].Value = item.InvoiceNo;
                    }

                    if (PermissionChecker.IsGranted(PermissionNames.Order_Admin_Ready))
                    {
                        worksheet.Cells[row, col++].Value = item.IsReady;
                    }
                }

                worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();

                var response = Task.FromResult(new ExportResultResponse {
                    FileName = "Orders.xlsx",
                    Data     = package.GetAsByteArray()
                });

                return(response);
            }
        }
        public async Task <PagedOrderResultResponseDto> GetAll(PagedOrderResultRequestDto input)
        {
            var userId = _session.UserId.GetValueOrDefault();
            var query  = _orderRepository.GetAll();

            //////Filters by page
            if (input.DateFrom.HasValue)//Filter by DateFrom
            {
                query = query.Where(x => x.DateBooked.Date >= input.DateFrom.Value.Date);
            }
            if (input.DateTo.HasValue)//Filter by DateTo
            {
                query = query.Where(x => x.DateBooked.Date <= input.DateTo.Value.Date);
            }

            if (!input.Followed.IsNullOrEmpty())//Filter by Followed
            {
                query = query.Where(x => x.Followed == input.Followed);
            }

            int[] arrayCompany = ConvertToArrayInt(input.CompanyId);//Filter by company
            if (arrayCompany.Length >= 1)
            {
                query = query.Where(x => arrayCompany.Contains(x.CompanyId));
            }

            int[] arrayOrderState = ConvertToArrayInt(input.OrderStateId);//Filter by order state
            if (arrayOrderState.Length >= 1)
            {
                query = query.Where(x => arrayOrderState.Contains(x.OrderStateId));
            }

            if (!input.Sgi.IsNullOrEmpty())//Filter by Sgi
            {
                query = query.Where(x => x.Sgi == input.Sgi);
            }
            if (!input.InvoiceNo.IsNullOrEmpty())//Filter by InvoiceNo
            {
                query = query.Where(x => x.InvoiceNo == input.InvoiceNo);
            }
            if (input.PaymentStatusId != 0)//Filter by InvoiceNo
            {
                query = query.Where(x => x.PaymentStatusId == input.PaymentStatusId);
            }

            //////Filters by page

            var permissionOrderSeeAll = PermissionChecker.IsGranted(PermissionNames.Order_See_All); //validation for see all orders

            if (!permissionOrderSeeAll)
            {
                var listSubSalesRep = _subSalesRepRepository.GetAll()//validation for sub salesRep
                                      .Where(t => t.SalesRepId == userId).Select(t => t.SubSalesRepr.Id).ToList();
                if (listSubSalesRep.Count() >= 1)
                {
                    listSubSalesRep.Add(userId);
                    query = query.Where(x => listSubSalesRep.Contains(x.SalesRepId));
                }
                else
                {
                    query = query.Where(x => x.SalesRepId == userId);
                }
            }

            var listCompany = _salesRepCompanyRepository.GetAll()//validation for see only company assigned
                              .Where(t => t.SalesRepId == userId).Select(t => t.Company.Id).ToArray();

            query = query.Where(x => listCompany.Contains(x.Company.Id));

            var permissionOrderReady      = PermissionChecker.IsGranted(PermissionNames.Order_Ready);
            var permissionOrderAdminReady = PermissionChecker.IsGranted(PermissionNames.Order_Admin_Ready);

            if (permissionOrderReady && !permissionOrderAdminReady)//validation for order ready to booking
            {
                query = query.Where(x => x.IsReady == true);
            }

            var ordersList = query
                             .Include(t => t.OrderState)
                             .Include(t => t.Company)
                             .Include(t => t.SalesRep)
                             .Include(t => t.TimeSlot)
                             .Include(t => t.FirstIdentification)
                             .Include(t => t.SecondIdentification)
                             .Include(t => t.OrdersProductType)
                             .Include(t => t.PaymentStatus)
                             .OrderByDescending(t => t.Id)
                             .ToList();

            int count   = ordersList.Count();
            var newList = ordersList.Skip(input.SkipCount).Take(input.MaxResultCount);

            var product = _productTypeRepository.GetAll().ToList();
            List <ProductTypeDto> productTypeDto = new List <ProductTypeDto>();

            productTypeDto = ObjectMapper.Map(product, productTypeDto);

            PagedOrderResultResponseDto pagedOrderResultResponseDto = new PagedOrderResultResponseDto();

            pagedOrderResultResponseDto.TotalCount  = count;
            pagedOrderResultResponseDto.ProductType = productTypeDto;
            pagedOrderResultResponseDto.Data        = new ListResultDto <OrderListDto>(
                ObjectMapper.Map <List <OrderListDto> >(newList));

            return(pagedOrderResultResponseDto);
        }
        public PagedResultDto <OrderListDto> GetOrders(PagedOrderResultRequestDto inputDto)
        {
            var query = from o in _orderRepository.GetAll()
                        select o;

            if (IsGranted(PermissionNames.Data_Admin))
            {
            }
            else if (IsGranted(PermissionNames.Data_Taobao))
            {
                query = query.Where(q => q.CreatorUserId == AbpSession.UserId);
            }
            else if (IsGranted(PermissionNames.Data_Usa))
            {
                query = query.Where(q => q.AccountId == AbpSession.UserId);
            }
            if (string.IsNullOrEmpty(inputDto.Key) == false)
            {
                query = query.Where(q => q.TaobaoShop.Contains(inputDto.Key) ||
                                    q.ProductName.Contains(inputDto.Key) ||
                                    q.TransportNumber == inputDto.Key ||
                                    q.UsaLogisticsNumber == inputDto.Key ||
                                    q.ChinaLogisticsNumber == inputDto.Key
                                    );
            }

            query = query.WhereIf(Convert.ToInt16(inputDto.OrderType) > -1, q => q.State == inputDto.OrderType)
                    .WhereIf(inputDto.DwonTo.HasValue, q => q.ChinaDateTime <= inputDto.DwonTo)
                    .WhereIf(inputDto.DwonFrom.HasValue, q => q.ChinaDateTime >= inputDto.DwonFrom)
                    .WhereIf(inputDto.ComplateFrom.HasValue, q => q.LastModificationTime >= inputDto.ComplateFrom && q.State == OrderType.交易成功)
                    .WhereIf(inputDto.ComplateTo.HasValue, q => q.LastModificationTime <= inputDto.ComplateTo && q.State == OrderType.交易成功);


            query.OrderBy(q => q.State).OrderByDescending(q => q.LastModificationTime).OrderBy(q => q.TransportNumber);

            var orders  = query.Skip(inputDto.SkipCount).Take(inputDto.MaxResultCount).ToList();
            var userIds = orders.Select(q => q.AccountId).ToList();

            userIds.AddRange(orders.Select(q => q.CreatorUserId ?? 0).ToList());
            userIds = userIds.Distinct().ToList();

            var users = _userRepository.GetAll().Where(q => userIds.Contains(q.Id)).ToList();

            foreach (var item in orders)
            {
                var account = users.Where(q => q.Id == item.AccountId).FirstOrDefault();
                var create  = users.Where(q => q.Id == item.CreatorUserId).FirstOrDefault();
                if (account != null)
                {
                    item.Account = account.Name;
                }
                if (create != null)
                {
                    item.TaobaoShop = create.Name;
                }
                if (item.OtherDesc != null)
                {
                    item.OtherDesc = item.OtherDesc.Trim('\n').Trim('\r').Replace("\n", "<br/>");
                }
            }
            return(new PagedResultDto <OrderListDto>(query.Count(), ObjectMapper.Map <List <OrderListDto> >(orders)));
        }