Package honeycrm.server.services

Source Code of honeycrm.server.services.ReportServiceImpl

package honeycrm.server.services;

import static com.google.appengine.api.datastore.FetchOptions.Builder.withDefaults;
import honeycrm.client.dto.ListQueryResult;
import honeycrm.client.reports.ReportData;
import honeycrm.client.reports.ReportMetaData;
import honeycrm.client.services.ReportService;
import honeycrm.server.domain.Offering;
import honeycrm.server.reports.OfferingReports;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class ReportServiceImpl extends NewService implements ReportService {
  private static final long serialVersionUID = 9188964651846980485L;
  private static final Random random = new Random(System.currentTimeMillis());
  private static final ReadServiceImpl readService = new ReadServiceImpl();
  private ReportMetaData[] metaData;

  @Override
  public Map<Integer, Double> getAnnuallyOfferingVolumes() {
    final PreparedQuery pq = db.prepare(new Query(Offering.class.getSimpleName()));
    final ListQueryResult r = copy.entitiesToDtoArray(Offering.class.getSimpleName(), pq.countEntities(withDefaults()), pq.asIterable(withDefaults()), false);
    return new OfferingReports().getAnnuallyOfferingVolumes(r.getResults());
  }

  @Override
  public Map<Integer, Map<String, Integer>> getExpensesPerCategoryPerYear() {
    final Map<Integer, Map<String, Integer>> r = new HashMap<Integer, Map<String, Integer>>();

    for (int i = 0; i < 10; i++) {
      final int year = 2000 + i;
      final Map<String, Integer> revenueForOneYear = new HashMap<String, Integer>();

      for (final String category : new String[] { "A", "B", "C" }) {
        revenueForOneYear.put(category, i * i + random.nextInt(50));
      }

      r.put(year, revenueForOneYear);
    }

    return r;
  }

  @Override
  public Map<Integer, Map<String, Integer>> getRevenuePerProduct() {
    final Map<Integer, Map<String, Integer>> revenue = new HashMap<Integer, Map<String, Integer>>();

    for (int i = 0; i < 10; i++) {
      final int year = 2000 + i;
      final Map<String, Integer> revenueForOneYear = new HashMap<String, Integer>();

      for (final String category : new String[] { "Product1", "Product2", "Product3", "Product4", "Product5" }) {
        revenueForOneYear.put(category, i * random.nextInt(100));
      }

      revenue.put(year, revenueForOneYear);
    }

    return revenue;
  }

  @Override
  public ReportData<Map<Integer, Map<String, Integer>>> getReport(final int reportId) {
    switch (reportId) {
    case 0:
      return new ReportData<Map<Integer, Map<String, Integer>>>(getExpensesPerCategoryPerYear(), getAllReportMetaData());
    case 1:
      return new ReportData<Map<Integer, Map<String, Integer>>>(getRevenuePerProduct(), getAllReportMetaData());
    case 2:
      return new ReportData<Map<Integer, Map<String, Integer>>>(getDummyReport(0), getAllReportMetaData());
    default:
      return new ReportData<Map<Integer, Map<String, Integer>>>();
    }
  }

  public Map<Integer, Map<String, Integer>> getDummyReport(final int reportId) {
    final Map<Integer, Map<String, Integer>> data = new HashMap<Integer, Map<String, Integer>>();

    for (double x = 0; x < 1; x += 0.1) {
      final HashMap<String, Integer> here = new HashMap<String, Integer>();

      here.put("a", (int) (100 * Math.sin(x)));
      here.put("b", (int) (100 * Math.cos(x)));
      here.put("c", (int) (100 * Math.tan(x)));

      data.put((int) (x * 10), here);
    }
    return data;
  }

  @Override
  public ReportMetaData[] getAllReportMetaData() {
    if (null == metaData) {
      metaData = internalGetAllReportMetaData();
    }
    return metaData;
  }

  private ReportMetaData[] internalGetAllReportMetaData() {
    final ArrayList<ReportMetaData> metaData = new ArrayList<ReportMetaData>();

    metaData.add(new ReportMetaData(0, "Expenses Per Category Per Year", new String[] { "Expenses for A", "Expenses for B", "Expenses for C" }, new String[] { "expenses", "category", "revenue" }));
    metaData.add(new ReportMetaData(1, "Revenue Per Product Per Year", new String[] { "Product1", "Product2", "Product3", "Product4", "Product5" }, new String[] { "revenue", "product" }));
    metaData.add(new ReportMetaData(2, "Dummy Report", new String[] { "Product1", "Product2", "Product3" }, new String[] { "product", "math" }));

    return metaData.toArray(new ReportMetaData[0]);
  }
}
TOP

Related Classes of honeycrm.server.services.ReportServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.