diff --git a/src/main/java/org/upsmf/grievance/constants/Constants.java b/src/main/java/org/upsmf/grievance/constants/Constants.java
index ae31b12ab71a9edf1785111b63c8ecbe2919eaf7..8816f6a5d23747fd86c40eda3e6cbd09f6827c06 100644
--- a/src/main/java/org/upsmf/grievance/constants/Constants.java
+++ b/src/main/java/org/upsmf/grievance/constants/Constants.java
@@ -3,6 +3,8 @@ package org.upsmf.grievance.constants;
 public class Constants {
 
     public static final String TIME_ZONE = "Asia/Kolkata";
+    public static final Long PENDING_21_DAYS = 21l;
+    public static final Long PENDING_15_DAYS = 15l;
     public static final Long AFFILIATION = 1l;
     public static final Long EXAM = 2l;
     public static final Long ADMISSION = 3l;
@@ -21,12 +23,10 @@ public class Constants {
     public static final String REGISTRATION_NAME = "REGISTRATION";
     public static final String ADMISSION_NAME = "ADMISSION";
     public static final String EXAM_NAME = "EXAM";
-    public static final String OPEN_TICKET = "openTicket";
-    public static final String DEPARTMENT = "department";
+    public static final String OPEN_TICKET_GTE15 = "openTicketGte15";
+    public static final String OPEN_TICKET_GTE21 = "openTicketGte21";
     public static final String PERFORMANCE_INDICATORS = "performanceIndicators";
     public static final String TURN_AROUND_TIME = "turnAroundTime";
     public static final String ESCLATION_PERCENTAGE = "escalationPercentage";
     public static final String NUDGE_TICKET_PERCENTAGE = "nudgeTicketPercentage";
-    public static final String TICKET_PENDING = "ticketpending";
-
 }
diff --git a/src/main/java/org/upsmf/grievance/dto/SearchRequest.java b/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
index 38d999c93440545fb8c5110b2f1582bdc7f1ee18..22a66fff964a8213c2483066f81497717f84298b 100644
--- a/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
+++ b/src/main/java/org/upsmf/grievance/dto/SearchRequest.java
@@ -22,6 +22,8 @@ public class SearchRequest {
 
     private Long cc;
 
+    private List<Integer> ccList;
+
     private SearchDateRange date;
 
     private Boolean isJunk;
diff --git a/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java b/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
index 8387e47b5ce73f5bd6a70bc3186c3a62e12eb2ab..d5b34d7562f2bf5615ee0f2ba990af1e8bbe72e5 100644
--- a/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
+++ b/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
@@ -1,6 +1,5 @@
 package org.upsmf.grievance.service.impl;
 
-import org.checkerframework.checker.units.qual.C;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.action.search.SearchType;
 import org.elasticsearch.client.RequestOptions;
@@ -28,6 +27,8 @@ import org.upsmf.grievance.repository.es.TicketRepository;
 import org.upsmf.grievance.service.SearchService;
 
 import java.io.IOException;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 
 @Service
@@ -36,11 +37,26 @@ public class SearchServiceImpl implements SearchService {
     @Value("${es.default.page.size}")
     private int defaultPageSize;
 
-    private static final Map<String, Object> assignmentResponse = new HashMap<>();
-    private static final Map<String, Map<String, Object>> resolutionResponse = new HashMap<>();
-    private static final Map<String, Object> departmentNameResponse = new HashMap<>();
-    private static final Map<String, Object> performanceIndicatorsResponse = new HashMap<>();
-    private static final Map<String, Object> finalResponse = new HashMap<>();
+    @Value("${pending.21.days}")
+    private long PENDING_21_DAYS;
+
+    @Value("${pending.15.days}")
+    private long PENDING_15_DAYS;
+
+    private Map<String, Object> departmentNameResponse = new HashMap<>();
+    private Map<String, Object> performanceIndicatorsResponse = new HashMap<>();
+    private Map<String, Object> finalResponse = new HashMap<>();
+    private Boolean allDepartment = false;
+    private Boolean totalFinalResponse = false;
+    private Boolean multiSelectResponse = false;
+    private long totalIsJunk = 0;
+    private long totalOpenStatus = 0;
+    private long totalcloseStatus = 0;
+    private long totalIsEscalated = 0;
+    private long totalUnassigned = 0;
+    private long totalNudgeTickets = 0;
+    private long totalOpenTicketGte15 = 0;
+    private long totalOpenTicketGte21 = 0;
     @Autowired
     private TicketRepository esTicketRepository;
     @Autowired
@@ -58,58 +74,138 @@ public class SearchServiceImpl implements SearchService {
     @Override
     public Map<String, Object> dashboardReport(SearchRequest searchRequest) {
         //Create query for search by keyword
-        Map<String, Object> response = null;
-        if (searchRequest.getFilter().get("cc") != null && searchRequest.getFilter().get("cc").equals(Constants.AFFILIATION)) {
-            response = getfinalResponse(searchRequest, Constants.AFFILIATION);
-        } else if (searchRequest.getFilter().get("cc") != null && searchRequest.getFilter().get("cc").equals(Constants.EXAM)) {
-            response = getfinalResponse(searchRequest, Constants.EXAM);
-        } else if (searchRequest.getFilter().get("cc") != null && searchRequest.getFilter().get("cc").equals(Constants.ADMISSION)) {
-            response = getfinalResponse(searchRequest, Constants.ADMISSION);
-        } else if (searchRequest.getFilter().get("cc") != null && searchRequest.getFilter().get("cc").equals(Constants.REGISTRATION)) {
-            response = getfinalResponse(searchRequest, Constants.REGISTRATION);
-        } else if (searchRequest.getFilter().get("cc") != null && searchRequest.getFilter().get("cc").equals(Constants.ASSESSMENT)) {
-            response = getfinalResponse(searchRequest, Constants.ASSESSMENT);
+        departmentNameResponse = new HashMap<>();
+        performanceIndicatorsResponse = new HashMap<>();
+        finalResponse = new HashMap<>();
+        totalIsJunk = 0;
+        totalOpenStatus = 0;
+        totalcloseStatus = 0;
+        totalIsEscalated = 0;
+        totalUnassigned = 0;
+        totalOpenTicketGte21 = 0;
+        totalOpenTicketGte15 = 0;
+        totalNudgeTickets = 0;
+        allDepartment = false;
+        totalFinalResponse = false;
+        multiSelectResponse = false;
+        List<Integer> ccList = (List<Integer>) searchRequest.getFilter().get("ccList");
+        if (ccList != null && ccList.size() > 0) {
+            for (int i = 1; i <= ccList.size(); i++) {
+                if (ccList.size() == i) {
+                    multiSelectResponse = true;
+                }
+                Long cc = Long.valueOf(ccList.get(i - 1));
+                if (cc != null && cc.equals(Constants.AFFILIATION)) {
+                    getfinalResponse(searchRequest, Constants.AFFILIATION);
+                } else if (cc != null && cc.equals(Constants.EXAM)) {
+                    getfinalResponse(searchRequest, Constants.EXAM);
+                } else if (cc != null && cc.equals(Constants.ADMISSION)) {
+                    getfinalResponse(searchRequest, Constants.ADMISSION);
+                } else if (cc != null && cc.equals(Constants.REGISTRATION)) {
+                    getfinalResponse(searchRequest, Constants.REGISTRATION);
+                } else if (cc != null && cc.equals(Constants.ASSESSMENT)) {
+                    getfinalResponse(searchRequest, Constants.ASSESSMENT);
+                } else {
+                    allDepartment = true;
+                    getfinalResponse(searchRequest, Constants.AFFILIATION);
+                    getfinalResponse(searchRequest, Constants.EXAM);
+                    getfinalResponse(searchRequest, Constants.ADMISSION);
+                    getfinalResponse(searchRequest, Constants.REGISTRATION);
+                    totalFinalResponse = true;// This flag should be there before last getfinalResponse
+                    getfinalResponse(searchRequest, Constants.ASSESSMENT);
+                }
+            }
         } else {
-            response = getfinalResponse(searchRequest, Constants.AFFILIATION);
+            allDepartment = true;
+            getfinalResponse(searchRequest, Constants.AFFILIATION);
+            getfinalResponse(searchRequest, Constants.EXAM);
+            getfinalResponse(searchRequest, Constants.ADMISSION);
+            getfinalResponse(searchRequest, Constants.REGISTRATION);
+            totalFinalResponse = true;// This flag should be there before last getfinalResponse
+            getfinalResponse(searchRequest, Constants.ASSESSMENT);
         }
-        return response;
+        return finalResponse;
     }
 
-    private Map<String, Object> getfinalResponse(SearchRequest searchRequest, Long cc) {
-        SearchResponse searchJunkResponse = getDashboardSearchResponse(searchRequest, "isJunk", cc);
-        SearchResponse searchOpenStatusResponse = getDashboardSearchResponse(searchRequest, "openStatus", cc);
-        SearchResponse searchClosedStatusResponse = getDashboardSearchResponse(searchRequest, "closedStatus", cc);
-        SearchResponse searchIsEsclatedResponse = getDashboardSearchResponse(searchRequest, "isEscalated", cc);
-        SearchResponse searchUnassignedResponse = getDashboardSearchResponse(searchRequest, "openStatus", cc);
-        SearchResponse searchOpenTicketsResponse = getDashboardSearchResponse(searchRequest, "openStatus", cc);
+    private void getfinalResponse(SearchRequest searchRequest, Long cc) {
+        SearchResponse searchJunkResponse = getDashboardSearchResponse(searchRequest, "isJunk", cc, null);
+        SearchResponse searchOpenStatusResponse = getDashboardSearchResponse(searchRequest, "openStatus", cc, null);
+        SearchResponse searchClosedStatusResponse = getDashboardSearchResponse(searchRequest, "closedStatus", cc, null);
+        SearchResponse searchTurnAroundStatusResponse = getDashboardSearchResponse(searchRequest, "closedStatus", cc, null);
+        SearchResponse searchIsEsclatedResponse = getDashboardSearchResponse(searchRequest, "isEscalated", cc, null);
+        SearchResponse searchUnassignedResponse = getDashboardSearchResponse(searchRequest, "openStatus", -1l, null);
+        SearchResponse searchOpenTicketsGte21Response = getDashboardSearchResponse(searchRequest, "openStatus", cc, "isGte21");
+        SearchResponse searchOpenTicketsGte15Response = getDashboardSearchResponse(searchRequest, "openStatus", cc, "isGte15");
+        SearchResponse searchPriorityResponse = getDashboardSearchResponse(searchRequest, "highPriority", cc, null);
 
         Map<String, Object> response = new HashMap<>();
-        //response.put(Constants.TOTAL_TICKETS, esTicketRepository.findAllById());
+        totalIsJunk = totalIsJunk + searchJunkResponse.getHits().getTotalHits().value;
+        totalOpenStatus = totalOpenStatus + searchOpenStatusResponse.getHits().getTotalHits().value;
+        totalcloseStatus = totalcloseStatus + searchClosedStatusResponse.getHits().getTotalHits().value;
+        totalIsEscalated = totalIsEscalated + searchIsEsclatedResponse.getHits().getTotalHits().value;
+        totalUnassigned = totalUnassigned + searchUnassignedResponse.getHits().getTotalHits().value;
+        totalNudgeTickets = totalNudgeTickets + searchPriorityResponse.getHits().getTotalHits().value;
+        totalOpenTicketGte21 = totalOpenTicketGte21 + searchOpenTicketsGte21Response.getHits().getTotalHits().value;
+        long totalTicketsCount = searchJunkResponse.getHits().getTotalHits().value + searchOpenStatusResponse.getHits().getTotalHits().value
+                + searchClosedStatusResponse.getHits().getTotalHits().value + searchIsEsclatedResponse.getHits().getTotalHits().value
+                + searchOpenTicketsGte15Response.getHits().getTotalHits().value + searchUnassignedResponse.getHits().getTotalHits().value;
+        response.put(Constants.TOTAL_TICKETS, totalTicketsCount);
         response.put(Constants.IS_JUNK, searchJunkResponse.getHits().getTotalHits().value);
         response.put(Constants.IS_OPEN, searchOpenStatusResponse.getHits().getTotalHits().value);
         response.put(Constants.IS_CLOSED, searchClosedStatusResponse.getHits().getTotalHits().value);
         response.put(Constants.IS_ESCALATED, searchIsEsclatedResponse.getHits().getTotalHits().value);
-        assignmentResponse.put(Constants.ASSESSMENT_MATRIX,response);
-        if(cc.equals(Constants.ASSESSMENT)){
-            departmentNameResponse.put(Constants.ASSESSMENT_DEPARTMENT,response);
+        response.put(Constants.UNASSIGNED, searchUnassignedResponse.getHits().getTotalHits().value);
+        response.put(Constants.OPEN_TICKET_GTE15, searchOpenTicketsGte15Response.getHits().getTotalHits().value);
+
+        if (cc.equals(Constants.ASSESSMENT)) {
+            departmentNameResponse.put(Constants.ASSESSMENT_DEPARTMENT, response);
         } else if (cc.equals(Constants.AFFILIATION)) {
-            departmentNameResponse.put(Constants.AFFILIATION_NAME,response);
+            departmentNameResponse.put(Constants.AFFILIATION_NAME, response);
         } else if (cc.equals(Constants.EXAM)) {
-            departmentNameResponse.put(Constants.EXAM_NAME,response);
+            departmentNameResponse.put(Constants.EXAM_NAME, response);
         } else if (cc.equals(Constants.REGISTRATION)) {
-            departmentNameResponse.put(Constants.REGISTRATION_NAME,response);
+            departmentNameResponse.put(Constants.REGISTRATION_NAME, response);
         } else if (cc.equals(Constants.ADMISSION)) {
-            departmentNameResponse.put(Constants.ADMISSION_NAME,response);
+            departmentNameResponse.put(Constants.ADMISSION_NAME, response);
         }
-        resolutionResponse.put(Constants.RESOLUTION_MATRIX,departmentNameResponse);
-        //finalResponse.put()
-        return response;
+        if (totalFinalResponse) {
+            getResponse();
+        }
+        if (multiSelectResponse) {
+            getResponse();
+        }
+        finalResponse.put(Constants.RESOLUTION_MATRIX, departmentNameResponse);
+    }
+
+    private void getResponse() {
+        Map<String, Object> response = new HashMap<>();
+        long totalTicketsCount = totalIsJunk + totalIsEscalated + totalOpenStatus + totalcloseStatus + totalUnassigned;
+        response.put(Constants.TOTAL_TICKETS, totalTicketsCount);
+        response.put(Constants.IS_JUNK, totalIsJunk);
+        response.put(Constants.IS_OPEN, totalOpenStatus);
+        response.put(Constants.IS_CLOSED, totalcloseStatus);
+        response.put(Constants.IS_ESCALATED, totalIsEscalated);
+        response.put(Constants.UNASSIGNED, totalUnassigned);
+        finalResponse.put(Constants.ASSESSMENT_MATRIX, response);
+
+        performanceIndicatorsResponse = new HashMap<>();
+        performanceIndicatorsResponse.put(Constants.TURN_AROUND_TIME, 0 +" days");
+        performanceIndicatorsResponse.put(Constants.ESCLATION_PERCENTAGE, (int) Math.round((double) (totalIsEscalated / totalTicketsCount) * 100) + "%");
+        performanceIndicatorsResponse.put(Constants.NUDGE_TICKET_PERCENTAGE, (int) Math.round((double) (totalNudgeTickets) / totalTicketsCount * 100) + "%");
+        performanceIndicatorsResponse.put(Constants.OPEN_TICKET_GTE21, totalOpenTicketGte21);
+        finalResponse.put(Constants.PERFORMANCE_INDICATORS, performanceIndicatorsResponse);
     }
 
-    private SearchResponse getDashboardSearchResponse(SearchRequest searchRequest, String reportType, Long cc) {
+    private SearchResponse getDashboardSearchResponse(SearchRequest searchRequest, String reportType, Long cc, String flag) {
         SearchResponse searchResponse;
         BoolQueryBuilder finalQuery = QueryBuilders.boolQuery();
-        finalQuery = getDateRangeQuery(searchRequest, finalQuery);
+        if (flag != null && flag.equals("isGte21")) {
+            finalQuery = getGte21DaysQuery(searchRequest, finalQuery);
+        } else if (flag != null && flag.equals("isGte15")) {
+            finalQuery = getGte15DaysQuery(searchRequest, finalQuery);
+        } else {
+            finalQuery = getDateRangeQuery(searchRequest, finalQuery);
+        }
         finalQuery = getCCRangeQuery(cc, finalQuery);
         if (reportType.equals("isJunk")) {
             finalQuery = getJunkQuery(true, finalQuery);
@@ -121,8 +217,11 @@ public class SearchServiceImpl implements SearchService {
             List<String> list = new ArrayList<>();
             list.add("CLOSED");
             finalQuery = getStatusQuery(list, finalQuery);
+            finalQuery = getJunkQuery(false, finalQuery);
         } else if (reportType.equals("isEscalated")) {
             finalQuery = getEsclatedTicketsQuery(true, finalQuery);
+        } else if (reportType.equals("highPriority")) {
+            finalQuery = getPriority("HIGH", finalQuery);
         }
         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
                 .query(finalQuery);
@@ -153,7 +252,26 @@ public class SearchServiceImpl implements SearchService {
     private SearchResponse getSearchResponse(SearchRequest searchRequest) {
         SearchResponse searchResponse;
         String keyValue = searchRequest.getSort().keySet().iterator().next();
-        switch (keyValue){
+        keyValue = getKeyValue(keyValue);
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
+                .query(createTicketSearchQuery(searchRequest))
+                .from(searchRequest.getPage())
+                .size(searchRequest.getSize())
+                .sort(keyValue, SortOrder.valueOf(searchRequest.getSort().get(searchRequest.getSort().keySet().iterator().next()).toUpperCase()));
+
+        org.elasticsearch.action.search.SearchRequest search = new org.elasticsearch.action.search.SearchRequest("ticket");
+        search.searchType(SearchType.QUERY_THEN_FETCH);
+        search.source(searchSourceBuilder);
+        try {
+            searchResponse = esConfig.elasticsearchClient().search(search, RequestOptions.DEFAULT);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return searchResponse;
+    }
+
+    private String getKeyValue(String keyValue) {
+        switch (keyValue) {
             case "ticketId":
                 keyValue = "ticket_id";
                 break;
@@ -224,151 +342,136 @@ public class SearchServiceImpl implements SearchService {
                 keyValue = "escalated_by";
                 break;
         }
-        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
-                .query(createTicketSearchQuery(searchRequest))
-                .from(searchRequest.getPage())
-                .size(searchRequest.getSize())
-                .sort(keyValue, SortOrder.valueOf(searchRequest.getSort().get(searchRequest.getSort().keySet().iterator().next()).toUpperCase()));
-
-        org.elasticsearch.action.search.SearchRequest search = new org.elasticsearch.action.search.SearchRequest("ticket");
-        search.searchType(SearchType.QUERY_THEN_FETCH);
-        search.source(searchSourceBuilder);
-        try {
-            searchResponse = esConfig.elasticsearchClient().search(search, RequestOptions.DEFAULT);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        return searchResponse;
+        return keyValue;
     }
 
-    private static List<Object> getDocumentsFromSearchResult(SearchResponse result) {
+    private List<Object> getDocumentsFromSearchResult(SearchResponse result) {
         SearchHits hits = result.getHits();
         return getDocumentsFromHits(hits);
     }
 
-    private static List<Object> getDocumentsFromHits(SearchHits hits) {
+    private List<Object> getDocumentsFromHits(SearchHits hits) {
         List<Object> documents = new ArrayList<Object>();
         for (SearchHit hit : hits) {
             Ticket esTicket = new Ticket();
             for (Map.Entry entry : hit.getSourceAsMap().entrySet()) {
                 String key = (String) entry.getKey();
-                switch (key) {
-                    case "ticket_id":
-                        Long longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setTicketId(longValue);
-                        break;
-                    case "requester_first_name":
-                        esTicket.setFirstName((String) entry.getValue());
-                        break;
-                    case "requester_last_name":
-                        esTicket.setLastName((String) entry.getValue());
-                        break;
-                    case "requester_phone":
-                        esTicket.setPhone((String) entry.getValue());
-                        break;
-                    case "requester_email":
-                        esTicket.setEmail((String) entry.getValue());
-                        break;
-                    case "requester_type":
-                        for (RequesterType enumValue : RequesterType.values()) {
-                            if (enumValue.name().equals(entry.getValue().toString())) {
-                                esTicket.setRequesterType(enumValue);
-                                break;
-                            }
-                        }
-                        break;
-                    case "assigned_to_id":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setAssignedToId(longValue);
-                        break;
-                    case "assigned_to_name":
-                        esTicket.setAssignedToName((String) entry.getValue());
-                        break;
-                    case "description":
-                        esTicket.setDescription((String) entry.getValue());
-                        break;
-                    case "is_junk":
-                        esTicket.setJunk((Boolean) entry.getValue());
-                        break;
-                    case "created_date":
-                        esTicket.setCreatedDate((String) entry.getValue());
-                        break;
-                    case "updated_date":
-                        esTicket.setUpdatedDate((String) entry.getValue());
-                        break;
-                    case "created_date_ts":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setCreatedDateTS(longValue);
-                        break;
-                    case "updated_date_ts":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setUpdatedDateTS(longValue);
-                        break;
-                    case "last_updated_by":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setLastUpdatedBy(longValue);
-                        break;
-                    case "is_escalated":
-                        esTicket.setEscalated((Boolean) entry.getValue());
-                        break;
-                    case "escalated_date":
-                        esTicket.setEscalatedDate((String) entry.getValue());
-                        break;
-                    case "escalated_date_ts":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setEscalatedDateTS(longValue);
-                        break;
-                    case "escalated_to":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setEscalatedTo(longValue);
-                        break;
-                    case "status":
-                        for (TicketStatus enumValue : TicketStatus.values()) {
-                            if (enumValue.name().equals(entry.getValue().toString())) {
-                                esTicket.setStatus(enumValue);
-                                break;
-                            }
-                        }
-                        break;
-                    case "request_type":
-                        esTicket.setRequestType((String) entry.getValue());
+                mapEsTicketDtoToTicketDto(entry, key, esTicket);
+            }
+            documents.add(esTicket);
+        }
+        return documents;
+    }
+
+    private void mapEsTicketDtoToTicketDto(Map.Entry entry, String key, Ticket esTicket) {
+        switch (key) {
+            case "ticket_id":
+                Long longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setTicketId(longValue);
+                break;
+            case "requester_first_name":
+                esTicket.setFirstName((String) entry.getValue());
+                break;
+            case "requester_last_name":
+                esTicket.setLastName((String) entry.getValue());
+                break;
+            case "requester_phone":
+                esTicket.setPhone((String) entry.getValue());
+                break;
+            case "requester_email":
+                esTicket.setEmail((String) entry.getValue());
+                break;
+            case "requester_type":
+                for (RequesterType enumValue : RequesterType.values()) {
+                    if (enumValue.name().equals(entry.getValue().toString())) {
+                        esTicket.setRequesterType(enumValue);
                         break;
-                    case "priority":
-                        for (TicketPriority enumValue : TicketPriority.values()) {
-                            if (enumValue.name().equals(entry.getValue().toString())) {
-                                esTicket.setPriority(enumValue);
-                                break;
-                            }
-                        }
+                    }
+                }
+                break;
+            case "assigned_to_id":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setAssignedToId(longValue);
+                break;
+            case "assigned_to_name":
+                esTicket.setAssignedToName((String) entry.getValue());
+                break;
+            case "description":
+                esTicket.setDescription((String) entry.getValue());
+                break;
+            case "is_junk":
+                esTicket.setJunk((Boolean) entry.getValue());
+                break;
+            case "created_date":
+                esTicket.setCreatedDate((String) entry.getValue());
+                break;
+            case "updated_date":
+                esTicket.setUpdatedDate((String) entry.getValue());
+                break;
+            case "created_date_ts":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setCreatedDateTS(longValue);
+                break;
+            case "updated_date_ts":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setUpdatedDateTS(longValue);
+                break;
+            case "last_updated_by":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setLastUpdatedBy(longValue);
+                break;
+            case "is_escalated":
+                esTicket.setEscalated((Boolean) entry.getValue());
+                break;
+            case "escalated_date":
+                esTicket.setEscalatedDate((String) entry.getValue());
+                break;
+            case "escalated_date_ts":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setEscalatedDateTS(longValue);
+                break;
+            case "escalated_to":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setEscalatedTo(longValue);
+                break;
+            case "status":
+                for (TicketStatus enumValue : TicketStatus.values()) {
+                    if (enumValue.name().equals(entry.getValue().toString())) {
+                        esTicket.setStatus(enumValue);
                         break;
-                    case "escalated_by":
-                        longValue = ((Number) entry.getValue()).longValue();
-                        esTicket.setEscalatedBy(longValue);
+                    }
+                }
+                break;
+            case "request_type":
+                esTicket.setRequestType((String) entry.getValue());
+                break;
+            case "priority":
+                for (TicketPriority enumValue : TicketPriority.values()) {
+                    if (enumValue.name().equals(entry.getValue().toString())) {
+                        esTicket.setPriority(enumValue);
                         break;
+                    }
                 }
-            }
-            documents.add(esTicket);
+                break;
+            case "escalated_by":
+                longValue = ((Number) entry.getValue()).longValue();
+                esTicket.setEscalatedBy(longValue);
+                break;
         }
-        return documents;
     }
 
     private BoolQueryBuilder createTicketSearchQuery(SearchRequest searchRequest) {
         BoolQueryBuilder finalQuery = QueryBuilders.boolQuery();
         // search by keyword
         if (searchRequest.getSearchKeyword() != null && !searchRequest.getSearchKeyword().isBlank()) {
-            RegexpQueryBuilder firstNameKeywordMatchQuery = QueryBuilders.regexpQuery("requester_first_name", ".*"+searchRequest.getSearchKeyword().toLowerCase()+".*");
-            RegexpQueryBuilder phoneKeywordMatchQuery = QueryBuilders.regexpQuery("requester_phone", ".*"+searchRequest.getSearchKeyword().toLowerCase()+".*");
-            RegexpQueryBuilder emailKeywordMatchQuery = QueryBuilders.regexpQuery("requester_email", ".*"+searchRequest.getSearchKeyword().toLowerCase()+".*");
+            RegexpQueryBuilder firstNameKeywordMatchQuery = QueryBuilders.regexpQuery("requester_first_name", ".*" + searchRequest.getSearchKeyword().toLowerCase() + ".*");
+            RegexpQueryBuilder phoneKeywordMatchQuery = QueryBuilders.regexpQuery("requester_phone", ".*" + searchRequest.getSearchKeyword().toLowerCase() + ".*");
+            RegexpQueryBuilder emailKeywordMatchQuery = QueryBuilders.regexpQuery("requester_email", ".*" + searchRequest.getSearchKeyword().toLowerCase() + ".*");
             BoolQueryBuilder keywordSearchQuery = QueryBuilders.boolQuery();
             keywordSearchQuery.should(firstNameKeywordMatchQuery).should(phoneKeywordMatchQuery).should(emailKeywordMatchQuery);
             finalQuery.must(keywordSearchQuery);
         }
-        if (searchRequest.getPriority() != null) {
-            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", searchRequest.getPriority());
-            BoolQueryBuilder prioritySearchQuery = QueryBuilders.boolQuery();
-            prioritySearchQuery.must(priorityMatchQuery);
-            finalQuery.must(prioritySearchQuery);
-        }
+        getPriority(String.valueOf(searchRequest.getPriority()), finalQuery);
         getCCRangeQuery(((Number) searchRequest.getFilter().get("cc")).longValue(), finalQuery);
         getDateRangeQuery(searchRequest, finalQuery);
         getStatusQuery((List<String>) searchRequest.getFilter().get("status"), finalQuery);
@@ -377,7 +480,17 @@ public class SearchServiceImpl implements SearchService {
         return finalQuery;
     }
 
-    private static BoolQueryBuilder getCCRangeQuery(Long cc, BoolQueryBuilder finalQuery) {
+    private BoolQueryBuilder getPriority(String priority, BoolQueryBuilder finalQuery) {
+        if (priority != null) {
+            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", priority);
+            BoolQueryBuilder prioritySearchQuery = QueryBuilders.boolQuery();
+            prioritySearchQuery.must(priorityMatchQuery);
+            finalQuery.must(prioritySearchQuery);
+        }
+        return finalQuery;
+    }
+
+    private BoolQueryBuilder getCCRangeQuery(Long cc, BoolQueryBuilder finalQuery) {
         if (cc != null) {
             MatchQueryBuilder ccMatchQuery = QueryBuilders.matchQuery("assigned_to_id", cc);
             BoolQueryBuilder ccSearchQuery = QueryBuilders.boolQuery();
@@ -387,7 +500,7 @@ public class SearchServiceImpl implements SearchService {
         return finalQuery;
     }
 
-    private static BoolQueryBuilder getJunkQuery(Boolean isJunk, BoolQueryBuilder finalQuery) {
+    private BoolQueryBuilder getJunkQuery(Boolean isJunk, BoolQueryBuilder finalQuery) {
         if (isJunk != null) {
             MatchQueryBuilder junkMatchQuery = QueryBuilders.matchQuery("is_junk", isJunk);
             BoolQueryBuilder junkSearchQuery = QueryBuilders.boolQuery();
@@ -397,7 +510,7 @@ public class SearchServiceImpl implements SearchService {
         return finalQuery;
     }
 
-    private static BoolQueryBuilder getEsclatedTicketsQuery(Boolean isEscalated, BoolQueryBuilder finalQuery) {
+    private BoolQueryBuilder getEsclatedTicketsQuery(Boolean isEscalated, BoolQueryBuilder finalQuery) {
         if (isEscalated != null) {
             MatchQueryBuilder esclatedMatchQuery = QueryBuilders.matchQuery("is_escalated", isEscalated);
             BoolQueryBuilder esclatedSearchQuery = QueryBuilders.boolQuery();
@@ -407,7 +520,7 @@ public class SearchServiceImpl implements SearchService {
         return finalQuery;
     }
 
-    private static BoolQueryBuilder getStatusQuery(List<String> statusList, BoolQueryBuilder finalQuery) {
+    private BoolQueryBuilder getStatusQuery(List<String> statusList, BoolQueryBuilder finalQuery) {
         if (statusList != null) {
             MatchQueryBuilder statusMatchQuery = null;
             BoolQueryBuilder statusSearchQuery = QueryBuilders.boolQuery();
@@ -421,7 +534,7 @@ public class SearchServiceImpl implements SearchService {
         return finalQuery;
     }
 
-    private static BoolQueryBuilder getDateRangeQuery(SearchRequest searchRequest, BoolQueryBuilder finalQuery) {
+    private BoolQueryBuilder getDateRangeQuery(SearchRequest searchRequest, BoolQueryBuilder finalQuery) {
         if (searchRequest.getDate() != null && searchRequest.getDate().getFrom() != null && searchRequest.getDate().getFrom() > 0) {
             RangeQueryBuilder fromTimestampMatchQuery = QueryBuilders.rangeQuery("created_date_ts").gte(searchRequest.getDate().getFrom());
             if (searchRequest.getDate().getTo() != null && searchRequest.getDate().getTo() > 0) {
@@ -433,4 +546,22 @@ public class SearchServiceImpl implements SearchService {
         }
         return finalQuery;
     }
+
+    private BoolQueryBuilder getGte15DaysQuery(SearchRequest searchRequest, BoolQueryBuilder finalQuery) {
+        Instant currentTimestamp = Instant.now();
+        RangeQueryBuilder fromTimestampMatchQuery = QueryBuilders.rangeQuery("created_date_ts").lte(currentTimestamp.minus(PENDING_15_DAYS, ChronoUnit.DAYS).toEpochMilli());
+        BoolQueryBuilder timestampSearchQuery = QueryBuilders.boolQuery();
+        timestampSearchQuery.must(fromTimestampMatchQuery);
+        finalQuery.must(timestampSearchQuery);
+        return finalQuery;
+    }
+
+    private BoolQueryBuilder getGte21DaysQuery(SearchRequest searchRequest, BoolQueryBuilder finalQuery) {
+        Instant currentTimestamp = Instant.now();
+        RangeQueryBuilder fromTimestampMatchQuery = QueryBuilders.rangeQuery("created_date_ts").lte(currentTimestamp.minus(PENDING_21_DAYS, ChronoUnit.DAYS).toEpochMilli());
+        BoolQueryBuilder timestampSearchQuery = QueryBuilders.boolQuery();
+        timestampSearchQuery.must(fromTimestampMatchQuery);
+        finalQuery.must(timestampSearchQuery);
+        return finalQuery;
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index cd21f6f2a2efa93e88e3bec0f39c10065179a1b7..23c3ce893994dc684a04680904f1d26f8f249835 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -44,6 +44,9 @@ gcp.max.file.size=2mb
 gcp.config.file.path=/Users/shishirsuman/Desktop/upsmf.json
 gcp.client.id=
 gcp.client.email=
-gcp.pkcs.key=
 gcp.private.key.id=
+gcp.pkcs.key=
 
+#Dashboard
+pending.21.days=21
+pending.15.days=15