Merge branch 'master' of https://git.basuvaraj.com/gowthaman/readymixerp_modules_api
# Conflicts: # api.http # src/main/kotlin/com/restapi/Main.kt # src/main/kotlin/com/restapi/controllers/Entities.kt
This commit is contained in:
commit
e94928ae7f
@ -36,10 +36,9 @@ dependencies {
|
||||
implementation("org.yaml:snakeyaml:2.2")
|
||||
implementation("io.minio:minio:8.5.7")
|
||||
implementation("org.apache.httpcomponents:httpclient:4.5.14")
|
||||
implementation("org.apache.poi:poi:5.0.0")
|
||||
implementation("org.apache.poi:poi-ooxml:5.0.0")
|
||||
implementation("org.apache.poi:poi:5.2.3")
|
||||
implementation("org.apache.poi:poi-ooxml:5.2.3")
|
||||
implementation("com.google.code.gson:gson:2.8.8")
|
||||
|
||||
api ("net.cactusthorn.config:config-core:0.81")
|
||||
api ("net.cactusthorn.config:config-yaml:0.81")
|
||||
kapt("net.cactusthorn.config:config-compiler:0.81")
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
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.google.gson.Gson
|
||||
import com.restapi.domain.*
|
||||
import com.restapi.domain.Document
|
||||
@ -11,15 +14,10 @@ import com.restapi.domain.Session.database
|
||||
import com.restapi.domain.Vendor
|
||||
import org.apache.poi.hssf.usermodel.DVConstraint
|
||||
import org.apache.poi.hssf.usermodel.HSSFDataValidation
|
||||
import org.apache.poi.ss.usermodel.Cell
|
||||
import org.apache.poi.ss.usermodel.CellType
|
||||
import org.apache.poi.ss.usermodel.DateUtil
|
||||
import org.apache.poi.ss.usermodel.Workbook
|
||||
import org.apache.poi.ss.usermodel.WorkbookFactory
|
||||
import org.apache.poi.ss.usermodel.*
|
||||
import org.apache.poi.ss.util.CellRangeAddressList
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
||||
import java.io.*
|
||||
import java.text.SimpleDateFormat
|
||||
import java.time.LocalDate
|
||||
import java.time.ZoneId
|
||||
@ -389,7 +387,7 @@ fun ImportFromExcel(fileType: FileType, filePath : String) {
|
||||
"nos" -> UOM.NOS
|
||||
"ltr" -> UOM.LTR
|
||||
"mtr" -> UOM.MTR
|
||||
else -> UOM.ALL
|
||||
else -> UOM.LTR
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -417,3 +415,167 @@ fun ImportFromExcel(fileType: FileType, filePath : String) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class validateExcel(
|
||||
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 workSheet = workbook.getSheetAt(0)
|
||||
var h = true
|
||||
//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")) {
|
||||
h = false
|
||||
}else return "Header UOM mismatch"
|
||||
}else return "Header-HSN mismatch"
|
||||
}else return "Header-Desc mismatch"
|
||||
}else return "Header-Name mismatch"
|
||||
|
||||
val resp = arrayListOf<validateExcel>()
|
||||
|
||||
if(h==false) {
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
fun CreateExcel(productList: List<Product>): InputStream {
|
||||
val wb = XSSFWorkbook()
|
||||
val sh = wb.createSheet()
|
||||
val rows: Row = sh.createRow(0)
|
||||
rows.createCell(0).setCellValue("Name")
|
||||
rows.createCell(1).setCellValue("Description")
|
||||
rows.createCell(2).setCellValue("HSN")
|
||||
rows.createCell(3).setCellValue("UOM")
|
||||
|
||||
var rowNum = 1
|
||||
for (product in productList) {
|
||||
val row: Row = sh.createRow(rowNum++)
|
||||
|
||||
row.createCell(0).setCellValue(product.name)
|
||||
row.createCell(1).setCellValue(product.description)
|
||||
row.createCell(2).setCellValue(product.hsnCode)
|
||||
|
||||
val uomCell: Cell = row.createCell(3)
|
||||
uomCell.setCellValue(product.uom?.name ?: "")
|
||||
}
|
||||
|
||||
val baos = ByteArrayOutputStream()
|
||||
wb.write(baos)
|
||||
wb.close()
|
||||
|
||||
return ByteArrayInputStream(baos.toByteArray())
|
||||
|
||||
}
|
||||
|
||||
fun excelToDb(): List<Product> {
|
||||
val inputStream = FileInputStream("C:\\Users\\vinay\\IdeaProjects\\readymixerp_modules_api_git\\Untitled 1.xlsx")
|
||||
val workbook = WorkbookFactory.create(inputStream)
|
||||
val workSheet = workbook.getSheetAt(0)
|
||||
|
||||
for (row in workSheet) {
|
||||
val cell1Value = row.getCell(0).stringCellValue
|
||||
val cell2Value = row.getCell(1).stringCellValue
|
||||
val cell3Value = row.getCell(2).stringCellValue
|
||||
val cell4Value = row?.getCell(3)?.stringCellValue
|
||||
|
||||
val prod = Product()
|
||||
prod.name = cell1Value
|
||||
prod.description = cell2Value
|
||||
prod.hsnCode = cell3Value
|
||||
prod.uom = when(cell4Value) {
|
||||
"nos" -> UOM.NOS
|
||||
"ltr" -> UOM.LTR
|
||||
"mtr" -> UOM.MTR
|
||||
else -> UOM.ALL
|
||||
}
|
||||
database.saveAll(prod)
|
||||
}
|
||||
val productList = Session.database.find(Product::class.java).findList()
|
||||
return productList
|
||||
}
|
||||
@ -29,10 +29,14 @@ data class POFilters (
|
||||
val validBefore: LocalDate = maxDate,
|
||||
val refQuotation :String = IGNORE,
|
||||
) : CustomFilters
|
||||
|
||||
enum class UOMFilter {
|
||||
ALL //fixme: later
|
||||
}
|
||||
data class ProductFilters (
|
||||
val nameLike :String = IGNORE,
|
||||
val hsnLike :String = IGNORE,
|
||||
val uom :UOM = UOM.ALL,
|
||||
val uom :UOMFilter = UOMFilter.ALL,
|
||||
) : CustomFilters
|
||||
data class DocumentFilters (
|
||||
val nameLike :String = IGNORE,
|
||||
@ -147,3 +151,12 @@ fun searchRFQ(commonFilters: CommonFilters, rfqFilters: RFQFilters) : List<ReqFo
|
||||
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
|
||||
return q.findList()
|
||||
}
|
||||
|
||||
fun searchProduct(commonFilters: CommonFilters, productFilters: ProductFilters): List<Product> {
|
||||
val p = database.find(Product::class.java)
|
||||
.where()
|
||||
.ilike("hsnCode", productFilters.hsnLike)
|
||||
.ilike("Pname", productFilters.nameLike)
|
||||
applySortHelper(p, commonFilters.sortBy, commonFilters.sortAsc)
|
||||
return p.findList()
|
||||
}
|
||||
@ -9,6 +9,7 @@ import io.ebean.annotation.*
|
||||
import io.ebean.annotation.Index
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalDateTime
|
||||
import java.util.*
|
||||
import javax.persistence.*
|
||||
|
||||
data class Comments(val text: String = "", val by: String = "", val at: LocalDateTime = LocalDateTime.now())
|
||||
@ -274,6 +275,7 @@ open class PurchaseOrder :BaseTenantModel() {
|
||||
enum class UOM {
|
||||
NOS, LTR, MTR, ALL
|
||||
}
|
||||
|
||||
@Entity
|
||||
open class Product :BaseTenantModel() {
|
||||
var id: Long? = null
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user