diff --git a/src/main/java/org/upsmf/grievance/controller/SearchTicketController.java b/src/main/java/org/upsmf/grievance/controller/SearchTicketController.java
index 9a041960d68a6a248dea8c786b7d2f9eddff582b..3bc6ebeac764785b0603207cce99ffa541c3fade 100644
--- a/src/main/java/org/upsmf/grievance/controller/SearchTicketController.java
+++ b/src/main/java/org/upsmf/grievance/controller/SearchTicketController.java
@@ -22,16 +22,24 @@ public class SearchTicketController {
     private SearchService searchService;
 
     @PostMapping("/getAllTickets")
-    public ResponseEntity<Response> search(@RequestBody SearchRequest searchRequest){
+    public ResponseEntity<Response> search(@RequestBody SearchRequest searchRequest) {
         TicketResponse responseTicket = searchService.search(searchRequest);
         Response response = new Response(HttpStatus.OK.value(), responseTicket);
         return new ResponseEntity<>(response, HttpStatus.OK);
     }
+
     @PostMapping("/searchTickets")
-    public ResponseEntity<Response> searchTickets(@RequestBody SearchRequest searchRequest){
+    public ResponseEntity<Response> searchTickets(@RequestBody SearchRequest searchRequest) {
         Map<String, Object> responseTicket = searchService.searchTickets(searchRequest);
         Response response = new Response(HttpStatus.OK.value(), responseTicket);
         return new ResponseEntity<>(response, HttpStatus.OK);
     }
 
+    @PostMapping("/dashboardReport")
+    public ResponseEntity<Response> getDashboardReport(@RequestBody SearchRequest searchRequest) {
+        Map<String, Object> responseTicket = searchService.dashboardReport(searchRequest);
+        Response response = new Response(HttpStatus.OK.value(), responseTicket);
+        return new ResponseEntity<>(response, HttpStatus.OK);
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/org/upsmf/grievance/service/SearchService.java b/src/main/java/org/upsmf/grievance/service/SearchService.java
index a5743e647d4f1735220435deafae22251e17c6af..ced2aa853ddd4676d5742957c82ad6421d98aba4 100644
--- a/src/main/java/org/upsmf/grievance/service/SearchService.java
+++ b/src/main/java/org/upsmf/grievance/service/SearchService.java
@@ -8,4 +8,5 @@ import java.util.Map;
 public interface SearchService {
     TicketResponse search(SearchRequest searchRequest);
     Map<String, Object> searchTickets(SearchRequest searchRequest);
+    Map<String, Object> dashboardReport(SearchRequest searchRequest);
 }
\ No newline at end of file
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 08df1bfada3fb131a794a1793978add3a004a492..7c4f1333db126437e3af3021b46fd72e902109e4 100644
--- a/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
+++ b/src/main/java/org/upsmf/grievance/service/impl/SearchServiceImpl.java
@@ -50,10 +50,66 @@ public class SearchServiceImpl implements SearchService {
         return TicketResponse.builder().count(page.getTotalElements()).data(page.getContent()).build();
     }
 
+    @Override
+    public Map<String, Object> dashboardReport(SearchRequest searchRequest) {
+        //Create query for search by keyword
+        SearchResponse searchJunkResponse = getDashboardSearchResponse(searchRequest, "isJunk");
+        SearchResponse searchOpenStatusResponse = getDashboardSearchResponse(searchRequest, "openStatus");
+        SearchResponse searchClosedStatusResponse = getDashboardSearchResponse(searchRequest, "closedStatus");
+        SearchResponse searchIsEsclatedResponse = getDashboardSearchResponse(searchRequest, "isEscalated");
+        Map<String, Object> response = new HashMap<>();
+        response.put("isJunk", searchJunkResponse.getHits().getTotalHits().value);
+        response.put("isOpen", searchOpenStatusResponse.getHits().getTotalHits().value);
+        response.put("isClosed", searchClosedStatusResponse.getHits().getTotalHits().value);
+        response.put("isEscalated", searchIsEsclatedResponse.getHits().getTotalHits().value);
+        return response;
+    }
+
+    private SearchResponse getDashboardSearchResponse(SearchRequest searchRequest, String reportType) {
+        SearchResponse searchResponse;
+        BoolQueryBuilder finalQuery = QueryBuilders.boolQuery();
+        finalQuery = getDateRangeQuery(searchRequest, finalQuery);
+        if (reportType.equals("isJunk")) {
+            finalQuery = getJunkQuery(true, finalQuery);
+        } else if (reportType.equals("openStatus")) {
+            List<String> list = new ArrayList<>();
+            list.add("OPEN");
+            finalQuery = getStatusQuery(list, finalQuery);
+        } else if (reportType.equals("closedStatus")) {
+            List<String> list = new ArrayList<>();
+            list.add("CLOSED");
+            finalQuery = getStatusQuery(list, finalQuery);
+        } else if (reportType.equals("isEscalated")) {
+            finalQuery = getEsclatedTicketsQuery(true, finalQuery);
+        }
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
+                .query(finalQuery);
+
+        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;
+    }
+
     @Override
     public Map<String, Object> searchTickets(SearchRequest searchRequest) {
         //Create query for search by keyword
         SearchResponse searchResponse = null;
+        searchResponse = getSearchResponse(searchRequest);
+        Map<String, Object> response = new HashMap<>();
+        List<Object> results = getDocumentsFromSearchResult(searchResponse);
+        response.put("count", searchResponse.getHits().getTotalHits().value);
+        response.put("results", results);
+        return response;
+    }
+
+    private SearchResponse getSearchResponse(SearchRequest searchRequest) {
+        SearchResponse searchResponse;
         String keyValue = searchRequest.getSort().keySet().iterator().next();
         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
                 .query(createTicketSearchQuery(searchRequest))
@@ -69,11 +125,7 @@ public class SearchServiceImpl implements SearchService {
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        Map<String, Object> response = new HashMap<>();
-        List<Object> results = getDocumentsFromSearchResult(searchResponse);
-        response.put("count", searchResponse.getHits().getTotalHits().value);
-        response.put("results", results);
-        return response;
+        return searchResponse;
     }
 
     private static List<Object> getDocumentsFromSearchResult(SearchResponse result) {
@@ -100,52 +152,69 @@ public class SearchServiceImpl implements SearchService {
             keywordSearchQuery.should(firstNameKeywordMatchQuery).should(phoneKeywordMatchQuery).should(emailKeywordMatchQuery);
             finalQuery.must(keywordSearchQuery);
         }
-        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) {
-                fromTimestampMatchQuery.lt(searchRequest.getDate().getTo());
-            }
-            BoolQueryBuilder timestampSearchQuery = QueryBuilders.boolQuery();
-            timestampSearchQuery.must(fromTimestampMatchQuery);
-            finalQuery.must(timestampSearchQuery);
+        if (searchRequest.getPriority() != null) {
+            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", searchRequest.getPriority());
+            BoolQueryBuilder prioritySearchQuery = QueryBuilders.boolQuery();
+            prioritySearchQuery.must(priorityMatchQuery);
+            finalQuery.must(prioritySearchQuery);
         }
-
         if (searchRequest.getFilter().get("cc") != null) {
             MatchQueryBuilder ccMatchQuery = QueryBuilders.matchQuery("assigned_to_id", searchRequest.getFilter().get("cc"));
             BoolQueryBuilder ccSearchQuery = QueryBuilders.boolQuery();
             ccSearchQuery.must(ccMatchQuery);
             finalQuery.must(ccSearchQuery);
         }
-        if (searchRequest.getFilter().get("status") != null ) {
-            List list = (List) searchRequest.getFilter().get("status");
-            if(list.size()>1) {
-                MatchQueryBuilder statusMatchQuery = null;
-                BoolQueryBuilder statusSearchQuery = QueryBuilders.boolQuery();
-                for(int i=0;i<list.size();i++){
-                    statusMatchQuery = QueryBuilders.matchQuery("status", list.get(i));
-                    statusSearchQuery.should(statusMatchQuery);
-                }
-                finalQuery.must(statusSearchQuery);
-            }
-        }
-        if (searchRequest.getIsJunk() != null) {
-            MatchQueryBuilder junkMatchQuery = QueryBuilders.matchQuery("is_junk", searchRequest.getIsJunk());
+        getDateRangeQuery(searchRequest, finalQuery);
+        getStatusQuery((List<String>) searchRequest.getFilter().get("status"), finalQuery);
+        getJunkQuery(searchRequest.getIsJunk(), finalQuery);
+        getEsclatedTicketsQuery(searchRequest.getIsEscalated(), finalQuery);
+        return finalQuery;
+    }
+
+    private static BoolQueryBuilder getJunkQuery(Boolean isJunk, BoolQueryBuilder finalQuery) {
+        if (isJunk != null) {
+            MatchQueryBuilder junkMatchQuery = QueryBuilders.matchQuery("is_junk", isJunk);
             BoolQueryBuilder junkSearchQuery = QueryBuilders.boolQuery();
             junkSearchQuery.must(junkMatchQuery);
             finalQuery.must(junkSearchQuery);
         }
-        if (searchRequest.getPriority() != null) {
-            MatchQueryBuilder priorityMatchQuery = QueryBuilders.matchQuery("priority", searchRequest.getPriority());
-            BoolQueryBuilder prioritySearchQuery = QueryBuilders.boolQuery();
-            prioritySearchQuery.must(priorityMatchQuery);
-            finalQuery.must(prioritySearchQuery);
-        }
-        if (searchRequest.getIsEscalated() != null) {
-            MatchQueryBuilder esclatedMatchQuery = QueryBuilders.matchQuery("is_escalated", searchRequest.getIsEscalated());
+        return finalQuery;
+    }
+
+    private static BoolQueryBuilder getEsclatedTicketsQuery(Boolean isEscalated, BoolQueryBuilder finalQuery) {
+        if (isEscalated != null) {
+            MatchQueryBuilder esclatedMatchQuery = QueryBuilders.matchQuery("is_escalated", isEscalated);
             BoolQueryBuilder esclatedSearchQuery = QueryBuilders.boolQuery();
             esclatedSearchQuery.must(esclatedMatchQuery);
             finalQuery.must(esclatedSearchQuery);
         }
         return finalQuery;
     }
+
+    private static BoolQueryBuilder getStatusQuery(List<String> statusList, BoolQueryBuilder finalQuery) {
+        if (statusList != null) {
+            MatchQueryBuilder statusMatchQuery = null;
+            BoolQueryBuilder statusSearchQuery = QueryBuilders.boolQuery();
+            for (int i = 0; i < statusList.size(); i++) {
+                statusMatchQuery = QueryBuilders.matchQuery("status", statusList.get(i));
+                statusSearchQuery.should(statusMatchQuery);
+            }
+            finalQuery.must(statusSearchQuery);
+
+        }
+        return finalQuery;
+    }
+
+    private static 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) {
+                fromTimestampMatchQuery.lt(searchRequest.getDate().getTo());
+            }
+            BoolQueryBuilder timestampSearchQuery = QueryBuilders.boolQuery();
+            timestampSearchQuery.must(fromTimestampMatchQuery);
+            finalQuery.must(timestampSearchQuery);
+        }
+        return finalQuery;
+    }
 }
\ No newline at end of file