Skip to content

Commit a82691a

Browse files
authored
feat: report decoupling (#28)
Currently, the database connection are made through the jasper report directly. Since two sources of truth is a bad practice, all the logic is being shifted to java side for better readability and debuggability. --------- Signed-off-by: Rajdeep Roy Chowdhury <rrajdeeproychowdhury@gmail.com>
1 parent 8bfd0b1 commit a82691a

31 files changed

Lines changed: 646 additions & 456 deletions

‎src/main/java/satyamconsignment/common/Utils.java‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66
import java.time.LocalDate;
77
import java.time.format.DateTimeFormatter;
88
import java.time.format.DateTimeParseException;
9+
import java.util.List;
10+
import java.util.Map;
911
import java.util.concurrent.CompletableFuture;
1012
import java.util.logging.Level;
1113
import java.util.logging.Logger;
1214
import javafx.scene.control.Alert;
1315
import javafx.scene.control.Alert.AlertType;
16+
import net.sf.jasperreports.engine.*;
17+
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
1418

1519
public class Utils {
1620

@@ -80,4 +84,26 @@ public static String formatDate(String dateString) {
8084
}
8185
}
8286
}
87+
88+
public static LocalDate parseDate(String dateString) {
89+
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
90+
return LocalDate.parse(dateString, inputFormatter);
91+
}
92+
93+
public static void generatePdf(String jrxmlFileName, Map<String, Object> payload, List<?> dataRows)
94+
throws JRException {
95+
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataRows);
96+
97+
String jrxmlFilePath = "/jrxml/" + jrxmlFileName;
98+
99+
try {
100+
JasperReport jasperReport =
101+
JasperCompileManager.compileReport(Utils.class.getResourceAsStream(jrxmlFilePath));
102+
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, payload, dataSource);
103+
JasperExportManager.exportReportToPdfFile(jasperPrint, Constants.REPORT_FILE_NAME);
104+
} catch (JRException ex) {
105+
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, ex.toString(), ex);
106+
throw ex;
107+
}
108+
}
83109
}

‎src/main/java/satyamconsignment/controller/entry/bill/AddBillController.java‎

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,8 @@
1919
import satyamconsignment.entity.BillEntity;
2020
import satyamconsignment.entity.LREntity;
2121
import satyamconsignment.model.LR;
22-
import satyamconsignment.repository.BillRepository;
23-
import satyamconsignment.repository.BuyerRepository;
24-
import satyamconsignment.repository.SupplierRepository;
25-
import satyamconsignment.repository.TransportRepository;
26-
import satyamconsignment.service.BillService;
27-
import satyamconsignment.service.BuyerService;
28-
import satyamconsignment.service.SupplierService;
29-
import satyamconsignment.service.TransportService;
22+
import satyamconsignment.repository.*;
23+
import satyamconsignment.service.*;
3024

