How to filter or display data between two selected dates in Spring Boot using JavaScript?

Viewed 725

I am new to sorting or filtering data in Spring Boot and want to fetch all order records between two dates when selected from UI. I have created REST API to search data between two dates, but even when I am providing wrong dates, I am getting data.

To display table, I have implemented it through Pagination. So when I select two dates in which data is present and click on button, then it will display fetched data in a table. But this is not working as expected and I do not know where I am doing wrong.

For example: I have selected fromdate from UI as: 01-06-2021 and todate from UI as: 04-06-2021 and clicked on fetch record button, then records should be displayed according to date range. Suppose If I select fromdate: 14-06-2021 and todate as: 23-06-2021 (there is no records present between these two date ranges) still I am getting result from database.

Below is my Orders repository method to get data between date ranges.

List<Orders> findByOrderdateGreaterThanEqualAndOrderdateLessThanEqualAndOrderstatusOrderByCreateddatetimeDesc(Date fromdate, Date todate, String orderstatus);

Below is my controller where I have created API to fetch records between two dates:

@RequestMapping(value = AkApiUrl.fetchorderbydate, method = { RequestMethod.POST, RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<?> fetchorderbydate(HttpServletRequest request, @RequestParam("startdate") String startdate, @RequestParam("enddate")  String enddate) {
    logger.info("Fetch order between start date: "+startdate+" and end date: "+enddate+" function is calling.. ");
    CustomResponse = ResponseFactory.getResponse(request);
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date orderdatefrom = sdf.parse(startdate);
        System.out.println("Order placed from date: "+orderdatefrom.toString());
        Date orderdateto = sdf.parse(enddate);
        System.out.println("Order placed to date: "+orderdateto.toString());
        List<Orders> orderbydate = ordersdao.findByOrderdateGreaterThanEqualAndOrderdateLessThanEqualAndOrderstatusOrderByCreateddatetimeDesc(orderdatefrom, orderdateto,"refunded");
        System.out.println(orderdatefrom+" comes before"+orderdateto);
        System.out.println("Order data between two dates are : "+orderbydate.size());
        if (orderbydate != null) {
            CustomResponse.setResponse(orderbydate);
            CustomResponse.setStatus(CustomStatus.OK);
            CustomResponse.setStatusCode(CustomStatus.OK_CODE);
        }
    } catch (Exception e) {
        e.printStackTrace();
        CustomResponse.setResponse(null);
        CustomResponse.setStatus(CustomStatus.Error);
        CustomResponse.setStatusCode(CustomStatus.Error_CODE);
    }
    return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
}

This is the script to handle fetch record between two dates and on ajax success another function is called to display table.

function getorderdata() {
    debugger
    var startdate = document.getElementById('orderstartdate').value;
    var enddate = document.getElementById('orderenddate').value;
    if ((Date.parse(enddate) >= Date.parse(startdate))) {
        var url = "../api/fetchorderbydate";
        $.post(url,{
            startdate : startdate,
            enddate : enddate,
        }, function(data, status) {
            if (data.status == "OK") {
                if (data.statusCode == 1) {
                    console.log(data.response);
                    ajaxordertable(<%=pagelength%>);
                } else {
                    var error = data.responseMessage;
                    swal(error, "", "error");
                }
            } else {
                var error = data.responseMessage;
                swal(error, "", "error");
            }
        }); 
    } else {
        alert("End date should be greater than start date");
    }
}
1 Answers

The fetched filtered-by-date data ought to be an input to the rendering function.

For example: renderTable(data.response)

Related