|
|
@@ -96,7 +96,7 @@ open class InvoiceService( |
|
|
|
|
|
|
|
open fun getMilestonePaymentWithProjectCode(code: List<String>): List<Map<String, Any>> { |
|
|
|
val sql = StringBuilder("select " |
|
|
|
+ " p.code, mp.* " |
|
|
|
+ " p.code, mp.*, m.taskGroupId " |
|
|
|
+ " from milestone_payment mp " |
|
|
|
+ " left join milestone m on mp.milestoneId = m.id " |
|
|
|
+ " left join project p on p.id = m.projectId " |
|
|
@@ -108,6 +108,20 @@ open class InvoiceService( |
|
|
|
return jdbcDao.queryForList(sql.toString(), args) |
|
|
|
} |
|
|
|
|
|
|
|
open fun getMilestonePaymentId(code: String, paymentMilestone: String): Long{ |
|
|
|
val sql = StringBuilder(" select" |
|
|
|
+ " mp.id as milestonePaymentId" |
|
|
|
+ " from milestone_payment mp" |
|
|
|
+ " left join milestone m on mp.milestoneId = m.id" |
|
|
|
+ " left join project p on p.id = m.projectId" |
|
|
|
+ " where p.deleted = false" |
|
|
|
+ " and p.code = :code" |
|
|
|
+ " and mp.description = :description " |
|
|
|
) |
|
|
|
val args = mapOf("code" to code, "description" to paymentMilestone) |
|
|
|
return jdbcDao.queryForInt(sql.toString(), args).toLong() |
|
|
|
} |
|
|
|
|
|
|
|
open fun getInvoiceByInvoiceNo(invoiceNo: String): Invoice { |
|
|
|
return invoiceRepository.findByInvoiceNo(invoiceNo) |
|
|
|
} |
|
|
@@ -227,17 +241,18 @@ open class InvoiceService( |
|
|
|
/** |
|
|
|
* @return true when cellValue Object exist in DB |
|
|
|
*/ |
|
|
|
fun checkStringExists(list: List<Map<String, Any>>, cellValue: Map<String, Any>): Boolean { |
|
|
|
private fun checkStringExists(list: List<Map<String, Any>>, cellValue: Map<String, Any>): Boolean { |
|
|
|
// println("LIST-------------: $list") |
|
|
|
// println("CELL VALUE-------------: $cellValue") |
|
|
|
// println(list.contains(cellValue)) |
|
|
|
// println(list.any { it["code"] == cellValue["code"] && it["description"] == cellValue["description"] }) |
|
|
|
// return list.contains(cellValue) |
|
|
|
return list.any { it["code"] == cellValue["code"] && it["description"] == cellValue["description"] } |
|
|
|
// println(list.any { it["code"] == cellValue["code"] && it["description"] == cellValue["description"] && it["groupTaskId"] == cellValue["stage"]}) |
|
|
|
|
|
|
|
return list.any { it["code"] == cellValue["code"] && it["description"] == cellValue["description"] && it["groupTaskId"] == cellValue["stage"]} |
|
|
|
} |
|
|
|
open fun checkMilestonePayment( |
|
|
|
|
|
|
|
open fun checkMilestonePaymentByStageAndDescription( |
|
|
|
sheet: Sheet, |
|
|
|
startingRow: Int, |
|
|
|
stageColumnIndex: Int, |
|
|
|
columnIndex: Int, |
|
|
|
invoiceColumnIndex: Int, |
|
|
|
projectCodeColumnIndex: Int, |
|
|
@@ -250,15 +265,18 @@ open class InvoiceService( |
|
|
|
val milestonePaymentCell = row?.getCell(columnIndex) |
|
|
|
val invoiceNoCell = row?.getCell(invoiceColumnIndex) |
|
|
|
val projectCodeCell = row?.getCell(projectCodeColumnIndex) |
|
|
|
val stageCell = row?.getCell(stageColumnIndex) |
|
|
|
if (milestonePaymentCell != null && milestonePaymentCell.cellType == CellType.STRING && |
|
|
|
invoiceNoCell != null && invoiceNoCell.cellType == CellType.STRING && |
|
|
|
projectCodeCell != null && projectCodeCell.cellType == CellType.STRING) |
|
|
|
projectCodeCell != null && projectCodeCell.cellType == CellType.STRING && |
|
|
|
stageCell != null && stageCell.cellType == CellType.NUMERIC) |
|
|
|
{ |
|
|
|
val milestonePaymentCellValue = milestonePaymentCell.stringCellValue |
|
|
|
val invoiceNoCellValue = invoiceNoCell.stringCellValue |
|
|
|
val projectCodeCellValue = projectCodeCell.stringCellValue |
|
|
|
val stageCellValue = stageCell.numericCellValue.toInt() |
|
|
|
|
|
|
|
val cellValue = mapOf("code" to projectCodeCellValue, "description" to milestonePaymentCellValue) |
|
|
|
val cellValue = mapOf("code" to projectCodeCellValue, "description" to milestonePaymentCellValue, "groupTaskId" to stageCellValue) |
|
|
|
|
|
|
|
if(!checkStringExists(paymentMilestoneWithCode, cellValue)) { |
|
|
|
if(!nonExistMilestone.contains(mapOf("paymentMilestone" to milestonePaymentCellValue, "invoiceNo" to invoiceNoCellValue))){ |
|
|
@@ -359,7 +377,7 @@ open class InvoiceService( |
|
|
|
val milestonepaymentWithCode = getMilestonePaymentWithProjectCode(projectsCodes) |
|
|
|
// println("newProjectCodes == 0") |
|
|
|
// println(checkMilestonePayment(sheet, 2, 5, 0, 1, milestonepaymentWithCode)) |
|
|
|
val paymenMilestones = checkMilestonePayment(sheet, 2, 5, 0, 1, milestonepaymentWithCode) |
|
|
|
val paymenMilestones = checkMilestonePaymentByStageAndDescription(sheet, 2, 4,5, 0, 1, milestonepaymentWithCode) |
|
|
|
if (paymenMilestones.isNotEmpty()){ |
|
|
|
return InvoiceResponse(false, "Imported Invoice's format is incorrect", newProjectCodes, emptyRowList, invoicesResult, duplicateItemsInInvoice, paymenMilestones) |
|
|
|
} |
|
|
@@ -376,6 +394,9 @@ open class InvoiceService( |
|
|
|
} |
|
|
|
|
|
|
|
for (i in 2..sheet.lastRowNum){ |
|
|
|
val paymentMilestoneId = getMilestonePaymentId(ExcelUtils.getCell(sheet, i, 1).stringCellValue, ExcelUtils.getCell(sheet, i, 5).stringCellValue) |
|
|
|
println("paymentMilestoneId--------------: $paymentMilestoneId") |
|
|
|
val milestonePayment = milestonePaymentRepository.findById(paymentMilestoneId).orElseThrow() |
|
|
|
val invoice = Invoice().apply { |
|
|
|
invoiceNo = ExcelUtils.getCell(sheet, i, 0).stringCellValue |
|
|
|
projectCode = ExcelUtils.getCell(sheet, i, 1).stringCellValue |
|
|
@@ -390,6 +411,7 @@ open class InvoiceService( |
|
|
|
invoiceDate = ExcelUtils.getCell(sheet, i, 10).dateCellValue.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() |
|
|
|
dueDate = ExcelUtils.getCell(sheet, i, 11).dateCellValue.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() |
|
|
|
issueAmount = ExcelUtils.getCell(sheet, i, 12).numericCellValue.toBigDecimal() |
|
|
|
this.milestonePayment = milestonePayment |
|
|
|
} |
|
|
|
saveAndFlush(invoice) |
|
|
|
} |
|
|
|