/** * 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.apps.base.service; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import au.com.bytecode.opencsv.CSVWriter; import com.axelor.apps.base.db.Address; import com.axelor.apps.base.db.Country; import com.axelor.apps.base.db.repo.AddressRepository; import com.axelor.apps.base.db.repo.PartnerRepository; import com.axelor.inject.Beans; import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.persist.Transactional; public class AddressServiceImpl implements AddressService { @Inject private AddressRepository addressRepo; @Inject private com.axelor.apps.tool.address.AddressTool ads; @Inject private PartnerRepository partnerRepo; private static final Logger LOG = LoggerFactory.getLogger(AddressServiceImpl.class); public boolean check(String wsdlUrl) { return ads.doCanSearch(wsdlUrl); } public Map<String,Object> validate(String wsdlUrl, String search) { return (Map<String, Object>) ads.doSearch(wsdlUrl, search); } public com.qas.web_2005_02.Address select(String wsdlUrl, String moniker) { return ads.doGetAddress(wsdlUrl, moniker); } public int export(String path) throws IOException { List<Address> addresses = (List<Address>) addressRepo.all().filter("self.certifiedOk IS FALSE").fetch(); CSVWriter csv = new CSVWriter(new java.io.FileWriter(path), "|".charAt(0), CSVWriter.NO_QUOTE_CHARACTER); List<String> header = new ArrayList<String>(); header.add("Id"); header.add("AddressL1"); header.add("AddressL2"); header.add("AddressL3"); header.add("AddressL4"); header.add("AddressL5"); header.add("AddressL6"); header.add("CodeINSEE"); csv.writeNext(header.toArray(new String[header.size()])); List<String> items = new ArrayList<String>(); for (Address a : addresses) { items.add(a.getId() != null ? a.getId().toString(): ""); items.add(a.getAddressL2() != null ? a.getAddressL2(): ""); items.add(a.getAddressL3() != null ? a.getAddressL3(): ""); items.add(a.getAddressL4() != null ? a.getAddressL4(): ""); items.add(a.getAddressL5() != null ? a.getAddressL5(): ""); items.add(a.getAddressL6() != null ? a.getAddressL6(): ""); items.add(a.getInseeCode() != null ? a.getInseeCode(): ""); csv.writeNext(items.toArray(new String[items.size()])); items.clear(); } csv.close(); LOG.info("{} exported", path); return addresses.size(); } public Address createAddress(String addressL2, String addressL3, String addressL4, String addressL5, String addressL6, Country addressL7Country) { Address address = new Address(); address.setAddressL2(addressL2); address.setAddressL3(addressL3); address.setAddressL4(addressL4); address.setAddressL5(addressL5); address.setAddressL6(addressL6); address.setAddressL7Country(addressL7Country); return address; } public Address getAddress(String addressL2, String addressL3, String addressL4, String addressL5, String addressL6, Country addressL7Country) { return addressRepo.all().filter("self.addressL2 = ?1 AND self.addressL3 = ?2 AND self.addressL4 = ?3 " + "AND self.addressL5 = ?4 AND self.addressL6 = ?5 AND self.addressL7Country = ?6", addressL2, addressL3, addressL4, addressL5, addressL6, addressL7Country).fetchOne(); } public boolean checkAddressUsed(Long addressId){ LOG.debug("Address Id to be checked = {}",addressId); if(addressId != null){ if(partnerRepo.all().filter("self.mainInvoicingAddress.id = ?1 OR self.deliveryAddress.id = ?1",addressId).fetchOne() != null) return true; } return false; } @Transactional public Address checkLatLang(Address address, boolean forceUpdate){ address = addressRepo.find(address.getId()); BigDecimal latit = address.getLatit(); BigDecimal longit = address.getLongit(); if((BigDecimal.ZERO.compareTo(latit) == 0 || BigDecimal.ZERO.compareTo(longit) == 0) || forceUpdate){ Map<String,Object> result = Beans.get(MapService.class).getMap(address.getFullName()); if(result != null){ address.setLatit((BigDecimal) result.get("latitude")); address.setLongit((BigDecimal) result.get("longitude")); address = addressRepo.save(address); } } return address; } public String computeFullName(Address address) { String l2 = address.getAddressL2(); String l3 = address.getAddressL3(); String l4 = address.getAddressL4(); String l5 = address.getAddressL5(); String l6 = address.getAddressL6(); return (!Strings.isNullOrEmpty(l2) ? l2 : "") + (!Strings.isNullOrEmpty(l3) ? " "+l3 : "") + (!Strings.isNullOrEmpty(l4) ? " "+l4 : "") + (!Strings.isNullOrEmpty(l5) ? " "+l5 : "") + (!Strings.isNullOrEmpty(l6) ? " "+l6 : ""); } }