Subversion Repositories SmartDukaan

Rev

Rev 3100 | Rev 3141 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@page import="com.google.appengine.api.datastore.FetchOptions"%>
<%@page import="java.util.ArrayList"%>
<%@page import="in.shop2020.model.Item"%>
<%@page import="in.shop2020.server.ItemRepository"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.TimeZone"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="com.google.appengine.api.datastore.Query.SortDirection"%>
<%@page import="java.util.Map.Entry"%>
<%@ page import="java.util.List" %>
<%@ 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 contentType="text/html;charset=UTF-8" language="java" %>

<html>
  <head>
      <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" /> 
  </head>
  <body>
<%
    SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
        String dateStr = request.getParameter("date");
        ItemRepository itemRepository = new ItemRepository();
        List<Item> items = itemRepository.getAll();
        Map<Long, Item> itemsMap = new HashMap<Long, Item>();
        Map<Long, Item> itemsCatalogIdMap = new HashMap<Long, Item>();
        Map<String, Item> itemsNameMap = new HashMap<String, Item>();
        Map<Long, Map<String, Long>> itemsResultMap = new HashMap<Long, Map<String, Long>>();
        for (Item item : items) {
            itemsMap.put(item.getId(), item);
            itemsCatalogIdMap.put(item.getCatalogId(), item);
            itemsNameMap.put(item.getName().trim(), item);
        }
    if (dateStr != null && !dateStr.isEmpty()) {
        cal.setTime(iSdf.parse(dateStr));
    }
    else {
        dateStr = iSdf.format(cal.getTime());
    }
        cal.add(Calendar.DAY_OF_MONTH, 1);
        Date toDate = iSdf.parse(iSdf.format(cal.getTime()));
        cal.add(Calendar.DAY_OF_MONTH, -1);
        Date fromDate = iSdf.parse(iSdf.format(cal.getTime()));
        
        String fromDateStr = request.getParameter("fromDate");
        if (fromDateStr == null || fromDateStr.isEmpty()) {
            fromDateStr = iSdf.format(fromDate);
        }
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();
    Query query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_VIEW");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
    PreparedQuery pq = datastore.prepare(query);
    for (Entity result : pq.asIterable()) {
        Long catalogItemId = (Long)result.getProperty("itemId");
        if(catalogItemId == null) {
            String name = (String)result.getProperty("productName");
            if (itemsNameMap.containsKey(name.trim())) {
                catalogItemId = itemsNameMap.get(name.trim()).getCatalogId();
            }
        }
        if (itemsResultMap.containsKey(catalogItemId)) {
            Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
            if (itemMap.containsKey("ViewCount")) {
                Long count = itemMap.get("ViewCount");
                itemMap.put("ViewCount", ++count);
            }
            else {
                itemMap.put("ViewCount", 1l);
            }
        }
        else {
            Map<String, Long> itemMap = new HashMap<String, Long>();
            itemMap.put("ViewCount", 1l);
            itemsResultMap.put(catalogItemId, itemMap);
        }
    }
    
    query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "ADD_TO_CART");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
    pq = datastore.prepare(query);
    for (Entity result : pq.asIterable()) {
        for (Long itemId : (List<Long>)result.getProperty("itemIds")) {
            Long catalogItemId = itemsMap.get(itemId).getCatalogId();
            if (itemsResultMap.containsKey(catalogItemId)) {
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
                if (itemMap.containsKey("AddToCartCount")) {
                    Long count = itemMap.get("AddToCartCount");
                    itemMap.put("AddToCartCount", ++count);
                }
                else {
                    itemMap.put("AddToCartCount", 1l);
                }
            }
            else {
                Map<String, Long> itemMap = new HashMap<String, Long>();
                itemMap.put("AddToCartCount", 1l);
                itemsResultMap.put(catalogItemId, itemMap);
            }
        }
    }
    
    query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "DELETE_FROM_CART");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
    pq = datastore.prepare(query);
    for (Entity result : pq.asIterable()) {
        for (Long itemId : (List<Long>)result.getProperty("itemIds")) {
            Long catalogItemId = itemsMap.get(itemId).getCatalogId();
            if (itemsResultMap.containsKey(catalogItemId)) {
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
                if (itemMap.containsKey("DeleteFromCartCount")) {
                    Long count = itemMap.get("DeleteFromCartCount");
                    itemMap.put("DeleteFromCartCount", ++count);
                }
                else {
                    itemMap.put("DeleteFromCartCount", 1l);
                }
            }
            else {
                Map<String, Long> itemMap = new HashMap<String, Long>();
                itemMap.put("DeleteFromCartCount", 1l);
                itemsResultMap.put(catalogItemId, itemMap);
            }
        }
    }
    
    query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "RESEARCH_ADD");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
    pq = datastore.prepare(query);
    for (Entity result : pq.asIterable()) {
        for (Long catalogItemId : (List<Long>)result.getProperty("itemIds")) {
            if (itemsResultMap.containsKey(catalogItemId)) {
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
                if (itemMap.containsKey("AddToResearchCount")) {
                    Long count = itemMap.get("AddToResearchCount");
                    itemMap.put("AddToResearchCount", ++count);
                }
                else {
                    itemMap.put("AddToResearchCount", 1l);
                }
            }
            else {
                Map<String, Long> itemMap = new HashMap<String, Long>();
                itemMap.put("AddToResearchCount", 1l);
                itemsResultMap.put(catalogItemId, itemMap);
            }
        }
    }
    
    query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "RESEARCH_DELETE");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN, toDate);
    pq = datastore.prepare(query);
    for (Entity result : pq.asIterable()) {
        for (Long catalogItemId : (List<Long>)result.getProperty("itemIds")) {
            if (itemsResultMap.containsKey(catalogItemId)) {
                Map<String, Long> itemMap = itemsResultMap.get(catalogItemId);
                if (itemMap.containsKey("ResearchDeleteCount")) {
                    Long count = itemMap.get("ResearchDeleteCount");
                    itemMap.put("ResearchDeleteCount", ++count);
                }
                else {
                    itemMap.put("ResearchDeleteCount", 1l);
                }
            }
            else {
                Map<String, Long> itemMap = new HashMap<String, Long>();
                itemMap.put("ResearchDeleteCount", 1l);
                itemsResultMap.put(catalogItemId, itemMap);
            }
        }
    }
