add po status flag to the po edit screen and po online status screen #36

Merged
usama.jameel merged 1 commits from add-po-complete-flag into main 2025-06-25 04:37:02 +00:00
6 changed files with 47 additions and 7 deletions

View File

@ -27,18 +27,20 @@ public class PurchaseOrderCTPDao {
private final String SELECT_BY_PO_CODE = String.format( "SELECT * FROM %s WHERE purchase_order_code = :purchase_order_code", TABLE_NAME ); private final String SELECT_BY_PO_CODE = String.format( "SELECT * FROM %s WHERE purchase_order_code = :purchase_order_code", TABLE_NAME );
private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME ); private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME );
private final String INSERT_QUERY = String.format( private final String INSERT_QUERY = String.format(
"INSERT INTO %s (id, purchase_order_code, purchase_order_quantity, purchase_order_quantity_required, article_name, created_by, status) " + "INSERT INTO %s (id, purchase_order_code, purchase_order_quantity, purchase_order_quantity_required, article_name, created_by, status, po_status) " +
"VALUES (:id, :purchase_order_code, :purchase_order_quantity, :purchase_order_quantity_required, :article_name, :created_by, :status) " + "VALUES (:id, :purchase_order_code, :purchase_order_quantity, :purchase_order_quantity_required, :article_name, :created_by, :status, :po_status) " +
"ON DUPLICATE KEY UPDATE " + "ON DUPLICATE KEY UPDATE " +
"purchase_order_code = VALUES(purchase_order_code), " + "purchase_order_code = VALUES(purchase_order_code), " +
"purchase_order_quantity = VALUES(purchase_order_quantity), " + "purchase_order_quantity = VALUES(purchase_order_quantity), " +
"purchase_order_quantity_required = VALUES(purchase_order_quantity_required), " + "purchase_order_quantity_required = VALUES(purchase_order_quantity_required), " +
"article_name = VALUES(article_name), " + "article_name = VALUES(article_name), " +
"created_by = VALUES(created_by), " + "created_by = VALUES(created_by), " +
"status = VALUES(status)", "status = VALUES(status)," +
"po_status = VALUES(po_status)",
TABLE_NAME); TABLE_NAME);
private final String SELECT_BY_LIMIT = String.format( "SELECT * FROM %s WHERE created_by = :created_by ORDER BY id ASC limit :limit", TABLE_NAME ); private final String SELECT_BY_LIMIT = String.format( "SELECT * FROM %s WHERE created_by = :created_by ORDER BY id ASC limit :limit", TABLE_NAME );
private final String SELECT_BY_TERM = String.format( "SELECT * FROM %s WHERE purchase_order_code LIKE :term limit 100 offset 0", TABLE_NAME ); private final String SELECT_BY_TERM = String.format( "SELECT * FROM %s WHERE purchase_order_code LIKE :term AND po_status = false limit 100 offset 0", TABLE_NAME );
// prepare query params // prepare query params
@ -50,7 +52,8 @@ public class PurchaseOrderCTPDao {
.addValue("purchase_order_quantity_required", purchaseOrderCTP.getPurchaseOrderQuantityRequired()) .addValue("purchase_order_quantity_required", purchaseOrderCTP.getPurchaseOrderQuantityRequired())
.addValue("article_name", purchaseOrderCTP.getArticleName()) .addValue("article_name", purchaseOrderCTP.getArticleName())
.addValue("created_by", purchaseOrderCTP.getCreatedBy()) .addValue("created_by", purchaseOrderCTP.getCreatedBy())
.addValue("status", purchaseOrderCTP.getStatus()); .addValue("status", purchaseOrderCTP.getStatus())
.addValue("po_status", purchaseOrderCTP.getPoStatus());
return params; return params;
} }
@ -96,10 +99,16 @@ public class PurchaseOrderCTPDao {
return namedParameterJdbcTemplate.update( DELETE_QUERY, params ) > 0; return namedParameterJdbcTemplate.update( DELETE_QUERY, params ) > 0;
} }
/*
* find by query
* */
public List<PurchaseOrderCTP> findByQuery(String query ){ public List<PurchaseOrderCTP> findByQuery(String query ){
return namedParameterJdbcTemplate.query( query, new PurchaseOrderCTPRowMapper() ); return namedParameterJdbcTemplate.query( query, new PurchaseOrderCTPRowMapper() );
} }
/*
* find by created by
* */
public List<PurchaseOrderCTP> findByUserAndLimit(String createdBy, Long limit ){ public List<PurchaseOrderCTP> findByUserAndLimit(String createdBy, Long limit ){
MapSqlParameterSource params = new MapSqlParameterSource(); MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("limit", limit.intValue() ); params.addValue("limit", limit.intValue() );
@ -107,6 +116,9 @@ public class PurchaseOrderCTPDao {
return namedParameterJdbcTemplate.query( SELECT_BY_LIMIT, params, new PurchaseOrderCTPRowMapper() ); return namedParameterJdbcTemplate.query( SELECT_BY_LIMIT, params, new PurchaseOrderCTPRowMapper() );
} }
/*
* find by po code
* */
public List<PurchaseOrderCTP> findByPoCode(String poCode){ public List<PurchaseOrderCTP> findByPoCode(String poCode){
MapSqlParameterSource params = new MapSqlParameterSource(); MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("purchase_order_code", poCode); params.addValue("purchase_order_code", poCode);

View File

@ -19,6 +19,7 @@ public class PurchaseOrderCTPRowMapper implements RowMapper<PurchaseOrderCTP> {
} }
PurchaseOrderCTP.setCreatedBy(rs.getString("created_by")); PurchaseOrderCTP.setCreatedBy(rs.getString("created_by"));
PurchaseOrderCTP.setStatus(rs.getString("status")); PurchaseOrderCTP.setStatus(rs.getString("status"));
PurchaseOrderCTP.setPoStatus(rs.getBoolean("po_status"));
return PurchaseOrderCTP; return PurchaseOrderCTP;
} }
} }

