Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
c377646
feat: moved logic for save bill to modules
Razdeep Mar 24, 2026
e0e61d5
feat: AddBill controller made modular
Razdeep Mar 24, 2026
fec7399
feat: view bill modularized
Razdeep Mar 24, 2026
13f0561
feat: bill delete flow modularized
Razdeep Mar 25, 2026
187f1d6
fix: formatting fixed
Razdeep Mar 25, 2026
3e4c9b1
feat: implemented fetchPendingBillsForBuyer on the sql side
Razdeep Mar 25, 2026
5ed2e1e
feat: implemented fetchPendingAmountForBillNo()
Razdeep Mar 25, 2026
4c04fed
feat: add collection modularized
Razdeep Mar 27, 2026
e34ff8d
fix: bug fixes
Razdeep Mar 28, 2026
efae3fc
feat: last voucher logic moved to three-tiered architecture
Razdeep Mar 28, 2026
608ad9c
feat: view and delete collection modularized
Razdeep Mar 29, 2026
c2e91a7
feat: add payment modularized
Razdeep Mar 30, 2026
0a81e98
feat: payment fetch pending modularized
Razdeep Mar 30, 2026
c503d89
feat: Last voucher in payment entry modularized
Razdeep Apr 1, 2026
d19c1b6
fix: getCollection fixed
Razdeep Apr 3, 2026
582c914
feat: view payment modularized
Razdeep Apr 3, 2026
8c87f4c
feat: delete payment modularized
Razdeep Apr 3, 2026
c5d18f9
fix: project cleanup
Razdeep Apr 3, 2026
ea3204d
fix: buyer agewise outstanding report fixed
Razdeep Apr 4, 2026
47e35d5
fix: improved supplier agewise outstanding sql logic
Razdeep Apr 4, 2026
3e21813
feat: reusing defined service classes
Razdeep Apr 6, 2026
0418683
fix: combo list ordering bug fixed
Razdeep Apr 7, 2026
02740d0
feat: buyer master modularized
Razdeep Apr 7, 2026
93e5ed4
feat: Supplier master modularized
Razdeep Apr 7, 2026
564a17c
feat: transport master modularized
Razdeep Apr 7, 2026
cf694b7
feat: report generation redundant ui popups avoided
Razdeep Apr 9, 2026
06dd954
feat: added upload and download scripts to ci artifacts
Razdeep Apr 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ tasks.named<Jar>("jar") { enabled = false }