%>
    <form id="frmProductActivity" name="frmProductActivity" method="post" action="/jsp/product-activity.jsp">
      <label>Date(YYYYMMDD) : </label> <input type="text" name="date" id="date" value="<%= dateStr %>"/>
      <input type="submit" name="submit" id="submit" value="Submit"/><br/>
    </form>
        <table cellpadding="0" cellspacing="0" border="0" class="display"
                id="prodFunnel">
                <thead>
                        <tr>
                                <th>Product</th>
                                <th>View</th>
                                <th>AddToCart</th>
                                <th>DeleteFromCart</th>
                                <th>AddToResearch</th>
                                <th>DeleteFromResearch</th>
                        </tr>
                </thead>
                <tbody>

<%
    for (Entry<Long, Map<String, Long>> entry : itemsResultMap.entrySet()) {
        Long catalogItemId = (Long)entry.getKey();
        Map<String, Long> itemMap = (Map<String, Long>)entry.getValue();
%>
                        <tr>
                                <td><%=itemsCatalogIdMap.get(catalogItemId)==null? catalogItemId : itemsCatalogIdMap.get(catalogItemId).getName()%></td>
                                <td><%=itemMap.get("ViewCount")==null? 0 : itemMap.get("ViewCount")%></td>
                                <td><%=itemMap.get("AddToCartCount")==null? 0 : itemMap.get("AddToCartCount")%></td>
                <td><%=itemMap.get("DeleteFromCartCount")==null? 0 : itemMap.get("DeleteFromCartCount")%></td>
                <td><%=itemMap.get("AddToResearchCount")==null? 0 : itemMap.get("AddToResearchCount")%></td>
                <td><%=itemMap.get("DeleteFromCartCount")==null? 0 : itemMap.get("DeleteFromCartCount")%></td>
                        </tr>
<%
    }
%>
                </tbody>
        </table>
    
    <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>
    <script type="text/javascript" charset="utf-8">
        $(document).ready(function() {
            $('#prodFunnel').dataTable({
                "iDisplayLength": 15,
                "bProcessing": true,
                "aaSorting": [[1,'desc']],
                "sDom": 'T<"clear">lfrtip',
                "oTableTools": {
                    "sSwfPath": "/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf"
                },
                "aLengthMenu": [[10, 15, 25, 50, 100, -1], [10, 15, 25, 50, 100, "All"]]
            });
        } );
    </script>
  </body>
</html>