/** * 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.util.List; 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.Address; import com.axelor.apps.base.db.Partner; import com.axelor.apps.base.db.repo.AddressRepository; import com.axelor.apps.base.db.repo.PartnerRepository; import com.axelor.apps.base.service.MapService; import com.axelor.apps.base.service.PartnerService; import com.axelor.inject.Beans; 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; import com.google.inject.persist.Transactional; @Path("/map") public class MapRest { @Inject private PartnerService partnerService; @Inject private PartnerRepository partnerRepo; @Inject private AddressRepository addressRepo; @Transactional @Path("/partner") @GET @Produces(MediaType.APPLICATION_JSON) public JsonNode getPartners() { List<? extends Partner> customers = partnerRepo.all().filter("self.isCustomer = true OR self.isSupplier = true AND self.isContact=?", false).fetch(); JsonNodeFactory factory = JsonNodeFactory.instance; ObjectNode mainNode = factory.objectNode(); ArrayNode arrayNode = factory.arrayNode(); for (Partner partner : customers) { ObjectNode objectNode = factory.objectNode(); objectNode.put("fullName", partner.getFullName()); objectNode.put("fixedPhone", partner.getFixedPhone() != null ? partner.getFixedPhone() : " "); if (partner.getEmailAddress() != null) { objectNode.put("emailAddress", partner.getEmailAddress().getAddress()); } Address address = partnerService.getInvoicingAddress(partner); if (address != null && address.getFullName() != null) { String addressString = Beans.get(MapService.class).makeAddressString(address, objectNode); objectNode.put("address", addressString); } objectNode.put("pinColor", partner.getIsCustomer() && !partner.getHasOrdered() ? "red" : "orange"); String pinChar = partner.getIsCustomer() && !partner.getHasOrdered() ? "P" : "C"; if (partner.getIsSupplier()) { pinChar = pinChar + "/S"; } objectNode.put("pinChar", pinChar); arrayNode.add(objectNode); } mainNode.put("status", 0); mainNode.put("data", arrayNode); return mainNode; } @Transactional @Path("/customer") @GET @Produces(MediaType.APPLICATION_JSON) public JsonNode getCustomers() { List<? extends Partner> customers = partnerRepo.all().filter("self.isCustomer = true AND self.hasOrdered = true AND self.isContact=?", false).fetch(); JsonNodeFactory factory = JsonNodeFactory.instance; ObjectNode mainNode = factory.objectNode(); ArrayNode arrayNode = factory.arrayNode(); for (Partner customer : customers) { ObjectNode objectNode = factory.objectNode(); objectNode.put("fullName", customer.getFullName()); objectNode.put("fixedPhone", customer.getFixedPhone() != null ? customer.getFixedPhone() : " "); if (customer.getEmailAddress() != null) { objectNode.put("emailAddress", customer.getEmailAddress().getAddress()); } Address address = partnerService.getInvoicingAddress(customer); if (address != null) { String addressString = Beans.get(MapService.class).makeAddressString(address, objectNode); addressRepo.save(address); objectNode.put("address", addressString); } objectNode.put("pinColor", "orange"); objectNode.put("pinChar", "C"); arrayNode.add(objectNode); } mainNode.put("status", 0); mainNode.put("data", arrayNode); return mainNode; } @Transactional @Path("/prospect") @GET @Produces(MediaType.APPLICATION_JSON) public JsonNode getProspects() { List<? extends Partner> customers = partnerRepo.all().filter("self.isCustomer = true AND self.hasOrdered = false AND self.isContact=?", false).fetch(); JsonNodeFactory factory = JsonNodeFactory.instance; ObjectNode mainNode = factory.objectNode(); ArrayNode arrayNode = factory.arrayNode(); for (Partner prospect : customers) { ObjectNode objectNode = factory.objectNode(); objectNode.put("fullName", prospect.getFullName()); objectNode.put("fixedPhone", prospect.getFixedPhone() != null ? prospect.getFixedPhone() : " "); if (prospect.getEmailAddress() != null) { objectNode.put("emailAddress", prospect.getEmailAddress().getAddress()); } Address address = partnerService.getInvoicingAddress(prospect); if (address != null) { String addressString = Beans.get(MapService.class).makeAddressString(address, objectNode); addressRepo.save(address); objectNode.put("address", addressString); } objectNode.put("pinColor", "red"); objectNode.put("pinChar", "P"); arrayNode.add(objectNode); } mainNode.put("status", 0); mainNode.put("data", arrayNode); return mainNode; } @Transactional @Path("/supplier") @GET @Produces(MediaType.APPLICATION_JSON) public JsonNode getSuppliers() { List<? extends Partner> customers = partnerRepo.all().filter("self.isSupplier = true AND self.isContact=?", false).fetch(); JsonNodeFactory factory = JsonNodeFactory.instance; ObjectNode mainNode = factory.objectNode(); ArrayNode arrayNode = factory.arrayNode(); for (Partner supplier : customers) { ObjectNode objectNode = factory.objectNode(); objectNode.put("fullName", supplier.getFullName()); objectNode.put("fixedPhone", supplier.getFixedPhone() != null ? supplier.getFixedPhone() : " "); if (supplier.getEmailAddress() != null) { objectNode.put("emailAddress", supplier.getEmailAddress().getAddress()); } Address address = partnerService.getInvoicingAddress(supplier); if (address != null) { String addressString = Beans.get(MapService.class).makeAddressString(address, objectNode); addressRepo.save(address); objectNode.put("address", addressString); } objectNode.put("pinColor", "purple"); objectNode.put("pinChar", "S"); arrayNode.add(objectNode); } mainNode.put("status", 0); mainNode.put("data", arrayNode); return mainNode; } }