val copyScripts by tasks.registering(Copy::class) {
from("scripts") {
include("start.sh", "start.bat")
include("start.sh", "start.bat", "download.bat", "upload.bat")
}
into(layout.buildDirectory.dir("libs"))
doLast {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/satyamconsignment/common/DatabaseHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ private void initDatabase(Connection conn) {
try {
String initSQL = getInitSQL();
try (Statement st = conn.createStatement()) {
conn.setAutoCommit(false);

for (String statement : initSQL.split(";")) {
String cleanedStatement = statement.trim();
Expand All @@ -42,7 +43,7 @@ private void initDatabase(Connection conn) {
conn.setAutoCommit(true);
}
} catch (Exception ex) {
System.out.println(ex.toString());
Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, ex.toString(), ex);
}
}

Expand Down
36 changes: 25 additions & 11 deletions src/main/java/satyamconsignment/common/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.logging.Logger;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

public class Utils {

private static final Logger logger = Logger.getLogger(Utils.class.getName());

public static void showAlert(String message) {
Alert alert = new Alert(AlertType.ERROR);
alert.setContentText(message);
Expand Down Expand Up @@ -37,25 +41,35 @@ public static void showAlert(String message, int choice) {
alert.show();
}

public static void launchPdf(String filename) {
public static void launchPdf(String filename) throws IOException {
File pdfFile = new File(filename);

if (!pdfFile.exists()) {
showAlert("File does not exist: " + pdfFile.getAbsolutePath());
return;
throw new IOException("File does not exist: " + pdfFile.getAbsolutePath());
}

if (!Desktop.isDesktopSupported()) {
showAlert("Desktop is not supported on this platform.");
return;
throw new IOException("Desktop is not supported on this platform.");
}

Desktop.getDesktop().open(pdfFile);
}

public static String formatDate(String dateString) {
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(Constants.DATE_TIME_FORMAT);
try {
Desktop.getDesktop().open(pdfFile);
showAlert("PDF opened successfully.", 1);
} catch (IOException e) {
String msg = ("Error opening PDF: " + e.getMessage());
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, msg, e);
LocalDate date = LocalDate.parse(dateString, inputFormatter);
return date.format(outputFormatter);
} catch (DateTimeParseException ex) {
try {
// already in desired format
LocalDate.parse(dateString, outputFormatter);
return dateString;
} catch (DateTimeParseException ex2) {
logger.warning(ex2.toString());
throw ex2;
}
}
}
}
22 changes: 22 additions & 0 deletions src/main/java/satyamconsignment/entity/BillEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package satyamconsignment.entity;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@AllArgsConstructor
@Getter
@Setter
@Builder
public class BillEntity {
private String supplierName;
private String buyerName;
private String billNo;
private String billDate;
private String transport;
private String lrDate;
private String billAmount;
private List<LREntity> lrEntities;
}
15 changes: 15 additions & 0 deletions src/main/java/satyamconsignment/entity/CollectionEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package satyamconsignment.entity;

import java.util.List;
import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class CollectionEntity {
private String voucherNo;
private String voucherDate;
private String buyerName;
private String totalAmount;
private List<CollectionItemEntity> items;
}
20 changes: 20 additions & 0 deletions src/main/java/satyamconsignment/entity/CollectionItemEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package satyamconsignment.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@AllArgsConstructor
@Builder
@Getter
public class CollectionItemEntity {
private String billNo;
private String billDate;
private String billAmount;
private String supplierName;
private String due;
private String amountCollected;
private String bank;
private String ddNo;
private String ddDate;
}
14 changes: 14 additions & 0 deletions src/main/java/satyamconsignment/entity/LREntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package satyamconsignment.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@AllArgsConstructor
@Getter
@Setter
public class LREntity {
private String billNo;
private String lrNo;
private String pm;
}
17 changes: 17 additions & 0 deletions src/main/java/satyamconsignment/entity/PaymentEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package satyamconsignment.entity;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@AllArgsConstructor
@Builder
@Getter
public class PaymentEntity {
private String voucherNo;
private String voucherDate;
private String supplierName;
private String totalAmount;
private List<PaymentItemEntity> items;
}
19 changes: 19 additions & 0 deletions src/main/java/satyamconsignment/entity/PaymentItemEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package satyamconsignment.entity;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class PaymentItemEntity {
private String voucherNo;
private String buyerName;
private String billNo;
private String billDate;
private String billAmount;
private String dueAmount;
private String amountPaid;
private String bank;
private String ddNo;
private String ddDate;
}
126 changes: 126 additions & 0 deletions src/main/java/satyamconsignment/repository/BillRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package satyamconsignment.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import satyamconsignment.common.DatabaseHandler;
import satyamconsignment.entity.BillEntity;
import satyamconsignment.entity.LREntity;

public class BillRepository {

public void save(BillEntity billEntity) throws SQLException {
Connection connection = DatabaseHandler.getInstance().getConnection();
try {
// language=sql
String sql =
"INSERT INTO `Bill_Entry_Table`(`Supplier Name`,`Buyer Name`,`Bill No.`,`Bill Date`,`Transport`,`LR Date`,`Bill Amount`,`Collection Due`,`Due`) "
+ "VALUES (?,?,?,?,?,?,?,?,?) ON CONFLICT(`Bill No.`) DO UPDATE SET "
+ "`Supplier Name`=excluded.`Supplier Name`, `Buyer Name`=excluded.`Buyer Name`, `Bill Date`=excluded.`Bill Date`, "
+ "`Transport`=excluded.`Transport`, `LR Date`=excluded.`LR Date`, `Bill Amount`=excluded.`Bill Amount`, "
+ "`Collection Due`=excluded.`Collection Due`, `Due`=excluded.`Due`;";

connection.setAutoCommit(false);

PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, billEntity.getSupplierName());
preparedStatement.setString(2, billEntity.getBuyerName());
preparedStatement.setString(3, billEntity.getBillNo());
preparedStatement.setString(4, billEntity.getBillDate());
preparedStatement.setString(5, billEntity.getTransport());
preparedStatement.setString(6, billEntity.getLrDate());
preparedStatement.setString(7, billEntity.getBillAmount());
preparedStatement.setString(8, billEntity.getBillAmount());
preparedStatement.setString(9, billEntity.getBillAmount());
preparedStatement.execute();

if (null != billEntity.getLrEntities()) {
for (LREntity lr : billEntity.getLrEntities()) {
sql = "INSERT INTO `LR_Table`(`Bill No.`,`LR No.`,`PM`) VALUES (?,?,?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, billEntity.getBillNo());
preparedStatement.setString(2, lr.getLrNo());
preparedStatement.setString(3, lr.getPm());
preparedStatement.execute();
}
}
connection.commit();
} catch (SQLException ex) {
connection.rollback();
Logger.getLogger(BillRepository.class.getName()).log(Level.SEVERE, ex.toString(), ex);
throw ex;
}
}

public BillEntity getBill(String billNo) throws SQLException {
try {
Connection connection = DatabaseHandler.getInstance().getConnection();
String sql = "select * from `Bill_Entry_Table` where `Bill No.`=? collate nocase";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, billNo);
ResultSet billResultSet = preparedStatement.executeQuery();

if (billResultSet.isClosed()) {
return null;
}

BillEntity billEntity = BillEntity.builder()
.billNo(billResultSet.getString("Bill No."))
.supplierName(billResultSet.getString("Supplier Name"))
.buyerName(billResultSet.getString("Buyer Name"))
.billDate(billResultSet.getString("Bill Date"))
.transport(billResultSet.getString("Transport"))
.lrDate(billResultSet.getString("LR Date"))
.billAmount(billResultSet.getString("Bill Amount"))
.build();

sql = "select * from `LR_Table` where `Bill No.`=? collate nocase";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, billNo);
ResultSet lrPmResultSet = preparedStatement.executeQuery();

List<LREntity> lrpmList = new ArrayList<>();
while (lrPmResultSet.next()) {
lrpmList.add(new LREntity(
lrPmResultSet.getString("Bill No."),
lrPmResultSet.getString("LR No."),
lrPmResultSet.getString("PM")));
}

billEntity.setLrEntities(lrpmList);
return billEntity;
} catch (SQLException ex) {
Logger.getLogger(BillRepository.class.getName()).log(Level.SEVERE, ex.toString(), ex);
throw ex;
}
}

public void deleteBill(String billNo) throws SQLException {

Connection connection = DatabaseHandler.getInstance().getConnection();

try {
connection.setAutoCommit(false);
String sql = "DELETE FROM `Bill_Entry_Table` where `Bill No.`=? collate nocase";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, billNo);
preparedStatement.execute();

String sql2 = "DELETE FROM `LR_Table` where `Bill No.`=? collate nocase";
preparedStatement = connection.prepareStatement(sql2);
preparedStatement.setString(1, billNo);
preparedStatement.execute();

connection.commit();
} catch (SQLException ex) {
connection.rollback();
Logger.getLogger(BillRepository.class.getName()).log(Level.SEVERE, ex.toString(), ex);
throw ex;
}
}
}
Loading
Loading