Product Excel Validation

This commit is contained in:
vinay 2024-01-23 16:59:25 +05:30
parent 8745db2127
commit a3f7614979
4 changed files with 127 additions and 14 deletions

View File

@ -93,16 +93,16 @@ Authorization: {{auth-token}}
DELETE http://localhost:9001/api/vehicle/KA01HD6667 DELETE http://localhost:9001/api/vehicle/KA01HD6667
Authorization: {{auth-token}} Authorization: {{auth-token}}
### get po for id ### get products
GET http://localhost:9001/api/vendor/product GET http://localhost:9001/api/vendor/product
Authorization: {{auth-token}} Authorization: {{auth-token}}
### get product for id ### create excel for products
GET http://localhost:9001/api/vendor/product/7 POST http://localhost:9001/api/vendor/product/product-excel
Authorization: {{auth-token}} Authorization: {{auth-token}}
### get row ### get
GET http://localhost:9001/api/vendor/product/7 GET http://localhost:9001/api/vendor/product/product-import
Authorization: Bearer {{auth-token}} Authorization: Bearer {{auth-token}}
### create product ### create product

View File

@ -7,6 +7,7 @@ import com.restapi.config.Auth.validateAuthToken
import com.restapi.controllers.* import com.restapi.controllers.*
import com.restapi.domain.DataNotFoundException import com.restapi.domain.DataNotFoundException
import com.restapi.domain.Product import com.restapi.domain.Product
import com.restapi.domain.Session.a
import com.restapi.domain.Session.currentTenant import com.restapi.domain.Session.currentTenant
import com.restapi.domain.Session.currentUser import com.restapi.domain.Session.currentUser
import com.restapi.domain.Session.objectMapper import com.restapi.domain.Session.objectMapper
@ -24,6 +25,7 @@ import io.javalin.http.util.RateLimitUtil
import io.javalin.json.JavalinJackson import io.javalin.json.JavalinJackson
import org.jose4j.jwt.consumer.InvalidJwtException import org.jose4j.jwt.consumer.InvalidJwtException
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.InputStream
import java.security.MessageDigest import java.security.MessageDigest
import java.time.LocalDateTime import java.time.LocalDateTime
import java.util.* import java.util.*
@ -140,6 +142,8 @@ fun main(args: Array<String>) {
//patch("/{id}", ProductCtrl::patch, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN")))) //patch("/{id}", ProductCtrl::patch, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN"))))
delete("/{id}", ProductCtrl::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_DELETE", "ROLE_ADMIN")))) delete("/{id}", ProductCtrl::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_DELETE", "ROLE_ADMIN"))))
get("", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN")))) get("", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
post("/product-excel", ProductCtrl::prodExcel)
get("/product-import"){ ctx -> ctx.json(ExcelRead())}
} }
path("/doc"){ path("/doc"){
post("", Document::create, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE", "ROLE_ADMIN")))) post("", Document::create, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE", "ROLE_ADMIN"))))

View File

