/**
* Axelor Business Solutions
*
* Copyright (C) 2016 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;
}
}