Skip to content

Commit 5e3a6bc

Browse files
committed
feat: Chat expenditures by payment
Issue: #41
1 parent 41869b6 commit 5e3a6bc

File tree

6 files changed

+204
-2
lines changed

6 files changed

+204
-2
lines changed

server-investme-business/src/main/java/keep/transaction/IKeepTransactionSBean.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ public interface IKeepTransactionSBean {
2222
public Double getTotalInvestmentsChartByYear(Integer year, Integer month);
2323
public List<Number> getTotalByCategoryChartInvestment(TOFilterTransaction filter);
2424
public List<String> getCategoriesNameWithTransactions(TOFilterTransaction filter);
25+
public List<String> getPaymentsNameWithTransactions(TOFilterTransaction filter);
26+
public List<Number> getTotalByPayment(TOFilterTransaction filter);
27+
public Double getTotalValueByPayment(TOFilterTransaction filter);
2528
public void deleteTransactionsFromUser() throws Exception;
2629
}

server-investme-business/src/main/java/keep/transaction/KeepTransactionSBean.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,4 +297,61 @@ public void deleteTransactionsFromUser() throws Exception {
297297
query.executeUpdate();
298298
}
299299

300+
@SuppressWarnings("unchecked")
301+
@Override
302+
public List<String> getPaymentsNameWithTransactions(TOFilterTransaction filter) {
303+
StringBuilder sql = new StringBuilder();
304+
305+
List<TOParameter> params = new ArrayList<TOParameter>();
306+
307+
sql.append(" SELECT T.payment.name FROM ");
308+
sql.append(Transaction.class.getSimpleName()).append(" T ");
309+
sql.append(this.getWhereTransactions(filter, params));
310+
sql.append(" GROUP BY T.payment.name ");
311+
sql.append(" ORDER BY T.payment.name");
312+
313+
Query query = this.getEntityManager().createQuery(sql.toString(), String.class);
314+
setParameters(query, params);
315+
316+
return query.getResultList();
317+
}
318+
319+
@SuppressWarnings("unchecked")
320+
@Override
321+
public List<Number> getTotalByPayment(TOFilterTransaction filter) {
322+
StringBuilder sql = new StringBuilder();
323+
324+
List<TOParameter> params = new ArrayList<TOParameter>();
325+
326+
sql.append(" SELECT SUM(T.price * T.amount) ")
327+
.append(this.getFromTransactions())
328+
.append(" RIGHT JOIN T.payment payment ")
329+
.append(this.getWhereTransactions(filter, params))
330+
.append(" GROUP BY payment.name ")
331+
.append(" ORDER BY payment.name ");
332+
333+
Query query = this.getEntityManager().createQuery(sql.toString(), Number.class);
334+
setParameters(query, params);
335+
336+
return query.getResultList();
337+
}
338+
339+
@Override
340+
public Double getTotalValueByPayment(TOFilterTransaction filter) {
341+
StringBuilder sql = new StringBuilder();
342+
343+
List<TOParameter> params = new ArrayList<TOParameter>();
344+
345+
sql.append(" SELECT SUM(T.price * T.amount) ")
346+
.append(this.getFromTransactions())
347+
.append(this.getWhereTransactions(filter, params));
348+
349+
Query query = this.getEntityManager().createQuery(sql.toString());
350+
setParameters(query, params);
351+
352+
Number value = (Number) query.getSingleResult();
353+
354+
return value != null ? value.doubleValue() : 0.0;
355+
}
356+
300357
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package managedBean.home;
2+
3+
import java.util.List;
4+
5+
import org.primefaces.model.charts.ChartData;
6+
import org.primefaces.model.charts.pie.PieChartDataSet;
7+
import org.primefaces.model.charts.pie.PieChartModel;
8+
9+
import abstracts.AbstractMBean;
10+
import jakarta.annotation.PostConstruct;
11+
import jakarta.ejb.EJB;
12+
import jakarta.faces.view.ViewScoped;
13+
import jakarta.inject.Named;
14+
import keep.category.IKeepCategorySBean;
15+
import keep.transaction.IKeepTransactionSBean;
16+
import to.transaction.TOFilterTransaction;
17+
import utils.ColorUtil;
18+
19+
@Named(MBChartExpendituresByPayment.MANAGED_BEAN_NAME)
20+
@ViewScoped
21+
public class MBChartExpendituresByPayment extends AbstractMBean {
22+
23+
private static final long serialVersionUID = 7671190281894410973L;
24+
public static final String MANAGED_BEAN_NAME = "MBChartExpendituresByPayment";
25+
26+
private PieChartModel pieModel;
27+
private boolean hasData;
28+
29+
@EJB
30+
private IKeepTransactionSBean transactionSBean;
31+
32+
@EJB
33+
private IKeepCategorySBean categorySBean;
34+
35+
@PostConstruct
36+
public void init() {
37+
this.createChartExpendituresByPayment();
38+
}
39+
40+
public void createChartExpendituresByPayment() {
41+
this.setPieModel(new PieChartModel());
42+
43+
ChartData data = new ChartData();
44+
PieChartDataSet dataSet = new PieChartDataSet();
45+
46+
TOFilterTransaction filter = new TOFilterTransaction();
47+
48+
try {
49+
filter = (TOFilterTransaction) this.getMBHome().getFilter().clone();
50+
} catch (CloneNotSupportedException e) {
51+
showMessageError(e);
52+
}
53+
54+
List<String> labels = this.getTransactionSBean().getPaymentsNameWithTransactions(filter);
55+
data.setLabels(labels);
56+
57+
List<Number> values = this.getTransactionSBean().getTotalByPayment(filter);
58+
59+
if(values.size() > 0) {
60+
this.setHasData(true);
61+
} else {
62+
this.setHasData(false);
63+
}
64+
65+
66+
dataSet.setData(values);
67+
dataSet.setBackgroundColor(ColorUtil.generateRandomColors(values.size()));
68+
69+
data.addChartDataSet(dataSet);
70+
71+
this.getPieModel().setData(data);
72+
}
73+
74+
public MBHome getMBHome() {
75+
return this.getMBean(MBHome.MANAGED_BEAN_NAME);
76+
}
77+
78+
// Getters and Setters
79+
public IKeepTransactionSBean getTransactionSBean() {
80+
return transactionSBean;
81+
}
82+
83+
public void setTransactionSBean(IKeepTransactionSBean transactionSBean) {
84+
this.transactionSBean = transactionSBean;
85+
}
86+
87+
public PieChartModel getPieModel() {
88+
return pieModel;
89+
}
90+
91+
public void setPieModel(PieChartModel pieModel) {
92+
this.pieModel = pieModel;
93+
}
94+
95+
public IKeepCategorySBean getCategorySBean() {
96+
return categorySBean;
97+
}
98+
99+
public void setCategorySBean(IKeepCategorySBean categorySBean) {
100+
this.categorySBean = categorySBean;
101+
}
102+
103+
public boolean isHasData() {
104+
return hasData;
105+
}
106+
107+
public void setHasData(boolean hasData) {
108+
this.hasData = hasData;
109+
}
110+
111+
}