@ -18,6 +18,8 @@ import io.ebean.CallableSql
import io.ebean.RawSqlBuilder import io.ebean.RawSqlBuilder
import io.javalin.http.* import io.javalin.http.*
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.File
import java.io.InputStream
import java.sql.Types import java.sql.Types
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime import java.time.LocalDateTime
@ -446,9 +448,14 @@ object ProductCtrl {
} }
fun update(ctx: Context) { fun update(ctx: Context) {
val id = ctx.pathParam("id")
} }
fun prodExcel(it: Context) {
val product = database.find(Product::class.java).findList()
it.result(CreateExcel(product)).contentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.header("Content-Disposition", "attachment; filename=\"product.xlsx\"")
}
} }
object Quotation { object Quotation {

View File

@ -1,7 +1,11 @@
package com.restapi.controllers package com.restapi.controllers
import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.restapi.domain.Product import com.restapi.domain.Product
import org.apache.poi.ss.usermodel.Cell import org.apache.poi.ss.usermodel.Cell
import org.apache.poi.ss.usermodel.CellType
import org.apache.poi.ss.usermodel.Row import org.apache.poi.ss.usermodel.Row
import org.apache.poi.ss.usermodel.WorkbookFactory import org.apache.poi.ss.usermodel.WorkbookFactory
import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFWorkbook
@ -13,10 +17,11 @@ import java.io.InputStream
fun CreateExcel(productList: List<Product>): InputStream { fun CreateExcel(productList: List<Product>): InputStream {
val wb = XSSFWorkbook() val wb = XSSFWorkbook()
val sh = wb.createSheet() val sh = wb.createSheet()
sh.createRow(0).createCell(0).setCellValue("Name") val rows: Row = sh.createRow(0)
sh.createRow(0).createCell(1).setCellValue("Description") rows.createCell(0).setCellValue("Name")
sh.createRow(0).createCell(2).setCellValue("HSN") rows.createCell(1).setCellValue("Description")
sh.createRow(0).createCell(3).setCellValue("UOM") rows.createCell(2).setCellValue("HSN")
rows.createCell(3).setCellValue("UOM")
var rowNum = 1 var rowNum = 1
for (product in productList) { for (product in productList) {
@ -38,9 +43,106 @@ fun CreateExcel(productList: List<Product>): InputStream {
} }
fun ExcelRead(filename: String){ data class validateExcel(
val inputStream = FileInputStream("./${filename}.xlsx") val name: String,
val description: String,
val hsnCode: String,
val ok: Boolean,
val err: String,
)
val app_common_om = jacksonObjectMapper().apply {
registerModule(JavaTimeModule())
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
}
fun ExcelRead(): String{
val inputStream = FileInputStream("C:\\Users\\vinay\\IdeaProjects\\readymixerp_modules_api_git\\Untitled 1.xlsx")
val workbook = WorkbookFactory.create(inputStream) val workbook = WorkbookFactory.create(inputStream)
val workSheet = workbook.getSheetAt(0) val workSheet = workbook.getSheetAt(0)
var h = false
//Header check
// if(workSheet.getRow(0).getCell(0).stringCellValue.equals("Name")){
// if(workSheet.getRow(0).getCell(1).stringCellValue.equals("Description")){
// if(workSheet.getRow(0).getCell(2).stringCellValue.equals("HSN")){
// if(workSheet.getRow(0).getCell(3).stringCellValue.equals("UOM")){
// return true
// }
// }
// }
// }
val resp = arrayListOf<validateExcel>()
workSheet.rowIterator().forEach { row ->
if (row == null) return@forEach
if (h) {
val pName = row.getCell(0).run {
when {
this == null -> ""
this.cellType == CellType.STRING -> this.stringCellValue
else -> ""
}
}
val pDesc = row.getCell(1).run {
when {
this == null -> ""
this.cellType == CellType.STRING -> this.stringCellValue
else -> ""
}
}
val pHsn = row.getCell(2).run {
when {
this == null -> ""
this.cellType == CellType.STRING -> this.stringCellValue
else -> ""
}
}
if (pName.isEmpty() && pDesc.isEmpty() && pHsn.isEmpty()) {
return@forEach
}
if (pName.isEmpty()) {
resp.add(
validateExcel(
name = pName,
description = pDesc,
hsnCode = pHsn,
ok = false,
err = "Product name is required"
)
)
return@forEach
}
if (pDesc.isEmpty()) {
resp.add(
validateExcel(
name = pName,
description = pDesc,
hsnCode = pHsn,
ok = false,
err = "Product description is required"
)
)
return@forEach
}
if (pHsn.isEmpty()) {
resp.add(
validateExcel(
name = pName,
description = pDesc,
hsnCode = pHsn,
ok = false,
err = "Product HSN is required"
)
)
return@forEach
}
}
h = true
}
return app_common_om.writeValueAsString(resp)
} }