3125
public class AddBillController implements Initializable {
3226

@@ -89,8 +83,10 @@ public class AddBillController implements Initializable {
8983
public void initialize(URL url, ResourceBundle rb) {
9084
try {
9185
billService = new BillService(new BillRepository());
92-
SupplierService supplierService = new SupplierService(new SupplierRepository());
93-
BuyerService buyerService = new BuyerService(new BuyerRepository());
86+
SupplierService supplierService =
87+
new SupplierService(new SupplierRepository(), new PaymentService(new PaymentRepository()));
88+
BuyerService buyerService =
89+
new BuyerService(new BuyerRepository(), new CollectionService(new CollectionRepository()));
9490
TransportService transportService = new TransportService(new TransportRepository());
9591

9692
TextFields.bindAutoCompletion(supplier_field, supplierService.getAllSuppliers());

‎src/main/java/satyamconsignment/controller/entry/collection/AddCollectionController.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public class AddCollectionController implements Initializable {
108108
@Override
109109
public void initialize(URL url, ResourceBundle rb) {
110110
billService = new BillService(new BillRepository());
111-
buyerService = new BuyerService(new BuyerRepository());
111+
buyerService = new BuyerService(new BuyerRepository(), new CollectionService(new CollectionRepository()));
112112
collectionService = new CollectionService(new CollectionRepository());
113113

114114
collectionItemList = new ArrayList<>();
@@ -143,7 +143,7 @@ private void fillBuyerNameCombo() {
143143
@FXML
144144
private void fillBillNoCombo() {
145145
try {
146-
billNoComboList = collectionService.fetchPendingBillsForBuyer(buyer_name.getValue());
146+
billNoComboList = collectionService.fetchPendingBillNosForBuyer(buyer_name.getValue());
147147
bill_no_combo.setItems(FXCollections.observableArrayList(billNoComboList));
148148
} catch (SQLException ex) {
149149
Utils.showAlert(ex.toString());

‎src/main/java/satyamconsignment/controller/entry/collection/ViewDeleteCollectionController.java‎

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22

33
import java.io.IOException;
44
import java.net.URL;
5-
import java.sql.Connection;
65
import java.sql.SQLException;
7-
import java.util.HashMap;
86
import java.util.List;
9-
import java.util.Map;
107
import java.util.ResourceBundle;
118
import java.util.logging.Level;
129
import java.util.logging.Logger;
@@ -18,7 +15,6 @@
1815
import javafx.scene.control.cell.PropertyValueFactory;
1916
import net.sf.jasperreports.engine.*;
2017
import satyamconsignment.common.Constants;
21-
import satyamconsignment.common.DatabaseHandler;
2218
import satyamconsignment.common.Utils;
2319
import satyamconsignment.entity.CollectionEntity;
2420
import satyamconsignment.model.CollectionItem;
@@ -173,20 +169,10 @@ private void deleteEntry(ActionEvent event) {
173169
@FXML
174170
private void printCollection(ActionEvent event) {
175171
try {
176-
Connection connection = DatabaseHandler.getInstance().getConnection();
177-
String jrxmlFileName = "/jrxml/Collection.jrxml";
178-
JasperReport jasperReport =
179-
JasperCompileManager.compileReport(getClass().getResourceAsStream(jrxmlFileName));
180-
Map<String, Object> map = new HashMap<>();
181-
map.put("voucherNo", voucher_no_field.getText());
182-
map.put("voucherDate", voucher_date.getText());
183-
map.put("buyerName", buyer_name.getText());
184-
map.put("billAmount", total_amount_field.getText());
185-
JasperPrint jprint = JasperFillManager.fillReport(jasperReport, map, connection);
186-
JasperExportManager.exportReportToPdfFile(jprint, Constants.REPORT_FILE_NAME);
172+
collectionService.generatePdf(voucher_no_field.getText());
187173
Utils.launchPdf(Constants.REPORT_FILE_NAME);
188174
Utils.showAlert("Report Successfully Generated", 1);
189-
} catch (IOException | JRException ex) {
175+
} catch (JRException | SQLException | IOException ex) {
190176
Utils.showAlert(ex.toString());
191177
Logger.getLogger(ViewDeleteCollectionController.class.getName()).log(Level.SEVERE, ex.toString(), ex);
192178
}

‎src/main/java/satyamconsignment/controller/entry/payment/AddPaymentController.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public class AddPaymentController implements Initializable {
132132
public void initialize(URL url, ResourceBundle rb) {
133133
billService = new BillService(new BillRepository());
134134
paymentService = new PaymentService(new PaymentRepository());
135-
supplierService = new SupplierService(new SupplierRepository());
135+
supplierService = new SupplierService(new SupplierRepository(), new PaymentService(new PaymentRepository()));
136136

137137
paymentItems = new ArrayList<>();
138138
supplierNameComboList = new ArrayList<>();
@@ -359,7 +359,7 @@ private void fillSupplierCombo() {
359359
@FXML
360360
private void fillBillNoCombo(ActionEvent ignoredEvent) {
361361
try {
362-
billNoComboList = paymentService.fetchPendingBillsForSupplier(supplier_name_combo.getValue());
362+
billNoComboList = paymentService.fetchPendingBillNosForSupplier(supplier_name_combo.getValue());
363363
bill_no_combo.setItems(FXCollections.observableArrayList(billNoComboList));
364364
} catch (SQLException ex) {
365365
Utils.showAlert(ex.toString());

‎src/main/java/satyamconsignment/controller/entry/payment/ViewDeletePaymentController.java‎

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,20 +179,10 @@ private void deleteEntry(ActionEvent event) {
179179
@FXML
180180
private void printPayment(ActionEvent event) {
181181
try {
182-
Connection conn = DatabaseHandler.getInstance().getConnection();
183-
String jrxmlFileName = "/jrxml/Payment.jrxml";
184-
JasperReport jasperReport =
185-
JasperCompileManager.compileReport(getClass().getResourceAsStream(jrxmlFileName));
186-
Map<String, Object> map = new HashMap<>();
187-
map.put("voucherNo", voucher_no_field.getText());
188-
map.put("voucherDate", voucher_date.getText());
189-
map.put("supplierName", supplier_name.getText());
190-
map.put("billAmount", total_amount_field.getText());
191-
JasperPrint jprint = JasperFillManager.fillReport(jasperReport, map, conn);
192-
JasperExportManager.exportReportToPdfFile(jprint, Constants.REPORT_FILE_NAME);
182+
paymentService.generatePdf(voucher_no_field.getText());
193183
Utils.launchPdf(Constants.REPORT_FILE_NAME);
194184
Utils.showAlert("Report Successfully Generated", 1);
195-
} catch (IOException | JRException ex) {
185+
} catch (IOException | JRException | SQLException ex) {
196186
Utils.showAlert(ex.toString());
197187
Logger.getLogger(PaymentEntryController.class.getName()).log(Level.SEVERE, ex.toString(), ex);
198188
}

‎src/main/java/satyamconsignment/controller/master/BuyerController.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import javafx.scene.control.TextField;
1515
import satyamconsignment.common.Utils;
1616
import satyamconsignment.repository.BuyerRepository;
17+
import satyamconsignment.repository.CollectionRepository;
1718
import satyamconsignment.service.BuyerService;
19+
import satyamconsignment.service.CollectionService;
1820

1921
public class BuyerController implements Initializable {
2022

@@ -43,7 +45,7 @@ public class BuyerController implements Initializable {
4345

4446
@Override
4547
public void initialize(URL url, ResourceBundle rb) {
46-
buyerService = new BuyerService(new BuyerRepository());
48+
buyerService = new BuyerService(new BuyerRepository(), new CollectionService(new CollectionRepository()));
4749
refreshList();
4850
}
4951

‎src/main/java/satyamconsignment/controller/master/SupplierController.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import javafx.scene.control.ListView;
1414
import javafx.scene.control.TextField;
1515
import satyamconsignment.common.Utils;
16+
import satyamconsignment.repository.PaymentRepository;
1617
import satyamconsignment.repository.SupplierRepository;
18+
import satyamconsignment.service.PaymentService;
1719
import satyamconsignment.service.SupplierService;
1820

1921
public class SupplierController implements Initializable {
@@ -43,7 +45,7 @@ public class SupplierController implements Initializable {
4345

4446
@Override
4547
public void initialize(URL url, ResourceBundle rb) {
46-
supplierService = new SupplierService(new SupplierRepository());
48+
supplierService = new SupplierService(new SupplierRepository(), new PaymentService(new PaymentRepository()));
4749
refreshList();
4850
}
4951

‎src/main/java/satyamconsignment/controller/report/BuyerLedgerController.java‎

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22

33
import java.io.IOException;
44
import java.net.URL;
5-
import java.sql.Connection;
65
import java.sql.SQLException;
7-
import java.util.HashMap;
86
import java.util.List;
9-
import java.util.Map;
107
import java.util.ResourceBundle;
118
import java.util.logging.Level;
129
import java.util.logging.Logger;
@@ -20,10 +17,11 @@
2017
import javafx.scene.control.ToggleGroup;
2118
import net.sf.jasperreports.engine.*;
2219
import satyamconsignment.common.Constants;
23-
import satyamconsignment.common.DatabaseHandler;
2420
import satyamconsignment.common.Utils;
2521
import satyamconsignment.repository.BuyerRepository;
22+
import satyamconsignment.repository.CollectionRepository;
2623
import satyamconsignment.service.BuyerService;
24+
import satyamconsignment.service.CollectionService;
2725

2826
public class BuyerLedgerController implements Initializable {
2927

@@ -45,9 +43,11 @@ public class BuyerLedgerController implements Initializable {
4543
@FXML
4644
private Button launch_pdf_btn;
4745

46+
private BuyerService buyerService;
47+
4848
@Override
4949
public void initialize(URL url, ResourceBundle rb) {
50-
BuyerService buyerService = new BuyerService(new BuyerRepository());
50+
buyerService = new BuyerService(new BuyerRepository(), new CollectionService(new CollectionRepository()));
5151
try {
5252
List<String> buyerNames = buyerService.getAllBuyers();
5353
buyer_name_combo.setItems(FXCollections.observableArrayList(buyerNames));
@@ -59,27 +59,12 @@ public void initialize(URL url, ResourceBundle rb) {
5959

6060
@FXML
6161
private void generatePDF(ActionEvent event) {
62-
Connection conn = DatabaseHandler.getInstance().getConnection();
63-
64-
String jrxmlFileName;
65-
if (agewise_outstanding_radio.isSelected()) {
66-
jrxmlFileName = "BuyerLedgerAge.jrxml";
67-
} else {
68-
jrxmlFileName = "BuyerLedger.jrxml";
69-
}
70-
String jrxmlFilePath = "/jrxml/" + jrxmlFileName;
71-
72-
Map<String, Object> map = new HashMap<>();
73-
map.put("buyerName", buyer_name_combo.getSelectionModel().getSelectedItem());
74-
7562
try {
76-
JasperReport jasperReport =
77-
JasperCompileManager.compileReport(getClass().getResourceAsStream(jrxmlFilePath));
78-
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, conn);
79-
JasperExportManager.exportReportToPdfFile(jasperPrint, Constants.REPORT_FILE_NAME);
63+
buyerService.generatePdf(
64+
buyer_name_combo.getSelectionModel().getSelectedItem(), agewise_outstanding_radio.isSelected());
8065
Utils.launchPdf(Constants.REPORT_FILE_NAME);
8166
Utils.showAlert("Report Successfully Generated", 1);
82-
} catch (IOException | JRException ex) {
67+
} catch (SQLException | IOException | JRException ex) {
8368
Utils.showAlert(ex.toString());
8469
Logger.getLogger(BuyerLedgerController.class.getName()).log(Level.SEVERE, ex.toString(), ex);
8570
}

‎src/main/java/satyamconsignment/controller/report/SupplierLedgerController.java‎

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22

33
import java.io.IOException;
44
import java.net.URL;
5-
import java.sql.Connection;
65
import java.sql.SQLException;
7-
import java.util.HashMap;
86
import java.util.List;
9-
import java.util.Map;
107
import java.util.ResourceBundle;
118
import java.util.logging.Level;
129
import java.util.logging.Logger;
@@ -20,9 +17,10 @@
2017
import javafx.scene.control.ToggleGroup;
2118
import net.sf.jasperreports.engine.*;
2219
import satyamconsignment.common.Constants;
23-
import satyamconsignment.common.DatabaseHandler;
2420
import satyamconsignment.common.Utils;
21+
import satyamconsignment.repository.PaymentRepository;
2522
import satyamconsignment.repository.SupplierRepository;
23+
import satyamconsignment.service.PaymentService;
2624
import satyamconsignment.service.SupplierService;
2725

2826
public class SupplierLedgerController implements Initializable {
@@ -45,9 +43,11 @@ public class SupplierLedgerController implements Initializable {
4543
@FXML
4644
private Button launch_pdf_btn;
4745

46+
private SupplierService supplierService;
47+
4848
@Override
4949
public void initialize(URL url, ResourceBundle rb) {
50-
SupplierService supplierService = new SupplierService(new SupplierRepository());
50+
supplierService = new SupplierService(new SupplierRepository(), new PaymentService(new PaymentRepository()));
5151
try {
5252
List<String> supplierList = supplierService.getAllSuppliers();
5353
supplier_name_combo.setItems(FXCollections.observableArrayList(supplierList));
@@ -59,26 +59,12 @@ public void initialize(URL url, ResourceBundle rb) {
5959

6060
@FXML
6161
private void generatePDF(ActionEvent event) {
62-
Connection conn = DatabaseHandler.getInstance().getConnection();
63-
64-
String jrxmlFileName;
65-
if (agewise_outstanding_radio.isSelected()) {
66-
jrxmlFileName = "SupplierLedgerAge.jrxml";
67-
} else {
68-
jrxmlFileName = "SupplierLedger.jrxml";
69-
}
70-
String jrxmlFilePath = "/jrxml/" + jrxmlFileName;
71-
Map<String, Object> map = new HashMap<>();
72-
map.put("supplierName", supplier_name_combo.getSelectionModel().getSelectedItem());
73-
7462
try {
75-
JasperReport jasperReport =
76-
JasperCompileManager.compileReport(getClass().getResourceAsStream(jrxmlFilePath));
77-
JasperPrint jprint = JasperFillManager.fillReport(jasperReport, map, conn);
78-
JasperExportManager.exportReportToPdfFile(jprint, Constants.REPORT_FILE_NAME);
63+
supplierService.generatePdf(
64+
supplier_name_combo.getSelectionModel().getSelectedItem(), agewise_outstanding_radio.isSelected());
7965
Utils.launchPdf(Constants.REPORT_FILE_NAME);
8066
Utils.showAlert("Report Successfully Generated", 1);
81-
} catch (JRException | IOException ex) {
67+
} catch (IOException | SQLException | JRException ex) {
8268
Utils.showAlert(ex.toString());
8369
Logger.getLogger(SupplierLedgerController.class.getName()).log(Level.SEVERE, ex.toString(), ex);
8470
}

0 commit comments

Comments
 (0)