server-investme-web/src/main/java/managedBean/home/MBHome.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ public Double getTotalInvestment() {
8383
return this.getTransactionSBean().getTotalByType(this.getFilter(), "investment");
8484
}
8585

86+
public Double getTotalByPayment() {
87+
return this.getTransactionSBean().getTotalValueByPayment(this.getFilter());
88+
}
89+
8690
public MBTransactionInfo getMBTransactionInfo() {
8791
return this.getMBean(MBTransactionInfo.MANAGED_BEAN_NAME);
8892
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3+
<html xmlns="http://www.w3.org/1999/xhtml"
4+
xmlns:h="http://java.sun.com/jsf/html"
5+
xmlns:p="http://primefaces.org/ui"
6+
xmlns:ui="http://java.sun.com/jsf/facelets"
7+
xmlns:f="http://java.sun.com/jsf/core"
8+
xmlns:a="http://xmlns.jcp.org/jsf/passthrough"
9+
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
10+
xmlns:components="http://java.sun.com/jsf/composite/components"
11+
xmlns:jsf="http://xmlns.jcp.org/jsf">
12+
13+
<ui:composition>
14+
<h:form id="formChartExpendituresByPayments">
15+
<p:remoteCommand
16+
name="reloadChartExpendituresByPayment"
17+
action="#{MBChartExpendituresByPayment.createChartExpendituresByPayment}"
18+
update="@form" />
19+
20+
<div class="container-chart-investments vertical-center" style="display: #{MBChartExpendituresByPayment.hasData ? 'flex' : 'none'}">
21+
<p:pieChart model="#{MBChartExpendituresByPayment.pieModel}" />
22+
<p class="mg-t-10">#{MBAppConfigs.appConfigs.showValues ? MBAppConfigs.getBrazilianCurrency(MBHome.getTotalByPayment()) : '******'}</p>
23+
</div>
24+
</h:form>
25+
</ui:composition>
26+
</html>

server-investme-web/src/main/webapp/htdocs/client/wallet/wallet.xhtml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@
2222
<div jsf:id="charts" class="horizontal-evenly">
2323
<ui:include src="/htdocs/client/wallet/chart_investments_by_category.xhtml" />
2424
<ui:include src="/htdocs/client/wallet/chart_expenditures_by_category.xhtml" />
25+
<ui:include src="/htdocs/client/wallet/chart_expenditures_by_payment.xhtml" />
2526
</div>
2627

2728
<h:form id="formTransactions">
2829
<p:remoteCommand
2930
name="updateTableAndCards"
30-
onstart="reloadChartInvestments(); reloadChartExpenditures();"
31+
onstart="reloadChartInvestments(); reloadChartExpenditures(); reloadChartExpendituresByPayment();"
3132
update="formTransactions:tableTransactions:tableTransactions" />
3233

3334
<h2>#{label.last_transactions}</h2>
@@ -136,7 +137,7 @@
136137
value="#{label.search}"
137138
update="@form"
138139
onclick="PF('tableTransactionsVW').filter();"
139-
oncomplete="reloadChartInvestments(); reloadChartExpenditures();"
140+
oncomplete="reloadChartInvestments(); reloadChartExpenditures(); reloadChartExpendituresByPayment();"
140141
styleClass="mg-r-5" />
141142

142143
<p:commandButton

0 commit comments

Comments
 (0)