View File

@ -14,6 +14,7 @@ public class PurchaseOrderCTP {
private long purchaseOrderQuantity; private long purchaseOrderQuantity;
private long purchaseOrderQuantityRequired; private long purchaseOrderQuantityRequired;
private String articleName; private String articleName;
private boolean poStatus;
private String createdBy; private String createdBy;
private LocalDateTime createdAt; private LocalDateTime createdAt;
private String status; private String status;
@ -81,4 +82,12 @@ public class PurchaseOrderCTP {
public void setStatus(String status) { public void setStatus(String status) {
this.status = status; this.status = status;
} }
public boolean getPoStatus() {
return poStatus;
}
public void setPoStatus(boolean poStatus) {
this.poStatus = poStatus;
}
} }

View File

@ -437,6 +437,9 @@ public class ReportingService {
return barChartData; return barChartData;
} }
/*
* find all po for po-online-status
* */
public List<POsDetails> getAllPOs(String poCode, String size, String color) { public List<POsDetails> getAllPOs(String poCode, String size, String color) {
List<POsDetails> pOsDetailsList = new ArrayList<>(); List<POsDetails> pOsDetailsList = new ArrayList<>();
@ -523,13 +526,16 @@ public class ReportingService {
pOsDetails.setShippedScan(packagingItems); pOsDetails.setShippedScan(packagingItems);
pOsDetails.setShippedNet(packagingItems); pOsDetails.setShippedNet(packagingItems);
pOsDetails.setPackagingStock(0); pOsDetails.setPackagingStock(0);
pOsDetails.setPoStatus(false); pOsDetails.setPoStatus(pos.getPoStatus());
pOsDetailsList.add(pOsDetails); pOsDetailsList.add(pOsDetails);
} }
} }
return pOsDetailsList; return pOsDetailsList;
} }
/*
* find all job cards of specific po
* */
public HashMap<String, Map<String, Integer>> getAllPoJobCards(long poId, String selectDate) { public HashMap<String, Map<String, Integer>> getAllPoJobCards(long poId, String selectDate) {
String startDate = selectDate != null && !selectDate.isEmpty() ? selectDate + " 00:00:01": null; String startDate = selectDate != null && !selectDate.isEmpty() ? selectDate + " 00:00:01": null;
String endDate = selectDate != null && !selectDate.isEmpty() ? selectDate + " 23:59:59": null; String endDate = selectDate != null && !selectDate.isEmpty() ? selectDate + " 23:59:59": null;

View File

@ -10,7 +10,6 @@
<div th:replace="_notices :: page-notices"></div> <div th:replace="_notices :: page-notices"></div>
<form th:action="${purchaseOrder.id} != null ? @{/purchase-order/edit/(id=${purchaseOrder.id})} : @{/purchase-order/edit}" <form th:action="${purchaseOrder.id} != null ? @{/purchase-order/edit/(id=${purchaseOrder.id})} : @{/purchase-order/edit}"
method="POST" method="POST"
th:object="${purchaseOrder}"
id="jobCardApp"> id="jobCardApp">
<div class="bg-light p-3 mb-3"> <div class="bg-light p-3 mb-3">
<h6 class="mb-3">Info</h6> <h6 class="mb-3">Info</h6>
@ -34,6 +33,12 @@
<label>Article Name</label> <label>Article Name</label>
<input type="text" class="form-control" th:field="${purchaseOrder.articleName}" required> <input type="text" class="form-control" th:field="${purchaseOrder.articleName}" required>
</div> </div>
<div class="col-sm-1 form-group">
<label for="active">Status OPEN/CLOSE</label>
<div class="form-check">
<input class="custom-control-label:" type="checkbox" id="active" th:field="*{purchaseOrder.poStatus}"/>
</div>
</div>
</div> </div>
</div> </div>

View File

@ -28,6 +28,7 @@
<th>Created At</th> <th>Created At</th>
<th>Created By</th> <th>Created By</th>
<th>Status</th> <th>Status</th>
<th>PO Status</th>
<th>Action</th> <th>Action</th>
</tr> </tr>
@ -44,6 +45,12 @@
<span class="badge font-sm" th:classappend="'badge-' + ${order.status}" th:if="${order.status}" th:text="${order.status}"></span> <span class="badge font-sm" th:classappend="'badge-' + ${order.status}" th:if="${order.status}" th:text="${order.status}"></span>
<span th:unless="${order.status}">-</span> <span th:unless="${order.status}">-</span>
</td> </td>
<td>
<span th:if="${!order.poStatus}" class="badge badge-APPROVED">OPEN</span>
<div th:if="${order.poStatus}">
<span class="badge badge-danger" >CLOSE</span>
</div>
</td>
<td> <td>
<th:block > <th:block >
<a th:href="@{'/purchase-order/edit/' + ${order.id}}" class="btn btn-sm btn-secondary" title="Edit"> <a th:href="@{'/purchase-order/edit/' + ${order.id}}" class="btn btn-sm btn-secondary" title="Edit">