Browse Source

Changes in Roadwar MIS Report

master
Hariprasath S 3 months ago
parent
commit
e9d8426635
  1. 6
      pom.xml
  2. 10
      src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java
  3. 303
      src/main/java/com/gcc/commissionerreview/service/RoadWarService.java
  4. 2
      src/main/resources/application.properties
  5. 279
      src/main/resources/templates/modules/roadwarweb/misreport.html

6
pom.xml

@ -81,6 +81,12 @@
<version>5.5.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.30</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>

10
src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java

@ -17,12 +17,12 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
public class DataSourceConfig {
private static String host = "localhost:3306";
private static String dbpassword = "root";
// private static String host = "localhost:3306";
// private static String dbpassword = "root";
// private static String host =
// "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
// private static String dbpassword = "gcc-facial-password";
private static String host =
"gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
private static String dbpassword = "gcc-facial-password";
public static class MyDataSourceConfig {
@Primary

303
src/main/java/com/gcc/commissionerreview/service/RoadWarService.java

@ -38,6 +38,14 @@ import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import jakarta.servlet.http.HttpServletResponse;
@Service
@ -524,7 +532,9 @@ public class RoadWarService {
e.zone,
e.ward,
e.streetid,
e.street AS streetName
e.street AS streetName,
e.area,
e.location
FROM erp_road_master e
LEFT JOIN road_details_master r
@ -625,8 +635,8 @@ public class RoadWarService {
e.ward,
e.street AS streetName,
e.streetid,
ifnull(r.area_name,'') as area_name,
ifnull(r.locality_name,'') as locality_name,
ifnull(UPPER(r.area_name),'') as area_name,
ifnull(UPPER(r.locality_name),'') as locality_name,
r.ref_id
FROM erp_road_master e
@ -743,8 +753,8 @@ public class RoadWarService {
e.ward,
e.street AS streetName,
e.streetid,
ifnull(r.area_name,'') as area_name,
ifnull(r.locality_name,'') as locality_name,
ifnull(UPPER(r.area_name),'') as area_name,
ifnull(UPPER(r.locality_name),'') as locality_name,
r.ref_id
FROM erp_road_master e
@ -946,10 +956,10 @@ public class RoadWarService {
response.setHeader("Content-Disposition",
"attachment; filename=\"" + fileName + "\"");
Font titleFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 18);
Font headerFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 13);
Font normalFont = FontFactory.getFont(FontFactory.HELVETICA, 10);
Font boldFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 10);
Font titleFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 18);
Font headerFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 13);
Font normalFont = FontFactory.getFont(FontFactory.TIMES, 10);
Font boldFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 10);
Document document = new Document(PageSize.A4);
@ -1005,11 +1015,8 @@ public class RoadWarService {
infoTable.setSpacingAfter(10f);
infoTable.setWidths(new float[]{20, 30, 20, 30});
Font labelFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 10);
Font labelFontUnderline = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 10,Font.UNDERLINE);
Font valueFont = FontFactory.getFont(FontFactory.HELVETICA, 10);
PdfPCell cell;
Font labelFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 9);
Font valueFont = FontFactory.getFont(FontFactory.TIMES, 9);
infoTable.addCell(labelCell("Zone :", labelFont));
infoTable.addCell(valueCell(String.valueOf(road.get("zone")), valueFont));
@ -1053,8 +1060,6 @@ public class RoadWarService {
infoTable.addCell(labelCell("Road Max Width :", labelFont));
infoTable.addCell(valueCell(withUnit(road.get("road_max_width"), "m"), valueFont));
infoTable.addCell(labelCell("Road Location", labelFontUnderline, 4));
infoTable.addCell(labelCell("Road From :", labelFont));
infoTable.addCell(valueCell(String.valueOf(road.get("road_from")), valueFont, 3));
@ -1065,13 +1070,13 @@ public class RoadWarService {
document.add(infoTable);
document.add(createSubTitle("Availabilities", headerFont));
document.add(createSubTitle("Availability", headerFont));
PdfPTable avlTable = new PdfPTable(4);
avlTable.setWidthPercentage(100);
avlTable.setSpacingBefore(3f);
avlTable.setSpacingAfter(3f);
avlTable.setWidths(new float[]{30, 20, 30, 20});
avlTable.setWidths(new float[]{25, 25, 25, 25});
avlTable.addCell(labelCell("Footpath :", labelFont));
avlTable.addCell(valueCell(String.valueOf(road.get("is_footpath")).toUpperCase(), valueFont));
@ -1091,7 +1096,7 @@ public class RoadWarService {
avlTable.addCell(labelCell("Rain Water Harvesting :", labelFont));
avlTable.addCell(valueCell(String.valueOf(road.get("is_rwh")).toUpperCase(), valueFont));
avlTable.addCell(labelCell("Electricity Pole :", labelFont));
avlTable.addCell(labelCell("Electricity Pole / Pillar Box :", labelFont));
avlTable.addCell(valueCell(String.valueOf(road.get("is_electric_poles")).toUpperCase(), valueFont));
avlTable.addCell(labelCell("Bus Shelter :", labelFont));
@ -1115,8 +1120,8 @@ public class RoadWarService {
document.add(new Paragraph(" "));
document.add(createSubTitle("Relaying Details", headerFont));
Font tableHeaderFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 10);
Font tableValueFont = FontFactory.getFont(FontFactory.HELVETICA, 9);
Font tableHeaderFont = FontFactory.getFont(FontFactory.TIMES_BOLD, 10);
Font tableValueFont = FontFactory.getFont(FontFactory.TIMES, 9);
PdfPTable relayTable = new PdfPTable(6);
relayTable.setWidthPercentage(100);
@ -1165,6 +1170,223 @@ public class RoadWarService {
document.add(relayTable);
document.add(createSubTitle("Availability Details", headerFont));
PdfPTable adTable = new PdfPTable(2);
adTable.setWidthPercentage(100);
adTable.setSpacingBefore(3f);
adTable.setSpacingAfter(3f);
adTable.setWidths(new float[]{40,60});
adTable.addCell(labelCell("Footpath From :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("footpath_from_location")), valueFont));
adTable.addCell(labelCell("Footpath To :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("footpath_to_location")), valueFont));
adTable.addCell(labelCell("Footpath Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("footpath_side_name")), valueFont));
adTable.addCell(labelCell("LHS Footpath Material Type :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("footpath_material_name")), valueFont));
adTable.addCell(labelCell("LHS Length of Footpath :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("footpath_length"), "m"), valueFont));
adTable.addCell(labelCell("LHS Average Width of Footpath :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("footpath_width"), "m"), valueFont));
adTable.addCell(labelCell("RHS Footpath Material Type :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("r_footpath_material_name")), valueFont));
adTable.addCell(labelCell("RHS Length of Footpath :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("r_footpath_length"), "m"), valueFont));
adTable.addCell(labelCell("RHS Average Width of Footpath :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("r_footpath_width"), "m"), valueFont));
adTable.addCell(labelCell("", labelFont, 2));
adTable.addCell(labelCell("SWD From :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("swd_from")), valueFont));
adTable.addCell(labelCell("SWD To :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("swd_to")), valueFont));
adTable.addCell(labelCell("SWD Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("swd_side_name")), valueFont));
adTable.addCell(labelCell("LHS Length of SWD :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("swd_length"), "m"), valueFont));
adTable.addCell(labelCell("LHS Size of SWD :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("swd_size"), "m"), valueFont));
adTable.addCell(labelCell("RHS Length of SWD :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("rhs_swdlength"), "m"), valueFont));
adTable.addCell(labelCell("RHS Size of SWD :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("rhs_swdsize"), "m"), valueFont));
adTable.addCell(labelCell("Slit catch pit Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("scp_side_name")), valueFont));
adTable.addCell(labelCell("Slit catch pit LHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("scp_count")), valueFont));
adTable.addCell(labelCell("Slit catch pit RHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("rhs_scpCount")), valueFont));
adTable.addCell(labelCell("Manhole Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("manhole_side_name")), valueFont));
adTable.addCell(labelCell("Manhole LHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("manhole_count")), valueFont));
adTable.addCell(labelCell("Manhole RHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("r_mhCount")), valueFont));
adTable.addCell(labelCell("ChutPipe Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("cpipe_side_name")), valueFont));
adTable.addCell(labelCell("ChutPipe LHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("cpipe_count")), valueFont));
adTable.addCell(labelCell("ChutPipe RHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("r_cpCount")), valueFont));
adTable.addCell(labelCell("Rain Water Harvesting Present at :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("rwh_side_name")), valueFont));
adTable.addCell(labelCell("Rain Water Harvesting LHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("rwh_count")), valueFont));
adTable.addCell(labelCell("Rain Water Harvesting RHS Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("r_rwCount")), valueFont));
adTable.addCell(labelCell("Electricity Pole Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("ep_count")), valueFont));
adTable.addCell(labelCell("Bus Shelter Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("busshelter_count")), valueFont));
adTable.addCell(labelCell("Street Light Poles Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("streetlight_poles_count")), valueFont));
adTable.addCell(labelCell("High Mass Light Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("hml_count")), valueFont));
adTable.addCell(labelCell("Mini Mass Light Count :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("mml_count")), valueFont));
adTable.addCell(labelCell("Length Of Sewer :", labelFont));
adTable.addCell(valueCell(withUnit(road.get("sewer_length"), "m"), valueFont));
adTable.addCell(labelCell("Size of sewer (feet or cm) :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("sewer_size")), valueFont));
adTable.addCell(labelCell("No of Culverts & Bridges :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("culvert_bridge_count")), valueFont));
adTable.addCell(labelCell("Details of Culverts & Bridges \nwith date of Construction :", labelFont));
adTable.addCell(valueCell(String.valueOf(road.get("details")), valueFont));
document.add(adTable);
@SuppressWarnings("unchecked")
List<Map<String, Object>> files =
(List<Map<String, Object>>) road.get("fileDetails");
if (files != null && !files.isEmpty()) {
int totalImages = files.size();
for (int i = 0; i < totalImages; i += 4) {
// New page
document.newPage();
document.add(createSubTitle("Uploaded Files", headerFont));
PdfPTable imageTable = new PdfPTable(2);
imageTable.setWidthPercentage(100);
imageTable.setSpacingBefore(5f);
imageTable.setSpacingAfter(0f);
imageTable.setWidths(new float[]{50, 50});
for (int j = i; j < Math.min(i + 4, totalImages); j++) {
Map<String, Object> file = files.get(j);
String fileUrl = String.valueOf(file.get("file_url"));
String extension = fileUrl.substring(fileUrl.lastIndexOf('.') + 1).toLowerCase();
Image img;
if ("pdf".equals(extension)) {
// Read PDF and render first page as image
try (InputStream in = new URL(fileUrl).openStream();
PDDocument pdfDoc = PDDocument.load(in)) {
PDFRenderer renderer = new PDFRenderer(pdfDoc);
BufferedImage bufferedImage =
renderer.renderImageWithDPI(0, 200);
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
img = Image.getInstance(baos.toByteArray());
}
} else {
// Normal image
img = Image.getInstance(new URL(fileUrl));
}
img.scaleToFit(250f, 360f);
img.setAlignment(Image.ALIGN_CENTER);
PdfPCell cell = new PdfPCell();
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setPadding(4f);
cell.setFixedHeight(370f);
cell.addElement(img);
imageTable.addCell(cell);
}
// Fill remaining cells if less than 4 images
int remainder = Math.min(i + 4, totalImages) - i;
while (remainder < 4) {
PdfPCell empty = new PdfPCell();
empty.setBorder(Rectangle.NO_BORDER);
empty.setFixedHeight(260f);
imageTable.addCell(empty);
remainder++;
}
document.add(imageTable);
}
}
document.close();
@ -1194,6 +1416,7 @@ public class RoadWarService {
cell.setBorder(Rectangle.NO_BORDER);
cell.setPaddingTop(4f);
cell.setPaddingBottom(4f);
cell.setPaddingLeft(4f);
return cell;
}
@ -1220,6 +1443,7 @@ public class RoadWarService {
cell.setColspan(colspan);
cell.setPaddingTop(3f);
cell.setPaddingBottom(3f);
cell.setPaddingLeft(4f);
return cell;
}
@ -1247,42 +1471,5 @@ public class RoadWarService {
}
// document.add(new Paragraph(" "));
// document.add(new Paragraph(
// "Uploaded Images",
// headerFont));
//
// PdfPTable imgTable = new PdfPTable(2);
//
// imgTable.setWidthPercentage(100);
//
// List<Map<String,Object>> files =
// (List<Map<String,Object>>)road.get("fileDetails");
//
// for(Map<String,Object> img : files){
//
// try{
//
// Image image = Image.getInstance(
// new URL(img.get("file_url").toString()));
//
// image.scaleToFit(220,160);
//
// PdfPCell cell1 =
// new PdfPCell(image,true);
//
// cell1.setPadding(5);
//
// imgTable.addCell(cell1);
//
// }catch(Exception ex){
//
// imgTable.addCell("Image not available");
// }
//
// }
//
// document.add(imgTable);
}

2
src/main/resources/application.properties

@ -1 +1 @@
spring.profiles.active=dev
spring.profiles.active=prod

279
src/main/resources/templates/modules/roadwarweb/misreport.html

@ -104,6 +104,27 @@
overflow-y: auto;
}
.pdf-file-box{
height:60px;
display:flex;
align-items:center;
justify-content:center;
border:1px solid #ced4da;
border-radius:5px;
background:#f8f9fa;
color:#495057;
font-weight:bold;
cursor:pointer;
transition:all .3s ease;
}
.pdf-file-box:hover{
background:#007bff;
color:#fff;
border-color:#007bff;
transform:scale(1.03);
box-shadow:0 4px 10px rgba(0,0,0,.2);
}
</style>
</head>
<body>
@ -289,7 +310,10 @@
<th class="text-center">S.No</th>
<th class="text-center">Zone</th>
<th class="text-center">Ward</th>
<th class="text-center">Street ID</th>
<th class="text-center">Street Name</th>
<th class="text-center">Area</th>
<th class="text-center">Location</th>
</tr>
</thead>
<tbody>
@ -319,10 +343,12 @@
<th class="text-center">S.No</th>
<th class="text-center">Zone</th>
<th class="text-center">Ward</th>
<th class="text-center">Street ID</th>
<th class="text-center">Street Name</th>
<th class="text-center">Area Name</th>
<th class="text-center">Locality Name</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
@ -352,10 +378,12 @@
<th class="text-center">S.No</th>
<th class="text-center">Zone</th>
<th class="text-center">Ward</th>
<th class="text-center">Street ID</th>
<th class="text-center">Street Name</th>
<th class="text-center">Area Name</th>
<th class="text-center">Locality Name</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
@ -821,7 +849,7 @@
<div class="col-md-3 mb-4">
<label class="form-label">
Electricity Pole Available or Not? (TNEB)
Electricity Poles / Pillar Box Available or Not? (TNEB)
</label>
<div>
@ -1030,6 +1058,13 @@
<div id="viewFileContainer"></div>
<div class="text-center mt-3">
<button type="button"
id="btnDownloadPdf"
class="btn btn-primary">
<i class="fa fa-download"></i> Download PDF
</button>
</div>
</div>
</div>
@ -1042,15 +1077,20 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Image Preview</h5>
<h5 class="modal-title">File Preview</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body text-center">
<img id="previewImage"
src=""
class="img-fluid rounded"
style="max-height:80vh;">
style="max-height:80vh; display:none;">
<iframe id="previewPdf"
style="width:100%;height:80vh;border:none;display:none;">
</iframe>
</div>
</div>
@ -1671,7 +1711,10 @@ function loadWardPending(zone, ward){
"<td class='text-center'>" + (i + 1) + "</td>" +
"<td>" + item.zone + "</td>" +
"<td>" + item.ward + "</td>" +
"<td>" + item.streetid + "</td>" +
"<td>" + item.streetName + "</td>" +
"<td>" + item.area + "</td>" +
"<td>" + item.location + "</td>" +
"</tr>";
@ -1701,6 +1744,7 @@ function loadWardPending(zone, ward){
extend: 'pdfHtml5',
text: 'Export PDF',
title: 'Road War -Zone: ' + zone + ' Ward ' + ward + ' Pending Report',
orientation: 'landscape',
pageSize: 'A4',
exportOptions: {
columns: ':visible'
@ -1708,26 +1752,29 @@ function loadWardPending(zone, ward){
customize: function (doc) {
doc.styles.tableHeader.alignment = 'center';
doc.defaultStyle.fontSize = 9;
doc.styles.tableHeader.fontSize = 9;
doc.defaultStyle.fontSize = 8;
// Equal widths
doc.content[1].table.widths = [
'*', '*', '*','*'
35, 40, 40, 55, '*', '*', '*'
];
// Center align all table cells
let rowCount = doc.content[1].table.body.length;
for (let i = 0; i < rowCount; i++) {
doc.pageMargins = [20, 20, 20, 20];
let row = doc.content[1].table.body[i];
for (let j = 0; j < row.length; j++) {
doc.content[1].layout = {
hLineWidth: function () { return 0.5; },
vLineWidth: function () { return 0.5; },
hLineColor: function () { return '#ccc'; },
vLineColor: function () { return '#ccc'; }
};
row[j].alignment = 'center';
}
}
doc.content[1].table.body.forEach(function (row) {
row.forEach(function (cell) {
cell.alignment = 'center';
});
});
}
}
],
@ -1822,6 +1869,7 @@ function loadWardCompletion(zone, ward){
"<td class='text-center'>" + (i + 1) + "</td>" +
"<td>" + item.zone + "</td>" +
"<td>" + item.ward + "</td>" +
"<td>" + item.streetid + "</td>" +
"<td>" + item.streetName + "</td>" +
"<td>" + item.area_name + "</td>" +
"<td>" + item.locality_name + "</td>" +
@ -1831,6 +1879,7 @@ function loadWardCompletion(zone, ward){
"View" +
"</button>" +
"</td>" +
"</tr>";
@ -1860,6 +1909,7 @@ function loadWardCompletion(zone, ward){
extend: 'pdfHtml5',
text: 'Export PDF',
title: 'Road War -Zone: '+ zone+' Ward '+ward+' Completion Report',
orientation: 'landscape',
pageSize: 'A4',
exportOptions: {
columns: ':visible'
@ -1867,25 +1917,28 @@ function loadWardCompletion(zone, ward){
customize: function (doc) {
doc.styles.tableHeader.alignment = 'center';
doc.defaultStyle.fontSize = 9;
doc.styles.tableHeader.fontSize = 9;
doc.defaultStyle.fontSize = 8;
// Equal widths
doc.content[1].table.widths = [
'*', '*', '*','*','*',
'*','*'
35, 40, 40, 55, '*', '*', '*','*'
];
// Center align all table cells
let rowCount = doc.content[1].table.body.length;
for (let i = 0; i < rowCount; i++) {
doc.pageMargins = [20, 20, 20, 20];
let row = doc.content[1].table.body[i];
for (let j = 0; j < row.length; j++) {
doc.content[1].layout = {
hLineWidth: function () { return 0.5; },
vLineWidth: function () { return 0.5; },
hLineColor: function () { return '#ccc'; },
vLineColor: function () { return '#ccc'; }
};
row[j].alignment = 'center';
}
}
doc.content[1].table.body.forEach(function (row) {
row.forEach(function (cell) {
cell.alignment = 'center';
});
});
}
}
@ -1963,6 +2016,7 @@ function loadWardPartiallyCompletion(zone, ward){
"<td class='text-center'>" + (i + 1) + "</td>" +
"<td>" + item.zone + "</td>" +
"<td>" + item.ward + "</td>" +
"<td>" + item.streetid + "</td>" +
"<td>" + item.streetName + "</td>" +
"<td>" + item.area_name + "</td>" +
"<td>" + item.locality_name + "</td>" +
@ -1972,6 +2026,7 @@ function loadWardPartiallyCompletion(zone, ward){
"View" +
"</button>" +
"</td>" +
"</tr>";
@ -2001,6 +2056,7 @@ function loadWardPartiallyCompletion(zone, ward){
extend: 'pdfHtml5',
text: 'Export PDF',
title: 'Road War -Zone: '+ zone+' Ward '+ward+' Partially Completion Report',
orientation: 'landscape',
pageSize: 'A4',
exportOptions: {
columns: ':visible'
@ -2008,25 +2064,28 @@ function loadWardPartiallyCompletion(zone, ward){
customize: function (doc) {
doc.styles.tableHeader.alignment = 'center';
doc.defaultStyle.fontSize = 9;
doc.styles.tableHeader.fontSize = 9;
doc.defaultStyle.fontSize = 8;
// Equal widths
doc.content[1].table.widths = [
'*', '*', '*','*','*',
'*','*'
35, 40, 40, 55, '*', '*', '*','*'
];
// Center align all table cells
let rowCount = doc.content[1].table.body.length;
for (let i = 0; i < rowCount; i++) {
let row = doc.content[1].table.body[i];
doc.pageMargins = [20, 20, 20, 20];
for (let j = 0; j < row.length; j++) {
doc.content[1].layout = {
hLineWidth: function () { return 0.5; },
vLineWidth: function () { return 0.5; },
hLineColor: function () { return '#ccc'; },
vLineColor: function () { return '#ccc'; }
};
row[j].alignment = 'center';
}
}
doc.content[1].table.body.forEach(function (row) {
row.forEach(function (cell) {
cell.alignment = 'center';
});
});
}
}
@ -2618,28 +2677,49 @@ function fetchRoadWarDetails(refId) {
$.each(response.fileDetails, function(index, file) {
let url = file.file_url;
let extension = url.split('.').pop().toLowerCase();
if (extension === "pdf") {
html += `
<div class="col-md-2 col-4 mb-3 text-center">
<div class="pdf-file-box" onclick="showPreview('${url}')">
PDF File ${index + 1}
</div>
</div>
`;
} else {
html += `
<div class="col-md-2 col-4 mb-3 text-center">
<img src="${file.file_url}"
<img src="${url}"
class="img-thumbnail"
style="height:120px;width:100%;object-fit:cover;cursor:pointer;"
onclick="showPreview('${file.file_url}')">
onclick="showPreview('${url}')">
</div>
`;
}
});
html += `</div>`;
html += "</div>";
fileContainer.html(html);
}
$('#titleModalLabel').text(`Road War Details - ${response.ref_id}`);
$("#btnDownloadPdf").attr("data-refid", response.ref_id);
$("#roadWarModal").modal("show");
},
@ -2657,12 +2737,26 @@ function fetchRoadWarDetails(refId) {
});
}
function showPreview(imageUrl){
function showPreview(fileUrl) {
$("#previewImage").attr("src", imageUrl);
let extension = fileUrl.split('.').pop().toLowerCase();
$("#imagePreviewModal").modal("show");
if (extension === "pdf") {
$("#previewImage").hide();
$("#previewPdf").show();
$("#previewPdf").attr("src", fileUrl);
} else {
$("#previewPdf").hide();
$("#previewImage").show();
$("#previewImage").attr("src", fileUrl);
}
$("#imagePreviewModal").modal("show");
}
function createViewRelayBlock(item = {}) {
@ -2723,6 +2817,91 @@ function createViewRelayBlock(item = {}) {
</div>
`;
}
$(document).on("click", "#btnDownloadPdf", function () {
var refId = $(this).attr("data-refid");
downloadRoadWarPdf(refId);
});
function downloadRoadWarPdf(refId) {
$('#pageLoader').show();
$.ajax({
url: "/commissionerreview/api/roadwarweb/downloadRoadWarPdf",
type: "GET",
data: {
refId: refId
},
xhrFields: {
responseType: "blob"
},
success: function (data, status, xhr) {
$('#pageLoader').hide();
// Get filename from response header
var disposition = xhr.getResponseHeader("Content-Disposition");
var fileName = "RoadWar.pdf";
if (disposition && disposition.indexOf("filename=") !== -1) {
fileName = disposition
.split("filename=")[1]
.replace(/"/g, "");
}
var blob = new Blob([data], { type: "application/pdf" });
var link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(link.href);
},
error: function (xhr) {
$('#pageLoader').hide();
let message = "Unable to download PDF.";
if (xhr.status === 404) {
message = "PDF service not found.";
} else if (xhr.status === 500) {
message = "An error occurred while generating the PDF.";
} else if (xhr.status === 0) {
message = "Network error. Please check your internet connection.";
}
Swal.fire({
icon: "error",
title: "Download Failed",
text: message
});
}
});
}
</script>
</body>
Loading…
Cancel
Save