/**
* 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.account.web;
//import java.io.File;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.axelor.apps.account.db.Invoice;
import com.axelor.apps.account.db.repo.InvoiceRepository;
import com.axelor.apps.account.exception.IExceptionMessage;
import com.axelor.apps.base.db.Address;
import com.axelor.apps.base.db.IAdministration;
import com.axelor.apps.base.db.Partner;
import com.axelor.apps.base.db.PartnerList;
import com.axelor.apps.base.db.repo.AddressRepository;
import com.axelor.apps.base.service.MapService;
import com.axelor.apps.base.service.PartnerService;
import com.axelor.apps.base.service.administration.GeneralService;
import com.axelor.i18n.I18n;
import com.axelor.inject.Beans;
import com.axelor.rpc.ActionRequest;
import com.axelor.rpc.ActionResponse;
import com.google.inject.Inject;
import com.google.inject.persist.Transactional;
public class AddressController {
@Inject
protected GeneralService generalService;
private static final Logger LOG = LoggerFactory.getLogger(AddressController.class);
@Inject
private AddressRepository addressRepo;
@Inject
private InvoiceRepository invoiceRepo;
@SuppressWarnings("unchecked")
@Transactional
public void viewSalesMap(ActionRequest request, ActionResponse response) {
// Only allowed for google maps to prevent overloading OSM
if (generalService.getGeneral().getMapApiSelect() == IAdministration.MAP_API_GOOGLE) {
PartnerList partnerList = request.getContext().asType(PartnerList.class);
// File file = new File("/home/axelor/www/HTML/latlng_"+partnerList.getId()+".csv");
//file.write("latitude,longitude,fullName,turnover\n");
Iterator<Partner> it = partnerList.getPartnerSet().iterator();
while(it.hasNext()) {
Partner partner = it.next();
Address address = Beans.get(PartnerService.class).getInvoicingAddress(partner);
if (address != null) {
address = addressRepo.find(address.getId());
if (!(address.getLatit() != null && address.getLongit() != null)) {
String qString = address.getAddressL4()+" ,"+address.getAddressL6();
LOG.debug("qString = {}", qString);
Map<String,Object> googleResponse = Beans.get(MapService.class).geocodeGoogle(qString);
address.setLatit((BigDecimal) googleResponse.get("lat"));
address.setLongit((BigDecimal) googleResponse.get("lng"));
addressRepo.save(address);
}
if (address.getLatit() != null && address.getLongit() != null) {
//def turnover = Invoice.all().filter("self.partner.id = ? AND self.statusSelect = 'val'", partner.id).fetch().sum{ it.inTaxTotal }
List<Invoice> listInvoice = invoiceRepo.all().filter("self.partner.id = ?", partner.getId()).fetch();
BigDecimal turnover = BigDecimal.ZERO;
for(Invoice invoice: listInvoice) {
turnover.add(invoice.getInTaxTotal());
}
/*
file.withWriterAppend('UTF-8') {
it.write("${address.latit},${address?.longit},${partner.fullName},${turnover?:0.0}\n")
}
*/
}
}
}
//response.values = [partnerList : partnerList]
String url = "";
if (partnerList.getIsCluster())
url = "http://localhost/HTML/cluster_gmaps_xhr.html?file=latlng_"+partnerList.getId()+".csv";
else
url = "http://localhost/HTML/gmaps_xhr.html?file=latlng_"+partnerList.getId()+".csv";
Map<String,Object> mapView = new HashMap<String,Object>();
mapView.put("title", I18n.get(IExceptionMessage.ADDRESS_1));
mapView.put("resource", url);
mapView.put("viewType", "html");
response.setView(mapView);
//response.reload = true
} else {
response.setFlash(I18n.get(IExceptionMessage.ADDRESS_2));
}
}
}