Subversion Repositories SmartDukaan

Rev

Rev 5153 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="in.shop2020.model.DeliveryEstimate"%>
<%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreService" %>
<%@ page import="com.google.appengine.api.datastore.Query" %>
<%@ page import="com.google.appengine.api.datastore.Entity" %>
<%@ page import="com.google.appengine.api.datastore.PreparedQuery" %>
<%@     page import="com.google.appengine.api.datastore.Query.SortDirection"%>
<%@     page import="java.util.Calendar"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.Hashtable"%>
<%@     page import="java.util.Map.Entry"%>
<%@     page import="java.text.ParseException"%>
<%@     page import="java.util.TimeZone"%>
<%@     page import="java.util.Date"%>
<%@     page import="java.util.Set"%>
<%@     page import="java.util.Calendar"%>
<%@     page import="java.text.SimpleDateFormat"%>

<html>
<head>
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/ZeroClipboard.js"></script>
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/TableTools.js"></script>
<link rel="stylesheet" href="/DataTables/media/css/demo_table.css" type="text/css" />
<link rel="stylesheet" href="/DataTables/extras/TableTools/media/css/TableTools.css" type="text/css" /> 
<title>Delivery Estimate Statistics</title>
</head>
<body>
<%
Date toDate = new Date();
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
cal.add(Calendar.DAY_OF_MONTH, -1);
Date fromDate = cal.getTime();
SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
String toDateStr  = request.getParameter("toDate");
String fromDateStr = request.getParameter("fromDate");
if (fromDateStr == null || fromDateStr.isEmpty()) {
    fromDateStr = iSdf.format(fromDate);
}
if (toDateStr == null || toDateStr.isEmpty()) {
    toDateStr = iSdf.format(toDate);
}
String eventType = "DELIVERY_ESTIMATE";
%>

<form id="searchfilter" name="searchfilter" method="post" action="/jsp/delivery-estimate-stats.jsp">
<label>From Date(YYYYMMDD) : </label> <input type="text" name="fromDate" id="fromDate" value="<%= fromDateStr %>"/>
<label>To Date(YYYYMMDD) : </label> <input type="text" name="toDate" id="toDate" value="<%= toDateStr %>"/>
<input type="Submit" id="Submit" name="Submit" value="Submit" />
</form>

<%
    try {
        if (fromDateStr != null) {
            fromDate = iSdf.parse(fromDateStr);
        }
        if (toDateStr != null) {
            toDate = iSdf.parse(toDateStr);
        }
    }
    catch (ParseException pe) {
%>
        <span>Invalid Date Format</span>
<%
    }
    Entity test = null;
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "DELIVERY_ESTIMATE");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN_OR_EQUAL, toDate);
    PreparedQuery pq = datastore.prepare(query);

    Map<String, DeliveryEstimate> deliveryEstimateStat = new Hashtable<String, DeliveryEstimate>();
    
    for (Entity result : pq.asIterable()) {
        String pincode = (String)result.getProperty("pincode");
        if(!pincode.equals("110001")){
                        if(deliveryEstimateStat.containsKey(pincode)){
                                DeliveryEstimate delvEst = deliveryEstimateStat.get(pincode);
                                delvEst.setNumOfRequests(delvEst.getNumOfRequests()+1);
                                delvEst.setNumDays(delvEst.getNumDays()+(Long)result.getProperty("deliveryDays"));
                                if(result.getProperty("requestOrigin").equals("Cart")){
                                        delvEst.setCartPageReqCount(delvEst.getCartPageReqCount()+1);
                                }else {
                                        delvEst.setProductPageReqCount(delvEst.getProductPageReqCount()+1);
                                }
                                if(!delvEst.getSessionIds().contains(result.getProperty("sessionId"))){
                                        delvEst.getSessionIds().add((String)result.getProperty("sessionId"));
                                }
                                deliveryEstimateStat.put(pincode, delvEst);
                        } else {
                                DeliveryEstimate delvEst = new DeliveryEstimate();
                                delvEst.setPincode(pincode);
                                delvEst.setNumDays((Long)result.getProperty("deliveryDays"));
                                if(result.getProperty("requestOrigin").equals("Cart")){
                                        delvEst.setCartPageReqCount(new Long(1));
                                }else {
                                        delvEst.setProductPageReqCount(new Long(1));
                                }
                                delvEst.getSessionIds().add((String)result.getProperty("sessionId"));
                                deliveryEstimateStat.put(pincode,delvEst);
                        }
            }
    }
%>
<table cellpadding="0" cellspacing="0" border="0" class="display" id="deliveryEstStat">
        <thead>
                <tr>
                        <th>Pincode</th>
                        <th>Number of Requests</th>
                        <th>Cart Page Requests</th>
                        <th>Product Page Requests</th>
                        <th>Session Count for Requests</th>     
                        <th>Avg number of Days</th>
                        
                </tr>
        </thead>
        <tbody>
        <%
        Set<String> pincodeSet = deliveryEstimateStat.keySet();
        for(String pincode:pincodeSet){
                double deliveryDays = ((double)(deliveryEstimateStat.get(pincode).getNumDays()*100/deliveryEstimateStat.get(pincode).getNumOfRequests()))/100.0;
        %>
                        <tr>
                <td><%=pincode%></td>
                                <td><%=deliveryEstimateStat.get(pincode).getNumOfRequests()%></td>
                                <td><%=deliveryEstimateStat.get(pincode).getCartPageReqCount()%></td>
                                <td><%=deliveryEstimateStat.get(pincode).getProductPageReqCount()%></td>
                                <td><%=deliveryEstimateStat.get(pincode).getSessionIds().size() %></td>
                                <td><%=(deliveryDays!=-1.0)?deliveryDays:"Non Deliverable Location"%></td>      
            </tr>    
        <%}%>           
        </tbody>
</table>
<br/>

    <script type="text/javascript" charset="utf-8">
            
        $(document).ready(function() {
            $('#deliveryEstStat').dataTable({
                "sPaginationType": "full_numbers",
                "aaSorting" : [ [ 2, 'desc' ] ],
                "bProcessing": true,
                "bStateSave": true,
                "sDom": 'T<"clear">lfrtip',
                "oTableTools": {
                    "sSwfPath": "/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf"
                },
                "aoColumns": [ 
                                        { "bSearchable": true },
                                        { "sSortDataType": "dom-text", "sType": "numeric" },
                                        { "sSortDataType": "dom-text", "sType": "numeric" },
                                        { "sSortDataType": "dom-text", "sType": "numeric" },
                                        { "sSortDataType": "dom-text", "sType": "numeric" },
                                        { "sSortDataType": "dom-text", "sType": "numeric" }
                ] 
            });
        } );
    </script>
</body>
</html>