package pt.rupeal.invoicexpress.charts;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import pt.rupeal.invoicexpress.R;
import pt.rupeal.invoicexpress.model.TopDebtorsChartModel;
import pt.rupeal.invoicexpress.model.TopDebtorsChartModel.TopClient;
import pt.rupeal.invoicexpress.server.InvoiceXpress;
import pt.rupeal.invoicexpress.server.InvoiceXpressParser;
import pt.rupeal.invoicexpress.utils.InvoiceXpressException;
import android.content.Context;
import android.util.Log;
import android.view.View;
public class TopDebtorsChart {
public View getView(Context context, TopDebtorsChartModel debtorsChartData) {
// if there is no data chart then the application has to generate it
if(TopDebtorsChartModel.isNoChart(debtorsChartData)) {
setGeneratedDataTopDebtorsChart(debtorsChartData);
}
if(debtorsChartData.isSample()) {
return getViewSample(context);
}
List<TopClient> clients = debtorsChartData.getClients();
double[] balance = new double[clients.size()];
String[] names = new String[clients.size()];
for (int i = 0; i < clients.size(); i++) {
TopDebtorsChartModel.TopClient client = clients.get(i);
balance[i] = client.getBalance();
names[i] = client.getName();
}
CategorySeries series = new CategorySeries("");
for (double value : balance) {
series.add(value);
}
List<String> contactsList = new ArrayList<String>();
for (String name : names) {
contactsList.add(name);
}
int[] colors = new int[] {context.getResources().getColor(R.color.dashboard_debtor_1),
context.getResources().getColor(R.color.dashboard_debtor_2),
context.getResources().getColor(R.color.dashboard_debtor_3),
context.getResources().getColor(R.color.dashboard_debtor_4),
context.getResources().getColor(R.color.dashboard_debtor_5)};
DefaultRenderer renderer = new DefaultRenderer();
renderer.setChartTitle(context.getResources().getString(R.string.dashboard_title) + " "
+ InvoiceXpress.getInstance().getActiveAccountDetails().getCurrencySymbol());
renderer.setBackgroundColor(context.getResources().getColor(R.color.background));
renderer.setLabelsColor(context.getResources().getColor(R.color.dashboard_labels));
renderer.setMargins(new int[]{0, 0, 0, 0});
renderer.setPanEnabled(false);
renderer.setZoomEnabled(false);
for (int color : colors) {
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
seriesRenderer.setColor(color);
renderer.addSeriesRenderer(seriesRenderer);
}
PieChartInvoiceXpress chart = new PieChartInvoiceXpress(context, series, contactsList, renderer);
return new GraphicalView(context, chart);
}
public static final String NO_CLIENT_SAMPLE = "no_client_sample";
public View getViewSample(Context context) {
DefaultRenderer renderer = new DefaultRenderer();
renderer.setChartTitle("");
renderer.setBackgroundColor(context.getResources().getColor(R.color.background));
renderer.setLabelsColor(context.getResources().getColor(R.color.dashboard_labels));
renderer.setMargins(new int[]{0, 0, 0, 0});
renderer.setPanEnabled(false);
renderer.setZoomEnabled(false);
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
seriesRenderer.setColor(context.getResources().getColor(R.color.dashboard_no_debtors));
renderer.addSeriesRenderer(seriesRenderer);
CategorySeries series = new CategorySeries("");
series.add(1);
List<String> contactsList = new ArrayList<String>();
contactsList.add(NO_CLIENT_SAMPLE);
PieChartInvoiceXpress chart = new PieChartInvoiceXpress(context, series, contactsList, renderer);
return new GraphicalView(context, chart);
}
/**
* Example: https://screen-name.invoicexpress.net/api/charts/top-debtors.xml
*
* @param params
* @return
*/
public static String buildRequestHttpGet() {
StringBuffer request = new StringBuffer(InvoiceXpress.getInstance().getActiveAccount().getUrl());
request.append("/api/charts/top-debtors.xml");
request.append("?api_key=" + InvoiceXpress.getInstance().getActiveAccount().getApiKey());
if(InvoiceXpress.DEBUG) {
Log.d(TopDebtorsChart.class.getCanonicalName(), request.toString());
}
return request.toString();
}
public static TopDebtorsChartModel getChart(Context context, String xml) throws InvoiceXpressException {
TopDebtorsChartModel model = new TopDebtorsChartModel();
InvoiceXpressParser parser = new InvoiceXpressParser(context);
Document documentDomElement = parser.getDomElement(xml);
NodeList nodeList = documentDomElement.getElementsByTagName("top-debtors");
Element elem = (Element) nodeList.item(0);
model.setCurrency(parser.getValue(elem, "currency"));
nodeList = documentDomElement.getElementsByTagName("client");
List<TopDebtorsChartModel.TopClient> clients = new ArrayList<TopDebtorsChartModel.TopClient>(nodeList.getLength());
for (int i = 0; i < nodeList.getLength(); i++) {
elem = (Element) nodeList.item(i);
TopDebtorsChartModel.TopClient topClient = new TopDebtorsChartModel.TopClient();
topClient.setName(parser.getValue(elem, "name"));
topClient.setBalance(Double.parseDouble(parser.getValue(elem, "balance")));
clients.add(topClient);
}
model.setClients(clients);
model.setSample(false);
return model;
}
public static void setGeneratedDataTopDebtorsChart(TopDebtorsChartModel model) {
List<TopClient> clients = new ArrayList<TopClient>();
model.setClients(clients);
model.setSample(true);
}
}