com.axelor.web.MapRest.java Source code

Java tutorial

Introduction

Here is the source code for com.axelor.web.MapRest.java

Source

/**
 * Axelor Business Solutions
 *
 * Copyright (C) 2014 Axelor (<http://axelor.com>).
 *
 * This program is free software: you can redistribute it and/or  modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.axelor.web;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.axelor.apps.base.db.Country;
import com.axelor.apps.base.service.MapService;
import com.axelor.apps.sale.db.SaleOrder;
import com.axelor.apps.sale.db.repo.SaleOrderRepository;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.inject.Inject;

@Path("/map")
public class MapRest {

    @Inject
    MapService mapService;

    @Inject
    private SaleOrderRepository saleOrderRepo;

    @Path("/geomap/turnover")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JsonNode getGeoMapData() {

        Map<String, BigDecimal> data = new HashMap<String, BigDecimal>();
        List<? extends SaleOrder> orders = saleOrderRepo.all().filter("self.statusSelect=?", 3).fetch();
        JsonNodeFactory factory = JsonNodeFactory.instance;
        ObjectNode mainNode = factory.objectNode();
        ArrayNode arrayNode = factory.arrayNode();

        ArrayNode labelNode = factory.arrayNode();
        labelNode.add("Country");
        labelNode.add("Turnover");
        arrayNode.add(labelNode);

        for (SaleOrder so : orders) {

            Country country = so.getMainInvoicingAddress().getAddressL7Country();
            BigDecimal value = so.getExTaxTotal();

            if (country != null) {
                String key = country.getName();

                if (data.containsKey(key)) {
                    BigDecimal oldValue = data.get(key);
                    oldValue = oldValue.add(value);
                    data.put(key, oldValue);
                } else {
                    data.put(key, value);
                }
            }
        }

        Iterator<String> keys = data.keySet().iterator();
        while (keys.hasNext()) {
            String key = keys.next();
            ArrayNode dataNode = factory.arrayNode();
            dataNode.add(key);
            dataNode.add(data.get(key));
            arrayNode.add(dataNode);
        }

        mainNode.put("status", 0);
        mainNode.put("data", arrayNode);
        return mainNode;
    }
}